Skip to main content
`Ctrl`+`K`

# Release Notes

Changelog entries for the development version are available at https://rosettasciio.readthedocs.io/en/latest/changes.html

## [UNRELEASED] (2026-07-29)

### Bug Fixes

- Support ISO 8601 UTC-offset strings in serial-date conversion and make timezone tests platform independent. (#341)

## 0.14.0 (2026-05-27)

### New features

- Add support for reading Tofwerk TofDAQ HDF5 files (`.h5`) from fibTOF FIB-SIMS instruments, returning peak-integrated 4D data `(depth, y, x, m/z)` for opened files or a sum spectrum + TIC map for raw files. See Tofwerk (fibTOF FIB-SIMS). (#490)

- Added support for reading Balzers/Pfeiffer Quadstar mass spectrometry files in `.sac` and `.sbc` formats. (#509)

### Enhancements

- Improve MRC file reader: add support for loading virtual and external images as HyperSpy navigators, with regex-based discovery of related files and streamlined metadata structure. (#515)

### Bug Fixes

- Handle py4DSTEM data saved with NCEM EMD version 1.0 (#499)

- Parse and write the rsciio version when using the EMSA/MSA format writer. (#504)

- Fixed “OverflowError: Python int too large to convert to C int” on Windows and other 32-bit systems when Daks computes the lazily-loaded blockfiles (#506)

### Improved Documentation

- Document `DISABLE_C_EXTENSIONS` to install development version of rosettasciio without a compiler. (#507)

## 0.13.0 (2026-04-08)

### Enhancements

- Add lazy support compatible with dask distributed scheduler in CEOS Panta Rhei (PRZ) reader (#462)

- Allow saving image with scalebar when the scales have opposite signs. (#475)

- Lazify import of `rsciio` and improve documentation. (#477)

- EDAX TEAM/Genesis: add support for distributed lazy loading. (#481)

- EMSA/MSA format enhancements:

  - support reading files with empty fields.

  - support reading files with multiple line titles and comments.

  - support reading files with multiple columns and datatype xy. (#487)

- EMPAD:

  - Add `q_calibration` parameter to set the diffraction space calibration in 1/nm.

  - Add `remove_nans` parameter to remove NaN values in the data by replacing them with zeros. (#495)

- EMPAD: add support for distributed lazy loading using `memmap_distributed()`. (#498)

### Bug Fixes

- EDAX TEAM/Genesis: fix OverflowError: Python integer out of bounds when loading some spd files. (#481)

- EMPAD: fix ordering of axes and array shape when reading non-square scan data. (#493)

### Improved Documentation

- Bruker: add documentation about support of micro-XRF bcf files. (#471)

### Maintenance

- Add codespell to pre-commit hooks to catch common misspellings. (#472)

- Improve release workflow:

  - Speed up release workflow by avoiding downloading tests data when testing wheels.

  - Add release notes and distribution files to GitHub release. (#482)

- Update integration tests workflow to use caching shared in CI matrix. (#483)

- Consistently use `numpy.testing.assert_allclose()` in favour of `numpy.allclose()`, because the failure message is more useful, as it shows the relative and absolute error. Specify tolerance where needed. (#492)

## 0.12 (2025-12-29)

### New features

- Add support for reading app5 files from NanoMegas’s Topspin software. (#464)

### Enhancements

- Gatan Digital Micrograph: implement distributed lazy loading for digitalmicrograph files. (#418)

- Use lazy import in rsciio.utils to avoid slowing down import. Defer import of `dask.array`. Improve API documentation. (#424)

### Bug Fixes

- Ripple reader: fix specifying chunks when reading 1D datasets. (#419)

- Fix bug in the `incremental_filename()` and `append2pathname()` functions. (#424)

### Deprecations

- Re-organize the `rsciio.utils.tools` into submodules. The following functions have been moved from `rsciio.utils.tools` to other submodules:

  - `sanitize_msxml_float`, `XmlToDict`, `xml2dtb` and `convert_xml_to_dict` have been moved to `rsciio.utils.xml`

  - `append2pathname`, `incremental_filename`, `ensure_directory` and `overwrite` have been moved to `rsciio.utils.path`

  - `get_file_handle` has been moved to `rsciio.utils.file`.

  The following functions have been privatised and will be removed in version 1.0:

  - `dummy_context_manager`,

  - `get_object_package_info`,

  - `ensure_unicode`,

  - `jit_ifnumba`,

  - `dump_dictionary`,

  - `DTBox`,

  - `sarray2dict`,

  - `dict2sarray`,

  - `convert_units`. (#424)

## 0.11 (2025-12-05)

### Enhancements

- Add support for Panta Rhei 0.24.3. Add allow_restricted_pickle flag to load meta data from legacy prz files. (#457)

### Bug Fixes

- Fix reading velox emd file when element selection is empty. (#432)

- Fix linting section in the contributing guide, since `ruff` is now used instead of `black`. (#456)

### Maintenance

- Add explicit support for python 3.14 and drop support for python 3.9. Build windows arm64 wheel. (#441)

## 0.10 (2025-07-27)

### New features

- Delmic format: extend Delmic HDF5 support to handle all types of cathodoluminescence datasets and read multiple datasets at once. (#328)

- Add numpy plugin to support distributed lazy reading of `npy` file. (#415)

### Enhancements

- ZSpy: Add parameter `store_type` to specify the zarr store used saving `zspy` file. File saved with `zarr.storage.ZipStore` can now be loaded automatically without having to pass the store. (#417)

- Renishaw format: add support for reading incomplete acquisition. (#420)

### Improved Documentation

- Improve pull request template, add relevant links to the contributor guide. (#413)

- Allow 1% difference in scale of the signal axis when saving an image with the image plugin. (#414)

### Maintenance

- Add integration tests to run the test suites of software in the HyperSpy ecosystem. (#426)

- Standardized string formatting in all file format specification `YAML` files to consistently use double quotes throughout the `rsciio` module for improved maintainability. (#430)

## 0.9.0 (2025-05-29)

### New features

- Add support for reading hdf5 files from Dectris Arina camera. (#398)

### Enhancements

- Set Hamamatsu streak image signal type to `TransientSpectrum` if LumiSpy is installed. (#386)

- Remove non-distributed memory mapping implementation in rpl reader. Deprecate `mmap_mode` in mrc reader since it is not used anymore with the distributed memory mapping implementation. (#404)

### Bug Fixes

- Allow reading of Hamamatsu `.img` files with `ScalingXScalingFile="Other"` (uncalibrated x axis). (#387)

- Remove optional dependency (`blosc`) of `mrcz` because wheels are not available starting from python 3.13. `blosc` was installed as a convenience. (#392)

- Fix Distributed loading of `.blo` files (and other binary files with the `key` parameter) with chunks that don’t span the signal axis. (#395)

- Remove non-distributed memory mapping implementation in quantum detector reader because it doesn’t work anymore with recent versions of dask and it is not supposed to. The distributed memory mapping implementation is now always used. Fix setting `chunks`. (#400)

### Improved Documentation

- Add list of companies supporting their file formats. (#403)

### Maintenance

- Fix getting filehandle from tiff file with `dask` >= 2025.4.0. (#397)

- Remove `distributed` keyword from mrc file reader and change default behavior to use the `distributed` backend. (#402)

## 0.8.0 (2025-03-28)

### Enhancements

- Improve error message when loading spectrum image from EMD Velox file and the `sparse` library is not installed. (#305)

- Add `export_metadata()` utility function for exporting metadata from Bruker file. (#326)

- Add support for distributed lazy loading in Blockfile reader and remove loading using threaded memory mapping which is discouraged in recent dask releases. (#372)

- Add support for distributed implementation to the ripple reader. (#376)

### Bug Fixes

- Raise a warning instead of an error when the beam energy can’t be found in Bruker `xrf` files. (#326)

- Migrate HyperSpy markers API to HyperSpy v2 in bruker reader to fix loading files containing markers. (#383)

### Improved Documentation

- Add section to user guide on memory mapping of binary file, explaining about the `distributed` and `chunks` parameters. (#376)

### Maintenance

- Specify python-box!=7.3.1 from dependency requirement as a workaround for cdgriffith/Box#288. (#357)

- Build and tests linux-arm wheels natively. (#358)

- Bump dask version requirement to 2022.9.2. (#374)

- Add T20 rules (flake8-print) to ruff configuration. (#378)

- Add free-threaded python build. (#379)

- Fix parsing camera length from the `info.txt` file when loading MRC files. (#380)

## 0.7.1 (2025-01-12)

### Maintenance

- Pin zarr to version 2 until zarr version 3 is supported. (#351)

## 0.7 (2024-12-20)

### New features

- Add basic support for the Delmic HDF5 format. (#139)

### Enhancements

- Direct Electron MRC:

  - add support for newer version of DE server,

  - add support foe discovering metadata file (`*_info.txt`) based on the naming scheme. (#311)

- Add support for tiff file in `get_file_handle()`. (#317)

### Bug Fixes

- Set `signal_type` to `LumiTransientSpectrum` when Hamamatsu `.img` files are read and LumiSpy is installed. (#209)

- Fix lazy reading of some tiff files - fix for #316. (#317)

- Fix scale in white field image in `renishaw` reader. (#327)

- Allow reading of Hamamatsu tiff file with `ScalingXScalingFile="Other"`. (#347)

### Maintenance

- Add explicit support for python 3.13. (#339)

## 0.6 (2024-07-11)

### Enhancements

- DigitalSurf surfaces:

  - add support for saving file - see `file_writer()`

  - add the `parse_metadata()` function to parse metadata from `sur` file

  - add series of RGB images / surfaces support. (#280)

### Bug Fixes

- Fixes axes for JPG with no exif_tags. Return of axes while loading isn’t empty anymore. (#283)

- EMD Velox fixes for reading files containing multiple EDS streams:

  - fix reading multiple EDS streams lazily with `sum_EDS_detectors=True`,

  - fix reading separate EDS stream and individual frames when using `sum_EDS_detectors=False` and `sum_frames=False`. (#287)

- Quantum Detector: Fix signal shape of data acquired in ROI mode. (#289)

### Maintenance

- Add support for numpy 2 in Renishaw, Semper and Dens reader. (#281)

## 0.5 (2024-06-15)

### Enhancements

- EMD (Velox): Enforce setting identical units for the `x` and `y` axes, as convenience to use the scalebar in HyperSpy. (#243)

- Quantum Detector: Add support for dask distributed scheduler. (#267)

### Bug Fixes

- EMD (Velox): Fix conversion of offset units which can sometimes mismatch the scale units. (#243)

- Ripple format: Fix typo and improve error message for unsupported `dtype` in writer. (#251)

- EMD (Velox): Fix parsing elements from EDS data from velox emd file v11. (#274)

### Maintenance

- Use `ruff` for code formatting and linting. (#250)

- Fix `tifffile` deprecation. (#262)

- Add support for `python-box` 7. (#263)

## 0.4 (2024-04-02)

### Enhancements

- Renishaw wdf:

  - return survey image instead of saving it to the metadata and add marker of the mapping area on the survey image.

  - Add support for reading data with invariant axis, for example when the values of the Z axis doesn’t change.

  - Parse calibration of `jpg` images saved with Renishaw Wire software. (#227)

- Add support for reading emd Velox version 11. (#232)

- Add making test data files section to contributing guide, explain characteristics of “good” test data files. (#233)

- Quantum Detector reader: use timestamps to get navigation shape when the navigation shape is not available - for example, acquisition with pixel trigger or scan shape not in metadata. (#235)

- Improve setting output size for an image. (#244)

### Bug Fixes

- Fix saving `hspy` file with empty array (signal or metadata) and fix closing `hspy` file when a error occurs during reading or writing. (#206)

- Fix saving ragged arrays of vectors from/to a chunked `hspy` and `zspy` store. Greatly increases the speed of saving and loading ragged arrays from chunked datasets. (#211)

- Fix saving ragged array of strings in `hspy` and `zspy` format. (#217)

- Fix setting beam energy for XRF maps in `bcf` files. (#231)

- Quantum Detector reader: fix setting chunks. (#235)

### Maintenance

- Add `POOCH_BASE_URL` to specify the base url used by pooch to download test data. This fixes the failure of the `package_and_test.yml` workflow in pull requests where test data are added or updated. (#200)

- Fix documentation links following release of hyperspy 2.0. (#210)

- Run test suite on osx arm64 on GitHub CI and speed running test suite using all available CPUs (3 or 4) instead of only 2. (#222)

- Fix deprecation warnings introduced with numpy 1.25 (“Conversion of an array with ndim > 0 to a scalar is deprecated, …”). (#230)

- Fix numpy 2.0 removal (`np.product` and `np.string_`). (#238)

- Fix download test data when using `pytest --pyargs rsciio -n`. (#245)

## 0.3 (2023-12-12)

### New features

- Add `rsciio.set_log_level()` to set the logging level of `RosettaSciIO` (#69)

- Added the `memmap_distributed()` function for loading a memmap file from multiple processes.

  - Added the arguments `distributed` and `metadata_file` to the .mrc file reader for loading metadata save from DirectElectron detectors.

  - Speed up to the .mrc file reader for large .mrc files by removing the need to reshape and transpose the data. (#162)

- Add support for saving lazy ragged signals to the zspy format. (#193)

### Bug Fixes

- Fix error when reading CEOS Panta Rhei (PRZ) file with aperture `"Out"` (#173)

- Improvement for installation without `numba`:

  - Fix tvips reader

  - Allow reading and writing EMD NCEM file

  - Fix running test suite without optional dependencies (#182)

- Fix getting version on debian/ubuntu in system-wide install. Add support for installing from git archive and improve getting development version using setuptools fallback_version (#187)

- Fix `dwell_time` reading in QuantumDetectors reader (`.mib` file). The `dwell_time` is stored in milliseconds, not microseconds as the previous code assumed. (#189)

### Maintenance

- Remove usage of deprecated `distutils` (#152)

- Fix installing exspy/hyperspy on GitHub CI and test failing without optional dependencies (#186)

- Unpin pillow now that imageio supports pillow>=10.1.0 (#188)

- Simplify GitHub CI workflows by using reusable workflow (#190)

## 0.2 (2023-11-09)

### New features

- Add support for reading the `.img`-format from Hamamatsu. (#87)

- Add support for reading the `.mib`-format from Quantum Detector Merlin camera. (#174)

### Bug Fixes

- Fix saving/reading ragged arrays with hspy/zspy plugins (#164)

- Fixes slow loading of ragged zspy arrays (#168) (#169)

### Improved Documentation

- Improve docstrings, check API links when building documentation and set GitHub CI to fail when link is broken (#142)

- Add zenodo doi to documentation (#149)

- Update intersphinx mapping links of matplotlib/numpy. (#150)

### Enhancements

- Add option to show progress bar when saving lazy signals to hspy/zspy files (#170)

- Make `numba` and `h5py` optional dependencies to support RosettaSciIO on pyodide and PyPy (#180)

### Maintenance

- Remove deprecated `record_by` attribute in hspy/zspy, (#143)

- Add `sidpy` dependency and pin it to <0.12.1 as a workaround to fix `pyusid` import (#155)

- Update hspy/zspy plugins to new markers API introduced in HyperSpy 2.0 (#164)

- Pin pillow<10.1.0 until imageio supports newer pillow version - see imageio/imageio#1044 (#175)

- Update the test suite and the CI workflows to work with and without exspy installed (#176)

- Add badges that became available after first release (#177)

## 0.1 (2023-06-06)

### New features

- Add support for reading the `.xml`-format from Horiba Jobin Yvon’s LabSpec software. (#25)

- Add support for reading the `.tvf`-format from TriVista. (#27)

- Add support for reading the `.wdf`-format from Renishaw’s WIRE software. (#55)

- Added subclassing of `.sur` files in CL signal type and updated metadata parsing (#98)

- Add optional kwarg to tiff reader `multipage_as_list` which when set to True uses `pages` interface and returns list of signal for every page with full metadata. (#104)

- Add file reader and writer for PRZ files generated by CEOS PantaRhei (HyperSpy #2896)

### Bug Fixes

- Ensure that the `.msa` plugin handles `SIGNALTYPE` values according to the official format specification. (#39)

- Fix error when reading Velox file containing FFT with an odd number of pixels (#49)

- Fix error when reading JEOL `.pts` file with un-ordered frame list or when length of `frame_start_index` is smaller than the sweep count (#68)

- Fix exporting scalebar with reciprocal units containing space (#90)

- Fix array indexing bug when loading a `sur` file format containing spectra series. (#98)

- For more robust xml to dict conversion, `convert_xml_to_dict` is replaced by `XmlToDict` (introduced by PR #111). (#101)

- Fix bugs with reading non-FEI and Velox `mrc` files, improve documentation of `mrc` and `mrcz` file format. Closes #71, #91, #93, #96, #130. (#131)

### Improved Documentation

- Consolidate docstrings and documentation for all plugins (see also #47, #59, #64, #72) (#76)

- Remove persistent search field in left sidebar since this makes finding the sidebar on narrow screens difficult. Set maximal major version of Sphinx to 5. (#84)

### Deprecations

- Remove deprecated `record_by` attribute from file readers where remaining (#102)

### Enhancements

- Recognise both byte and string object for `NXdata` tag in NeXus reader (#112)

### API changes

- Move, enhance and share xml to dict/list translation and other tools (new api for devs) from `Bruker._api` to utils: `utils.date_time_tools.msfiletime_to_unix` function to convert the uint64 MSFILETIME to datetime.datetime object. `utils.tools.sanitize_msxml_float` function to sanitize some MSXML generated xml where comma is used as float decimal separator. `utils.tools.XmlToDict` Xml to dict/list translator class with rich customization options as kwargs, and main method for translation `dictionarize` (#111)

### Maintenance

- Initiate GitHub actions for tests and documentation. (#1)

- Initiate towncrier changelog and create templates for PRs and issues. (#3)

- Add github CI workflow to check links, build docs and push to the `gh-pages` branch. Fix links and add EDAX reference file specification (#4)

- Add azure pipelines CI to run test suite using conda-forge packages. Add pytest and coverage configuration in `pyproject.toml` (#6)

- Fix minimum install, add corresponding tests build and tidy up leftover code (#13)

- Fixes and code consistency improvements based on analysis provided by lgtm.org (#23)

- Added github action for code scanning using the codeQL engine. (#26)

- Following the deprecation cycle announced in HyperSpy, the following keywords and attributes have been removed:

  - Bruker composite file (BCF): The `'spectrum'` option for the `select_type` parameter was removed. Use ‘spectrum_image’ instead.

  - Electron Microscopy Dataset (EMD) NCEM: Using the keyword `'dataset_name'` was removed, use `'dataset_path'` instead.

  - NeXus data format: The `dataset_keys`, `dataset_paths` and `metadata_keys` keywords were removed. Use `dataset_key`, `dataset_path` and `metadata_key` instead. (#30)

- Unify the `format_name` scheme of IO plugins using `name` instead and add `name_aliases` (list) for backwards compatibility. (#35)

- Add drone CI to test on `arm64`/`aarch64` platform (#42)

- Unify naming of folders/submodules to match documented format `name` (#81)

- Add black as a development dependency. Add pre-commit configuration file with black code style check, which when installed will require changes to pass a style check before committing. (#86)

- Add support for python-box 7 (#100)

- Migrate to API v3 of `imageio.v3` (#106)

- Add explicit support for python 3.11 and drop support for python 3.6, 3.7 (#109)

- Remove test data from packaging and download them when necessary (#123)

- Define packaging in `pyproject.toml` and keep `setup.py` to handle compilation of C extension (#125)

- Add release GitHub workflow to automate release process and add corresponding documentation in releasing_guide.md (#126)

- Add pre-commit hook to update test data registry and pre-commit.ci to run from pull request (#129)

- Tidy up `rsciio` namespace: privatise `docstrings`, move `conftest.py` and `exceptions` to tests and utils folder, respectively (#132)

## Initiation (2022-07-23)

- RosettaSciIO was split out of the HyperSpy repository on July 23, 2022. The IO-plugins and related functions so far developed in HyperSpy were moved to this new repository.