sct
A fast, local-first SNOMED CT toolkit written in Rust. Convert a SNOMED CT RF2 release into queryable formats in seconds. Almost ridiculously fast on modern hardware. Free and open source. No Java. No Elasticsearch. Docker optional.
New to SNOMED CT? Start here · Full walkthrough · Get your own terminology server · Why build this? · Benchmarks
Install
Prebuilt binaries are published for Linux (x86_64, aarch64), macOS (Apple Silicon, Intel), and Windows (x86_64) on every release, each with a SHA-256 checksum you can verify against the SHA256SUMS file on the Releases page. Pick your platform:
Homebrew (recommended)
brew tap pacharanero/tap
brew install sct
Shell installer - auto-detects your chip, verifies the checksum, installs to ~/.local/bin:
curl -fsSL https://raw.githubusercontent.com/pacharanero/sct/main/install.sh | sh
Disk image - download the .dmg for your Mac, open it, and drag sct onto a folder on your PATH:
Apple Silicon (.dmg) Intel (.dmg)
Unsigned for now
The .dmg is not yet notarized. On first run, right-click sct → Open, or clear the quarantine flag: xattr -d com.apple.quarantine ./sct.
Debian / Ubuntu (.deb)
curl -fLO https://github.com/pacharanero/sct/releases/latest/download/sct-linux-x86_64.deb
sudo apt install ./sct-linux-x86_64.deb # aarch64: sct-linux-aarch64.deb
Fedora / RHEL / openSUSE (.rpm)
curl -fLO https://github.com/pacharanero/sct/releases/latest/download/sct-linux-x86_64.rpm
sudo dnf install ./sct-linux-x86_64.rpm # aarch64: sct-linux-aarch64.rpm
Homebrew
brew tap pacharanero/tap
brew install sct
Arch Linux (AUR)
yay -S sct-rs-bin
Shell installer - auto-detects your architecture, verifies the checksum, installs to ~/.local/bin:
curl -fsSL https://raw.githubusercontent.com/pacharanero/sct/main/install.sh | sh
One-line installer (recommended - the least fuss). Open PowerShell (Start menu → type "PowerShell" → Enter), paste this line, and press Enter:
iwr -useb https://raw.githubusercontent.com/pacharanero/sct/main/install.ps1 | iex
It downloads sct, verifies its checksum, installs it to %LOCALAPPDATA%\sct\bin, and offers to add that folder to your PATH (just press Enter to accept) - no manual PATH editing. Open a new terminal afterwards and run sct --version.
Scoop - if you already use the Scoop package manager (handy for one-command updates later):
scoop bucket add pacharanero https://github.com/pacharanero/scoop
scoop install sct
Manual .exe (advanced) - download sct-windows-x86_64.exe, put it in a folder that is already on your PATH, and run sct from a terminal. The one-line installer above handles this PATH step for you.
Unsigned for now
sct is not yet Authenticode-signed, so Windows SmartScreen may warn on first run - choose More info → Run anyway. (Code-signing and a winget package are planned.)
With a Rust toolchain (stable 1.88+):
cargo install sct-rs # compile from crates.io
Or grab a prebuilt binary without compiling, via cargo-binstall:
cargo binstall sct-rs
Build from a clone. sct serve and sct tui are included by default; add optional extras (gui, dmwb, diagram-svg, or full) as needed:
git clone https://github.com/pacharanero/sct && cd sct
cargo install --path . --features full
Verify the install:
sct --version
Then turn a SNOMED CT RF2 release into queryable data in three commands:
sct ndjson --rf2 ~/path-to-your-SNOMED-RF2.zip
sct sqlite --ndjson snomed.ndjson
sct lexical "heart attack"
-
Build the pipeline
Convert an RF2 snapshot into SQLite, Parquet, Markdown, or Arrow embeddings in a single command. 837,930 concepts in under a minute on a laptop.
-
Search
Full-text search via FTS5 for keywords and phrases. Typo-tolerant fuzzy and prefix search via a mmap'd FST index. Semantic vector search via local Ollama embeddings. All offline.
-
Code lists & ECL
Build version-controllable clinical code lists, and populate them with SNOMED CT Expression Constraint Language -
sct codelist add --ecl "<<73211009"expands a query into concrete concepts. -
Connect to AI
A local MCP server exposes SNOMED CT as tools for Claude, Cursor, and any other MCP-compatible client. Ask questions about concepts, hierarchies, and relationships directly in your AI assistant.
-
Run a terminology server
Start a FHIR R4 SNOMED CT terminology server on a clean VPS with Docker Compose. First boot downloads from TRUD, builds
snomed.db, and serves$lookup,$expand,$subsumes, and$translate. -
Explore
A keyboard-driven terminal UI and a local web GUI for browsing concepts, navigating hierarchies, and inspecting relationships - no browser extension or remote service needed.
Command-line contracts
Commands reserve stdout for data and stderr for diagnostics and human-facing hints. A completed command exits 0; an unresolved single-item lookup exits 1; and command-line usage errors exit 2. A search with no matches is still successful: text and ID output leave stdout empty while the hint goes to stderr, and structured formats emit an empty collection. Commands with domain-specific status codes document their exceptions, such as sct trud check using 2 when a newer release is available.