v2.14.0: Shells, statuses, and structured output
A practical release focused on day-to-day ergonomics: filterable daemon lists, machine-readable output across the CLI, a configurable shell for run commands, and fixes for HTTPS proxying and TUI scrolling.
Added
-
pitchfork list --status <STATUS>(#529) — @gaojunran. Filter the daemon list by one or more statuses (running,stopped,waiting,stopping,failed,errored,available,disabled). The flag is repeatable and combines with OR logic:pitchfork ls --status running pitchfork ls --status available --status stopped
Shell completion for daemon IDs is now subcommand-aware —
pitchfork stop <TAB>only suggests running daemons,pitchfork start <TAB>only suggests available/stopped/errored/failed ones, and so on. -
--jsonflag across the CLI (#527) — @gaojunran.list,status,logs,daemons,proxy status, andsettings(includingsettings list/settings get) can now emit structured JSON suitable for scripting. Each command returns command-specific fields, e.g.listincludesid,namespace,name,pid,status,disabled,available,proxy_url,error, andport;proxy statusincludes computed LAN/TLS info and slug entries. -
logs.timestampsetting and--no-timestampflag (#526) — @gaojunran. Strip the leading timestamp frompitchfork logsoutput, useful when piping into tools likelnavor processing JSON log lines. Configure globally vialogs.timestamp = false(orPITCHFORK_LOG_TIMESTAMP=false), or per-invocation withpitchfork logs --no-timestamp. -
Configurable shell for daemon
runcommands (#531) — @gaojunran. Newgeneral.shellsetting (default"sh -c") controls howrunscripts are executed. The run string is now passed verbatim as the final argument to the shell, fixing a previous split→join round-trip that mangled variable expansion and globs.[settings.general] shell = "bash -c" # or for safer defaults: # shell = "sh -o errexit -o pipefail -c"
Because pitchfork wraps
runin a shell, the tracked PID is the shell process. To make it match your daemon binary, prefix withexec:[daemons.api] run = "exec node server.js"
Fixed
-
Proxy: downgrade forwarded requests to HTTP/1.1 (#515) — @iain. Since v2.10.0 the TLS proxy advertised
h2via ALPN, so browsers connected with HTTP/2 and the request was forwarded upstream still tagged HTTP/2 — which HTTP/1.1 backends (e.g. Vite dev server) rejected, producing 502s. The proxy now normalizes forwarded requests to HTTP/1.1. -
TUI: daemon list scrolls with the selection (#519) — @disintegrator. The dashboard table is now rendered as a stateful widget so the viewport follows the selected row when navigating past the visible area.
-
pitchfork listtable layout (#529) — Disabled marker, proxy URL, and error message are merged into a single trailing column with priority-based coloring (error > disabled > proxy), making the table easier to read on narrow terminals. -
Dependency updates with user-visible upstream fixes:
listeners0.6 (#525),sysinfo0.39 (#500),rusqlite0.40 (#498),mdns-sd0.20 (#497), andvue-routerv5 for the web UI (#506).
Documentation
- Added Web UI screenshots to the docs (#528) — @gaojunran.
- Fixed a broken Tera template link in
configuration-templates.md(#520) — @StefanBRas.
New Contributors
- @iain made their first contribution in #515
- @disintegrator made their first contribution in #519
- @StefanBRas made their first contribution in #520
Full Changelog: v2.13.1...v2.14.0
💚 Sponsor pitchfork
pitchfork is built by @jdx, who ships developer tools like mise, hk, pitchfork, and more. Development is sustained by sponsorships.
If pitchfork has a place in your dev workflow, please consider sponsoring on GitHub. Individual and company sponsorships are what keep the project healthy and moving forward.