Snowstorm (SNOMED Terminology Server)
SNOMED International's open-source terminology server — search, browse and query SNOMED CT with the Expression Constraint Language, behind a FHIR terminology API.
In one line
Snowstorm is the terminology engine that makes SNOMED CT queryable at scale — find concepts, walk the is-a hierarchy, run Expression Constraint Language (ECL) queries — exposed through a FHIR terminology API. Licence: code Apache 2.0 (open); the SNOMED CT content itself requires a licence — free in SNOMED member countries, including India.
Why you need a terminology server at all
SNOMED CT has ~360,000 active concepts and millions of relationships. You can't just load that
into a database table and run LIKE '%diabetes%' — you need a service that understands the
structure: subsumption (is "type 2 diabetes" a kind of "diabetes"?), reference sets,
synonyms across languages, and historical versions. A terminology server is that service.
Snowstorm is SNOMED International's official open-source one, and it powers the public SNOMED
browser.
What it does
Snowstorm loads SNOMED CT RF2 release files into an Elasticsearch index and exposes:
- Concept search & browse — typeahead search, and navigation up/down the is-a hierarchy.
- ECL — the Expression Constraint Language for set
queries like
< 404684003 |Clinical finding|(all descendants) or "drugs with active ingredient X". This is how you author value sets instead of hand-listing codes. - Reference sets — language refsets, the national India extension, and value-set membership.
- Versioning — query a specific release, and resolve historical/inactivated concepts.
The FHIR terminology operations
Crucially, Snowstorm speaks the FHIR terminology API, so any FHIR client gets standard operations without knowing SNOMED's internals:
| Operation | Question it answers |
|---|---|
$lookup | What is concept 73211009? (display, properties) |
$validate-code | Is this code valid / in this value set? |
$expand | Give me every code in this value set (often an ECL) |
$subsumes | Is A an ancestor of B? |
$translate | Map this code to another system (e.g. SNOMED→ICD) |
This standardisation is the point: an EHR binds to the operation, and can swap one conformant server for another.
Licensing — the nuance that trips people
The split matters: the software is Apache 2.0 (free to run and modify), but running it
with real SNOMED CT content needs an affiliate/member licence. In SNOMED member
countries — India included — that licence is free. So Snowstorm is genuinely
no-cost for Indian projects, but you must register, not just git clone.
Where it shows up
Any system doing real SNOMED binding needs a terminology server: EHR problem lists, decision support, analytics value sets, ABDM/NRCeS-aligned services. Snowstorm is the open option; Ontoserver (CSIRO) and HAPI FHIR's terminology module are common alternatives. It is the production counterpart to the Terminology Browser lab — the ECL and crosswalk ideas you practise there are exactly what Snowstorm answers at national scale.
Common pitfalls
- Underestimating resources — the Elasticsearch index is memory-hungry; size it before importing a full international + national edition.
- Forgetting the content licence — the code runs, but you still need the (free) SNOMED affiliate registration.
- Hand-listing value sets — if you're maintaining code lists by hand, you're not using ECL; let the server compute membership.
Key takeaways
- Snowstorm makes SNOMED CT computable: search, hierarchy, ECL, refsets — over a FHIR API.
- The FHIR operations (
$expand,$validate-code,$translate…) decouple your app from the server. - Open-source code, licensed content — free for India and other member nations.
- It's the real-world engine behind the terminology skills taught in the labs.
Check your recall
0 of 2 recalledActive recall beats re-reading — try to answer, then reveal.
Why do you need a terminology server for SNOMED CT?
Which FHIR terminology operations does a server like Snowstorm expose?