Live health
Obelisk exposes a real health endpoint at /healthz. It's what our own watchdog and any external monitor probe. We deliberately don't paint a fake live-uptime percentage here — we'd rather tell you exactly how the system is built to stay up and recover.
Serving release proof
The serving process identifies the exact code revision below. This is deploy-stamped evidence, not a hand-maintained version label.
| Evidence | Serving value |
|---|---|
| Revision | d0dd01af78c5be6660c23b615d2c39a3e945ac6f |
| Deployed at |
Cross-check the same proof in /healthz response headers or the machine-readable changelog.
Recovery targets
Obelisk is engineered for fast disaster recovery rather than the cost of a permanently-running hot standby:
| Objective | Target |
|---|---|
| RTO — time to restore service after total loss | ~15 minutes |
| RPO — maximum data at risk | ≤ 1 day (tighter with a more frequent backup timer) |
Lose the entire host and a clean instance restores from an off-box backup, verifies every file's hash, and takes over the address — minutes to cutover, not hours.
How availability is protected
- Daily off-box encrypted backups to Cloudflare R2. critical state (identity DB, receipts, issuance log, client and founder records) is bundled, passphrase-encrypted (PBKDF2 + AES-256-GCM) with an integrity-checked manifest, and shipped off the box. Restore verifies every file's hash and refuses a tampered or corrupt backup — it fails closed.
- Self-healing health watchdog. a timer probes
/healthzevery minute and auto-restarts a wedged or crashed process, so a hung instance recovers without a human in the loop. - Host-native safeguards. automated whole-box snapshots plus delete- and rebuild-protection backstop the server against an accidental wipe, with an instant address cutover so a rebuilt box takes over without waiting on DNS.
- External monitoring. an independent uptime probe watches
/healthzfrom outside, so a total outage is caught even if the box can't report on itself.
Verifiable transparency
Every security-relevant event in Obelisk lands in an append-only, hash-chained ledger, and each ledger's Merkle head is anchored and published — the same idea as Certificate Transparency, applied to auth. You don't have to trust that our receipts are tamper-evident; you can check:
- Fetch
/.well-known/obelisk-transparency.jsonand pinheadAnchorHash. - Re-fetch any time later: entry counts must only grow and heads must chain forward. A shrinking or rewritten head is cryptographic proof of tampering.
- The anchor store's own head is mirrored off this server, so even the box operator can't rewrite history silently.
| Ledger | Entries | Head |
|---|---|---|
receipts.jsonl | 1292 | 33394dec1ecbdf4d… |
issuance.jsonl | 7 | 7ce8411aec97179f… |
usage.jsonl | 1 | c124c0780fcd5532… |
Head 34cdcad44523fa47… · 131 anchors · anchored 2026-09-29T03:29:53.725Z
Do it interactively: the verify-it-yourself widgets fetch the live head, compare it against a pin you saved, and refold any receipt's Merkle inclusion proof in your own browser.
The honest caveat
Today Obelisk runs on a single well-protected host with fast disaster recovery — a deliberate trade that keeps the service lean while still surviving a total-loss event in about fifteen minutes. A second always-on box (true zero-downtime high availability with a 99.99% SLA) is the upgrade we add when a customer's contract requires it. We'd rather tell you exactly where the line is than imply an SLA we don't yet run.
Need a committed availability SLA or a specific data-residency posture? Talk to us — it's a configuration conversation, not a rebuild.