Home

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:

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:

  1. Use fhir-persistence-schema-VERSION-cli.jar to deploy the schema.
  2. 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:

  1. The Docker image ghcr.io/linuxforhealth/fhir-schematool is an early technology preview and is experimental.
  2. The Docker image ghcr.io/linuxforhealth/fhir-bucket-tool is an early technology preview and is experimental.
  3. 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

ModuleDescriptionJava API-stable
fhir-parentThe parent project for all projects which make up the LinuxForHealth FHIR Serverfalse
fhir-coreCore helpers and utilitiesfalse
fhir-cacheCache-related helpers and utilitiesfalse

Model and Profile Support

ModuleDescriptionJava API-stable
fhir-modelAn object model generated from the FHIR R4B specification and corresponding parsers and generators for XML and JSONtrue
fhir-registryA resource registry and registry provider interfaces for extending the registryfalse
term/fhir-termA terminology service provider interface with a default implementation that implements terminology services from fully-defined CodeSystems in the registryfalse
term/fhir-term-graphAn expermental terminology service provider that implements terminology services using JanusGraphfalse
term/fhir-term-graph-loaderUtilities to populate the fhir-term-graph JanusGraph with conceptsfalse
term/fhir-term-remoteA terminology service provider that connects to an external service using a REST client to access code system contentfalse
fhir-profileHelper methods for validating ValueSet membership and Profile conformancefalse
fhir-pathAn implementation of version 2.0.0 of the FHIRPath specificationfalse
fhir-validationValidation utility for validating resource instances against the base specification and configured profilesfalse
conformance/fhir-core-r4Conformance artifacts for HL7 FHIR version 4.0.1false
conformance/fhir-core-r4bConformance artifacts for HL7 FHIR version 4.3.0false
conformance/fhir-hl7-terminologyCodeSystems and ValueSets from HL7 Terminology (THO) version 3.1.0false
conformance/fhir-ig-us-corePackaging the US Core Implementation Guide for the LinuxForHealth FHIR registryfalse
conformance/fhir-ig-mcodePackaging the minimal Common Oncology Data Elements for the LinuxForHealth FHIR registryfalse
conformance/fhir-ig-carin-bbPackaging the Consumer-Directed Payer Data Exchange Guide for the LinuxForHealth FHIR registryfalse
conformance/fhir-ig-davinci-pdexPackaging the Da Vinci Payer Data Exchange (PDEX) Implementation Guide for the LinuxForHealth FHIR registryfalse
conformance/fhir-ig-davinci-hrexPackaging the Da Vinci Health Record Exchange (HREX) Implementation Guide for the LinuxForHealth FHIR registryfalse
conformance/fhir-ig-davinci-pdex-plan-netPackaging the Da Vinci Payer Data Exchange (PDEX) Plan Net Implementation Guide for the LinuxForHealth FHIR registryfalse
conformance/fhir-ig-davinci-pdex-formularyPackaging the Da Vinci Payer Data Exchange (PDex) US Drug Formulary Implementation Guide for the LinuxForHealth FHIR registryfalse

Server

ModuleDescriptionJava API-stable
fhir-configConfiguration property definitions and helpers for working with the fhir-server-config.json config files and multi-tenancyfalse
fhir-auditAudit-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 formatfalse
fhir-searchUtilities for working with the FHIR search specificationfalse
fhir-persistenceInterfaces, helpers, and tests for implementing a persistence layer for the serverfalse
fhir-persistence-jdbcA relational FHIRPersistence implementation that uses JDBC to store and query FHIR resourcesfalse
fhir-persistence-cosDecorates the fhir-persistence-jdbc module with the ability to offload payload storage to IBM Cloud Object Storage experimentalfalse
fhir-persistence-cassandraDecorates the fhir-persistence-jdbc module with the ability to offload payload storage to Cassandra experimentalfalse
fhir-persistence-blobDecorates the fhir-persistence-jdbc module with the ability to offload payload storage to Azure Blob experimentalfalse
fhir-providerJAX-RS Providers for FHIR XML and JSON and related patch formatsfalse
fhir-serverJAX-RS resources and related classes for implementing the FHIR REST API and extended operationsfalse
fhir-server-webappA web application that packages the fhir-server with a set of built-in extended operationsfalse
fhir-server-testEnd-to-end integration tests for testing a running serverfalse
fhir-smartAn interceptor that provides SMART-on-FHIR authorization policy enforcementfalse

Extended Operations

ModuleDescriptionJava API-stable
fhir-operation-testSample operations for testing Extended Operations as describe at https://hl7.org/fhir/R4B/operations.htmlfalse
fhir-operation-bulkdata$import and $export implementations which translate bulk data requests into JSR352 Java Batch jobsfalse
fhir-bulkdata-webappStandalone web application for serving bulk import and export requests via JSR352 Java Batch jobsfalse
fhir-operation-convertA limited implementation of the FHIR $convert operation, able to convert between JSON and XML but not between FHIR versionsfalse
fhir-operation-documentBasic support for the Composition $document operation defined at https://hl7.org/fhir/R4B/operation-composition-document.htmlfalse
fhir-operation-healthcheckThe $healthcheck operation checks for a valid connection to the database and returns the server statusfalse
fhir-operation-termTerminology service operations which use the default fhir-term TerminologyServiceProvider to implement $expand, $lookup, $subsumes, $closure, $validate and $translatefalse
fhir-operation-term-cacheAdd-on module that provides operations for clearing the terminology subsystem caches for non-production scenariosfalse
fhir-operation-validateAn implementation of the FHIR resource $validate operationfalse
fhir-operation-everythingAn implementation of the FHIR patient $everything operationfalse
fhir-operation-eraseA hard delete operation for resource instances referred to as the $erase operation. See the README.mdfalse
fhir-operation-member-matchAn extensible framework and reference implementation for Davinci HREX $member-match using the default IBM FHIR Server. See the README.md experimentalfalse

Client

ModuleDescriptionJava API-stable
fhir-clientA FHIR Client that re-uses the LinuxForHealth FHIR Server model and its JAX-RS Providersfalse

Clinical Quality

ModuleDescriptionJava API-stable
cql/fhir-cqlFoundation classes for implementing the CQL Engine backend in IBM FHIR Serverfalse
cql/fhir-cql-restREST Client-based implementation of CQL Engine backendfalse
cql/fhir-cql-serverInternal API-based implementation of CQL Engine backendfalse
cql/fhir-quality-measureFHIR Quality Measure evaluation logicfalse
cql/operation/fhir-operation-cpgOptional module that implements CQL operationsfalse
cql/operation/fhir-operation-cqfOptional module that implements CQF operationfalse
cql/operation/fhir-operation-applyA naive implementation of the $apply operation defined at https://hl7.org/fhir/R4B/operation-activitydefinition-apply.htmlfalse

Tools and Utilities

ModuleDescriptionJava API-stable
fhir-toolsCode generation tools and logic for generating the FHIR object model, XML and JSON parsers, and the DefaultVisitor base classfalse
fhir-database-utilsGeneric database utilities for working with Apache Derby and PostgreSQL relational database management systemsfalse
fhir-examples-generatorA utility for generating resource examples which range from minimal (only required fields) to complete (every field present)false
fhir-examplesA set of FHIR resource examples including 1) all examples from the FHIR Specification 2) a set of generated examples for test purposesfalse
fhir-swagger-generatorUtilities for generating Swagger 2.0 and OpenAPI 3.0 definitions for a subset of the FHIR HTTP interfacefalse
fhir-openapiA web application that provides a simplified OpenAPI 3.0 definition of the FHIR HTTP interfacefalse
fhir-installPackaging and installation scripts for creating the fhir-distribution zip and the corresponding IBM FHIR Server Docker imagefalse
fhir-benchmarkJava Microbenchmark Harness (JMH) tests for measuring read/write/validation performance for the LinuxForHealth FHIR Server and the HL7 FHIR Java Reference Implementationfalse
fhir-bucketScans cloud object storage buckets and uploads data using the FHIR REST APIfalse
fhir-persistence-schemaClasses for deploying and updating the LinuxForHealth FHIR Server relational database schemafalse
fhir-persistence-cassandra-appCLI utility application supporting payload storage to Cassandra experimentalfalse

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.