HAPI FHIR is the most widely deployed open-source FHIR server — proven, multi-version, and conformance-first. bonfireDB is a much younger, app-native clinical backend (Convex-style) for teams who want typed primitives, fresh reads, and agent-ready projections without standing up and tuning a JVM FHIR server themselves.
HAPI FHIR is a 12-year-old, Apache-2.0 Java/JPA FHIR server: full CRUD/search/history/validation/$export, subscriptions, terminology, partitioning, and a battle-tested AuthorizationInterceptor — it is the de-facto FHIR reference implementation and the safe choice if you need broad, proven FHIR conformance. It is a FHIR data store and toolkit, not an application framework: there is no app scaffolding, no typed clinical SDK, no native semantic/vector search, and no agent/LLM layer — all of that is yours to build alongside it. bonfireDB inverts the priority: it is positioned as an app-native, TypeScript/Postgres backend with typed clinical primitives, reactive queries, and built-in ABAC-enforced semantic search, generating FHIR underneath rather than starting from it. The honest tradeoff: HAPI is mature and conformant today but heavy and DIY for app builders, while bonfire is early-stage and largely vision, trading conformance breadth for developer velocity on outpatient and AI-healthcare apps.
HAPI FHIR is the mature, conformant open-source FHIR engine; bonfireDB is an early-stage app-native clinical backend that generates FHIR underneath — this compares a data store you build on against a framework you build with.
| HAPI FHIR | bonfireDB | |
|---|---|---|
| Type | Open-source FHIR server + toolkit (data store, not an app framework) | Agent-native clinical backend; FHIR generated underneath |
| Language / stack | Java / JPA-Hibernate, Spring Boot, Lucene or Elasticsearch | TypeScript + Postgres + pgvector |
| License / cost | Apache-2.0, $0 license; you run infra/ops, or pay Smile CDR | Apache-2.0 core (free) + managed tier |
| Hosting | Self-host (Docker/Tomcat) by default; managed only via commercial Smile CDR | Your AWS (OSS) or managed |
| App-native typed API | No — FHIR data store; build your typed app layer yourself | Yes — typed clinical primitives |
| Fresh-on-commit app reads | Partial — yes for structured search (ACID relational); full-text index is async unless forced | Yes — committed operational read models |
| Reactive realtime cache | Partial — Subscriptions (REST-hook/WebSocket/topic), but no app-native reactive cache hook | Yes — useClinicalQuery |
| Built-in semantic search | No native vector/embeddings; full-text keyword only (_content/_text :contains) | Built in — pgvector, ABAC-enforced |
| Agent / MCP layer | None native — no MCP or LLM/agent layer; entirely DIY | Build-your-own-MCP over clean projections |
| Clinical authorization (write-enforced) | Yes — AuthorizationInterceptor enforces request and response; no built-in authentication | Yes — Read + write enforced ABAC, auto-audit |
| Automatic audit / provenance | Optional automatic AuditEvents via BALP interceptor once registered | Automatic |
| FHIR conformance / export | Native FHIR-first: DSTU2-R5, full REST, $export; certs only via commercial Smile CDR | FHIR R4 generated underneath; scoped conformance (honest: not a full enterprise FHIR server) |
| Best for | Teams needing proven, broad FHIR conformance with Java/DevOps capacity | Builders of AI-native health apps (scribes, copilots, agents) |
Choose HAPI FHIR if you need proven, broad FHIR conformance today — multiple FHIR versions, real subscriptions, a full terminology server, multitenancy, and a credible certified/supported upgrade path (Smile CDR) — and you have the Java/DevOps capacity to run and tune a JVM FHIR server (plus Elasticsearch) and build your app, identity, and any AI layer on top.
Choose bonfireDB if you're a small TypeScript/Python team shipping an outpatient or AI-healthcare app and want app-native typed primitives, reactive reads, and ABAC-enforced semantic search out of the box — and you accept that bonfire is early-stage with deliberately scoped (not full enterprise) FHIR conformance, with FHIR generated underneath rather than as the starting point.
Open source. Runs in your AWS. The clinical layer is handled.
HAPI FHIR is a mature, conformance-first FHIR data store and toolkit you build ON; bonfireDB is an app-native TypeScript/Postgres clinical backend you build WITH, generating FHIR R4 underneath. HAPI gives you broad, proven FHIR conformance; bonfireDB is designed to give you typed clinical primitives, reactive reads, and ABAC-enforced semantic search. bonfireDB is early access and design-stage on several of these.
Not necessarily. HAPI is the right call if you need broad, proven FHIR conformance today (multiple FHIR versions, subscriptions, a terminology server) and have Java/DevOps capacity. If you're a small TypeScript or Python team shipping an outpatient or AI-healthcare app, bonfireDB is designed to be the app backend that sits above the FHIR layer so you don't stand up and tune a JVM server yourself.
bonfireDB is positioned as exactly that: TypeScript + Postgres + pgvector instead of HAPI's Java/JPA/Spring stack plus a separate Lucene/Elasticsearch cluster. It targets Node/TS and Python teams who don't otherwise want to run a JVM FHIR server. Note bonfireDB is pre-launch with deliberately scoped (not full enterprise) FHIR conformance, while HAPI is mature and conformant today.
No. As of 2026, HAPI's full-text search is keyword-only (Lucene/Elasticsearch _content/_text with a :contains substring modifier) and has no native embeddings or vector search — verify current capabilities before deciding. bonfireDB's design puts pgvector semantic search in the core, scoped by ABAC, but this is design-stage, not a shipped benchmarked feature.
No. HAPI ships no MCP, LLM integration, or agent tooling — that layer is entirely yours to build. bonfireDB positions a build-your-own-MCP surface over clean typed projections as a first-class concern, though this is early-access positioning rather than a shipped product. HAPI also has no built-in authentication (its AuthorizationInterceptor handles authorization, not identity), so authn is DIY.