# Slicer 5.4: Summary and Changelog

**URL:** https://discourse.slicer.org/t/slicer-5-4-summary-and-changelog/40136
**Category:** Release Notes
**Created:** [November 11, 2024, 11:23pm UTC](https://discourse.slicer.org/t/slicer-5-4-summary-and-changelog/40136 "2024-11-11T23:23:13Z")
**Posts on this page:** 1
**Showing post:** 2

<div class="post-metadata">

### Author: ![jcfr](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/jcfr/32/17825_2.png) [@jcfr](https://discourse.slicer.org/u/jcfr)
#### Post date: [November 11, 2024, 11:23pm UTC](https://discourse.slicer.org/t/slicer-5-4-summary-and-changelog/40136/2 "2024-11-11T23:23:56Z")

</div>

# Changelog

- [Core](#heading--core)
  - [Rendering & Display](#heading--rendering-display)
  - [Application](#heading--application)
  - [IO](#heading--io)
  - [Extension](#heading--extension)
  - [Scripting](#heading--scripting)
  - [Internationalization/Localization](#heading--internationalization-localization)

- [Improved Modules](#heading--improved-modules)
  - [DICOM](#heading--dicom)
  - [Markups](#heading--markups)
  - [Models](#heading--models)
  - [Sample Data](#heading--sample-data)
  - [Sequences](#heading--sequences)
  - [Segmentation](#heading--segmentation)
  - [Subject Hierarchy](#heading--subject-hierarchy)
  - [SurfaceToolbox](#heading--surfacetoolbox)
  - [Tables](#heading--tables)
  - [Terminologies](#heading--terminologies)
  - [Volume Rendering](#heading--volume-rendering)
  - [WebServer](#heading--webserver)

- [Removed Modules](#heading--removed-modules)
- [Infrastructure](#heading--infrastructure)
  - [Packaging](#heading--packaging)
  - [Testing](#heading--testing)
  - [Continuous Integration (CI)](#heading--continuous-integration-ci)
  - [Build-System](#heading--build-system)
  - [Dependencies](#heading--dependencies)
  - [Documentation](#heading--documentation)

## Core

### Rendering & Display

- Implement multi-monitor layout ([PR-6776](https://github.com/Slicer/Slicer/pull/6776))
- Add option for displaying vertical slice controller ([PR-6712](https://github.com/Slicer/Slicer/pull/6712))
- Enable “Pickable” segment display property to allow disabling point picking ([PR-6984](https://github.com/Slicer/Slicer/pull/6984))
- Introduce fractional addition to Add/Subtract Slice Compositing pipeline ([PR-7002](https://github.com/Slicer/Slicer/pull/7002))
- Add flip and rotate buttons to Reformat module ([PR-7078](https://github.com/Slicer/Slicer/pull/7078))
- Update Slicer Controller with Thick Slab Reconstruction option ([PR-7021](https://github.com/Slicer/Slicer/pull/7021))
- Initialize global pause render state for newly created views ([PR-6947](https://github.com/Slicer/Slicer/pull/6947))
- Display slab reconstruction thickness in slice view corner ([PR-7177](https://github.com/Slicer/Slicer/pull/7177))
- Use column name as plot title when unspecified ([PR-6682](https://github.com/Slicer/Slicer/pull/6682))
- Improve Volumes module display options and fix related issues ([PR-6758](https://github.com/Slicer/Slicer/pull/6758))
- Add “Refocus camera” action to view context menu ([PR-6916](https://github.com/Slicer/Slicer/pull/6916))
- Add alternative shortcut for view pan-zoom-rotate ([PR-6916](https://github.com/Slicer/Slicer/pull/6916))
- Update crosshair cursor position on 3D view mouse move events ([PR-6937](https://github.com/Slicer/Slicer/pull/6937))
- Fix issue allowing more than one rotation slider to be non-zero ([PR-6759](https://github.com/Slicer/Slicer/pull/6759))
- Fix computation of offset direction label in slice view controller ([PR-6781](https://github.com/Slicer/Slicer/pull/6781))
- Fix warning when changing window/level with mouse mode ([PR-6897](https://github.com/Slicer/Slicer/pull/6897))
- Fix inability to change foreground volume window level with mouse mode ([PR-6924](https://github.com/Slicer/Slicer/pull/6924))
- Fix dynamic update of transform visualization ([PR-6956](https://github.com/Slicer/Slicer/pull/6956))
- Fix interaction handle visibility when changing displayed slice ([PR-6992](https://github.com/Slicer/Slicer/pull/6992))
- Fix inability to change foreground W/L with mouse mode ([PR-6996](https://github.com/Slicer/Slicer/pull/6996))
- Fix small shift in slice image in 3D views ([MR-6959](https://github.com/Slicer/Slicer/pull/6959))
- Fix “Restore view layout” action in view context menu ([PR-7097](https://github.com/Slicer/Slicer/pull/7097))
- Fix potential segfault during initialization of `qMRMLSliceWidget` ([PR-7115](https://github.com/Slicer/Slicer/pull/7115))
- Fix color legend visibility on non-standard slice views ([PR-6836](https://github.com/Slicer/Slicer/pull/6836))
- Fix display issues with “Model,” “plane markups,” and “segmentation closed surface” slice intersections ([PR-7102](https://github.com/Slicer/Slicer/pull/7102))

### Application

- Enlarge error report box ([PR-6769](https://github.com/Slicer/Slicer/pull/6769))
- Make ctk ErrorLogWidget dockable ([PR-7059](https://github.com/Slicer/Slicer/pull/7059))
- Avoid superfluous error message ([PR-6952](https://github.com/Slicer/Slicer/pull/6952))
- Enable saving and restoring SliceViewAnnotations display level ([PR-7175](https://github.com/Slicer/Slicer/pull/7175))
- Re-export selected PNGs to fix “libpng warning: iCCP: CRC error” ([PR-6807](https://github.com/Slicer/Slicer/pull/6807))
- Improve rendering of SaveDataDialog checkboxes in Dark Mode ([PR-7098](https://github.com/Slicer/Slicer/pull/7098))
- Enhance Python scripted module detection for drag-and-drop ([MR-6959](https://github.com/Slicer/Slicer/pull/6959))
- Synchronize DataProbe UI initialization and “Restore Defaults” action ([PR-7174](https://github.com/Slicer/Slicer/pull/7174))
- Improve module finder filtering ([PR-6844](https://github.com/Slicer/Slicer/pull/6844))
- Support import type annotation from Slicer during module load ([PR-6847](https://github.com/Slicer/Slicer/pull/6847))
- Skip camera undo when undo is not enabled on `vtkMRMLCameraNode` ([PR-7018](https://github.com/Slicer/Slicer/pull/7018))
- Fix splash screen loading text visibility ([PR-7023](https://github.com/Slicer/Slicer/pull/7023))
- Fix crash when adding `%s` specifier to color legend label ([PR-6795](https://github.com/Slicer/Slicer/pull/6795))
- Fix home shortcut behavior when Python console visible ([PR-7167](https://github.com/Slicer/Slicer/pull/7167))
- Fix scene compatibility error message ([PR-6755](https://github.com/Slicer/Slicer/pull/6755))
- Fix non-functional exit cross on “Save before exit” popup ([PR-6906](https://github.com/Slicer/Slicer/pull/6906))
- Fix launching `.py` files in Slicer with `-I` argument ([MR-6959](https://github.com/Slicer/Slicer/pull/6959))

### IO

- Enable process output retrieval during CLI execution ([PR-6721](https://github.com/Slicer/Slicer/pull/6721))
- Support shallow and deep copy for scalar volume display node ([PR-6857](https://github.com/Slicer/Slicer/pull/6857))
- Simplify loading of `.vtk` image files ([PR-7117](https://github.com/Slicer/Slicer/pull/7117))
- Update `vtkMRMLParser` to support custom types ending with “Node” ([PR-6715](https://github.com/Slicer/Slicer/pull/6715))
- Check file extension readers before inspecting content ([PR-7139](https://github.com/Slicer/Slicer/pull/7139))
- Update MultiVolumeImporter to load as volume sequence by default ([PR-7141](https://github.com/Slicer/Slicer/pull/7141))
- Load tables with default column type ([PR-6775](https://github.com/Slicer/Slicer/pull/6775))
- Generate segment colors for raw NRRD files via storage node ([MR-6959](https://github.com/Slicer/Slicer/pull/6959))
- Choose file reader/writer based on confidence level ([PR-6998](https://github.com/Slicer/Slicer/pull/6998))
- Update `vtkMRMLWriteXMLMatrix4x4Macro` to separate values with a single space ([PR-7039](https://github.com/Slicer/Slicer/pull/7039))
- Fix error message in `vtkMRMLColorTableNode` ([PR-6729](https://github.com/Slicer/Slicer/pull/6729))
- Fix reading of vector fields from NIFTI files ([PR-6791](https://github.com/Slicer/Slicer/pull/6791))
- Fix CLI module issue with reading output from initially empty nodes ([MR-6959](https://github.com/Slicer/Slicer/pull/6959))

### Extension

- Add API for downloading and installing extensions ([PR-7145](https://github.com/Slicer/Slicer/pull/7145))
- Update ExtensionsManager install API to check for updates ([PR-7151](https://github.com/Slicer/Slicer/pull/7151))
- Update server-based extension installation to return a boolean status ([PR-7148](https://github.com/Slicer/Slicer/pull/7148))
- Fix blank Extensions Manager on Linux due to Chromium sandboxing ([PR-6744](https://github.com/Slicer/Slicer/pull/6744))
- Fix `IsPluginInstalled()` behavior when the plugin is installed in the application build tree ([PR-6970](https://github.com/Slicer/Slicer/pull/6970))
- Fix color setting in `qSlicerExtensionsLocalWidget` status messages ([PR-7147](https://github.com/Slicer/Slicer/pull/7147))

### Scripting

- Add [Parameter Node Wrapper](https://slicer.readthedocs.io/en/latest/developer_guide/parameter_nodes/index.html) for `vtkMRMLScriptedModuleNode` to provide typed member access ([PR-6684](https://github.com/Slicer/Slicer/pull/6684), [PR-6725](https://github.com/Slicer/Slicer/pull/6725), [PR-6727](https://github.com/Slicer/Slicer/pull/6727), [PR-6740](https://github.com/Slicer/Slicer/pull/6740), [PR-6757](https://github.com/Slicer/Slicer/pull/6757), [PR-6772](https://github.com/Slicer/Slicer/pull/6772), [PR-6771](https://github.com/Slicer/Slicer/pull/6771), [PR-6783](https://github.com/Slicer/Slicer/pull/6783), [PR-6800](https://github.com/Slicer/Slicer/pull/6800), [PR-6808](https://github.com/Slicer/Slicer/pull/6808), [PR-6829](https://github.com/Slicer/Slicer/pull/6829), [PR-6843](https://github.com/Slicer/Slicer/pull/6843), [PR-6848](https://github.com/Slicer/Slicer/pull/6848), [PR-6862](https://github.com/Slicer/Slicer/pull/6862), [PR-6865](https://github.com/Slicer/Slicer/pull/6865), [PR-6871](https://github.com/Slicer/Slicer/pull/6871), [PR-6891](https://github.com/Slicer/Slicer/pull/6891))
- Enable use of `pathlib.Path` objects for paths in `slicer.util` ([PR-6743](https://github.com/Slicer/Slicer/pull/6743))
- Add array size hints for improved Python wrapping ([PR-6765](https://github.com/Slicer/Slicer/pull/6765))
- Implement ParameterNodeWrapper default by assignment ([PR-6871](https://github.com/Slicer/Slicer/pull/6871))
- Add module paths to the application via drag-and-drop ([PR-6872](https://github.com/Slicer/Slicer/pull/6872))
- Allow setting a custom editor for `.py` files ([PR-7074](https://github.com/Slicer/Slicer/pull/7074))
- Add utility function to retrieve ROI box as `vtkPolyData` ([PR-6958](https://github.com/Slicer/Slicer/pull/6958))
- Add “Test” button to ScriptedLoadableModule UI ([PR-7038](https://github.com/Slicer/Slicer/pull/7038))
- Add convenience methods for locating markup control points ([MR-6959](https://github.com/Slicer/Slicer/pull/6959))
- Update `slicer.util.updateVolumeFromArray` to support 1D NumPy arrays ([PR-7142](https://github.com/Slicer/Slicer/pull/7142))
- Update DWMRIMultishellIOTests to remove nose function dependency ([PR-7052](https://github.com/Slicer/Slicer/pull/7052))
- Improve error reporting in ScriptedFileReaderWriterTest ([PR-7144](https://github.com/Slicer/Slicer/pull/7144))
- Register ParameterNodeWrapper plugins within corresponding modules ([PR-6855](https://github.com/Slicer/Slicer/pull/6855))
- Apply miscellaneous scripted module fixes ([PR-6993](https://github.com/Slicer/Slicer/pull/6993))
- Add Python utility functions for ITK image ↔ volume node conversion ([PR-7094](https://github.com/Slicer/Slicer/pull/7094))
- Fix observer warning in scripted module template ([PR-6720](https://github.com/Slicer/Slicer/pull/6720))
- Fix lost `setValue` function with nested parameter packs ([PR-6851](https://github.com/Slicer/Slicer/pull/6851))
- Fix Python wrapping for methods using enum arguments ([PR-6935](https://github.com/Slicer/Slicer/pull/6935))

### Internationalization/Localization

- Bundle Qt language tools ([PR-6798](https://github.com/Slicer/Slicer/pull/6798))
- Ensure Qt language tools are bundled on macOS ([PR-6904](https://github.com/Slicer/Slicer/pull/6904))
- Add translation function for Python scripted modules ([PR-6917](https://github.com/Slicer/Slicer/pull/6917))
- Update CTK to the latest version for improved translations ([PR-6926](https://github.com/Slicer/Slicer/pull/6926))
- Enable `update_translations.py` to create new translation components ([PR-7107](https://github.com/Slicer/Slicer/pull/7107))
- Mark additional text as translatable ([PR-6921](https://github.com/Slicer/Slicer/pull/6921))
- Position literals after string format specifiers for translation ([PR-6777](https://github.com/Slicer/Slicer/pull/6777))
- Make loadable module titles translatable ([PR-6828](https://github.com/Slicer/Slicer/pull/6828))
- Fix application’s `applicationLocale` object ([PR-7035](https://github.com/Slicer/Slicer/pull/7035))
- Fix welcome module translation ([PR-6810](https://github.com/Slicer/Slicer/pull/6810))
- Apply minor fixes to improve translations, remove warnings, and enhance Python wrapping ([PR-6820](https://github.com/Slicer/Slicer/pull/6820))
- Mark translatable strings in various core components (Base/QTGUI, Base/QTCore, Base/QTApp, Base/QTCli) ([PR-6704](https://github.com/Slicer/Slicer/pull/6704), [PR-6768](https://github.com/Slicer/Slicer/pull/6768), [PR-6784](https://github.com/Slicer/Slicer/pull/6784), [PR-6793](https://github.com/Slicer/Slicer/pull/6793), [PR-6821](https://github.com/Slicer/Slicer/pull/6821))
- Make all text in built-in CLI modules translatable ([PR-6681](https://github.com/Slicer/Slicer/pull/6681))
- Mark translatable strings in DataProbe module ([PR-6960](https://github.com/Slicer/Slicer/pull/6960))
- Mark translatable strings in Sequences module ([PR-6977](https://github.com/Slicer/Slicer/pull/6977))
- Mark translatable strings in Markups module ([PR-6962](https://github.com/Slicer/Slicer/pull/6962))
- Mark translatable strings in Segmentations module ([PR-6948](https://github.com/Slicer/Slicer/pull/6948))
- Mark translatable strings in SegmentStatistics module ([PR-6942](https://github.com/Slicer/Slicer/pull/6942))
- Mark translatable strings in Volume Rendering module ([MR-6959](https://github.com/Slicer/Slicer/pull/6959))
- Mark translatable strings in Volumes module ([PR-6655](https://github.com/Slicer/Slicer/pull/6655))

## Improved Modules

### DICOM

- Add DICOM patcher rules for character set and exposure fixes ([PR-6940](https://github.com/Slicer/Slicer/pull/6940))
- Default to loading DICOM files using the DICOM module ([PR-7077](https://github.com/Slicer/Slicer/pull/7077))
- Support special characters when saving scenes to DICOM SC ([PR-6963](https://github.com/Slicer/Slicer/pull/6963))
- Add parsed parameters in `DICOMRequestHandler` ([PR-6713](https://github.com/Slicer/Slicer/pull/6713))
- Save DICOM instance UID in the image sequence plugin ([PR-7096](https://github.com/Slicer/Slicer/pull/7096))
- Allow multiple DICOM plugins with the same confidence level for export ([PR-6863](https://github.com/Slicer/Slicer/pull/6863))
- Fix regression in DICOM patcher ([PR-6950](https://github.com/Slicer/Slicer/pull/6950))
- Fix user warning triggered by the default progress callback in `send()` ([PR-6822](https://github.com/Slicer/Slicer/pull/6822))
- Support color DICOM data series ([PR-7089](https://github.com/Slicer/Slicer/pull/7089))
- Remove redundant “Warning:” prefix in DICOM popup messages ([PR-7164](https://github.com/Slicer/Slicer/pull/7164))
- Import additional series information from DICOM images ([PR-6877](https://github.com/Slicer/Slicer/pull/6877))

### Markups

- Allow custom markup classes to store additional properties in the markups file as JSON ([PR-6756](https://github.com/Slicer/Slicer/pull/6756))
- Add support for curve torsion measurement ([PR-6774](https://github.com/Slicer/Slicer/pull/6774))
- Allow line/angle markups to remain visible even when control points are hidden ([PR-6842](https://github.com/Slicer/Slicer/pull/6842))
- Support detaching the markups toolbar from the mouse mode toolbar ([PR-6675](https://github.com/Slicer/Slicer/pull/6675))
- Fix reading of default markup active color ([PR-6736](https://github.com/Slicer/Slicer/pull/6736))
- Fix markups curve measurements test ([PR-6816](https://github.com/Slicer/Slicer/pull/6816))
- Add toggle action for markups in the Markups Place button menu ([PR-6856](https://github.com/Slicer/Slicer/pull/6856))
- Improve example for exporting markup measurements ([PR-6746](https://github.com/Slicer/Slicer/pull/6746))
- Increase robustness for loading legacy annotation fiducials, lines, and ROI nodes ([PR-6814](https://github.com/Slicer/Slicer/pull/6814))
- Fix copying of curves using `CopyContent` ([PR-6818](https://github.com/Slicer/Slicer/pull/6818))
- Fix static control point measurements for closed curves ([PR-6887](https://github.com/Slicer/Slicer/pull/6887))
- Fix potential NaN in torsion calculations for markup curves ([PR-7122](https://github.com/Slicer/Slicer/pull/7122))
- Enable translation/rotation of unlocked points in a list ([PR-7025](https://github.com/Slicer/Slicer/pull/7025))

### Models

- Fix Models module name display issue ([PR-6846](https://github.com/Slicer/Slicer/pull/6846))

### Sample Data

- Fix sample dataset labels not appearing on large desktop monitors ([PR-6731](https://github.com/Slicer/Slicer/pull/6731))

### Sequences

- Restore synchronized visibility for sequence table headers ([PR-6951](https://github.com/Slicer/Slicer/pull/6951))
- Fix warning in sequence browser seek widget ([MR-6959](https://github.com/Slicer/Slicer/pull/6959))
- Improve sequence editing functionality and fix related issues ([PR-6930](https://github.com/Slicer/Slicer/pull/6930))
- Fix consistency check in `vtkMRMLVolumeSequenceStorageNode` ([PR-7069](https://github.com/Slicer/Slicer/pull/7069))

### Segmentation

- Add soft edge option to Mask Volume Segment Editor effect ([PR-6849](https://github.com/Slicer/Slicer/pull/6849))
- Add `vtkITKGrowCut` filter ([PR-6946](https://github.com/Slicer/Slicer/pull/6946))
- Use inclusive language for segmentation source representation ([PR-6901](https://github.com/Slicer/Slicer/pull/6901))
- Create non-existing segments when importing a label map to segmentation node ([PR-6835](https://github.com/Slicer/Slicer/pull/6835))
- Set segment “Pickable” display property to true if not specified ([PR-7000](https://github.com/Slicer/Slicer/pull/7000))
- Fix behavior after invisible segment confirmation popup ([PR-7084](https://github.com/Slicer/Slicer/pull/7084))

### Subject Hierarchy

- Add option in Subject Hierarchy to set segment opacity ([PR-6932](https://github.com/Slicer/Slicer/pull/6932))
- Add menu actions to hide or show selected items in the subject tree ([PR-7028](https://github.com/Slicer/Slicer/pull/7028))

### SurfaceToolbox

- Fix Dynamic Modeler layout in SurfaceToolbox module ([PR-6938](https://github.com/Slicer/Slicer/pull/6938))
- Enable uniform remeshing in SurfaceToolbox for triangle strips ([PR-6974](https://github.com/Slicer/Slicer/pull/6974))

### Tables

- Fix initialization of non-string table cells to prevent random values ([PR-6850](https://github.com/Slicer/Slicer/pull/6850))
- Preserve column order when reading tables from files ([PR-6850](https://github.com/Slicer/Slicer/pull/6850))

### Terminologies

- Fix handling of non-modified terminology types ([PR-7009](https://github.com/Slicer/Slicer/pull/7009))

### Volume Rendering

- Fix color synchronization inaccuracies in the Volume Rendering module ([PR-7042](https://github.com/Slicer/Slicer/pull/7042))
- Prevent display of volume rendering if the volume is under a non-linear transform ([PR-7065](https://github.com/Slicer/Slicer/pull/7065))
- Improve volume rendering presets ([PR-6762](https://github.com/Slicer/Slicer/pull/6762))

### WebServer

- Add Web Server examples using Three.js and ModelViewer ([PR-6985](https://github.com/Slicer/Slicer/pull/6985))
- Add VolView link to WebServer examples ([PR-6995](https://github.com/Slicer/Slicer/pull/6995))
- Fix `SlicerRequestHandler` return value when reader does not return any node ID ([PR-6752](https://github.com/Slicer/Slicer/pull/6752))
- Free notifier after request handling ([PR-6824](https://github.com/Slicer/Slicer/pull/6824))

## Removed Modules

- Remove Annotations module ([PR-6524](https://github.com/Slicer/Slicer/pull/6524))
- Move ACPC Transform module to SlicerNeuro extension ([PR-7005](https://github.com/Slicer/Slicer/pull/7005))

## Infrastructure

### Packaging

- Change organization name and domain from NA-MIC to Slicer ([PR-6750](https://github.com/Slicer/Slicer/pull/6750))
- Create a Windows Desktop shortcut during installation ([PR-6761](https://github.com/Slicer/Slicer/pull/6761))
- Replace `lib` with `CMAKE_INSTALL_LIBDIR` for standardized library installation path ([PR-6760](https://github.com/Slicer/Slicer/pull/6760))
- Fix issue with `CPACK_NSIS_INSTALL_SUBDIRECTORY` being overwritten ([PR-7091](https://github.com/Slicer/Slicer/pull/7091))
- Update organization name and domain to `slicer.org` ([PR-6879](https://github.com/Slicer/Slicer/pull/6879))
- Adjust package vendor setting for improved clarity ([PR-6881](https://github.com/Slicer/Slicer/pull/6881))
- Fix Qt tools packaging ([PR-6907](https://github.com/Slicer/Slicer/pull/6907))

### Testing

- Fix `qMRMLLayoutManagerVisibilityTest` ([PR-6797](https://github.com/Slicer/Slicer/pull/6797))
- Fix `qSlicerMouseModeToolBarTest1` ([PR-6802](https://github.com/Slicer/Slicer/pull/6802))
- Update `SlicerOrientationSelectorTestTest` to accommodate widget rename ([PR-7082](https://github.com/Slicer/Slicer/pull/7082))
- Update `test_slicer_util_save` to use a non-deprecated method ([PR-7022](https://github.com/Slicer/Slicer/pull/7022))
- Fix failing `qMRMLLayoutManagerTest2` and `py_SubjectHierarchyGenericSelfTest` tests ([PR-6755](https://github.com/Slicer/Slicer/pull/6755))

### Continuous Integration (CI)

- Fix “Build Slicer” CI workflow for push events ([PR-7064](https://github.com/Slicer/Slicer/pull/7064))
- Skip steps in required jobs instead of skipping entire workflows ([PR-7062](https://github.com/Slicer/Slicer/pull/7062))
- Update `codespell` GitHub workflow to include additional exceptions ([PR-6853](https://github.com/Slicer/Slicer/pull/6853))
- Add Dependabot workflow to update GitHub Actions dependencies ([PR-6888](https://github.com/Slicer/Slicer/pull/6888))
- Pin more GitHub actions to full-length commit SHA for consistency ([PR-6898](https://github.com/Slicer/Slicer/pull/6898))

### Build-System

- Update minimum supported macOS versions ([PR-6695](https://github.com/Slicer/Slicer/pull/6695))
- Remove exposure of `ui_*.h` files from public header files ([PR-6909](https://github.com/Slicer/Slicer/pull/6909))
- Remove redundant includes ([PR-7106](https://github.com/Slicer/Slicer/pull/7106))
- Fix timestamp warnings in external project download and extraction ([PR-7138](https://github.com/Slicer/Slicer/pull/7138))
- Add missing include guards and remove unused header files ([PR-7070](https://github.com/Slicer/Slicer/pull/7070))
- Prefer ITK Python wheels over building ITK Python from source ([PR-7051](https://github.com/Slicer/Slicer/pull/7051))
- Fix various warnings ([PR-6864](https://github.com/Slicer/Slicer/pull/6864), [PR-7048](https://github.com/Slicer/Slicer/pull/7048))
- Apply lint fixes ([PR-7076](https://github.com/Slicer/Slicer/pull/7076))
- Update `vtkMRMLSliceNode` to use MRML helper macros ([PR-7039](https://github.com/Slicer/Slicer/pull/7039))
- Fix build when OpenSSL support is disabled ([PR-6747](https://github.com/Slicer/Slicer/pull/6747))
- Fix `vtkMarkupsAnnotationSceneTest` build with SceneViews module disabled ([PR-6790](https://github.com/Slicer/Slicer/pull/6790))
- Support `slicerFunctionAddPythonQtResources()` for extension modules ([PR-6792](https://github.com/Slicer/Slicer/pull/6792))
- Fix lint and spellchecker errors ([PR-6949](https://github.com/Slicer/Slicer/pull/6949))
- Report error if an unsupported CMake version (3.25.0-3.25.2) is used ([PR-6852](https://github.com/Slicer/Slicer/pull/6852))
- Speed up incremental builds on Linux ([PR-6983](https://github.com/Slicer/Slicer/pull/6983), [PR-7001](https://github.com/Slicer/Slicer/pull/7001))
- Support enforcing specific Slicer revision during extension build ([PR-7040](https://github.com/Slicer/Slicer/pull/7040))
- Fix deprecation warnings by explicitly calling `vtkStdString::c_str()` ([PR-7044](https://github.com/Slicer/Slicer/pull/7044))
- Remove redundant `FindFontConfig` module ([PR-6155](https://github.com/Slicer/Slicer/pull/6155))
- Fix potentially invalid pointer in `vtkSlicerSegmentationsModuleLogic` ([PR-7050](https://github.com/Slicer/Slicer/pull/7050))
- Ensure consistent include guard definitions to match filenames ([PR-7072](https://github.com/Slicer/Slicer/pull/7072))
- Replace deprecated Qt Script usage ([PR-6710](https://github.com/Slicer/Slicer/pull/6710))
- Fix CMake 3.26 warning in `SlicerLinkerAsNeededFlagCheck` project ([PR-7135](https://github.com/Slicer/Slicer/pull/7135))
- Ensure disabling `Slicer_USE_PYTHONQT` also disables `SimpleITK` ([PR-7146](https://github.com/Slicer/Slicer/pull/7146))
- Fix Sphinx build warning in Python FAQ related to “txt” lexer ([PR-7173](https://github.com/Slicer/Slicer/pull/7173))
- Fix Python-extension-manager-ssl-requirements build with `[crypto]` specifier ([PR-7113](https://github.com/Slicer/Slicer/pull/7113))
- Add missing `QSslConfiguration` include ([PR-6884](https://github.com/Slicer/Slicer/pull/6884))
- Validate application name in `slicerMacroBuildApplication` ([PR-6880](https://github.com/Slicer/Slicer/pull/6880))
- Fix `vtkMarkupsAnnotationSceneTest` build with SceneViews module disabled (part 2) ([PR-6834](https://github.com/Slicer/Slicer/pull/6834))
- Fix `-Wunused-parameter` warning in `vtkMRMLSliceLogic::VolumeWindowLevelEditable` ([PR-6900](https://github.com/Slicer/Slicer/pull/6900))
- Fix `-Wrange-loop-construct` warning in Markups module ([PR-6902](https://github.com/Slicer/Slicer/pull/6902))
- Fix Python linting issues ([PR-6706](https://github.com/Slicer/Slicer/pull/6706))
- Remove unused `workaround_recommonmark_issue_191` custom Sphinx extension ([PR-6714](https://github.com/Slicer/Slicer/pull/6714))
- Update markdown files to use LF line-endings ([PR-6734](https://github.com/Slicer/Slicer/pull/6734))
- Fix Python lint errors ([PR-6817](https://github.com/Slicer/Slicer/pull/6817))
- Correct various typos ([PR-7032](https://github.com/Slicer/Slicer/pull/7032), [PR-7054](https://github.com/Slicer/Slicer/pull/7054))
- Ensure “#endif” guards do not include comments ([PR-7071](https://github.com/Slicer/Slicer/pull/7071))
- Fix typos in header comments ([PR-7073](https://github.com/Slicer/Slicer/pull/7073))
- Improve comment clarity ([PR-7075](https://github.com/Slicer/Slicer/pull/7075))
- Remove duplicated include in `qSlicerPersistentCookieJar` ([PR-7158](https://github.com/Slicer/Slicer/pull/7158))
- Remove duplicated include in `vtkMRMLSequenceStorageNode.cxx` ([PR-7162](https://github.com/Slicer/Slicer/pull/7162))

### Dependencies

**vtkAddon:**

- Simplify wrapping of module logic and MRML libraries ([PR-6885](https://github.com/Slicer/Slicer/pull/6885))
- Add support for Python module naming ([PR-6841](https://github.com/Slicer/Slicer/pull/6841))
- Fix potential out-of-bounds issue in `vtkCurveGenerator` ([PR-7043](https://github.com/Slicer/Slicer/pull/7043))
- Remove redundant Markups MRML classes ([PR-6883](https://github.com/Slicer/Slicer/pull/6883))

**VTK:**

- Backport OpenXR and OpenXRRemoting updates ([PR-6780](https://github.com/Slicer/Slicer/pull/6780))
- Backport rendering changes for VR, OpenVR, and OpenXR ([PR-6967](https://github.com/Slicer/Slicer/pull/6967))
- Upgrade VTK from 9.1.20220125 to 9.2.20230607 ([PR-7010](https://github.com/Slicer/Slicer/pull/7010))
- Reintroduce OpenVR API to retrieve last pose ([PR-6754](https://github.com/Slicer/Slicer/pull/6754))
- Ensure valid OpenVR pose retrieval ([PR-6779](https://github.com/Slicer/Slicer/pull/6779))
- Restore complex gesture support in SlicerVirtualReality ([PR-6805](https://github.com/Slicer/Slicer/pull/6805))
- Fix regression blocking older `.vtp` file loading ([PR-7080](https://github.com/Slicer/Slicer/pull/7080))
- Resolve regression in Dynamic Modeler curve cut ([PR-7140](https://github.com/Slicer/Slicer/pull/7140))
- Address Windows build error related to `.pyi` file generation ([PR-6903](https://github.com/Slicer/Slicer/pull/6903))
- Fix packaging error due to missing `.pyi` files ([PR-6905](https://github.com/Slicer/Slicer/pull/6905))
- Support external build for RenderingOpenXRRemoting module ([PR-6933](https://github.com/Slicer/Slicer/pull/6933))
- Workaround external project output error flagging ([PR-7104](https://github.com/Slicer/Slicer/pull/7104))

**CTK:**

- Address warnings and miscellaneous issues ([PR-7045](https://github.com/Slicer/Slicer/pull/7045))
- Fix crash when importing `ctk` or `qt` in standalone Python ([PR-6886](https://github.com/Slicer/Slicer/pull/6886))
- Apply minor fixes in the latest version ([PR-6939](https://github.com/Slicer/Slicer/pull/6939))
- Fix initial sizing of modules using `ctkFlowLayout` ([PR-7111](https://github.com/Slicer/Slicer/pull/7111))
- Resolve build issue for CTK DICOM Core library ([PR-6908](https://github.com/Slicer/Slicer/pull/6908))
- Correct styling of `ctkRangeSlider` ([PR-7116](https://github.com/Slicer/Slicer/pull/7116))
- Remove code specific to Qt 4 ([PR-7127](https://github.com/Slicer/Slicer/pull/7127))
- Ensure only required Qt components are included ([PR-7129](https://github.com/Slicer/Slicer/pull/7129), [PR-7133](https://github.com/Slicer/Slicer/pull/7133))
- Update general CTK components ([PR-7110](https://github.com/Slicer/Slicer/pull/7110))

**ITK:**

- Fix read/write of displacement fields in NIFTI format ([PR-6799](https://github.com/Slicer/Slicer/pull/6799))
- Backport fixes for gcc13 compatibility in ITK and VTK ([PR-6971](https://github.com/Slicer/Slicer/pull/6971))
- Improve dependency analysis for Flatpak ([PR-7019](https://github.com/Slicer/Slicer/pull/7019))
- Clarify `image_from_vtk_image` usage ([PR-7168](https://github.com/Slicer/Slicer/pull/7168))

**Other Dependencies:**

- Update RapidJSON to 2023.05.09 to resolve warnings ([PR-7047](https://github.com/Slicer/Slicer/pull/7047))
- Correct GitHub organization for `qRestAPI` external project ([PR-7085](https://github.com/Slicer/Slicer/pull/7085))
- Update Python packages to latest versions ([PR-7046](https://github.com/Slicer/Slicer/pull/7046), [PR-6803](https://github.com/Slicer/Slicer/pull/6803), [PR-6859](https://github.com/Slicer/Slicer/pull/6859))

### Documentation

**Templates and Guides:**

- Tweak “release” issue template ([PR-6699](https://github.com/Slicer/Slicer/pull/6699))
- Tweak “patch-release” issue template ([PR-6701](https://github.com/Slicer/Slicer/pull/6701))
- Improve “release” and “patch-release” issue templates ([PR-6703](https://github.com/Slicer/Slicer/pull/6703))
- Add “Self Tests” developer documentation ([PR-6742](https://github.com/Slicer/Slicer/pull/6742))

**General Documentation Improvements:**

- Fix typos and grammar in various documents ([PR-7063](https://github.com/Slicer/Slicer/pull/7063), [PR-7121](https://github.com/Slicer/Slicer/pull/7121))
- Update Debian distribution names in linux.md ([PR-7020](https://github.com/Slicer/Slicer/pull/7020))
- Improve documentation on `slicer.util.pip_install` usage ([PR-7172](https://github.com/Slicer/Slicer/pull/7172))
- Fix typo in Troubleshooting guide ([PR-6707](https://github.com/Slicer/Slicer/pull/6707))
- Correct link to ImageStacks tutorial in Volumes module documentation ([PR-6718](https://github.com/Slicer/Slicer/pull/6718))
- Update parameter node documentation ([PR-6873](https://github.com/Slicer/Slicer/pull/6873))

**Scripting and API Documentation:**

- Describe `pip_install` usage in modules ([PR-6913](https://github.com/Slicer/Slicer/pull/6913))
- Add Qt connection details to Python FAQ ([PR-6737](https://github.com/Slicer/Slicer/pull/6737))
- Improve `slicer.util.to_bool` docstring ([PR-6697](https://github.com/Slicer/Slicer/pull/6697))
- Add Python FAQ improvements ([PR-7014](https://github.com/Slicer/Slicer/pull/7014))

**Code and Feature-Specific Documentation:**

- Clarify volume computation in Segment statistics documentation ([PR-6739](https://github.com/Slicer/Slicer/pull/6739))
- Document how to add volume rendering presets ([PR-6763](https://github.com/Slicer/Slicer/pull/6763))
- Clarify `GetTransformBetweenNodes` PostMultiply mode ([PR-6840](https://github.com/Slicer/Slicer/pull/6840))
- Describe automatic resampling of binary labelmap representation ([PR-7170](https://github.com/Slicer/Slicer/pull/7170))
- Improve “Interpolation order” parameter documentation ([PR-7006](https://github.com/Slicer/Slicer/pull/7006))
- Add example for model point picking ([PR-7026](https://github.com/Slicer/Slicer/pull/7026))
- Expand GUI documentation for Segment Editor module ([PR-6955](https://github.com/Slicer/Slicer/pull/6955))
- Add limitations section to segmentations.md ([PR-6978](https://github.com/Slicer/Slicer/pull/6978))

**Platform-Specific Notes and Fixes:**

- Add warning in linux.md about Debian’s OpenSSL ([PR-7033](https://github.com/Slicer/Slicer/pull/7033))
- Add note in linux.md regarding Debian 12 and CMake ([PR-7031](https://github.com/Slicer/Slicer/pull/7031))
- Update Windows build instructions ([PR-7036](https://github.com/Slicer/Slicer/pull/7036))
- Confirm compatibility with newer CMake versions ([PR-7053](https://github.com/Slicer/Slicer/pull/7053))

**Example Code and Practical Usage:**

- Add hanging protocol example to script repository ([PR-6915](https://github.com/Slicer/Slicer/pull/6915))
- Update example usage in sequence browser documentation ([PR-6854](https://github.com/Slicer/Slicer/pull/6854))
- Update segmenteditor.md with node reference info ([PR-7134](https://github.com/Slicer/Slicer/pull/7134))

**Syntax and Formatting Adjustments:**

- Fix miscellaneous typos ([PR-7055](https://github.com/Slicer/Slicer/pull/7055), [PR-7057](https://github.com/Slicer/Slicer/pull/7057))
- Update snippet syntax in developer guide ([PR-7132](https://github.com/Slicer/Slicer/pull/7132))
- Refine syntax in `License.txt` and `Transforms.dox` ([PR-7057](https://github.com/Slicer/Slicer/pull/7057), [PR-7055](https://github.com/Slicer/Slicer/pull/7055))

---

_[View the full topic](https://discourse.slicer.org/t/slicer-5-4-summary-and-changelog/40136)._
