3.13 to 3.14 Migration Guide
This guide covers changes when upgrading from OHIF version 3.13 to version 3.14.
-
Display set storage — display sets now live in the
@cornerstonejs/metadatatyped metadata cache.DisplaySetService.getDisplaySetCache()is deprecated and returns a read-only snapshot. -
React 19 — the monorepo moves to React 19.2.7.
@ohif/ui-nextnow declares react/react-dom aspeerDependencies, so consuming applications must supply React 19, and extensions and modes require it too. -
SmartScrollbar —
SmartScrollbarFillandSmartScrollbarEndpointsnow require themarkedarray to change identity when its contents change. Theversionprop is deprecated and no longer invalidates. -
WorkList —
LegacyWorkListand theworkList.variantcustomization still work in 3.14 and are deprecated. A future release removes both; migrate to theworkList.*customizations on the ui-nextWorkList. -
DataTable / TanStack Table v9 —
@ohif/ui-nextupgrades@tanstack/react-tableto v9. Column definitions need theDataTableFeaturesgeneric and thesortFnrename; programmatic visibility toggles should go throughuseToggleColumnVisibility. -
useSegmentationExpanded — the hook returns
undefinedoutside aSegmentationExpandedProviderinstead of throwing, and no longer takes a component-name argument. Callers that wrapped it intry/catchshould check forundefined; callers that require the provider should assert for themselves. -
Viewport element hooks —
useViewportRefanduseViewportRefsare replaced byuseViewportElementfor readers anduseViewportElementRegistrationfor the viewport that owns the element, andViewportRefsProvideris renamedViewportElementsProvider. The element is now a subscribed value rather than a snapshot read during render. -
Save/report dialog — the dialog for storing measurements, segmentations and contours replaces its series drop down with an explicit choice of three destinations: Save to current, Save as new and Replace existing. The series number of a new series is editable, and the series descriptions used before are remembered per type of item and offered as completions.
createReportDialogPrompttakesdefaultSeriesDescription,itemTypeandrememberedDescriptionCount, and returns aseriesNumber. A stored instance is now identified like a loaded one, so the object just saved becomes the predecessor of the next save of the same data. -
Display set date/time ordering — derived display sets are ordered by the creation date/time of the instance they show rather than by their series date/time, comparators registered with
addSameSeriesComparenow actually run, instances tie-break by creation date/time before the SOP instance UID, and saved reports and segmentations are stamped with a creation date/time and an instance number. -
useCustomization —
@ohif/coreadds auseCustomizationhook. A component that callscustomizationService.getCustomizationduring render can now freeze at a stale value, because the React Compiler caches the call on the service reference, which never changes. Move such reads to the hook. Event handlers and non-React code keep calling the service directly. -
InputNumber —
InputNumber.HorizontalControlsandInputNumber.VerticalControlsnow sharemin,max,stepanddisabledthrough a nested provider rather than by writing onto the root context object. That fixes constraints being discarded on every keystroke, but it means only descendants of the controls receive them; anInputNumber.Inputrendered as a sibling silently falls back tomin=0, max=100, step=1. -
createContext helper — the internal
ui-next/lib/createContexthelper is removed. It was never exported from@ohif/ui-next; if you imported it from source, use React's owncreateContextanduseContext— the compiler now provides the memoization it was hand-rolling. -
Hanging protocol comparisons — the
greaterThanandlessThanconstraints are now strict. Before, they tested>=and<=. The newgreaterThanOrEqualandlessThanOrEqualconstraints keep the old meaning.equalsanddoesNotEqualcompare the whole value of a multi-valued attribute, andincludesanddoesNotIncludeaccept a single test value. A numeric string and a boolean can now equal a number. The number constraints read a numeric string or the first element of an array, and so doesrange. The text constraints read a number value as text, and hold or fail on a missing value instead of an error.notNullreads''and[]as no value. An operand0,falseor''now runs its constraint; before, the constraint always passed. Some matches of the OHIF protocols change (@ohif/hpMammowith noPatientOrientation, a textnumImageFrames, and theOneOrMoreSeriesweight of@ohif/mnGrid,@ohif/mnGrid8and@ohif/hpScale); the page lists them. -
Multi-resolution volumes and Cornerstone3D 5.17 — every volume loads with
coarseInterleavedRetrieveStages, and themprprotocol no longer setsimageLoadStrategy: 'nth'. The data sourcevolumeRetrieveOptionsand a copy ofmprwithnthrestore the 3.13 load. The Cornerstone3D "Transient Low Fidelity" label shows while a volume loads, until the OHIF indicator (#6413) replaces it. Cornerstone3D 5.17 makesvolume.vtkOpenGLTexturea getter that can returnundefined, and removesRenderingCapabilities.webgl2; usevolume.modified()in place of the per-frame texture updates. The developer configs select themediumGPU settings preset. -
Display set split rules — the split rules of
@cornerstonejs/metadataare an opt-in customization, off by default. With the rules on, a SOP class handler of another extension runs only when it declareshandlerNamesandextendDisplaySet, and a rule names it. Otherwise its series shows as an unsupported display set.
Display set storage
In 3.14, DisplaySetService always stores its display sets in the
React 19
3.14 upgrades the monorepo to React 19.2.7.
Display set date/time ordering
Derived series - reports, segmentations, structure sets - are ordered by when
WorkList
3.13 shipped the ui-next WorkList at / and kept the previous study list as
SmartScrollbar
In 3.13, SmartScrollbarFill and SmartScrollbarEndpoints accepted a marked array
DataTable / TanStack Table v9
@ohif/ui-next upgrades @tanstack/react-table from v8 to v9. If you consume
useSegmentationExpanded
useSegmentationExpanded used to throw when a component was rendered outside a
Viewport element hooks
The viewport element registry lets a component reach a viewport's DOM element by
Save/report dialog
The dialog shown when storing measurements, segmentations or contours
createContext helper
platform/ui-next/src/lib/createContext.tsx is deleted. It was an internal helper
useCustomization
3.14 adds useCustomization to @ohif/core. If a component of yours reads a
InputNumber
InputNumber.HorizontalControls and InputNumber.VerticalControls accept min,
Hanging protocol comparisons
3.14 gives the hanging protocol constraints the meaning of the display set split rule
Multi-resolution volumes
OHIF 3.14 uses Cornerstone3D 5.17, which adds multi-resolution volume textures. Some changes
Display set split rules
3.14 adds the display set split rules of @cornerstonejs/metadata, as an opt-in