| Crates.io | pitchfork-cli |
| lib.rs | pitchfork-cli |
| version | 1.2.0 |
| created_at | 2024-12-06 15:53:30.72218+00 |
| updated_at | 2026-01-20 02:59:11.750505+00 |
| description | Daemons with DX |
| homepage | https://pitchfork.jdx.dev |
| repository | https://github.com/jdx/pitchfork |
| max_upload_size | |
| id | 1474410 |
| size | 552,432 |
Pitchfork is a CLI for managing daemons with a focus on developer experience.
pitchfork.toml[!WARNING] This project is experimental. It works in basic situations but you'll undoubtedly encounter bugs.
mise-en-place is the recommended way to install pitchfork:
$ mise use -g pitchfork
Or install via cargo:
$ cargo install pitchfork-cli
Or download from GitHub releases.
Run a process in the background—an alternative to shell jobs (mytask &):
$ pitchfork run docs -- npm start docs-dev-server
Create a pitchfork.toml in your project root:
[daemons.redis]
run = "redis-server"
[daemons.api]
run = "npm run server:api"
[daemons.docs]
run = "npm run server:docs"
Start all daemons or multiple daemons in parallel:
$ pitchfork start --all
$ pitchfork start redis api
Enable automatic daemon management when entering/leaving project directories:
echo '$(pitchfork activate bash)' >> ~/.bashrc
echo '$(pitchfork activate zsh)' >> ~/.zshrc
echo 'pitchfork activate fish | source' >> ~/.config/fish/config.fish
Configure daemons with auto start/stop:
[daemons.api]
run = "npm run server:api"
auto = ["start", "stop"]
View daemon logs:
$ pitchfork logs api
[2021-08-01T12:00:00Z] api: starting
[2021-08-01T12:00:01Z] api: listening on
Logs will be saved to ~/.local/state/pitchfork/logs.
Here's a complete example showing how to use pitchfork for a development environment:
# pitchfork.toml
[daemons.postgres]
run = "docker run --rm -p 5432:5432 -e POSTGRES_PASSWORD=dev postgres:16"
auto = ["start", "stop"]
ready_delay = 5
[daemons.redis]
run = "redis-server --port 6379"
auto = ["start", "stop"]
ready_delay = 2
[daemons.api]
run = "npm run dev:api"
auto = ["start", "stop"]
ready_output = "listening on"
depends = ["postgres", "redis"]
[daemons.worker]
run = "npm run dev:worker"
auto = ["start"]
depends = ["postgres", "redis"]
[daemons.sync]
run = "rsync -avz --delete remote:/data/ ./local-data/"
cron = "0 */5 * * * *" # Run every 5 minutes
Start everything:
$ pitchfork start --all