* fix: Use newer ONNX version and load without errors * Only changes to enable SAM again * fix(seg hydration): auto-hydrate RT struct on second load with disableConfirmationPrompts (#5875) * chore(version): Update package versions to 3.13.0-beta.34 [skip ci] * fix(Threshold tool): Threshold tool no longer becomes deselected when the Dynamic option is selected (#5884) fix(Threshold tool): Added 'ThresholdCircularBrushDynamic' to the toolNames array so the evaluator correctly recognizes it as an active state for the Threshold button when Dynamic mode is selected. * chore(version): Update package versions to 3.13.0-beta.35 [skip ci] * fix: Modalities in study list should select starts with as primary (#5886) * chore(version): Update package versions to 3.13.0-beta.36 [skip ci] * fix(security): Bump tar version to address CVE-2026-31802. (#5893) * chore(version): Update package versions to 3.13.0-beta.37 [skip ci] * fix(segmentation): Display "No description S:{series number} {modality}" for segmentations with no label. (#5874) * Bump CS3D dependency to get the fallbackLabel field additions. * chore(version): Update package versions to 3.13.0-beta.38 [skip ci] * fix(window level): The window level value is not displayed by default on all the viewports when selecting common/custom layout and TMTV. (#5865) * fix(window level): Set up listener for viewport availability such that the initial window level can be read and displayed. * PR feedback. * PR feedback. --------- Co-authored-by: Bill Wallace <wayfarer3130@gmail.com> * chore(version): Update package versions to 3.13.0-beta.39 [skip ci] * fix(security): Bump flattened version to address CVE-2026-32141. (#5897) * chore(version): Update package versions to 3.13.0-beta.40 [skip ci] * fix(sr-hydration): enable hydration and arrow navigation for 3D SR measurements (#5887) Joe is away, so approving based on the code having the requested change, and otherwise looking good/passing tests. * fix(sr-hydration): enable hydration and arrows navigation for 3D SR measurements * test: add automated test for SR measurement navigation with arrows after hydration * add cross-study warning in the 3D branch * test: address reviewer feedback for the test * fix: support 3D and 2D annotations for SR hydration * test: improve navigation to first image --------- Co-authored-by: Bill Wallace <wayfarer3130@gmail.com> * chore(version): Update package versions to 3.13.0-beta.41 [skip ci] * feat: Add combined build (#5895) * Add combined build * Link script location update * Security and validation fixes * Allow specifying target path in PR description * fix: Version match * Fix build detection issue * fix: Playwright deploy * Separate out the branch merge guard * Update docs and link info * test: Update the layout change to wait for network idle * Move audit late so the rest of the build can be worked on * Add text with network check to ensure we see this change is updated * Attempt to fix the mpr loading on ohif-downstream * PR review comments * Update docs * Update to CS3D 4.20.0 * PR comments * Add log on ohif-integration builds * Update build test * Removed unused space to kickoff build * chore(version): Update package versions to 3.13.0-beta.42 [skip ci] * fix(SR): Added support for spline and live wire SR items. (#5870) * fix(SR): Added support for spline and live wire SR items. * Apply suggestion from @greptile-apps[bot] Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> * Add a script to checkout a worktree for test builds * fix: Allow download for testing sr validator * Remove script that wasn't intended to be included * Bump CS3D version. * PR comments - simplify code and use single codepath for download * Allow both download and save buttons for SEG and RTSTRUCT --------- Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> Co-authored-by: Bill Wallace <wayfarer3130@gmail.com> * chore(version): Update package versions to 3.13.0-beta.43 [skip ci] * chore(tests): contour segment interactions e2e tests - rename and togglevisibility (#5891) * chore(version): Update package versions to 3.13.0-beta.44 [skip ci] * chore(refactor): use public appConfig getter instead of private _appConfig field (#5923) * chore(version): Update package versions to 3.13.0-beta.45 [skip ci] * refactor(tests): update viewport page object usage to async and update all effected tests (#5927) * chore(version): Update package versions to 3.13.0-beta.46 [skip ci] * fix: prevent black viewport when navigating series with client-created segmentation (#5919) * chore(version): Update package versions to 3.13.0-beta.47 [skip ci] * fix(measurement): Restore viewport interactivity when deleting in-progress Spline or Livewire measurement (#5905) * chore(version): Update package versions to 3.13.0-beta.48 [skip ci] * fix(segmentation): restrict overlay segmentation menu to same frame of reference as viewport background display set (#5900) - Add FrameOfReferenceUID to SEG and RTSTRUCT displaySet in SOP Class Handlers so the FOR is available for filtering - Sync optimisticOverlayDisplaySets when background display set changes so the overlay menu reflects the correct state after a background switch - Add FOR matching guard to the hydrate segmentation synchronizer to prevent the hydration synchronizer from blindly mirroring segmentations from a source viewport to a target viewport if their primary Frames of Reference do not align. - fix segmentation overlay order reversal on viewport re-render * chore(version): Update package versions to 3.13.0-beta.49 [skip ci] * fix(security): update dependencies to fix security vulnerabilities (#5936) * chore(version): Update package versions to 3.13.0-beta.50 [skip ci] * fix(security): Update yarn.lock that was missed in PR #5936. (#5940) * chore(version): Update package versions to 3.13.0-beta.51 [skip ci] * feat(component): Adds SmartScrollbar to ui-next - OHIF-2558 (#5924) Co-authored-by: Joe Boccanfuso <joe.boccanfuso@radicalimaging.com> * fix(defaultRouteInit): pass sorted display sets to hanging protocol for deterministic viewport order (#5933) fix: pass sorted display sets to hanging protocol for deterministic viewport order The `applyHangingProtocol` function already sorts display sets by modality priority and series number into `sortedDisplaySets`, but the unsorted `displaySets` array was being passed to `hangingProtocolService.run()`. This caused non-deterministic viewport ordering across page loads because `displaySetService.getActiveDisplaySets()` returns display sets in creation order, which depends on asynchronous network responses. Made-with: Cursor * chore(version): Update package versions to 3.13.0-beta.52 [skip ci] * revert: rename DisplaySet.frameOfReferenceUID back to FrameOfReferenceUID (#5943) * chore(version): Update package versions to 3.13.0-beta.53 [skip ci] * fix(cornerstone): read FrameOfReferenceUID from display set in viewport service (#5950) * chore(version): Update package versions to 3.13.0-beta.54 [skip ci] * fix: ignore auth in git (#5955) * chore(version): Update package versions to 3.13.0-beta.55 [skip ci] * ONNX latest version * chore(version): Update package versions to 3.13.0-beta.56 [skip ci] * bun lock * fix high sev mathjs issue * Revert onnx changes * Update to recent CS3D version * Undo unneeded change * Add null check * Undo unneeded change --------- Co-authored-by: Ghadeer Albattarni <165973963+GhadeerAlbattarni@users.noreply.github.com> Co-authored-by: ohif-bot <danny.ri.brown+ohif-bot@gmail.com> Co-authored-by: Joe Boccanfuso <109477394+jbocce@users.noreply.github.com> Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> Co-authored-by: diattamo <mmddiatta@gmail.com> Co-authored-by: Pedro Köhler <pedrokohlerbh@gmail.com> Co-authored-by: Dan Rukas <dan.rukas@gmail.com> Co-authored-by: Joe Boccanfuso <joe.boccanfuso@radicalimaging.com> Co-authored-by: Alireza <ar.sedghi@gmail.com> |
||
|---|---|---|
| .circleci | ||
| .docker | ||
| .github | ||
| .netlify | ||
| .scripts | ||
| .vscode | ||
| .webpack | ||
| addOns | ||
| extensions | ||
| modes | ||
| platform | ||
| testdata@bd743ed76b | ||
| tests | ||
| .browserslistrc | ||
| .codespellrc | ||
| .dockerignore | ||
| .eslintignore | ||
| .eslintrc.json | ||
| .gitattributes | ||
| .gitignore | ||
| .gitmodules | ||
| .node-version | ||
| .nycrc.json | ||
| .prettierignore | ||
| .prettierrc | ||
| aliases.config.js | ||
| babel.config.js | ||
| bun.lock | ||
| bunfig.toml | ||
| bunfig.update-lockfile.toml | ||
| CHANGELOG.md | ||
| CODE_OF_CONDUCT.md | ||
| commit.txt | ||
| CONTRIBUTING.md | ||
| DATACITATION.md | ||
| Dockerfile | ||
| eslintAliasesResolver.js | ||
| jest.config.base.js | ||
| jest.config.js | ||
| lerna.json | ||
| LICENSE | ||
| netlify-lerna-cache.sh | ||
| netlify-lerna-restore.sh | ||
| nx.json | ||
| package.json | ||
| playwright.config.ts | ||
| postcss.config.js | ||
| preinstall.js | ||
| publish-package.mjs | ||
| publish-version.mjs | ||
| README.md | ||
| rsbuild.config.ts | ||
| runtime.txt | ||
| tsconfig.json | ||
| version.json | ||
| version.mjs | ||
| version.txt | ||
| yarn.lock | ||
OHIF Medical Imaging Viewer
The OHIF Viewer is a zero-footprint medical image viewer provided by the Open Health Imaging Foundation (OHIF). It is a configurable and extensible progressive web application with out-of-the-box support for image archives which support DICOMweb.
![]() |
Measurement Tracking | Demo |
![]() |
Labelmap Segmentations | Demo |
![]() |
Fusion and Custom Hanging protocols | Demo |
![]() |
Volume Rendering | Demo |
![]() |
Demo | |
![]() |
RT STRUCT | Demo |
![]() |
4D | Demo |
![]() |
Video | Demo |
![]() |
Slide Microscopy | Demo |
![]() |
ECG Waveform | Demo |
About
The OHIF Viewer can retrieve and load images from most sources and formats, render sets in 2D, 3D, and reconstructed representations; allows for the manipulation, annotation, and serialization of observations; supports internationalization, OpenID Connect, offline use, hotkeys, and many more features.
Almost everything offers some degree of customization and configuration. If it doesn't support something you need, we accept pull requests and have an ever improving Extension System.
Why Choose Us
Community & Experience
The OHIF Viewer is a collaborative effort that has served as the basis for many active, production, and FDA Cleared medical imaging viewers. It benefits from our extensive community's collective experience, and from the sponsored contributions of individuals, research groups, and commercial organizations.
Built to Adapt
After more than 8-years of integrating with many companies and organizations, The OHIF Viewer has been rebuilt from the ground up to better address the varying workflow and configuration needs of its many users. All of the Viewer's core features are built using its own extension system. The same extensibility that allows us to offer:
- 2D and 3D medical image viewing
- Multiplanar Reconstruction (MPR)
- Maximum Intensity Project (MIP)
- Whole slide microscopy viewing
- PDF and Dicom Structured Report rendering
- Segmentation rendering as labelmaps and contours
- User Access Control (UAC)
- Context specific toolbar and side panel content
- and many others
Can be leveraged by you to customize the viewer for your workflow, and to add any new functionality you may need (and wish to maintain privately without forking).
Support
For commercial support, academic collaborations, and answers to common questions; please use Get Support to contact us.
Developing
Branches
master branch - The latest dev (beta) release
master- The latest dev release
This is typically where the latest development happens. Code that is in the master branch has passed code reviews and automated tests, but it may not be deemed ready for production. This branch usually contains the most recent changes and features being worked on by the development team. It's often the starting point for creating feature branches (where new features are developed) and hotfix branches (for urgent fixes).
Each package is tagged with beta version numbers, and published to npm such as @ohif/ui@3.6.0-beta.1
release/* branches - The latest stable releases
Once the master branch code reaches a stable, release-ready state, we conduct a comprehensive code review and QA testing. Upon approval, we create a new release branch from master. These branches represent the latest stable version considered ready for production.
For example, release/3.5 is the branch for version 3.5.0, and release/3.6 is for version 3.6.0. After each release, we wait a few days to ensure no critical bugs. If any are found, we fix them in the release branch and create a new release with a minor version bump, e.g., 3.5.1 in the release/3.5 branch.
Each package is tagged with version numbers and published to npm, such as @ohif/ui@3.5.0. Note that master is always ahead of the release branch. We publish docker builds for both beta and stable releases.
Here is a schematic representation of our development workflow:
Requirements
- Yarn 1.20.0+
- Node 18+
- Yarn Workspaces should be enabled on your machine:
yarn config set workspaces-experimental true
Getting Started
- Fork this repository
- Clone your forked repository
git clone https://github.com/YOUR-USERNAME/Viewers.git
- Navigate to the cloned project's directory
- Add this repo as a
remotenamedupstreamgit remote add upstream https://github.com/OHIF/Viewers.git
yarn install --frozen-lockfileto restore dependencies and link projects
:::danger
In general run yarn install with the --frozen-lockfile flag to help avoid
supply chain attacks by enforcing reproducible dependencies. That is, if the
yarn.lock file is clean and does NOT reference compromised packages, then
no compromised packages should land on your machine by using this flag.
:::
To Develop
From this repository's root directory:
# Enable Yarn Workspaces
yarn config set workspaces-experimental true
# Restore dependencies
yarn install --frozen-lockfile
Cornerstone3D Integration Testing
OHIF's Playwright end-to-end tests can run against a CS3D branch or a published CS3D version, allowing changes that span both repositories to be validated together before merging.
Setting up an integration build
- Add the
ohif-integrationlabel to your OHIF pull request. - In the PR body, add a line specifying the CS3D ref:
CS3D_REF: feat/my-feature- Version ref (e.g.
4.19+,4.18.2) — the workflow resolves it to an exact published version and swaps the CS3D dependency via npm. - Branch ref (e.g.
main,cornerstonejs:feat/foo) — the workflow clones the branch, builds CS3D from source withbun run build:esm, and symlinks the built packages into OHIF'snode_modules. - For forks, use the
<owner>:<branch>format (e.g.myGithubUser:feat/foo). - If no
CS3D_REFis specified, the default is4.19+.
- Version ref (e.g.
- The workflow can also be triggered manually via workflow_dispatch with a
cs3d_refinput.
What happens in CI
The Playwright workflow runs two jobs:
| Job | Purpose |
|---|---|
| Playwright Tests | Builds OHIF (with CS3D linked or version-swapped), runs the full Playwright suite, uploads test results and coverage, and deploys a Netlify preview when ohif-integration is active. |
| CS3D Branch Merge Guard | A lightweight check that fails when the ohif-integration label is present and CS3D_REF points to a branch (not a version). This prevents merging while still letting the Playwright tests show green so you can see whether the code actually works. |
Testing changes that span both repos
If a feature requires changes in both Cornerstone3D and OHIF:
- Create your feature branch in CS3D and push it.
- Create a matching branch in OHIF.
- Add the
ohif-integrationlabel to the OHIF pull request. - In the PR body, add:
CS3D_REF: <your-cs3d-branch>. - Playwright tests will build CS3D from source, link it, and run the full suite. The merge guard will block merge until you switch to a published version — but you can see the test results and the preview deploy while iterating.
- Once the CS3D side is merged and published, update the PR body to reference
the published version (e.g.
CS3D_REF: 4.19+). The tests will run against the registry version and the merge guard will pass.
Preview deploys
When ohif-integration is active, the Playwright workflow also builds the OHIF
viewer and deploys it to Netlify as a preview. This gives you a live URL to
manually test the combined CS3D + OHIF changes without running anything locally.
For details on linking CS3D locally for development, see the Cornerstone3D README.
Commands
These commands are available from the root directory. Each project directory
also supports a number of commands that can be found in their respective
README.md and package.json files.
| Yarn Commands | Description |
|---|---|
| Develop | |
dev |
Default development experience for Viewer |
dev:fast |
Our experimental fast dev mode that uses rsbuild instead of webpack |
test:unit |
Jest multi-project test runner; overall coverage |
| Deploy | |
build* |
Builds production output for our PWA Viewer |
* - For more information on different builds, check out our Deploy Docs
Project
The OHIF Medical Image Viewing Platform is maintained as a
monorepo. This means that this repository, instead of containing a
single project, contains many projects. If you explore our project structure,
you'll see the following:
.
├── extensions #
│ ├── _example # Skeleton of example extension
│ ├── default # basic set of useful functionalities (datasources, panels, etc)
│ ├── cornerstone # image rendering and tools w/ Cornerstone3D
│ ├── cornerstone-dicom-sr # DICOM Structured Report rendering and export
│ ├── cornerstone-dicom-sr # DICOM Structured Report rendering and export
│ ├── cornerstone-dicom-seg # DICOM Segmentation rendering and export
│ ├── cornerstone-dicom-rt # DICOM RTSTRUCT rendering
│ ├── cornerstone-microscopy # Whole Slide Microscopy rendering
│ ├── dicom-pdf # PDF rendering
│ ├── dicom-video # DICOM RESTful Services
│ ├── measurement-tracking # Longitudinal measurement tracking
│ ├── tmtv # Total Metabolic Tumor Volume (TMTV) calculation
|
│
├── modes #
│ ├── _example # Skeleton of example mode
│ ├── basic-dev-mode # Basic development mode
│ ├── longitudinal # Longitudinal mode (measurement tracking)
│ ├── tmtv # Total Metabolic Tumor Volume (TMTV) calculation mode
│ └── microscopy # Whole Slide Microscopy mode
│
├── platform #
│ ├── core # Business Logic
│ ├── i18n # Internationalization Support
│ ├── ui # React component library
│ ├── docs # Documentation
│ └── viewer # Connects platform and extension projects
│
├── ... # misc. shared configuration
├── lerna.json # MonoRepo (Lerna) settings
├── package.json # Shared devDependencies and commands
└── README.md # This file
Acknowledgments
To acknowledge the OHIF Viewer in an academic publication, please cite
Open Health Imaging Foundation Viewer: An Extensible Open-Source Framework for Building Web-Based Imaging Applications to Support Cancer Research
Erik Ziegler, Trinity Urban, Danny Brown, James Petts, Steve D. Pieper, Rob Lewis, Chris Hafey, and Gordon J. Harris
JCO Clinical Cancer Informatics, no. 4 (2020), 336-345, DOI: 10.1200/CCI.19.00131
Open-Access on Pubmed Central: https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7259879/
or, for v1, please cite:
LesionTracker: Extensible Open-Source Zero-Footprint Web Viewer for Cancer Imaging Research and Clinical Trials
Trinity Urban, Erik Ziegler, Rob Lewis, Chris Hafey, Cheryl Sadow, Annick D. Van den Abbeele and Gordon J. Harris
Cancer Research, November 1 2017 (77) (21) e119-e122 DOI: 10.1158/0008-5472.CAN-17-0334
Note: If you use or find this repository helpful, please take the time to star this repository on GitHub. This is an easy way for us to assess adoption and it can help us obtain future funding for the project.
This work is supported primarily by the National Institutes of Health, National Cancer Institute, Informatics Technology for Cancer Research (ITCR) program, under a grant to Dr. Gordon Harris at Massachusetts General Hospital (U24 CA199460).
NCI Imaging Data Commons (IDC) project supported the development of new features and bug fixes marked with "IDC:priority", "IDC:candidate" or "IDC:collaboration". NCI Imaging Data Commons is supported by contract number 19X037Q from Leidos Biomedical Research under Task Order HHSN26100071 from NCI. IDC Viewer is a customized version of the OHIF Viewer.
This project is tested with BrowserStack. Thank you for supporting open-source!
License
MIT © OHIF










