StatusFrame is a lightweight, extension-first public status page framework.
It is not an uptime dashboard. The core rule is:
Do not publish your infrastructure.
Publish your service status.
The minimal deployment renders a public status page and /api/status from static, public-safe component state. Monitoring, incidents, maintenance, metrics, notifications, storage, and admin APIs are optional extensions that use the same interface as third-party extensions.
- pnpm monorepo with a Cloudflare Worker app.
- TypeScript config schema and YAML parser.
- Public projection and leakage validation.
- Server-rendered public status page.
/api/status,/api/incidents, and/api/maintenancepublic routes.- Extension registry and manifest validation.
- Core scheduled runner with concurrency and budget enforcement.
- Static, memory, and D1 storage adapters.
- Official HTTP and TCP monitor extensions.
- Scaffolded DNS and TLS monitor extensions.
- Incident, maintenance, metrics, webhook notification, and admin API extensions.
- Example YAML configs and focused Vitest coverage.
mise install
pnpm install
pnpm validate
pnpm --filter @statusframe/worker devConvenience tasks are also available:
mise run install
mise run validate
mise run devIf your shell does not auto-activate mise shims, run commands through mise exec --, for example mise exec -- pnpm validate.
The Worker app currently imports apps/worker/src/statusframe.config.ts. YAML is supported through parseStatusFrameYaml and examples are in examples/.
apps/worker Cloudflare Worker app
packages/core registry, runner, projection, redaction, UI rendering
packages/schema Zod schema and YAML parsing
packages/storage/* static, memory, and D1 storage adapters
packages/extensions/* official extensions
examples YAML configuration examples
docs architecture and operational notes
Start with Architecture, Implementation Status, and Security when DESIGN.md and goal.md are no longer present.
Public routes read public snapshots only. Raw monitor results, target URLs, private IPs, internal hostnames, raw errors, headers, response bodies, webhook URLs, and tokens are not projected. validatePublicOutput fails snapshots that contain obvious leakage patterns.
The standard runtime is one Worker:
statusframe Worker
-> Core runner
-> Extension registry
-> Registered extensions
Extensions do not create their own Worker invocation boundary. The scheduled handler delegates to the Core runner, and public requests render or return the latest public snapshot.