Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

jdx/pitchfork

Repository files navigation

What is it?

Pitchfork is a CLI for managing daemons with a focus on developer experience.

  • Start services once - Only start daemons if they have not already been started
  • Auto start/stop - Automatically start daemons when entering a project directory, stop when leaving
  • Ready checks - Based on delay, output or HTTP response
  • Restart on failure - Automatically restart daemons when they crash
  • Cron jobs - Schedule recurring tasks
  • Start on boot - Automatically start daemons when your system boots
  • Project configuration - Define all your project's daemons in pitchfork.toml

Warning

This project is experimental. It works in basic situations but you'll undoubtedly encounter bugs.

Use Cases

  • Launching development services like web APIs and databases
  • Running rsync/unison to synchronize directories with a remote machine
  • Managing background processes for your project

Quickstart

Install pitchfork

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.

Launch a one-off daemon

Run a process in the background—an alternative to shell jobs (mytask &):

$ pitchfork run docs -- npm start docs-dev-server

Add daemons to your project

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 mutiple daemons in parallel:

$ pitchfork start --all
$ pitchfork start redis api

Shell hook (auto start/stop)

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 logs

View daemon logs:

$ pitchfork logs api
[2021年08月01日T12:00:00Z] api: starting
[2021年08月01日T12:00:01Z] api: listening on

Logs will be saved to ~/.local/state/pitchfork/logs.

Example Project

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.http = { url = "http://localhost:5432" }
[daemons.redis]
run = "redis-server --port 6379"
auto = ["start", "stop"]
ready.delay = 2
[daemons.api]
run = "npm run dev:api"
auto = ["start", "stop"]
ready.http = { url = "http://localhost:3000/health" }
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

Full Documentation

See pitchfork.jdx.dev

Contributors

Contributors

About

Daemons with DX

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

Languages

AltStyle によって変換されたページ (->オリジナル) /