dcmjs
JavaScript implementation of DICOM manipulation. This code is an outgrowth of several efforts to implement web applications for medical imaging.

Note: this code is a work-in-progress and should not be used for production or clinical purposes
See live examples here
Goals
Overall the code should:
- Support reading and writing of correct DICOM objects in JavaScript for browser or node environments
- Provide a programmer-friendly JavaScript environment for using and manipulating DICOM objects
- Include a set of useful demos to encourage correct usage of dcmjs and modern DICOM objects
- Encourage correct referencing of instances and composite context when creating derived objects
- Current target is modern web browsers, but a set of node-based utilities also makes sense someday
Architectural goals include:
- Use modern JavaScript programming methods (currently ES6) but avoid heavy frameworks
- Leverage modern DICOM standards but avoid legacy parts
- Support straightforward integration with multiple JavaScript deployment targets (browser, node, etc) and frameworks.
Parts of DICOM that dcmjs will focus on:
- Enhanced Multiframe Images
- Segmentation Objects
- Parametric Maps
- Structured Reports
Parts of DICOM that dcmjs will not focus on:
- DIMSE (legacy networking like C-FIND, C-MOVE, etc)
- Physical Media (optical disks)
Usage
In Browser
<script type="text/javascript" src="https://unpkg.com/dcmjs"></script>
In Node
// To install latest _stable_ release
npm install --save dcmjs
// To install latest code merged to master
npm install --save dcmjs@dev
For Developers
git clone https://github.com/dcmjs-org/dcmjs
cd dcmjs
npm install
npm run build
npm test
For Maintainers
Publish new version automatically from commit:
Use the following "Commit Message Format" when drafting commit messages. If you're merging a 3rd party's PR, you have the ability to override the supplied commit messages by doing a "Squash & Merge":
Note: Be wary of BREAKING_CHANGE
in commit message descriptions, as this can force a major version bump.
Be sure to use lower case for the first letter of your semantic commit message, so use fix
not Fix
or feat
not Feat
.
It is advised to use the git-cz, i.e.:
npm install -g git-cz
git-cz --non-interactive --type=fix --subject="commit message"
More info at git-cz.
Note: a new package version will be published only if the commit comes from a PR.
Use this repository's issues page to report any bugs. Please follow SSCCE guidelines when submitting issues.
Use github pull requests to make contributions.
Status
Currently dcmjs is an early-stage development experiment, but already has valuable functionality.
Implemented
- Bidirectional conversion to and from part 10 binary DICOM and DICOM standard JSON encoding (as in DICOMweb)
- Bidirectional convertion to and from DICOM standard JSON and a programmer-friendly high-level version (high-level form is called the "naturalized" form in the code).
In development
- Creation of (correct) enhanced multiframe DICOM objects from legacy image objects
- Creation of (correct) derived DICOM objects such as Segmentations and Structured Reports
TODO
- Create a test suite of input and output DICOM objects
- Test interoperability with other DICOM implementations
- Add documentation
History
- 2014
- DCMTK cross compiled to javascript at CTK Hackfest. While this was useful and powerful, it was heavyweight for typical web usage.
- 2016
- 2017
- 2018-2021
- Work continues to develop SR and SEG support to OHIFViewer allow interoperability with DICOM4QI
Support
The developers gratefully acknowledge their research support: