v0.1.8 released. Linux binaries and a container image, signed.

A pure-Rust FHIR terminology server for SNOMED CT, LOINC, ICD, RxNorm, and every FHIR code system, on ordinary hardware.

FerroTERM serves the HL7 FHIR terminology API on R4, R4B, R5, and the R6 ballot from one binary over an index built once per release and read at startup. No JVM, no search cluster. You bring the release you are licensed for; the build tool turns it into an index; the server answers from it.

Ferro for the Rust family FerroTERM shares with FerroEHR, TERM for terminology.

Measured, never typed

What each code system costs to run, and how fast it answers

Every figure below comes from a benchmark record committed to the repository; a check fails when the page and the records disagree. The benchmarks page has every operation, the cold and tail latencies, the method, and how to take a record yourself.

Warm p50 over 200 HTTP round trips on one machine (Apple M2, 17.18 GB, macos/aarch64), FerroTERM 0.1.4 serving FHIR R4B, taken 2026-09-22. Every tile links to its record.

What it serves

One seam, many code systems

Every code system reaches the FHIR operations through the same provider seam, so nothing in an operation is a special case for one system.

SNOMED CT, LOINC, UCUM, BCP 47, BCP 13, ISO 3166-1, ICD-10 (WHO), ICD-10-NL, ICD-10-CM, ICD-11 MMS, ICD-11 ICF, ICD-11 Foundation, ATC/DDD, ICPC-2, RxNorm, the DHD Diagnosethesaurus and Verrichtingenthesaurus, the G-Standaard, the Nederlandse Labcodeset, the NHG ICPC-1 to SNOMED CT map, and any FHIR CodeSystem, ValueSet, and ConceptMap resources. The code systems page lists each with its URI, versions, build command, and licence.

The viewer

A web UI, out of the same binary

The server serves a viewer at /ui, and / redirects onto it. Start the server and it is already there; there is nothing else to deploy and no second process to run.

It is a FHIR client and nothing more. It reaches the server over the same public API any client uses, from the browser, same-origin, so anything it does your own client can do. It depends on no other crate in the workspace, which a check enforces.

Check a code, List a value set, and Map a code run $lookup, $validate-code, $subsumes, $expand, and $translate. Each control offers the code systems, value sets, and concept maps this deployment publishes, with the versions each canonical was published in beside it, so nothing waits for a canonical to be typed. The overview reads a twenty-system deployment as one sortable table.

What the viewer does

Who it is for

Four questions, four answers

Clinical informatics

What does it serve, and how well?

The code systems above, each from the release you license, with the inferred hierarchy, the preferred terms per language, and inactive concepts served and marked. Conformance is measured against the HL7 terminology ecosystem test suite per FHIR version, and the result is recorded, not claimed.

Operations

How do I run it, and what does it need?

One binary or a distroless container image, a directory of artifacts built once per release, and the memory the figures above show. Releases are built to SLSA Build Level 3 with signed provenance and SBOMs you verify before you run them.

Integration

How do I call it, from which FHIR version?

$lookup, $validate-code, $subsumes, $expand, and $translate under /r4, /r4b, /r5, and /r6, in JSON or XML, each version's parameter set generated from HL7's own packages so the surface is right by construction.

Evaluation

How does it compare, and what does it cost?

The software is under the Business Source License 1.1: free outside production and for non-commercial production use, a commercial licence for other production use, Apache 2.0 four years after each version. A table says which applies to you. Each code system's content is licensed by its owner. The comparison to the reference servers is stated only where it was run on the same machine over the same release, and says so where it was not.

Where the project is

v0.1.8 is the current release. The tracker's milestones are the roadmap; every issue carries its acceptance criteria, and a release is cut when its milestone has no open issue left.