Open source · early access

Build AI health apps on a clinical context layer.

An open-source clinical backend with canonical FHIR R4, conformance-tested projections, cited search, and governed agent proposals in the core today. The broader contract — patient-scoped context compilation, consent, and bounded traversal — is being built and tested in the open.

01 · In sync

One backend.
Two surfaces.

A patient app and a clinician portal on the same bonfireDB — always in sync, by default.

02 · Fresh on commit

No indexing delay.

The patient logs a tic and it's in the clinician's timeline instantly. A typical FHIR backend is still waiting on its search index.

03 · Both ways

Realtime, both directions.

The clinician adds a check-in; the patient app updates live. A doctor writing to their own patient is clinical authorization, enforced — not a hand-rolled check.

04 · Agent context

Agents read cited evidence.

Build your own MCP: a query-aware, permission-scoped evidence packet — not a 3-million-token raw-FHIR dump.

05 · FHIR & audit

And you built none of it.

FHIR R4 export, audit, provenance, and ABAC — automatic, underneath.

Become a design partner →
01 / 05
Patient-side
TicVision
Dr. Okafor reviewed your week & added a check-in.
Today
Motor · eye blink4
Vocal · throat clear7
Clinician-side · Dr. Okafor · Jordan Rivera
bonfireDB fresh on commit
Motor · eye blink4
Vocal · throat clear7
Typical FHIR indexing 0:00
Motor · eye blink·
Vocal · throat clear·
"Summarize this patient's last 30 days."
Vocal tics up; severity 7 tracks with stress 8/10. cites Observation/obs_2 · QuestionnaireResponse/qr_1Proposed: message guardian — awaiting approval.
raw FHIR · ~3,000,000 tokens
bonfire evidence packet · ~4,200 tokens, cited
Illustrative — full raw-record dump vs a scoped, cited packet.
FHIR R4 exportAudit ABACRealtime, no Redis
your-app.ts
 
Quickstart

From zero to a clinical backend.

One command scaffolds a FHIR-safe backend with a typed SDK; deploy it into your own AWS. Early access — join the waitlist for access.

terminal
# the intended workflow — CLI in early access
# scaffold + deploy into your own AWS
 Postgres + pgvector · FHIR R4 · auth · MCP
app.ts
// target early-access workflow — surfaces still rolling out
const note = await clinical.notes.create({ patientId, text })
const notes = useClinicalQuery(api.notes.listByPatient, { patientId })
await clinical.fhir.export(patientId) // Bundle export · roadmap

Become a design partner How it works →

What you get

An app backend, not another FHIR server.

HAPI, HealthLake, and Medplum own the FHIR server. bonfireDB is building the layer your app and agents talk to. The cards below distinguish what the open-source core implements today from the target early-access contract.

Target app-native primitives

The target is clinical.notes.create() instead of raw FHIR REST, typed end to end.

Learn more →

Projected reads

Core: an atomic projected-write path. Unifying every governed write behind it is in progress.

Learn more →

Cited hybrid search

Core: Postgres full-text + a development vector signal. Production semantic embeddings are planned.

Learn more →

Agent context tools

Core: search, cited context, and propose-only writes. The query-aware compiler is the target contract.

Learn more →

Clinical authz & audit

Core: practice, resource-type, purpose, RLS, and governed writes. Patient/consent scope is next.

Learn more →

FHIR underneath

Core: canonical FHIR R4 with immutable history. Clean Bundle export is on the roadmap.

Learn more →
Roadmap

Offline & sync

Local-first writes that queue and sync on reconnect — designed for clinics with bad wifi.

Learn more →
Roadmap

File & attachment storage

Designed to keep forms, images, PDFs and scribe audio in your S3 — wired to FHIR, same ABAC & audit.

Learn more →

Terminology & validation

Validate codes on write + code pickers for LOINC, RxNorm & ICD-10 (SNOMED CT with your own UMLS license). No terminology server to run for everyday coded writes.

Learn more →

SQL-on-FHIR analytics

Core: conformance-tested flat projections in Postgres. Patient and column ABAC remain target work.

Learn more →

Clinically-dense seed data

One command seeds coherent, longitudinal, profile-valid patients into local Postgres. Plus snapshot & reset.

Learn more →

Security & HIPAA

Core: practice-scoped RLS/ABAC and hash-chained receipts. Patient/consent scope and every-surface AuditEvent coverage are target work.

Learn more →
Where it sits

The backend you build on — not the pipe that fetches records.

Health-data APIs (Metriport, Particle, Health Gorilla, Zus) pull a patient's outside records in from the networks. That's a different layer, and a complement. bonfireDB is where your app's data lives, where you build, and where your agents read it safely — the open alternative to closed, AI-bolted-on platforms.

Metriport · Particle · Zus OUTSIDE RECORDS aggregation layer · complement 01 YOUR APP patient app · clinician portal 02 bonfireDB typed primitives · fresh reads · ABAC 03 FHIR R4 · POSTGRES canonical store · pgvector
swipe →

The aggregation layer — complement

Metriport / Particle / Health Gorilla / Zus fetch and normalize the outside record from HIE networks. Point them at bonfireDB and keep building.

bonfireDB — the app backend

Canonical FHIR R4, projections, practice-scoped policy, cited context, and governed proposals in the core. The complete typed programming model and patient-scoped context compiler are being built in the open.

What the evidence shows so far

The useful layer sits between the chart and the model.

A separate MIMIC-IV-on-FHIR research program now supports three bounded mechanisms. Select records for the question: A6a beat frozen blunt projection twice. Translate the chart’s own vocabulary: QT-4 moved its registered microbiology stratum from 10/44 to 25/44. Traverse only when the task needs a path: A11 recovered terminal evidence on 96/96 answerable constructed cases.

The nulls are just as public. QT-4 did not promote traversal on its mostly star-shaped benchmark, three simpler packet additions changed nothing, the join tests remain exploratory, and A11b forced a redesign instead of a promotion. This points toward a selective context compiler. It does not validate Bonfire, graph storage, or generality across models and servers.

The full program: 15 experiments — 4 measured · 1 bounded · 3 exploratory · 2 null · 1 withdrawn · 4 open

Browse all 15 experiments → Watch the failure happen, node by node → Browse all the research →

25% 50% 75% 100% 0% bounded selection path illustrative curve through three measured points raw FHIR dump BLUNT PROJECTION · 39.4% measured · query-blind comparison RAW FHIR · 25.4% SANDBOX PROXY · 65.3% measured · selection proxy
swipe →

EXPLORATORY FOLLOW-UP · THE 176 QUESTIONS THAT NAME A VISIT

Two exploratory join tests on the same charts. They show a promising subset signal and an unresolved driver comparison.

selection packet
61.4%
+ deterministic pre-join
68.2%
agent + join tools
72.2%

No difference was detected between the last two, but equivalence was not established (p=.41; 95% interval −8.7 to +17.6 points). The agent used 4.061× the cumulative input tokens. Historical grading sensitivity remains open.

What these results do—and do not—show

We are building a separate Bonfire product benchmark with synthetic Synthea data, deterministic state grading, and a zero-leak security gate. It has not produced a product result. The research below tests mechanisms on other benchmarks: selection, vocabulary, traversal, joins, grading, and failure handling. We publish the nulls and broken tests beside the wins.

See the open eval →

the benchmark
// planned Bonfire product benchmark · not yet run
synthetic Synthea                   → deterministic state grading
cross-tenant leak rate              → must be 0

// secondary · MIMIC-IV-on-FHIR · credentialed users
raw FHIR dump                       → 25.4% pooled
blunt projection                    → 39.4% measured
code sandbox                        → 65.3% selection proxy
initial A6a vs frozen A0′           → 54.3% vs 44.7% · +9.5pp
repaired A6a replication            → 54.5% vs 46.2% · +8.3pp
accepted-attempt model tokens       → 35.5% fewer
QT-4 holdout vocabulary (micro n=44) → 56.8% vs 22.7% · +34.1pp · p=.000275
QT-4 holdout traversal vs vocabulary → 65.9% vs 56.8% · +9.1pp · p=.219 · not promoted
QT-1 pinned references                 → +0.24pp · null · not promoted
QT-2 aggregate summaries               → −0.24pp · null · not promoted
QT-3 endpoint reserve                  → 0.0pp · null · not promoted
A11 path-required traversal (n=120)    → 119/120 vs 24/120 · bounded support
A11 event grouping beyond traversal    → +0.83pp · not promoted
A11b causal isolation                  → normalized tie · task flaw found · redesigning
pre-join · visit questions (n=176)   → exploratory +6.8pp · sensitivity pending
pre-join · pooled (409)              → +2.0pp · unresolved
agent + join tools (n=176)           → +4.0pp · unresolved · 4.061× cumulative input
graph storage                        → not tested
Why now

The agents arrived before the data was ready for them.

Three things just became true at once — and together they're why a clinical backend has to be agent-native from the inside, not patched on later.

01 · MCP WENT STANDARD Linux Foundation · Dec 2025 02 · RAW FHIR IS A POOR DEFAULT context fit · citations · evidence 03 · UI BECAME TRIVIAL the data layer is the moat bonfireDB agent-native from the inside THE CONVERGENCE →
swipe →

MCP went standard

Agent-to-data is a Linux Foundation standard as of Dec 2025. Every healthcare app is about to grow an agent — and point it at the chart.

Raw FHIR is a poor default agent interface

On one FHIR benchmark and context cap, question-aware selection beat a frozen blind projection twice, while several extra-structure variants were null. Models may improve; the evidence interface is the lever the application layer controls.

Anyone can build the UI

AI-assisted building made the front end trivial. The compliant clinical data layer is the one part that still stops people cold.

Why bonfire

Where it fits — honestly.

We're not trying to be HAPI, HealthLake, or Medplum. We're the app backend above your canonical FHIR R4, not a FHIR server. See how the pieces line up, including where each competitor is stronger.

Compare vs HealthLake, Medplum & HAPI → Why building on FHIR is hard

Dogfood

Reimagining a DynamoDB app on a FHIR-safe backend.

TicVision — a Tourette's symptom-tracking app — reimagined on the target Bonfire contract. Four custom Dynamo tables and a hand-built HIPAA audit log become typed primitives with governed audit and Bundle export. This is an illustrative future rebuild, not a shipped migration.

Read the TicVision dogfood →

Roadmap

Where we're going — and what's real today.

We build in the open and mark shipped vs planned honestly — a backend you trust starts with a roadmap you can trust. See the full roadmap →

The core · early access

The FHIR-safe backend

Built in the core (Apache-2.0 planned, pre-release): canonical FHIR R4 + immutable history, SQL-on-FHIR projections, practice-scoped RLS/ABAC, cited search and context packets, and propose → approve → commit governance. Patient/consent scope, unified write-path freshness, production semantic retrieval, Bundle export, and the complete HTTP/context-compiler surface are still building.

Building next

The agent-readability layer

Evidence packets + reference/code/temporal resolution that take an agent from raw FHIR to clean clinical context — plus an open, reproducible benchmark for it, and propose-not-commit agent writes (the agent drafts, the clinician commits).

Exploring

Agents that aggregate, safely

Agent-readable cohort analytics with ABAC-enforced aggregates and small-cell suppression — answering "how many of my patients…" inside your boundary, without an ETL pipeline. App-scale, never cross-org.

The bet: become the agent-native clinical backend the next generation of AI-native health apps are built and run on. Read the vision →

You build the app. Bonfire is the clinical data layer underneath.

bonfireDB is in early access. Join the waitlist and we'll get you in.

▶ Watch the concept demo