Skip to content

Releases: datasophos/NexusLIMS

NexusLIMS 2.7.1

26 May 03:48

Choose a tag to compare

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 id attribute 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 sync

Full changelog

v2.7.0...v2.7.1

NexusLIMS 2.7.0

25 May 02:15

Choose a tag to compare

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_RECORDS setting (default false): 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_WORKSPACE setting (default true): 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_TOKEN to belong to a superuser account when NX_CDCS_USER_OWNED_RECORDS is 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 sync

Full changelog

v2.6.2...v2.7.0

NexusLIMS 2.6.2

27 Apr 02:51

Choose a tag to compare

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 dimension in raw-file depth plots by deriving the x-axis from the actual EventList shape rather than the NbrWrites root attribute, which can disagree by one.

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 sync

Full changelog

v2.6.1...v2.6.2

NexusLIMS 2.6.1

10 Apr 04:59

Choose a tag to compare

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)

  • QuantaTiffExtractor has been renamed to FeiTiffExtractor and now supports both FEI SEM (INI-style) and FEI TEM (<Root> XML) TIFF metadata formats
  • The old quanta_tif module 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 .msa and .spc spectrum file formats (EDAX)

Bug Fixes

  • Fixed KeyError exceptions in the DM3/DM4 extractor for files missing a Name key, 24-hour timestamps, and EELS TagGroups without an Operation key. (#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_voltage and stage_position to the base NexusMetadata class; added acquisition_device and horizontal_field_width to SpectrumMetadata. (#100)

Documentation Improvements

  • Added CLI reference and extractor documentation for the nexuslims extract command. (#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 sync

Full changelog

v2.6.0...v2.6.1

NexusLIMS 2.6.0

20 Mar 03:57

Choose a tag to compare

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 view command 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 view CLI 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 sync

Full changelog

v2.5.1...v2.6.0

NexusLIMS 2.5.1

20 Feb 05:35

Choose a tag to compare

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 on lxml.

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 deprecated requests-ntlm
    and defusedxml dependencies. (#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 sync

Full Changelog

v2.5.0...v2.5.1

NexusLIMS 2.5.0

19 Feb 05:43

Choose a tag to compare

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 upgrade

The 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, and calendar_name (all were unused/deprecated).
  • Renamed column in instruments: schema_namedisplay_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-records

All 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 init to create and stamp the database.
  • Existing installation: run nexuslims db upgrade to 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. Standard pip install nexusLIMS and uv pip install nexusLIMS also work. All commands function immediately after install, even without a pre-existing .env file. (#74)
  • Unified nexuslims CLI with tab completion: All commands (build-records, config, db, instruments) are now subcommands of a single nexuslims entry point. Run nexuslims completion to enable shell tab completion. (#76, #78)
  • nexuslims db command: 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 via nexuslims db alembic. (#67)
  • nexuslims config edit TUI: Interactive terminal form for editing the .env configuration, organised into seven tabs. Supports adding, editing, and deleting NEMO harvester instances and toggling optional sections (eLabFTW, email). (#70)
  • nexuslims instruments manage TUI: 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 json for 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__.py that caused import-time validation errors when NexusLIMS was imported without a configured .env. CA bundle configuration is now loaded lazily. (#74)

Documentation Improvements

Internal / Miscellaneous

  • Comprehensive test infrastructure unification: centralized singleton management, unified test instrument data with a single TEST-TOOL PID, and automatic test marking by location (unit/integration). (#73)

Full Changelog: v2.4.1...v2.5.0

NexusLIMS 2.4.1

07 Feb 04:21

Choose a tag to compare

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 --from and --to options to nexuslims-process-records for filtering sessions by date range
  • Process specific time periods, e.g., --from 2025-01-01 --to 2025-01-31 for all January 2025 sessions
  • Both date bounds are inclusive (the --to date includes all sessions ending by 23:59:59 on that day)
  • Changed default --from value to one week prior to today's date. Use --from=none and do not supply --to to disable date filtering and harvest usage events from all time

Configuration Management (#64)

  • Added nexuslims-config dump and nexuslims-config load commands 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_VERIFY configuration 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 .dm3 Diffraction files
  • magnification and stage_position are 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 Location header differs from base_url in host or port (e.g., localhost deployments)
  • Experiment and upload IDs now extracted from the last path segment of the Location URL instead of relying on prefix-stripping

Documentation improvements

  • CLI Reference (#47): Added comprehensive documentation covering all nexuslims-process-records command-line options including new date filtering
    flags
  • Configuration Example (#65): Updated .env.example to match current configuration surface, fixed stale repository links, removed unused variables, added missing NX_EXPORT_STRATEGY
  • Configuration Reference (#63): Added NX_EXPORT_STRATEGY to configuration reference with descriptions of each valid value
  • Local Deployment (#44): Added note about setting NX_CERT_BUNDLE_FILE when using mkcert for 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 sync

Upgrade Notes

No breaking changes or database migrations required for this release.

NexusLIMS 2.4.0

03 Feb 04:20

Choose a tag to compare

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 head after upgrading. The previous nexusLIMS.cdcs.upload_record_files() function has been removed; use nexusLIMS.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

20 Jan 01:10

Choose a tag to compare

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_SENSITIVITY configuration 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 to 0 disables 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_MODE environment 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