Awesome
LinuxForHealth FHIR Server
The LinuxForHealth FHIR® Server (formerly the IBM® FHIR® Server) is a modular Java implementation of the HL7 FHIR specification that supports versions R4 and R4B with a focus on performance and configurability.
For a detailed description of FHIR conformance, see https://linuxforhealth.github.io/FHIR/Conformance.
The server is available in the following forms:
- a web application archive (war)
- a zip file with installation script
- a Linux container image from GitHub Packages
- a helm chart registered on ArtifactHub
Running the server
Guides for configuring, operating, and extending the LinuxForHealth FHIR Server are available from https://linuxforhealth.github.io/FHIR/guides/FHIRServerUsersGuide.
From the zip installer
Download the fhir-persistence-schema and fhir-install assets from the Releases tab and follow the instructions from the User's Guide to:
- Use fhir-persistence-schema-VERSION-cli.jar to deploy the schema.
- Unzip, install, and configure the server.
From the container image
Quickstart:
docker run -p 9443:9443 -e BOOTSTRAP_DB=true ghcr.io/linuxforhealth/fhir-server
Note:
- The Docker image ghcr.io/linuxforhealth/fhir-schematool is an early technology preview and is experimental.
- The Docker image ghcr.io/linuxforhealth/fhir-bucket-tool is an early technology preview and is experimental.
- The Docker image ghcr.io/linuxforhealth/fhir-term-loader is an early technology preview and is experimental.
From the helm chart
Quickstart:
helm repo add linuxforhealth https://linuxforhealth.github.io/lfh-helm
export POSTGRES_PASSWORD=$(openssl rand -hex 20)
helm upgrade --install --render-subchart-notes fhir-server linuxforhealth/fhir-server --set postgresql.postgresqlPassword=${POSTGRES_PASSWORD} --set ingress.hostname=example.com --set 'ingress.tls[0].secretName=cluster-tls-secret'
See https://artifacthub.io/packages/helm/linuxforhealth/fhir-server for more information.
Building with the LinuxForHealth FHIR Modules
Each of the LinuxForHealth FHIR Server modules are published to Maven Central under org.linuxforhealth.fhir.
To use the artifacts from a Maven project, declare the dependencies. For example, to use our visitable, thread-safe FHIR object model (including our high-performance parsers and generators), declare a dependency on the fhir-model
module:
...
<dependencies>
<dependency>
<groupId>org.linuxforhealth.fhir</groupId>
<artifactId>fhir-model</artifactId>
<version>${fhir.version}</version>
</dependency>
...
LinuxForHealth FHIR modules
The LinuxForHealth FHIR Server is modular and extensible. The following tables provide an overview of all the modules, along with an indicator of the stability of the Java APIs defined in each module. This indicator is only applicable to the direct usage of the modules, not for usage of the LinuxForHealth FHIR Server as a whole.
Core
Module | Description | Java API-stable |
---|---|---|
fhir-parent | The parent project for all projects which make up the LinuxForHealth FHIR Server | false |
fhir-core | Core helpers and utilities | false |
fhir-cache | Cache-related helpers and utilities | false |
Model and Profile Support
Module | Description | Java API-stable |
---|---|---|
fhir-model | An object model generated from the FHIR R4B specification and corresponding parsers and generators for XML and JSON | true |
fhir-registry | A resource registry and registry provider interfaces for extending the registry | false |
term/fhir-term | A terminology service provider interface with a default implementation that implements terminology services from fully-defined CodeSystems in the registry | false |
term/fhir-term-graph | An expermental terminology service provider that implements terminology services using JanusGraph | false |
term/fhir-term-graph-loader | Utilities to populate the fhir-term-graph JanusGraph with concepts | false |
term/fhir-term-remote | A terminology service provider that connects to an external service using a REST client to access code system content | false |
fhir-profile | Helper methods for validating ValueSet membership and Profile conformance | false |
fhir-path | An implementation of version 2.0.0 of the FHIRPath specification | false |
fhir-validation | Validation utility for validating resource instances against the base specification and configured profiles | false |
conformance/fhir-core-r4 | Conformance artifacts for HL7 FHIR version 4.0.1 | false |
conformance/fhir-core-r4b | Conformance artifacts for HL7 FHIR version 4.3.0 | false |
conformance/fhir-hl7-terminology | CodeSystems and ValueSets from HL7 Terminology (THO) version 3.1.0 | false |
conformance/fhir-ig-us-core | Packaging the US Core Implementation Guide for the LinuxForHealth FHIR registry | false |
conformance/fhir-ig-mcode | Packaging the minimal Common Oncology Data Elements for the LinuxForHealth FHIR registry | false |
conformance/fhir-ig-carin-bb | Packaging the Consumer-Directed Payer Data Exchange Guide for the LinuxForHealth FHIR registry | false |
conformance/fhir-ig-davinci-pdex | Packaging the Da Vinci Payer Data Exchange (PDEX) Implementation Guide for the LinuxForHealth FHIR registry | false |
conformance/fhir-ig-davinci-hrex | Packaging the Da Vinci Health Record Exchange (HREX) Implementation Guide for the LinuxForHealth FHIR registry | false |
conformance/fhir-ig-davinci-pdex-plan-net | Packaging the Da Vinci Payer Data Exchange (PDEX) Plan Net Implementation Guide for the LinuxForHealth FHIR registry | false |
conformance/fhir-ig-davinci-pdex-formulary | Packaging the Da Vinci Payer Data Exchange (PDex) US Drug Formulary Implementation Guide for the LinuxForHealth FHIR registry | false |
Server
Module | Description | Java API-stable |
---|---|---|
fhir-config | Configuration property definitions and helpers for working with the fhir-server-config.json config files and multi-tenancy | false |
fhir-audit | Audit-related interfaces and implementations including 1) a No-op AuditLogService and 2) an AuditLogService that writes audit events to Apache Kafka in the Cloud Auditing Data Federation (CADF) JSON format | false |
fhir-search | Utilities for working with the FHIR search specification | false |
fhir-persistence | Interfaces, helpers, and tests for implementing a persistence layer for the server | false |
fhir-persistence-jdbc | A relational FHIRPersistence implementation that uses JDBC to store and query FHIR resources | false |
fhir-persistence-cos | Decorates the fhir-persistence-jdbc module with the ability to offload payload storage to IBM Cloud Object Storage experimental | false |
fhir-persistence-cassandra | Decorates the fhir-persistence-jdbc module with the ability to offload payload storage to Cassandra experimental | false |
fhir-persistence-blob | Decorates the fhir-persistence-jdbc module with the ability to offload payload storage to Azure Blob experimental | false |
fhir-provider | JAX-RS Providers for FHIR XML and JSON and related patch formats | false |
fhir-server | JAX-RS resources and related classes for implementing the FHIR REST API and extended operations | false |
fhir-server-webapp | A web application that packages the fhir-server with a set of built-in extended operations | false |
fhir-server-test | End-to-end integration tests for testing a running server | false |
fhir-smart | An interceptor that provides SMART-on-FHIR authorization policy enforcement | false |
Extended Operations
Module | Description | Java API-stable |
---|---|---|
fhir-operation-test | Sample operations for testing Extended Operations as describe at https://hl7.org/fhir/R4B/operations.html | false |
fhir-operation-bulkdata | $import and $export implementations which translate bulk data requests into JSR352 Java Batch jobs | false |
fhir-bulkdata-webapp | Standalone web application for serving bulk import and export requests via JSR352 Java Batch jobs | false |
fhir-operation-convert | A limited implementation of the FHIR $convert operation, able to convert between JSON and XML but not between FHIR versions | false |
fhir-operation-document | Basic support for the Composition $document operation defined at https://hl7.org/fhir/R4B/operation-composition-document.html | false |
fhir-operation-healthcheck | The $healthcheck operation checks for a valid connection to the database and returns the server status | false |
fhir-operation-term | Terminology service operations which use the default fhir-term TerminologyServiceProvider to implement $expand, $lookup, $subsumes, $closure, $validate and $translate | false |
fhir-operation-term-cache | Add-on module that provides operations for clearing the terminology subsystem caches for non-production scenarios | false |
fhir-operation-validate | An implementation of the FHIR resource $validate operation | false |
fhir-operation-everything | An implementation of the FHIR patient $everything operation | false |
fhir-operation-erase | A hard delete operation for resource instances referred to as the $erase operation. See the README.md | false |
fhir-operation-member-match | An extensible framework and reference implementation for Davinci HREX $member-match using the default IBM FHIR Server. See the README.md experimental | false |
Client
Module | Description | Java API-stable |
---|---|---|
fhir-client | A FHIR Client that re-uses the LinuxForHealth FHIR Server model and its JAX-RS Providers | false |
Clinical Quality
Module | Description | Java API-stable |
---|---|---|
cql/fhir-cql | Foundation classes for implementing the CQL Engine backend in IBM FHIR Server | false |
cql/fhir-cql-rest | REST Client-based implementation of CQL Engine backend | false |
cql/fhir-cql-server | Internal API-based implementation of CQL Engine backend | false |
cql/fhir-quality-measure | FHIR Quality Measure evaluation logic | false |
cql/operation/fhir-operation-cpg | Optional module that implements CQL operations | false |
cql/operation/fhir-operation-cqf | Optional module that implements CQF operation | false |
cql/operation/fhir-operation-apply | A naive implementation of the $apply operation defined at https://hl7.org/fhir/R4B/operation-activitydefinition-apply.html | false |
Tools and Utilities
Module | Description | Java API-stable |
---|---|---|
fhir-tools | Code generation tools and logic for generating the FHIR object model, XML and JSON parsers, and the DefaultVisitor base class | false |
fhir-database-utils | Generic database utilities for working with Apache Derby and PostgreSQL relational database management systems | false |
fhir-examples-generator | A utility for generating resource examples which range from minimal (only required fields) to complete (every field present) | false |
fhir-examples | A set of FHIR resource examples including 1) all examples from the FHIR Specification 2) a set of generated examples for test purposes | false |
fhir-swagger-generator | Utilities for generating Swagger 2.0 and OpenAPI 3.0 definitions for a subset of the FHIR HTTP interface | false |
fhir-openapi | A web application that provides a simplified OpenAPI 3.0 definition of the FHIR HTTP interface | false |
fhir-install | Packaging and installation scripts for creating the fhir-distribution zip and the corresponding IBM FHIR Server Docker image | false |
fhir-benchmark | Java Microbenchmark Harness (JMH) tests for measuring read/write/validation performance for the LinuxForHealth FHIR Server and the HL7 FHIR Java Reference Implementation | false |
fhir-bucket | Scans cloud object storage buckets and uploads data using the FHIR REST API | false |
fhir-persistence-schema | Classes for deploying and updating the LinuxForHealth FHIR Server relational database schema | false |
fhir-persistence-cassandra-app | CLI utility application supporting payload storage to Cassandra experimental | false |
Contributing to the LinuxForHealth FHIR Server
The LinuxForHealth FHIR Server is under active development. To help develop the server, clone or download the project and build it using Maven. See Setting up for development for more information.
See CONTRIBUTING.md for contributing your changes back to the project.
See CODE_OF_CONDUCT.md for code of conduct.
License
The LinuxForHealth FHIR Server and its corresponding modules are licensed under the Apache 2.0 license. The full license text is available at LICENSE.
FHIR® is the registered trademark of HL7 and is used with the permission of HL7. Use of the FHIR trademark does not constitute endorsement of this product by HL7. IBM and the IBM logo are trademarks of International Business Machines Corporation, registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available at https://ibm.com/trademark.