dotnet tool install --global fhir-candle --version 2026.526.2054
dotnet new tool-manifest
dotnet tool install --local fhir-candle --version 2026.526.2054
#tool dotnet:?package=fhir-candle&version=2026.526.2054
nuke :add-package fhir-candle --version 2026.526.2054
When you need a small FHIR.
fhir-candle is a small in-memory FHIR server that can be used for testing and development. It is NOT intended to be used for production workloads.
The project is intended to serve as a platform for rapid development and testing for FHIR - both for features in the core specification as well as Implementation Guide development.
While there are many existing OSS FHIR servers, somewhere between most and all of them are intended to support production workloads. In my own work on Reference Implementations, I often found it challenging to add the types of features I wanted due to the conflicts that causes. To that end, here are some principles I generally use while developing this project:
There are many ways to contribute:
This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.
To report a security issue, please use the GitHub Security Advisory "Report a Vulnerability" tab.
For more information, please see the Security Readme.
Install .NET 8 or newer and run this command:
dotnet tool install --global fhir-candle
Note that this software is still under heavy development.
Start a FHIR server and open the browser by running:
fhir-candle -o
Install Docker and run these commands:
docker pull ghcr.io/fhir/fhir-candle:latest
docker run -p 8080:5826 ghcr.io/fhir/fhir-candle:latest
This will run the docker image with the default configuration, mapping port 5826 from the container to port 8080 in the host. Once running, you can access http://localhost:8080/ in the browser to access the fhir-candle's UI or access the default endpoints:
Note that additional arguments can be passed directly via the docker run command. For example, to run the server with only an R4 endpoint named 'test':
docker run -p 8080:5826 ghcr.io/fhir/fhir-candle:latest --r4 test
To run the default server from the command line:
dotnet run --project src/fhir-candle/fhir-candle.csproj
To pass arguments when using dotnet run, add an extra --. For example, to see help:
dotnet run --project src/fhir-candle/fhir-candle.csproj -- --help
To build a release version of the project:
dotnet build src/fhir-candle/fhir-candle.csproj -c Release
The output of the release build can be run (from the root directory of the repo)
dotnet ./src/fhir-candle/bin/Release/net8.0/fhir-candle.dll
.\src\fhir-candle\bin\Release\net8.0\fhir-candle.exe
./src/fhir-candle/bin/Release/net8.0/fhir-candle
By default, this software loads three FHIR 'tenants':
/r4,/r4b, and/r5.The tenants can be controlled by command line arguments - note that manually specifying any tenants
overrides the default configuration and will only load the ones specified. To load only an R4
endpoint at 'fhir', the arguments would include --r4 fhir. You can specify multiple tenants for
the same version, for example --r5 fhir --r5 also-fhir will create two endpoints.
The server will load initial data specified by the --fhir-source argument. If the path specified
is a relative path, the software will look for the directory starting at the current running path.
If the system is loading multiple tenants, it will check the path for additional directories based
on the tenant names. For example, a path like fhirData passed into the default server will look for
fhirData/r4, fhirData/r4b, and fhirData/r5. If tenant directories are not found, all tenants will try to
load resources from the specified path.
This project also contains the reference stack for FHIR Subscriptions. To use the default landing page of the subscriptions RI, the following command can be used:
fhir-candle --reference-implementation subscriptions --load-package hl7.fhir.uv.subscriptions-backport#1.1.0 --load-examples false --protect-source true -m 1000
OpenTelemetry instrumentation can be enabled via either the --otel-otlp-endpoint argument or the OTEL_EXPORTER_OTLP_ENDPOINT environment variable.
For example, to send traces to a Jaeger instance running on localhost:4317: fhir-candle -o --otel-otlp-endpoint http://localhost:4317.
For local testing, you can run a Jaeger instance in Docker with the following command:
docker run --rm --name jaeger -p 4317:4317 -p 4318:4318 -p 5778:5778 -p 16686:16686 -p 14250:14250 jaegertracing/all-in-one:latest
Note: items are unsorted within their priorities
$meta-add).transaction bundles_filter supportFHIR® is the registered trademark of HL7 and is used with the permission of HL7.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 net8.0 is compatible. net8.0-android net8.0-android was computed. net8.0-browser net8.0-browser was computed. net8.0-ios net8.0-ios was computed. net8.0-maccatalyst net8.0-maccatalyst was computed. net8.0-macos net8.0-macos was computed. net8.0-tvos net8.0-tvos was computed. net8.0-windows net8.0-windows was computed. net9.0 net9.0 is compatible. net9.0-android net9.0-android was computed. net9.0-browser net9.0-browser was computed. net9.0-ios net9.0-ios was computed. net9.0-maccatalyst net9.0-maccatalyst was computed. net9.0-macos net9.0-macos was computed. net9.0-tvos net9.0-tvos was computed. net9.0-windows net9.0-windows was computed. net10.0 net10.0 is compatible. net10.0-android net10.0-android was computed. net10.0-browser net10.0-browser was computed. net10.0-ios net10.0-ios was computed. net10.0-maccatalyst net10.0-maccatalyst was computed. net10.0-macos net10.0-macos was computed. net10.0-tvos net10.0-tvos was computed. net10.0-windows net10.0-windows was computed. |
This package has no dependencies.
| Version | Downloads | Last Updated | |
|---|---|---|---|
| 2026.708.1348 | 153 | 7/8/2026 | |
| 2026.623.2024 | 159 | 6/23/2026 | |
| 2026.528.2036 | 190 | 5/28/2026 | |
| 2026.527.1737 | 119 | 5/27/2026 | |
| 2026.526.2054 | 121 | 5/26/2026 | |
| 2026.415.1643 | 162 | 4/15/2026 | |
| 2026.414.2234 | 140 | 4/14/2026 | |
| 2025.611.1422 | 562 | 6/11/2025 | |
| 2025.331.1443 | 559 | 3/31/2025 | |
| 2025.220.1345 | 654 | 2/20/2025 | |
| 2025.212.1633 | 657 | 2/12/2025 | |
| 2025.210.2340 | 576 | 2/10/2025 | |
| 2025.206.2325 | 381 | 2/6/2025 | |
| 2025.129.1600 | 309 | 1/29/2025 | |
| 2025.128.2330 | 362 | 1/28/2025 | |
| 2025.127.2338 | 373 | 1/27/2025 | |
| 2025.127.1336 | 338 | 1/27/2025 | |
| 2024.921.1505 | 504 | 9/21/2024 | |
| 2024.921.1450 | 445 | 9/21/2024 | |
| 2024.910.1539 | 418 | 9/10/2024 |