Skip to content

File locations

Pitchfork keeps configuration separate from runtime state. The paths below are the normal Unix defaults; environment variables can override the config and state directories.

Configuration files

PathPurpose
/etc/pitchfork/config.tomlSystem-wide defaults and global daemons
~/.config/pitchfork/config.tomlUser settings, global daemons, slug and namespace registries
.config/pitchfork.tomlProject configuration in a .config directory
.config/pitchfork.local.tomlPersonal overrides for that project configuration
pitchfork.tomlProject configuration in the project root
pitchfork.local.tomlPersonal project overrides

Project files are discovered from filesystem root down to the current directory. Within each directory, later rows above take precedence. See configuration hierarchy. Add local override files to .gitignore yourself if they should stay private.

PITCHFORK_CONFIG_DIR changes the user config directory. It does not move project config files.

State directory

The normal location is ~/.local/state/pitchfork/:

Path within the state directoryPurpose
state.tomlDaemon identities, status, retry state, and project sessions
logs/logs.dbSQLite daemon log store
sock/main.sockCLI-to-supervisor Unix socket
proxy/cert.pemGenerated proxy certificate

PITCHFORK_STATE_DIR overrides this location. On Linux, the default also follows the system's state-directory resolution (including XDG_STATE_HOME). On macOS, pitchfork falls back to ~/.local/state/pitchfork.

Logs

Daemon logs live in a shared SQLite database, keyed by qualified daemon ID (namespace/name). WAL mode allows concurrent readers. Query them with pitchfork logs, the TUI, or the web UI rather than looking for one text file per daemon.

Older versions wrote directories such as logs/my-project--api/. Legacy text logs are imported on first access to the log store. Those paths are retained for migration, not the current storage layout.

See log management for filtering, retention, and export.

Running with sudo

When the supervisor runs as root and settings.supervisor.user is set, default state paths use that user's home and files are owned by that user. Otherwise, sudo invocations resolve the calling user's home through SUDO_USER. An explicit PITCHFORK_STATE_DIR takes precedence.

Keep clients and the supervisor pointed at the same state directory. Different values mean different state files and IPC sockets.

Boot registration

PlatformUser registrationSystem registration (root)
macOS~/Library/LaunchAgents/pitchfork.plist/Library/LaunchDaemons/pitchfork.plist
Linux~/.config/systemd/user/pitchfork.service/etc/systemd/system/pitchfork.service

Use pitchfork boot status to inspect registration and pitchfork boot disable to remove it. See start at login or boot.

MIT LicenseCopyright © 2026jdx.dev