Service level objectives and critical user journeys as versioned YAML, with a portal, CLI, Go client, Kubernetes operator and optional agent workflows.
- Measure reliability: connect Prometheus or Mimir (or try experimental Datadog, New Relic, VictoriaMetrics, Dash0 and Google Cloud collection) and inspect SLI attainment, coverage, error budgets and burn alerts.
- Publish reviewed objectives: create native Datadog, New Relic, Dash0 or Google Cloud SLOs within their supported subsets. Native burn-monitor publishing remains separate.
- Map user outcomes: link SLOs to critical user journey steps and service dependencies.
- Review changes: plan, approve and apply exact revisions, with audit records and separately reviewed rollback.
- Work with agents: use provider-configurable models, deterministic CLI skills and tenant-scoped MCP tools over stdio or opt-in remote OAuth HTTP.
- Run it yourself: use native binaries, Docker Compose or Kubernetes.
Pre-release MVP, under active development. APIs use nines.dev/v1alpha1 and may change. Model-assisted workflows, visual evaluations and session replay are experimental; production-scale readiness has not been established.
Synthetic demo workspace. View the full-size screenshot.
-
Clone the repository and enter it:
git clone https://github.com/ishantanu/nines.git cd nines -
Start the in-memory demo with Go 1.27.3 or later:
go run ./cmd/server -demo
-
Open localhost:8080 and sign in with admin / admin.
- Includes synthetic SLOs, critical user journeys and critical/warning burn policies.
- Resets on restart; keep this demonstration on loopback.
- Node is not required to run the committed UI build.
- Prometheus / Mimir: collection, discovery, recording and burn-rate rules; portal or tenant-file configuration.
- Datadog / New Relic: experimental collection, reviewed native SLO publication, on-demand native results and reviewed YAML import drafts; portal or tenant-file configuration.
- Dash0: experimental collection and native OpenSLO publication; configure publication in the tenant file.
- Google Cloud Monitoring: experimental DELTA-count collection and native SLO publication; tenant-file configuration with ADC or an access token.
- VictoriaMetrics: experimental interval-count collection; tenant-file configuration.
- Provider symbols beside SLOs identify the telemetry connection. Native publication has separate review and verification evidence; native vendor alert creation is not included.
- See the support matrix, query validation and acceptance limits.
-
Start with Docker Compose v2 and Python 3 available. The launcher creates a private
.envon first use and preserves existing credentials:./playground up
-
Open localhost:18080, sign in with admin / admin, and select Playground Prometheus.
-
Run the optional end-to-end verifier; allow several minutes:
./playground verify
-
Add options once:
./playground up --mimir --jev,--ai,--topologyor--providers /private/path/tenants.yaml. Subsequent commands remember the selection. -
Use
./playground logs,./playground statusand./playground down. Shutdown preserves data. -
Includes PostgreSQL, Prometheus and a synthetic checkout service.
-
Automatically deploys the sample SLO's recording and alert rules.
-
Verifies collection, rule evaluation, critical/warning firing and recovery, users and RBAC.
-
Optional profiles: Mimir, AI workloads and Jev advice.
-
Follow the playground guide for queries, troubleshooting and shutdown.
- In-memory demo:
admin/adminatlocalhost:8080. - Playground:
admin/adminatlocalhost:18080, unlessNINES_PLAYGROUND_PASSWORDwas set before first startup. - Persistent Compose:
adminand your privateNINES_BOOTSTRAP_PASSWORDfrom.env; no fixed web password. - Database:
POSTGRES_PASSWORDis required through.envor the environment. It is separate from the web password and API credentials. - Existing data: bootstrap variables do not reset retained account passwords. Use Access control → Users to change a known password.
make cli
bin/nines init slo --name checkout --window 28d --out checkout.yaml
bin/nines validate --offline -f checkout.yaml --agent
bin/nines rules generate --offline -f checkout.yaml --tenant commerce
bin/nines capabilities --offline --agent- Keep the measurement, target, window and alert policies in one SLO definition.
- Start from the availability or latency example; no separate measurement binding is required.
- Validation checks the contract; it does not verify that telemetry exists or measures the intended outcome.
- Offline rule generation writes YAML. Deployment requires a configured server route, provider reload or operator.
- Use
-f -for stdin and--agentfor structured automation output. See the CLI guide.
python3 scripts/setup-local.py
docker compose -p nines up --build -d- Open localhost:8080; sign in as
adminwithNINES_BOOTSTRAP_PASSWORDfrom the generated private.env. - PostgreSQL data persists in its own volume.
- Manage tenant users and roles under Access control; configure OIDC/Microsoft Entra or LDAP through server-owned identity settings.
- For native execution, supply
DATABASE_URLandAPI_TOKENthrough the environment; the binary does not automatically load.env.
Connect the CLI with an API key or configured SSO:
bin/nines config set-context production --server https://nines.example.com --tenant commerce
# Set NINES_API_KEY privately, or sign in through configured SSO:
bin/nines login --context production --method sso
bin/nines get slos --context production --agent
bin/nines plan --context production -f reviewed.yaml --agent
bin/nines apply --context production -f reviewed.yaml --expected-revision 0 --agent- The server enforces tenant membership and roles for every connected client.
API_TOKENremains an alias for API-key authentication.- Use the deployment guides for Compose, Linux, Kubernetes and the standalone operator.
- Definitions: revisioned SLOs, critical user journeys and explicit journey-step links in YAML.
- Measurement: event ratios, provider windows, configurable rolling windows, quality checks, cohorts and error budgets.
- Alerts and rules: up to eight named severity-based burn policies; Prometheus files/reload, Mimir ruler or Kubernetes operator destinations.
- Change control: exact-revision review/apply, audit history, archival and separately reviewed rollback. Configuration rollback cannot restore consumed budget.
- Dependencies: visual service maps, offline Kubernetes imports and optional namespace-scoped discovery with review.
- Identity: local accounts, API/service-account keys, OIDC/LDAP, tenant roles, teams and a separate platform admin console.
- Clients: tenant-aware portal, offline/connected Cobra CLI, typed Go client and stdio MCP adapter.
- Operator: standalone GitOps reconciliation, namespaced RBAC, lease-based standby and generation-scoped provider diagnostics.
- Extensions: built-in, file, HTTPS and commit-pinned Git templates render ordinary YAML without executing runtime code.
- Experimental: model-assisted intents, Jev advice, agent/LLM/inference templates and session replay. Models are optional, including local providers.
See supported limits, experimental features and verification evidence.
- Download Linux/macOS amd64/arm64 archives from GitHub Releases.
- Archives contain the CLI, server, MCP adapter, operator, examples and dependency licences.
- Verify
SHA256SUMSand the source commit inbuild.json. - Read the release process before publishing tags.
Start with the hosted documentation.
- Define: measurements, templates and SLI menus, critical user journeys.
- Connect: Prometheus/Mimir and rule deployment, Kubernetes operator.
- Operate: measurement quality, error-budget policies, service dependencies.
- Change safely: SLO editing, retirement, approval, audit and rollback.
- Use agents: CLI and skills, model evaluations, AI workload SLOs.
- Contribute: contribution guide, security reporting, issues.
- Requires Go 1.27.3, Node 24, npm and Python 3.9 or later.
- Build the frontend before Go, which embeds the generated assets.
make ui
make build
make test
make check
make release-check- The development UI proxies to
127.0.0.1:8189; use that API address withnpm run dev --prefix web. - See testing for disposable PostgreSQL, identity and provider checks.
- The Go module is
github.com/ishantanu/nines.
- OpenSLO: the interoperability format used for bounded export and native Dash0 SLO publication.
- Sloth: SLOs as code and Prometheus rule generation.
- Pyrra: approachable SLO workflows and visualisation.
- Site Reliability Engineering: How Google Runs Production Systems, first edition (2016) and second edition (2026): SLO lifecycle, measurement and operational practices. Thank you to their editors and contributors.
- Apache-2.0.
- Third-party terms: NOTICE and dependency notices.