Changelog 2026ΒΆ

Note

Get notified by watching releases for git repositories: lamindb, laminhub-public, laminr, nf-lamin, and bionty.

For other years, see: 2025 Β· 2024 Β· 2023 Β· 2022

2026-01-20 hub 1.11.0ΒΆ

2026-01-14 hub 1.10.0ΒΆ

  • ✨ Add /artifacts/by-path endpoint PR @fredericenard

  • πŸ› Write run annotations on the Launch page into the RunRecord registry PR @falexwolf

  • πŸ“ Improve landing page - metadata and lakehouse sections PR @falexwolf

2026-01-13 hub 1.9.1ΒΆ

  • πŸ› More strictly enforce schema during UI-based record creation PR @chaichontat

  • πŸ› Broaden database server access permissions to include shared database servers PR @fredericenard

  • πŸ“ Improve landing page - introduce tags and improve language PR @falexwolf

2026-01-13 R 1.2.2ΒΆ

2026-01-12 nf 0.3.0ΒΆ

  • ✨ Implement FileSystem for lamin:// URIs PR @rcannood

  • ⬆️ Bump lamindb to v2 PR @falexwolf

  • 🚸 Update formatting of source_code when a new transform is created PR @rcannood

  • πŸ“ Add version compatibility table PR @rcannood

2026-01-12 hub 1.9.0ΒΆ

  • ✨ Transform search bar also understands run names and UIDs PR @chaichontat

  • 🚸 Default to not listing inferred schemas without names PR @chaichontat

  • πŸ› Fix the broken β€œNew schema” button on the records page due to lamindb v2 PR @chaichontat

  • πŸ› Fix the broken pipeline Launch button due to lamindb v2 PR @sunnyosun

2026-01-11 db 2.0.1ΒΆ

  • 🚸 Backward compatibility for querying features by dtype PR @falexwolf

2026-01-11 db 2.0.0ΒΆ

This release makes the database schema fully consistent and thereby improves UX, integrity, and enables long-term stability.

⚠️ Your code should continue to run as is, but you will receive warnings about renamed API components.

Main changes:

What

Before

After

Backward compatible

Function tracking

@ln.tracked()

@ln.flow(), @ln.step()

βœ“

Feature field

dtype

_dtype_str

βœ“

Schema field

n

n_members

βœ“

IsVersioned field

version

version_tag

βœ“

Transform field

type

kind

βœ“

Artifact field

feature_sets

schemas

βœ“

Feature field

coerce_dtype

coerce

βœ“

Schema field

coerce_dtype

coerce

βœ“

FeatureValue registry

FeatureValue

JsonValue

βœ“

Private fields that are now public:

What

Before

After

Backward compatible

Artifact field

_subsequent_runs

recreating_runs

βœ—

Artifact field

_feature_values

json_values

βœ—

Run field

_recreated_artifacts

recreated_artifacts

βœ—

SQLRecord field

_branch_code (only on DB-level)

branch_id

βœ—

Changes to auxiliary (JSON) fields:

What

Before

After

Backward compatible

Run field

cli_args (in _aux)

cli_args (CharField(max_length=1024))

βœ“

Feature field

default_value (in _aux)

default_value (JSONField)

βœ“

Feature field

nullable (in _aux)

nullable (BooleanField)

βœ“

Schema field

flexible (in _aux)

flexible (BooleanField)

βœ“

Artifact field

_is_saved_to_storage_location (in _aux)

_save_completed (in _aux)

βœ—

On link models with labels:

What

Before

After

Backward compatible

IsLink model

feature_ref_is_name

removed

βœ—

IsLink model

label_ref_is_name

removed

βœ—

For completeness, changes in recently introduced unused API components:

What

Before

After

Backward compatible

RootBlock registry

RootBlock

Block

βœ—

Block field

context

key

βœ—

BaseBlock field

type

kind

βœ—

Run field

_logfile

removed

βœ—

Transform field

config

removed

βœ—

Transform field

flow

removed

βœ—

Transform field

is_flow

removed

βœ—

Transform field

_template

removed

βœ—

Changes in the bionty and wetlab modules:

What

Before

After

Backward compatible

BioRecord registry

uid (X chars)

uid (14 chars)

* .get() of the X chars uid continues to work

* uids are re-encoded to 14 chars with the first X chars conserved.

Changes in the wetlab module:

What

Before

After

Backward compatible

Experiment registry

Experiment

removed

βœ—

BioSample registry

BioSample

removed

βœ—

TechSample registry

TechSample

removed

βœ—

Donor registry

Donor

removed

βœ—

Well registry

Well

removed

βœ—

GeneticPerturbation field

system

type

βœ—

CompoundPerturbation field

targets

removed

βœ—

Compound field

targets

βœ“

If you have data in removed registries you’ll see a warning that your data gets exported to parquet files. You can import these parquet files into the Record registry under an Experiment type without losing of functionality.

⚠️ After migrating databases to v2 via lamin migrate deploy lamindb package installations with v1 will raise errors. This is the last planned database migration that breaks older clients.

All instances connected to LaminHub have been migrated and there is no need to act.

If you are an admin of a self-managed instance, please migrate your database with lamin migrate deploy.

For details see the Compatibility Matrix and the source code.

⚠️ For laminr and nf-lamin users

For laminr users with an auto-managed reticulate environment, please run this:

reticulate::py_require("lamindb>=2.0.1") # DO THIS FIRST
ln <- laminr::import_module("lamindb")

For nf-lamin users, please upgrade to 0.3.0.

Features:

  • ✨ Track shell scripts PR @falexwolf

  • ✨ Enable managing workflows by decorating functions with @ln.flow() and @ln.step() and deprecate @ln.tracked() PR @falexwolf

Architecture:

  • πŸ—οΈ For more robustness and to convey the field’s special nature in the API and the database schema, replace Feature.dtype with Feature._dtype_str to now hold a serialization that links object types (Record + ULabel) based on their uid instead of their name and type hierarchy PR @falexwolf

UX:

  • 🚸 Add feature.dtype_as_object PR @sunnyosun

  • 🚸 Add description argument to Transform.from_git() PR @falexwolf

  • 🚸 Allow passing _key_is_virtual on Artifact creation PR @Koncopd

  • 🚸 Raise SystemExit upon InstanceNotFound only from CLI PR @falexwolf

  • 🚸 Raise error for init or import issues in lamin io snapshot PR @Zethson

  • 🚸 Do not track inputs when calling collection.artifacts.all() PR @Koncopd

  • 🚸 Raise a clear error if calling CanCurate and similar registry class methods on objects PR @falexwolf

  • 🚸 Sort features in describe() PR @falexwolf

Database-level changes:

  • πŸ—ƒοΈ Rename RootBlock to Block with a column key akin to Artifact and Transform PR @falexwolf

  • πŸ—ƒοΈ Refactor _storage_completed mechanism and remove unique constraints on type names PR @falexwolf

  • πŸ—ƒοΈ Migrate most auxiliary fields to SQL columns PR @falexwolf

  • πŸ—ƒοΈ Simplify Transform PR @falexwolf

  • πŸ—ƒοΈ Rename IsVersioned.version to IsVersioned.version_tag, Transform.type to Transform.kind, FeatureValue to JsonValue, BaseBlock.type to BaseBlock.kind, delete Transform._template and Run._logfile PR @falexwolf

  • πŸ—ƒοΈ Rename Artifact._subsequent_runs to Artifact.recreating_runs and Run._recreated_artifacts to Run.recreated_artifacts PR @falexwolf

  • πŸ—ƒοΈ Rename SQLRecord._branch_code to SQLRecord.branch_id and remove feature_ref_is_name and label_ref_is_name fields from link models PR @falexwolf

  • πŸ—ƒοΈ Rename Artifact.feature_sets to Artifact.schemas PR @falexwolf

  • πŸ—ƒοΈ Migrate the Feature and Schema database tables to LaminDB v2 PR @falexwolf

  • πŸ—ƒοΈ Swap accessor names for SchemaComponent links, consistent ManyToMany field names for RecordRecord links PR @falexwolf

  • πŸ—ƒοΈ Better names for the ManyToMany fields for the annotating runs and artifacts of an Artifact PR @falexwolf

Bug fixes:

Bionty:

Wetlab:

  • πŸ—ƒοΈ Migrations for wetlab v2 PR @sunnyosun

  • πŸ—ƒοΈ Migrations for LaminDB v2 PR @falexwolf

  • πŸ—ƒοΈ Create a composite index for artifact, perturbationtarget fields in ArtifactPerturbationTarget PR @Koncopd

  • πŸ—ƒοΈ Create a composite index for artifact, geneticperturbation fields in ArtifactGeneticPerturbation PR @Koncopd

Docs:

  • πŸ“ Improve the Space document PR @falexwolf

  • πŸ“ Improve the Artifact.replace() docs PR @falexwolf

  • πŸ“ Improve FAQ doc on trashing and archiving PR @falexwolf

  • πŸ“ Render return type annotations of Artifact.open() in docs PR @falexwolf

Config:

Removals:

  • πŸ”₯ Remove the API components that were deprecated upon transitioning from LaminDB v0 to v1 PR @falexwolf

Refactoring:

  • ♻️ Refactor require_organism PR @sunnyosun

  • ♻️ Better re-use Django’s ObjectDoesNotExist and MultipleObjectsReturned PR @falexwolf

  • ♻️ Return file size in hash_file() PR @falexwolf

  • ♻️ Squash migrations and re-build SQLite init database PR @falexwolf

  • ♻️ More verbose migration integrity check PR @falexwolf

  • ♻️ Call lamin migrate deploy even if initializing from pre-built sqlite file PR @falexwolf

Dependencies:

  • ⬆️ Bump fsspec packages upper bound PR @Koncopd

  • ⬆️ Bump anndata upper bound PR @Koncopd

  • ⬆️ Set the correct lower bound for websockets PR @Koncopd

2026-01-11 hub 1.8.0ΒΆ

  • πŸ› Fix special character handling in filters PR @chaichontat

  • πŸ› Fix filtering state leakage across different pages PR @chaichontat

  • πŸ› Fix feature hover card not functioning correctly PR @chaichontat

2026-01-03 hub 1.7.0ΒΆ