Skip to content

Design decisions

A handful of decisions shape everything else about jaque, and they’re decisions you can observe from outside the binary, not implementation trivia:

  • Single binary, no external services. Standalone mode needs nothing else running alongside it — no database, no message broker, no CGo. See Overview.
  • Config is CUE, not a custom DSL. Typed, validated, with real composition instead of Nagios-style template inheritance. See Why CUE.
  • Everything is event-sourced. Current state is a projection over an append-only log, rebuildable by replay — nothing mutates state directly. See Event sourcing.
  • Soft/hard state semantics, the same shape Nagios-class tooling has always used, built on top of that event-sourced core. See State model.
  • Legacy Nagios exec plugins are supported permanently, not as a migration bridge scheduled for removal — see Nagios compatibility.

See Status for what’s shipped, and Roadmap for what’s ahead.

Every decision record, in order. Paths are in-repo (docs/adr/), not linked — this documentation site does not ship the ADR files themselves.

  • ADR-001 — Go as implementation language — Accepted — docs/adr/001-language-go.md
  • ADR-002 — Event sourcing on embedded NATS JetStream, pure core — Accepted — docs/adr/002-event-sourcing-jetstream.md
  • ADR-003 — CUE as native configuration language — Accepted (spike passed — see Findings) — docs/adr/003-config-cue.md
  • ADR-004 — Scheduler — min-heap baseline, timer wheel gated on benchmark — Accepted — docs/adr/004-scheduler-heap-baseline.md
  • ADR-005 — Plugins — wazero WASM sandbox + permanent Nagios exec compat — Accepted — docs/adr/005-plugins-wazero-nagios-compat.md
  • ADR-006 — Importers are compiler frontends, never a runtime mode — Accepted — docs/adr/006-importers-as-compiler-frontends.md
  • ADR-007 — Single binary, embedded dependencies, no CGo — Accepted — docs/adr/007-single-binary-no-cgo.md
  • ADR-008 — Notification engine — own state machine over the event log — Accepted — docs/adr/008-notification-engine-own-machine-over-the-log.md
  • ADR-009 — Composable libraries, and deployment topology as a consequence — Accepted — docs/adr/009-composable-libraries-deployment-topologies.md
  • ADR-010 — Fork-per-check accepted for v1 — Accepted — docs/adr/010-fork-per-check-v1.md
  • ADR-011 — SNMP trap reception stays out of core — Accepted — docs/adr/011-snmp-traps-out-of-core.md
  • ADR-012 — Labels in the core, groups only at the frontends — Accepted, amended 2026-08-10 (§2, §3 and “Not decided here”) — docs/adr/012-labels-in-core-groups-at-the-frontends.md
  • ADR-013 — The command API speaks ConnectRPC; the read protocol is Livestatus — Accepted, 2026-08-10 — docs/adr/013-command-api-connectrpc.md
  • ADR-014 — Native frontend over ConnectRPC; capabilities are stateless maps over config and the log — Accepted — docs/adr/014-native-frontend-connectrpc-stateless-capabilities.md
  • ADR-015 — Cluster topology — roles, pull work queue, per-object ownership over a live membership — Accepted — docs/adr/015-cluster-topology.md
  • ADR-016 — Sinks are opt-in projections; the log tiers to an archive — Accepted — docs/adr/016-sinks-opt-in-projections-log-tiering.md
  • ADR-017 — Telemetry: one typed model, sinks as config, no in-process plugins — Accepted — docs/adr/017-telemetry-typed-model-sinks-as-config.md