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.
ADR index
Section titled “ADR index”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