A collection of ready-to-use plugins for DevDock — covering all four supported languages and all 14 lifecycle hooks. Each plugin is self-contained, installable in one command, and designed to be readable enough to use as a starting point for your own plugin.
DevDock models environment startup as a state machine. At each state transition it fires named hooks — before_infra_ready, after_resource_start, after_ready, etc. Plugins are external processes (any language) that register for specific hooks and receive a JSON message over stdin when that hook fires.
devdock binary your plugin
│ │
├─ {"method":"initialize", │
│ "config":{...}} ────────────→│
│ ←─────────────────────────── {"status":"ok"}
│ │
├─ {"method":"after_ready", │
│ "session_id":"...", │
│ "startup_duration_secs":8.3}─→│
│ ←─────────────────────────── {"status":"ok"}
│ │
├─ {"method":"shutdown"} ────────→│
│ ←─────────────────────────── {"status":"ok"}
That's the entire protocol. Your plugin reads lines from stdin, writes JSON to stdout, and exits cleanly on shutdown.
| Plugin | Language | Hooks | What it does |
|---|---|---|---|
| announcer | Python | after_profile_loaded |
Prints a banner at the very start of startup — before Docker, before Tilt, before anything |
| startup-timer | Rust | all | Records time spent in each lifecycle state, prints a summary at the end |
| env-validator | Rust | before_infra_ready |
Fails fast if required env vars are missing before anything starts |
| desktop-notifier | Python | after_ready, on_error |
Sends a native desktop notification (macOS + Linux) |
| discord-notifier | Python | after_ready, on_error |
Posts to a Discord webhook when the environment is ready or errored |
| startup-logger | Python | all | Appends every lifecycle event to a log file — useful for debugging |
| webhook-notifier | Go | after_ready, on_error |
HTTP POST to any URL when the environment starts or fails |
| port-checker | Go | before_infra_ready |
Checks that required ports are free before Docker starts, exits clearly if not |
| startup-sound | Bash | after_ready |
Plays a sound when the environment is ready (macOS + Linux) |
| git-status-check | Bash | after_profile_loaded |
Warns if the workspace has uncommitted changes before startup |
| Hook | Plugins |
|---|---|
after_profile_loaded |
announcer, startup-timer, startup-logger, git-status-check |
before_infra_ready |
startup-timer, startup-logger, env-validator, port-checker |
after_infra_ready |
startup-timer, startup-logger |
before_config_generated |
startup-timer, startup-logger |
after_config_generated |
startup-timer, startup-logger |
before_tilt |
startup-timer, startup-logger |
after_tilt |
startup-timer, startup-logger |
before_resource_start |
startup-timer, startup-logger |
after_resource_start |
startup-timer, startup-logger |
after_ready |
startup-timer, startup-logger, desktop-notifier, discord-notifier, webhook-notifier, startup-sound |
before_stop |
startup-timer, startup-logger |
after_stop |
startup-timer, startup-logger |
on_error |
startup-logger, desktop-notifier, discord-notifier, webhook-notifier |
on_report |
startup-logger |
Pick any plugin and follow its README. The short version:
# 1. Install the plugin
cd plugins/bash/startup-sound
./install.sh
# 2. Register it in your devdock.toml
[plugins.hooks]
after_ready = ["devdock-plugin-startup-sound"]
# 3. Start DevDock
devdock start defaultSee docs/protocol.md for the full spec and docs/hooks-reference.md for every hook's parameters.
If you use Claude Code, the /create-plugin skill scaffolds a new plugin interactively.
New plugins welcome — see CONTRIBUTING.md.
MIT OR Apache-2.0