A minimal "hello world" plugin demonstrating the ClawBoard plugin anatomy.
Every ClawBoard plugin is a Docker container with these components:
claw-hello/
βββ plugin.json # Plugin manifest (required)
βββ Dockerfile # Container build instructions (required)
βββ server.js # Your application code
βββ package.json # Dependencies
βββ README.md # Documentation
The manifest tells ClawBoard everything about your plugin:
| Section | Purpose |
|---|---|
docker |
How to build and run the container |
api |
Base path, port, health endpoint, and route definitions |
ui |
Sidebar entry (label, icon, order) and iframe path |
Required: A /health endpoint that returns { "status": "ok" }.
- ClawBoard reads
clawboard.plugins.jsonon startup - For each enabled plugin, it reads the plugin's
plugin.json - ClawBoard proxies requests from
/api/plugins/<name>/*to the plugin container - If the plugin has a
uisection, it appears in the dashboard sidebar
- Health endpoint is mandatory β ClawBoard polls
/healthto monitor your plugin - Use the ClawBoard Docker network β Set
networks: ["clawboard_network"]so the backend can reach your container - Non-root user β Run as a non-root user (UID 1002 recommended for consistency)
- Stateless preferred β Use the ClawBoard database API if you need persistence
npm install
npm start
# Visit http://localhost:3020/health
# Visit http://localhost:3020/ui- Place this directory at
./plugins/claw-hello/(relative to ClawBoard root) - Add to
clawboard.plugins.json:{ "plugins": [ { "name": "claw-hello", "source": "./plugins/claw-hello", "enabled": true } ] } - Restart:
docker compose up -d --build
- See the full Plugin Development Guide for advanced features
- Add custom API endpoints, database access, or WebSocket connections
- Publish your plugin for the community!