sshmitm.state module

State directory resolution for ssh-mitm.

Supports all relevant Linux deployment variants:

pip / pipx / uv / virtualenv / conda

→ $XDG_STATE_HOME/ssh-mitm/ (or ~/.local/state/ssh-mitm/)

Snap (confined + classic)
→ Snap redirects $XDG_STATE_HOME to ~/snap/<name>/current/.local/state/

automatically; no special handling required here.

Flatpak
→ Flatpak redirects $XDG_STATE_HOME to ~/.var/app/<id>/.local/state/

automatically; no special handling required here.

AppImage
→ $APPIMAGE / $APPDIR are set but filesystem is the host’s; standard

XDG path is used.

systemd system service (StateDirectory=ssh-mitm)

→ $STATE_DIRECTORY=/var/lib/ssh-mitm (takes priority over XDG)

systemd user service

→ $STATE_DIRECTORY if set, else standard XDG path

root without systemd

→ /var/lib/ssh-mitm/

Distro packages (.deb / .rpm / Nix / Homebrew)

→ follow the same rules as pip depending on how the service is started

Last resort (read-only filesystem, permission errors everywhere)

→ /tmp/ssh-mitm-<uid>/ (ephemeral, warns the caller)

class sshmitm.state.DeploymentVariant(value)

Bases: Enum

APPIMAGE = 3
FLATPAK = 2
ROOT = 5
SNAP = 1
SYSTEMD = 4
USER = 6
sshmitm.state.detect_deployment()
Return type:

DeploymentVariant

sshmitm.state.get_state_dir()

Return a writable state directory, creating it if necessary.

Logs a warning when falling back to /tmp and returns None only if every candidate path is unusable.

Return type:

Path | None