Releases: datasophos/NexusLIMS
NexusLIMS 2.7.1
Welcome to version 2.7.1 of NexusLIMS!
Highlights
This is a patch release that fixes a bug in XML record generation where the <sample> element was missing its required id attribute. Without this fix, all <sampleID> references within acquisition activities in built records were dangling and unresolvable per the NexusLIMS schema.
As always, if you are looking for assistance with configuration or deployment of NexusLIMS, please contact datasophos to discuss your needs!
Bug Fixes
- Fixed missing
idattribute on<sample>element in built XML records (#108) --<sampleID>references within every acquisition activity were dangling and unresolvable per the NexusLIMS schema.
Installation
# if upgrading an existing uv tool install, run:
uv tool upgrade nexuslims
# for a new installation:
uv tool install nexuslims==2.7.1
# or
pip install nexuslims==2.7.1
# or, if installed from source:
git fetch
git checkout v2.7.1
uv syncFull changelog
NexusLIMS 2.7.0
Welcome to version 2.7.0 of NexusLIMS!
Highlights
This release adds per-user CDCS record ownership: NexusLIMS can now automatically look up or create a CDCS user account that matches the NEMO session user and assign uploaded records to that account. A companion setting gives you independent control over whether records are placed in the global public workspace. Together, these settings allow deployments to give individual researchers ownership of their own experimental records in CDCS.
As always, if you are looking for assistance with configuration or deployment of NexusLIMS, please contact Datasophos to discuss your needs!
New Features
Per-user CDCS record ownership (#106)
- New
NX_CDCS_USER_OWNED_RECORDSsetting (defaultfalse): when enabled, each uploaded record is assigned to a CDCS user account that matches the NEMO session user - NexusLIMS searches CDCS for an existing account by username, then by email, and creates one automatically if none exists
- New
NX_CDCS_ASSIGN_TO_PUBLIC_WORKSPACEsetting (defaulttrue): controls whether uploaded records are placed in the global public workspace, independently of ownership - Both settings can be combined -- a record can be user-owned and publicly visible at the same time
- Requires
NX_CDCS_TOKENto belong to a superuser account whenNX_CDCS_USER_OWNED_RECORDSis enabled; user management failures never block the export (record is uploaded as admin-owned with a warning)
Installation
# if upgrading an existing uv tool install, run:
uv tool upgrade nexuslims
# for a new installation:
uv tool install nexuslims==2.7.0
# or
pip install nexuslims==2.7.0
# or, if installed from source:
git fetch
git checkout v2.7.0
uv syncFull changelog
NexusLIMS 2.6.2
Welcome to version 2.6.2 of NexusLIMS!
Highlights
This is a patch release fixing two bugs in the Tofwerk pFIB-ToF-SIMS preview generator that caused preview generation to fail for certain HDF5 acquisition files. Large pre-processed files (e.g. 500×256×256×259 float32 arrays ~32 GiB) would previously crash with an out-of-memory error; raw files whose NbrWrites attribute disagreed with the actual data shape by one would fail with a matplotlib ValueError. Both are now resolved.
As always, if you are looking for assistance with configuration or deployment of NexusLIMS, please contact Datasophos to discuss your needs!
Bug Fixes
- Tofwerk pFIB-ToF-SIMS preview generator: OOM and depth-profile shape mismatch (#105)
- Replaced the full
PeakData/PeakData[:]load with a write-by-write chunked reader, reducing peak memory from ~32 GiB to ~135 MB for a 500×256×256×259 acquisition. - Fixed a
ValueError: x and y must have same first dimensionin raw-file depth plots by deriving the x-axis from the actualEventListshape rather than theNbrWritesroot attribute, which can disagree by one.
- Replaced the full
Installation
# if upgrading an existing uv tool install, run:
uv tool upgrade nexuslims
# for a new installation:
uv tool install nexuslims==2.6.2
# or
pip install nexuslims==2.6.2
# or, if installed from source:
git fetch
git checkout v2.6.2
uv syncFull changelog
NexusLIMS 2.6.1
Welcome to version 2.6.1 of NexusLIMS!
Highlights
This release brings a new nexuslims extract CLI command for quick single-file metadata extraction and preview generation, making it easier to inspect and debug microscopy files from the command line. The FEI TIFF extractor has been expanded to support both SEM and TEM TIFF formats, and the HyperSpy preview generator now handles EDAX .msa and .spc spectrum files. Several robustness fixes address edge cases in the DM3/DM4 extractor and blank 16-bit TIFF previews.
As always, if you are looking for assistance with configuration or deployment of NexusLIMS, please contact Datasophos to discuss your needs!
New Features
Expanded FEI TIFF extractor with TEM support (#95)
QuantaTiffExtractorhas been renamed toFeiTiffExtractorand now supports both FEI SEM (INI-style) and FEI TEM (<Root>XML) TIFF metadata formats- The old
quanta_tifmodule is retained as a backward-compatibility shim -- no changes required to existing configurations - Added test coverage for FEI TEM bright-field image and SAED diffraction extraction paths
nexuslims extract CLI command (#96)
- New command for single-file metadata extraction and preview generation directly from the terminal
- Useful for inspecting files, debugging extractor behavior, and verifying instrument profiles without running a full record build
HyperSpy preview support for spectrum files (#97)
- The HyperSpy preview generator now produces thumbnail plots for
.msaand.spcspectrum file formats (EDAX)
Bug Fixes
- Fixed
KeyErrorexceptions in the DM3/DM4 extractor for files missing aNamekey, 24-hour timestamps, and EELS TagGroups without anOperationkey. (#98) - Fixed blank preview thumbnails for 16-bit TIFF images by applying a 2nd--98th percentile contrast stretch before converting to 8-bit. (#99)
- Moved
acceleration_voltageandstage_positionto the baseNexusMetadataclass; addedacquisition_deviceandhorizontal_field_widthtoSpectrumMetadata. (#100)
Documentation Improvements
- Added CLI reference and extractor documentation for the
nexuslims extractcommand. (#101) - Documented the NexusLIMS-CDCS record annotator app with screenshots for the side panel, inline editing, and full-page editor entry points. (#103)
Internal / Miscellaneous
- Updated CDCS REST API endpoint URLs to include trailing slashes, required for compatibility with NexusLIMS-CDCS 3.20.x; added a version compatibility reference page. (#91)
- Added support and CI coverage for Python 3.13 and 3.14. (#93)
Installation
# if upgrading an existing uv tool install, run:
uv tool upgrade nexuslims
# for a new installation:
uv tool install nexuslims==2.6.1
# or
pip install nexuslims==2.6.1
# or, if installed from source:
git fetch
git checkout v2.6.1
uv syncFull changelog
NexusLIMS 2.6.0
Welcome to version 2.6.0 of NexusLIMS!
Highlights
This release brings three significant new capabilities to NexusLIMS. Records can now be exported directly to LabArchives electronic lab notebooks, making it easier to integrate NexusLIMS session summaries into your team's existing ELN workflow. A new interactive terminal-based database browser (nexuslims db view) lets you inspect instruments, sessions, and other database tables without leaving the command line. Finally, NexusLIMS now supports Tofwerk pFIB-ToF-SIMS HDF5 files, extending metadata extraction and preview generation to Tescan fibTOF instruments.
As always, if you are looking for assistance with configuration or deployment of NexusLIMS, please contact Datasophos to discuss your needs!
New Features
LabArchives export destination (#87)
- NexusLIMS records can now be exported to LabArchives electronic lab notebooks
- When configured with LabArchives API credentials, the system automatically creates an organized folder structure by instrument
- Uploads a formatted HTML session summary alongside the full XML record as an attachment
- See the LabArchives Exporter documentation for configuration details
Interactive TUI database browser (#88)
- Added
nexuslims db viewcommand that opens an interactive TUI browser for the NexusLIMS SQLite database, powered by Squall - Browse instruments, sessions, uploads, and other tables directly from the terminal
- Filter rows and run custom SQL queries without needing an external database tool
- See the
nexuslims db viewCLI reference for usage details
Tofwerk pFIB-ToF-SIMS HDF5 support (#90)
- Added support for Tofwerk pFIB-ToF-SIMS HDF5 files (
.h5) - NexusLIMS can now extract acquisition metadata from raw and post-processed fibTOF files produced by the Tescan pFIB-ToF-SIMS system
- Preview image generation is also supported for these files
- See the Tofwerk fibTOF extractor documentation for supported metadata fields
Installation
# if upgrading an existing uv tool install, run:
uv tool upgrade nexuslims
# for a new installation:
uv tool install nexuslims==2.6.0
# or
pip install nexuslims==2.6.0
# or, if installed from source:
git fetch
git checkout v2.6.0
uv syncFull changelog
NexusLIMS 2.5.1
Welcome to version 2.5.1 of NexusLIMS!
Highlights
This is a patch release focused on dependency compatibility and installation improvements. The most notable fix allows NexusLIMS to install cleanly on ARM-based devices (such as a Raspberry Pi) without requiring manual compilation of native libraries. Several key dependencies have also been updated to their latest major versions.
As always, if you are looking for assistance with configuration or deployment of NexusLIMS, please contact Datasophos to discuss your needs!
Bug Fixes
Fix lxml dependency constraint blocking Raspberry Pi installs (#85)
- Fixed issue where NexusLIMS could not install easily on a Raspberry Pi device
without significant compilation effort due to an outdated pinned dependency onlxml.
Internal / Miscellaneous
- Updated dependencies: bumped lxml to v6, requests to v2.32+, python-dotenv to v1,
textual to v8, Sphinx to v9, and ruff to v0.9; removed deprecatedrequests-ntlm
anddefusedxmldependencies. (#85)
Installation
# to upgrade an existing installation
uv tool upgrade nexuslims
# or
pip install -U nexuslims
# for a new installation:
uv tool install nexuslims==2.5.1
# or
pip install nexuslims==2.5.1
# or, if installed from source:
git fetch
git checkout v2.5.1
uv syncFull Changelog
NexusLIMS 2.5.0
Welcome to version 2.5.0 of NexusLIMS!
Highlights
This release adds many new user-facing features and completes NexusLIMS's transformation into a first-class, installable Python package. NexusLIMS can now be installed, configured, and used with a single uv tool install nexusLIMS and configured interactively, with no source checkout required. All CLI functionality has been unified under a single nexuslims command with tab completion, and database management is now fully automated through a new nexuslims db sub-command. Two legacy entry points and scripts have been removed in favour of their modern replacements.
As always, if you are looking for assistance with configuration or deployment of NexusLIMS, please contact Datasophos to discuss your needs!
Upgrade Instructions
Database schema upgrade required!
This release includes two schema migrations. After upgrading, run:
nexuslims db upgradeThe migrations make the following changes to your database:
- New table:
external_user_identifiers— stores mappings between NexusLIMS usernames and external system user IDs (NEMO, LabArchives, CDCS). - Removed columns from
instruments:computer_name,computer_ip,computer_mount, andcalendar_name(all were unused/deprecated). - Renamed column in
instruments:schema_name→display_name.
If you have tooling that queries the instruments table directly by column name, update it to use display_name instead of schema_name.
Replace nexuslims-process-records with nexuslims build-records
The standalone nexuslims-process-records command has been removed. Update any scripts, cron jobs, or systemd units that invoke it:
# Before
nexuslims-process-records
# After
nexuslims build-recordsAll flags supported by the old command (-n, -vv, etc.) are available on the new command.
Replace manual SQL scripts with nexuslims db
The NexusLIMS_db_creation_script.sql file and legacy migrate_db.py scripts have been removed. Use the new nexuslims db CLI instead:
- New installation: run
nexuslims db initto create and stamp the database. - Existing installation: run
nexuslims db upgradeto apply any pending migrations.
What's New
- Pip-installable package: NexusLIMS is now usable directly from a pip or uv installation, without requiring a source code checkout. The recommended installation method is
uv tool install nexusLIMS, which makes all CLI commands globally available. Standardpip install nexusLIMSanduv pip install nexusLIMSalso work. All commands function immediately after install, even without a pre-existing.envfile. (#74) - Unified
nexuslimsCLI with tab completion: All commands (build-records,config,db,instruments) are now subcommands of a singlenexuslimsentry point. Runnexuslims completionto enable shell tab completion. (#76, #78) nexuslims dbcommand: Manage database lifecycle (init, upgrade, downgrade, current, check) without using SQL directly at all. Migrations are shipped inside the package and automatically located regardless of install method. Advanced users can access the full Alembic CLI vianexuslims db alembic. (#67)nexuslims config editTUI: Interactive terminal form for editing the.envconfiguration, organised into seven tabs. Supports adding, editing, and deleting NEMO harvester instances and toggling optional sections (eLabFTW, email). (#70)nexuslims instruments manageTUI: Interactive terminal UI for listing, adding, editing, and deleting instruments — no more direct SQLite access. (#69)nexuslims instruments list: Print a summary table of all instruments with session and record counts. Supports--format jsonfor scripting. (#83)- Preflight checks in
build-records: Common misconfigurations (outdated schema, bad timezones, unwritable directories, unreachable export targets, etc.) are caught and reported with actionable messages before any work begins. (#82) - Standalone extractor library:
parse_metadata()and the registry API now work without a.env, database, or NEMO/CDCS deployment. Ideal for use in Jupyter notebooks. (#84) - User identity mapping: While not user-facing, a new system that allows mapping user identities across external services (NEMO, LabArchives, CDCS) was added, which will enable consistent ownership of records throughout exports in future versions. (#68)
Bug Fixes
- Fixed module-level settings access in
nexusLIMS/harvesters/__init__.pythat caused import-time validation errors when NexusLIMS was imported without a configured.env. CA bundle configuration is now loaded lazily. (#74)
Documentation Improvements
- Greatly simplified the getting started documentation, fully documenting the new supported installation methods
- Added vhs terminal user interface (TUI) demos for the configuration editor and instrument management tool to the user guide
- Thoroughly documented new CLI tools on the CLI reference page
- Added documentation about database migrations
- Documentation includes an example Jupyter notebook demonstrating standalone usage of NexusLIMS metadata extractors.
- Added auto-generated database schema diagrams (PNG via Graphviz + interactive Mermaid ER diagram) to the developer docs, rebuilt automatically on each documentation build.
Internal / Miscellaneous
- Comprehensive test infrastructure unification: centralized singleton management, unified test instrument data with a single
TEST-TOOLPID, and automatic test marking by location (unit/integration). (#73)
Full Changelog: v2.4.1...v2.5.0
NexusLIMS 2.4.1
Welcome to version 2.4.1 of NexusLIMS!
This release adds new CLI features for date filtering and configuration management, fixes several bugs, and improves documentation.
As always, if you are looking for assistance with configuration or deployment of NexusLIMS, please contact Datasophos to discuss your needs!
New features
Date Filtering for Record Processing (#66)
- Added
--fromand--tooptions tonexuslims-process-recordsfor filtering sessions by date range - Process specific time periods, e.g.,
--from 2025-01-01 --to 2025-01-31for all January 2025 sessions - Both date bounds are inclusive (the
--todate includes all sessions ending by 23:59:59 on that day) - Changed default
--fromvalue to one week prior to today's date. Use--from=noneand do not supply--toto disable date filtering and harvest usage events from all time
Configuration Management (#64)
- Added
nexuslims-config dumpandnexuslims-config loadcommands for exporting/importing full NexusLIMS configuration as JSON - Makes it straightforward to migrate configurations between deployments
- Running
nexuslims-process-records -v(or-vv) now prints the effective configuration (with secrets redacted) at startup
SSL Verification Control (#45)
- Added
NX_DISABLE_SSL_VERIFYconfiguration option to disable SSL certificate verification for all outgoing HTTPS requests - Intended for local development environments only
Bug fixes
Gatan Diffraction Metadata (#61)
- Fixed validation error when extracting metadata from Gatan
.dm3Diffraction files magnificationandstage_positionare now only written as core fields for dataset types whose schema declares them (Image/SpectrumImage)- For other types, values are routed to extensions or dropped when empty
eLabFTW Export Reliability (#62)
- Fixed eLabFTW export failure when the
Locationheader differs frombase_urlin host or port (e.g., localhost deployments) - Experiment and upload IDs now extracted from the last path segment of the
LocationURL instead of relying on prefix-stripping
Documentation improvements
- CLI Reference (#47): Added comprehensive documentation covering all
nexuslims-process-recordscommand-line options including new date filtering
flags - Configuration Example (#65): Updated
.env.exampleto match current configuration surface, fixed stale repository links, removed unused variables, added missingNX_EXPORT_STRATEGY - Configuration Reference (#63): Added
NX_EXPORT_STRATEGYto configuration reference with descriptions of each valid value - Local Deployment (#44): Added note about setting
NX_CERT_BUNDLE_FILEwhen usingmkcertfor local test deployments
Miscellaneous
- Updated project homepage and documentation links for PyPI release info
- Fixed documentation deployment workflow issues
Full Changelog: v2.4.0...v2.4.1
Installation
pip install nexuslims==2.4.1
# or
uv add nexuslims==2.4.1
# or, if installed from git:
git fetch
git checkout v2.4.1
uv syncUpgrade Notes
No breaking changes or database migrations required for this release.
NexusLIMS 2.4.0
Welcome to version 2.4.0 of NexusLIMS!
This release a plugin-based export framework and eLabFTW as a second export destination alongside CDCS, fixes an instrument path resolution bug, and updates the local deployment documentation.
As always, if you are looking for assistance with configuration or deployment of NexusLIMS, please contact Datasophos to discuss your needs!
New features
Plugin-based export framework (#35)
NexusLIMS now supports exporting records to multiple repository destinations through a new plugin-based export system. The framework supports configurable export strategies (all, first_success, best_effort) via NX_EXPORT_STRATEGY, per-destination upload tracking in the database, and inter-destination cross-linking (e.g. CDCS links embedded in eLabFTW experiments and vice versa). A new BUILT_NOT_EXPORTED session status covers the case where a record was generated but failed to reach any destination.
Breaking change: A database migration is required — run
uv run alembic upgrade headafter upgrading. The previousnexusLIMS.cdcs.upload_record_files()function has been removed; usenexusLIMS.exporters.export_records()instead.
eLabFTW export destination (#42)
Records can now be exported automatically to eLabFTW electronic lab notebook instances. Each NexusLIMS session becomes an eLabFTW experiment containing an HTML summary, structured metadata via eLabFTW's extra_fields schema (with typed, grouped, and ordered fields), automatic tagging by instrument and user, and the full XML record as an attached file. When both CDCS and eLabFTW are configured, cross-links between the two are included automatically.
New environment variables:
| Variable | Required | Description |
|---|---|---|
NX_ELABFTW_URL |
Yes | eLabFTW instance URL |
NX_ELABFTW_API_KEY |
Yes | API authentication key |
NX_ELABFTW_EXPERIMENT_CATEGORY |
No | Default experiment category ID |
NX_ELABFTW_EXPERIMENT_STATUS |
No | Default experiment status ID |
See the eLabFTW configuration docs for full details.
Bug fixes
Instrument filestore path resolution (#43)
Fixed a bug where instrument filestore paths beginning with a leading slash were treated by pathlib as absolute, silently discarding the NX_INSTRUMENT_DATA_PATH base directory. A new join_instrument_filestore_path() helper now strips the leading slash before joining, so paths resolve correctly regardless of how they are stored in the database.
Documentation improvements
Local deployment guide (#40)
Updated the local deployment documentation to correct some errors and fill in missing steps. Local HTTPS setup was also simplified in the NexusLIMS-CDCS 3.18.0-nx1 release.
Full Changelog: v2.3.0...v2.4.0
NexusLIMS 2.3.0
Welcome to version 2.3.0 of NexusLIMS!
This release corresponds to the 3.18.0-nx0 release of NexusLIMS CDCS and makes the NexusLIMS backend completely compatible with modern CDCS versions. A few new features have been added as well.
As always, if you are looking for assistance with configuration or deployment of NexusLIMS, please contact Datasophos to discuss your needs!
New features
- Add
NX_CLUSTERING_SENSITIVITYconfiguration option to control the sensitivity of file clustering into Acquisition Activities. Higher values make clustering more sensitive to time gaps (resulting in more activities), lower values make it less sensitive (fewer activities). Setting to0disables clustering entirely and groups all files into a single activity. (Sponsored by UPenn/Singh Center for Nanotechnology, thank you!) (#26) - Add support for harvesting experiment metadata from NEMO usage event questions. The NEMO harvester now prioritizes data from usage events (what users actually did during their session) over reservation data (what they planned to do), using a three-tier fallback strategy that checks post-run questions, pre-run questions, and finally reservation questions to maximize record accuracy. (Sponsored by UPenn/Singh Center for Nanotechnology, thank you!) (#33)
Documentation improvements
- Add comprehensive documentation about features, development, and deployment of the CDCS-based frontend. These docs are kept in this repository to have one common documentation site. (#28)
- Refreshed the NexusLIMS logo to be more modern!
Miscellaneous/Development changes
- Updated integration test infrastructure to use CDCS 3.18.0. Replaced username/password authentication with API token-based authentication throughout the codebase and test fixtures. Added
NX_TEST_MODEenvironment variable to conditionally disable Pydantic validation during testing. (Sponsored by UPenn/Singh Center for Nanotechnology, thank you!) (#30)
Full Changelog: v2.2.0...v2.3.0