v2.1.0: Settings file, .config/ directory support, and stability fixes
Pitchfork v2.1.0 introduces a new settings.toml-driven configuration system for tuning supervisor internals, adds support for placing project config in a .config/ subdirectory (matching mise conventions), and fixes several stability issues including file descriptor leaks during long-running sessions.
Highlights
[settings]configuration block: All supervisor, TUI, web UI, and IPC tunables are now defined in a singlesettings.tomlschema and can be set in anypitchfork.tomlfile or via environment variables. Includes built-in mise integration settings (general.mise,general.mise_bin)..config/pitchfork.tomlsupport: Keep your project config in.config/pitchfork.tomlalongside other dotfiles, with correct namespace derivation and directory resolution.- File descriptor leak fix: Long-running supervisor sessions with active web UI log streaming no longer exhaust file descriptors.
Added
-
[settings]configuration section -- Pitchfork now supports a[settings]block in anypitchfork.tomlfor tuning supervisor behavior. Settings are organized into groups (general,ipc,web,tui,supervisor) and support environment variable overrides, humantime duration parsing, and layered merging across config files. Includes new settings for mise integration (general.mise,general.mise_bin), autostop delay, log levels, ready check intervals, and more. Settings are generated at compile time from asettings.tomlschema. (#275) - @gaojunran[settings.general] mise = true autostop_delay = "1m" interval = "10s" [settings.web] auto_start = true bind_port = 3120
-
.config/pitchfork.tomland.config/pitchfork.local.tomlsupport -- Project configuration can now live in a.config/subdirectory, following the same convention as mise. Namespace derivation correctly uses the project directory (not.config/), and daemon working directories resolve relative to the project root. Config precedence within a directory is:.config/pitchfork.toml<.config/pitchfork.local.toml<pitchfork.toml<pitchfork.local.toml. (#265) - @Attempt3035
Fixed
-
File descriptor leaks in SSE streaming and IPC -- The web UI's SSE log streaming was reopening log files every 500ms without closing them, leading to "too many open files" errors during long sessions. The file handle is now reused across iterations with proper inode-based rotation detection. IPC connection handler tasks also now terminate cleanly on send failures instead of accumulating. (#267) - @benjaminwestern
-
TUI log scrolling with fewer than 20 lines -- Log scrolling in the TUI was completely disabled when a daemon had fewer than 20 lines of output, due to an obsolete guard condition from a prior scroll rework. Additionally, the initial scroll position of 0 meant the first scroll-down action had no visible effect. Both issues are fixed. (#268) - @dimmyjing
-
JSON schema for DaemonId -- The JSON schema pattern for daemon IDs previously required the
namespace/nameformat, which caused editor validation errors when using short names (e.g.,api) in[daemons]keys anddependslists. The schema now correctly accepts both short names and fully qualified IDs. (#277) - @gaojunran
New Contributors
- @Attempt3035 made their first contribution in #265
Full Changelog: v2.0.0...v2.1.0