Skip to content

Quickstart

Wakeplane is a durable scheduling control plane. This guide gets you from nothing to a running daemon with a real schedule in under five minutes.

Operator warning: Wakeplane supports single-operator bearer auth for /v1/..., but it has no RBAC or multi-tenancy. Bind it to localhost, a trusted subnet, VPN, Tailscale, or a reverse-proxied private network. Do not expose it directly to the public internet. See Security.

  • A single-process daemon that runs the planner and dispatcher loops
  • An SQLite database that stores schedules and run records
  • A CLI client to create and inspect work

Use the release, go install, or source-build path in Install. For source builds, the repo currently declares go 1.25.0 in go.mod.

Wakeplane is designed to work well as a local single-machine scheduler.

If you built into dist/ and did not install into PATH, prefix commands below with ./dist/.

Terminal window
WAKEPLANE_DB_PATH=./wakeplane.db \
WAKEPLANE_HTTP_ADDR=:8080 \
WAKEPLANE_WORKER_ID=wrk_local \
wakeplane serve

The daemon prints structured JSON logs to stdout. Verify it is healthy:

Terminal window
curl http://localhost:8080/healthz
# {"ok":true}
curl http://localhost:8080/readyz
# {"ok":true,"storage":"ok"}

Use the shipped HTTP example manifest:

health-check.yaml
name: health-check
enabled: true
timezone: UTC
schedule:
kind: interval
every_seconds: 300
target:
kind: http
method: GET
url: https://api.example.com/healthz
policy:
overlap: forbid
misfire: skip
timeout_seconds: 30
max_concurrency: 1
retry:
max_attempts: 3
strategy: exponential
initial_delay_seconds: 10
max_delay_seconds: 120

Register it:

Terminal window
wakeplane schedule create -f ./examples/health-check-http.yaml
Terminal window
wakeplane schedule list
wakeplane schedule get <id>
wakeplane run list
wakeplane run get <id>

Check operational status:

Terminal window
curl http://localhost:8080/v1/status

The status response shows how many runs are due, running, failed, retry queued, or dead-lettered.

Terminal window
wakeplane schedule trigger <id>

This creates a run immediately without changing the schedule’s normal cadence. The run has a manual:<run_id> occurrence key that is separate from scheduled occurrences.

Terminal window
wakeplane schedule pause <id>
wakeplane schedule resume <id>

Pausing sets enabled=false on the schedule. The planner stops materializing new occurrences. Existing runs are not cancelled.

VariableDefaultDescription
WAKEPLANE_DB_PATH./wakeplane.dbSQLite database file
WAKEPLANE_HTTP_ADDR:8080HTTP listen address
WAKEPLANE_WORKER_IDwrk_localWorker identity (used in lease records)
WAKEPLANE_SCHEDULER_INTERVAL_SECONDS5How often the planner loop ticks
WAKEPLANE_DISPATCHER_INTERVAL_SECONDS2How often the dispatcher loop ticks
WAKEPLANE_LEASE_TTL_SECONDS30Worker lease TTL for stale-claim recovery
WAKEPLANE_RECEIPT_MAX_BYTES262144Maximum stored body size per receipt
WAKEPLANE_RUN_RETENTION_DAYS0Days to keep terminal runs; 0 disables pruning

All schedule and run management is available through the HTTP API:

POST /v1/schedules
GET /v1/schedules
GET /v1/schedules/{id}
PUT /v1/schedules/{id}
PATCH /v1/schedules/{id}
DELETE /v1/schedules/{id}
POST /v1/schedules/{id}/pause
POST /v1/schedules/{id}/resume
POST /v1/schedules/{id}/trigger
GET /v1/schedules/{id}/runs
GET /v1/runs
GET /v1/runs/{id}
GET /v1/runs/{id}/receipts
GET /v1/status
GET /v1/metrics
GET /healthz
GET /readyz
  • Concepts - understand how Wakeplane thinks about scheduling
  • Schedules - YAML manifest shape, cron/interval/once, timezone behavior
  • Policies - overlap, misfire, retry, and concurrency
  • Executors - HTTP, shell, and workflow targets
  • Embedding - use Wakeplane as a library in your Go application
  • Status - beta gate, 1.0 gate, and explicit scope boundaries