Skip to content

v2.25.0: External config attachments, smarter wait, and quieter Windows

Latest

Choose a tag to compare

@jdx jdx released this 11 Sep 14:52
· 5 commits to main since this release
Immutable release. Only release title and notes can be modified.
8894f6d

This release adds external configuration attachments so generators can wire pitchfork into a project without dropping a file in its repo, upgrades pitchfork wait to handle multiple daemons and groups, and fixes two long-standing issues on Windows and behind the HTTPS proxy.

Added

  • Attach external config files to projects (#853) — @jdx. A new pitchfork config command lets an external generator register a TOML file against a project without copying it into the repository. Registrations are stored in the namespace registry and are resolved by both the CLI and running supervisors, so cron, hooks, watches, sessions, and proxy auto-start all pick them up. Registered files override ordinary project config; paths inside them (including daemon dir and watch patterns) resolve against the project directory.

    pitchfork config add /path/to/generated.toml --dir /path/to/project
    pitchfork config list --json
    pitchfork config remove /path/to/generated.toml

    For one-off overrides, PITCHFORK_CONFIG supplies an invocation-scoped platform path list (: on Unix, ; on Windows) that beats registered attachments without registering anything, and is deliberately not inherited by a supervisor pitchfork spawns automatically. See the new external configuration guide.

  • pitchfork wait now handles multiple daemons, groups, and interrupts (#820) — @gaojunran. Wait on several daemons at once (pitchfork wait api worker), on a whole group with --group, or run with no arguments to get a fuzzy multi-select picker mirroring pitchfork stop. Exit-code propagation is now real: wait exits 0 only when every daemon stopped cleanly, otherwise it returns the exit code of the first failing daemon in argument order (daemons that already finished still count). The new --kill flag stops the still-running daemons gracefully when a signal arrives, then exits with 128 + signo like the shell.

    pitchfork start api worker
    pitchfork wait --kill api worker   # tails both; Ctrl-C stops both gracefully

Fixed

  • No more stray console windows on Windows (#849) — @JamBalaya56562. A background supervisor previously left a visible console window on the desktop for every daemon, log sink, hook, readiness/health probe, and VCS query it spawned. All supervisor-side spawns now suppress the console window (only when the supervisor itself has no console), so ordinary use no longer flashes or leaves windows behind. Unix and foreground supervisors are unaffected.

  • Cookies split by HTTP/2 clients are rejoined correctly in the proxy (#845) — @iain. HTTP/2 clients (including browsers) may send each cookie as its own cookie header field. The proxy forwarded these untouched to HTTP/1.1 daemons, which joined them with ", " and corrupted every cookie after the first, breaking signed session cookies and login flows. The proxy now joins the fields with "; " when downgrading to HTTP/1.1.

Changed

  • Shell completions ship with releases (#832) — @jdx. Native Bash, Zsh, and Fish completion scripts are now published as signed Packslip resources alongside the usage spec, letting installers register tab completion without a separate usage executable.
  • Documentation overhaul (#834) — @jdx. The docs site has a redesigned landing page and theme with light/dark support and grouped navigation, and the guides, concepts, and CLI reference were rewritten with runnable, verified examples plus new health-check and HTTP API references.

Full Changelog: v2.24.2...v2.25.0

💚 Sponsor pitchfork

pitchfork is built and maintained by @jdx, an open source developer at entire.io, the title sponsor of his open source work.

If pitchfork has a place in your development workflow, please consider becoming an individual or company sponsor. Your support funds ongoing development and helps keep pitchfork fast, free, and independent.