Welcome to Node on FHIR. This code repository contains a reference FHIR server and web application stack written in modern ES6/Typescript/Javascript/Node that can compile to mobile devices. We have gone through the NPM repository, and tried to pull in as many FHIR related libraries as we could in order to find the 'center' of the Javascript FHIR community.
This project is an offshoot of the Meteor on FHIR project, which developed a Javascript/Node based FHIR application stack about 4 years ago. A the time, we chose Meteor.js, a full-stack application framework that used websockets as it's transportation mechanism with pub/sub functionality, because it had good support for clinician worklists use cases with a document oriented database and good support for data visualizations. Over time, we saw some limitations with the default Meteor tech stack, particularly with the data distribution protocol and the Blaze rendering layer. However, we've been quite pleased with the Meteor compiler and its support for mobile applications.
Eventually, we decided to do a soft fork of the Meteor project, and set up our own release track and began replacing the websocket/data-distribution-protocol with more standard OAuth/REST interfaces. We also were tracking many of the latest developments in the Javascript community, such as the release of React, EcmaScript 6, and Typescript and migrating our codebase forward. With the help of the Meteor Development Group, we were able to upgrade the default reference build to include best practices from across the Javascript ecosystem.
The following reference build is the result of 5 years of work; 70+ prototypes and pilots, the result of a million+ quality control tests, and the contributions of dozens of different organizations, ranging from big tech companies (Google, Facebook) and javascript specific projects (Meteor, Material UI) to healthcare specific companies (HL7, Vermonster, Asymmetrik, SmartHealthIT, etc). It represents a rich combination of functionality that is difficult to be found anywhere else.
We've set this repository up as a GitHub template, so you can simply fork it and begin coding. You'll find the example plugin can be compiled and published to NPM itself (as long as you don't add things like binaries that depend on specific platforms). Importantly, you'll find all of our code to be isomorphic, meaning its the same modern ES6 code pattners on the client, server, and in the plugin packages.
There's currently three (3) javascript client libraries in the NPM repository right now. We have
Library | Vendor | Description |
---|---|---|
fhir-kit-client | Vermonster | Modern FHIR client with ES6, SMART, cross-version support, etc |
fhirclient | smarthealthit | The official SMART on FHIR javascript client |
fhir.js | FHIR Community | Community javascript client (good Angular support) |
ts-fhir-types | Ahryman40k | Typescript definitions |
blue-button-fhir | Amida Technology | Blue Button to FHIR converter (DSTU2) |
node-fhir-server-core | Asymmetrik | Node FHIR Server |
sof-scope-checker | Asymmetrik | Utility to check SMART on FHIR scope access |
fhir-list-addresses | careMESH | Utility function for extracting addresses |
fhirpath | HL7 | The official FHIRPath parser |
json-schema-resource-validation | VictorGus | FHIR validator for R4 |
fhir-helpers | jackruss | Utilities to hydrate argonaut form data into FHIR objects |
hl7v2 | panates | HL7 v2 parser, serializer, validator and TCP client/server. |
redox-hl7-v2 | Redox | This is Redox's battle-tested in-house HL7v2 parser/generator. |
# install the meteor compiler; this will take care of node, nvm, npm, yarn, etc.
# it will also set up debugging tools, a compiler build tool, etc
curl https://install.meteor.com/ | sh
# download the node-on-fhir application
git clone https://github.com/symptomatic/node-on-fhir
cd node-on-fhir
# install dependencies
meteor yarn install
# run the application in local development mode
# this will automatically launch a mongo instance
# you will want to create your own settings file
# and a plugin if you have assets you want to keep private
meteor run --settings configs/settings.nodeonfhir.json --extra-packages symptomatic:example-plugin
# build and minifiy the application
meteor add symptomatic:example-plugin
meteor build --directory ../output
# run the node application
# warning! we don't have a mongo instance yet
# you will need to specify a MONGO_URL
cd ../output
more README
cd programs/server
npm install
export MONGO_URL='mongodb://user:password@host:port/databasename'
export ROOT_URL='http://example.com'
export METEOR_SETTINGS=`(cat configs/settings.nodeonfhir.json)`
node main.js
# or if you're looking for a one-liner
MONGO_URL='mongodb://user:password@host:port/databasename' PORT=4200 ROOT_URL=http://localhost METEOR_SETTINGS=`(cat ../../node-on-fhir/configs/settings.nodeonfhir.json)` node main.js