Skip to content

Releases: laminlabs/lamindb

Release 1.16.2

14 Nov 00:20

Choose a tag to compare

See https://docs.lamin.ai/changelog/2025#db-1-16-2

What's Changed

  • 🐛 Fix re-validating an existing artifact with an external schema and external features by @falexwolf in #3288

Full Changelog: 1.16.1...1.16.2

Release 1.16.1

13 Nov 13:46

Choose a tag to compare

See https://docs.lamin.ai/changelog/2025#db-1-16-1

What's Changed

  • 🐛 Do not log CLI args in notebooks by @falexwolf in #3283
  • 🚸 Log if switching to read-only storage location of another instance also when using ln.settings.storage by @falexwolf in #3284
  • 📝 Clarify logging and language around writing/managing instance by @falexwolf in #3286
  • 🐛 Fix Artifact from http URL if leveraging virtual keys by @Koncopd in #3287

Full Changelog: 1.16.0...1.16.1

Release 1.16.0

12 Nov 10:21

Choose a tag to compare

See https://docs.lamin.ai/changelog/2025#db-1-16-0

What's Changed

  • ⬆️ Support anndata up to 0.12.5 by @Koncopd in #3264
  • 🐛 Rework _query_relatives by @Koncopd in #3265
  • 🐛 Enable passing a list of records to record.features.add_values() by @falexwolf in #3266
  • ♻️ Properly deprecate itype='Composite' by @falexwolf in #3268
  • ♻️ Re-organize .features.add_values() and .features.remove_values() tests and make consistent across Artifact & Record by @falexwolf in #3269
  • ♻️ Refactor and simplify FeatureManager.remove_values() by @falexwolf in #3271
  • ⬆️ No longer upper-bound pyarrow by 22.0 by @Zethson in #3272
  • ♻️ Refactor artifact test suite by @falexwolf in #3274
  • ♻️ Passing kwargs to from_source no longer recognize synonyms by @sunnyosun in #3273
  • ⬆️ Update bionty by @sunnyosun in #3275
  • ✨ Introduce artifact.features.set_values() by @falexwolf in #3276
  • 🚚 Deprecate the data argument of Artifact in favor of path and polish class docstrings by @falexwolf in #3277
  • 📝 Polish transform and run examples in the readme by @falexwolf in #3279
  • ✨ Make it easy to re-run scripts by tracking cli_args by @falexwolf in #3278
  • 🚚 Deprecate Registry.using() in favor of Registry.connect() by @falexwolf in #3280

Full Changelog: 1.15.2...1.16.0

Release 1.15.2

06 Nov 02:00

Choose a tag to compare

Release 1.15.1

06 Nov 01:37

Choose a tag to compare

See https://docs.lamin.ai/changelog/2025#db-1-15-1

What's Changed

  • 🐛 Deal with corrupted state in which no is_latest record is found by @falexwolf in #3256
  • 📝 Improve Records docs by @falexwolf in #3255
  • ✅ Test prevent any access on jwt connections without a db token by @Koncopd in #3257
  • ✅ Test unit-core with zarr v3 by @Koncopd in #3258
  • ⬆️ Upgrade lamindb-setup by @Koncopd in #3260
  • 🐛 Correctly deal with None, date, and datetime in .features.add_values() by @falexwolf in #3261
  • ⬆️ Upgrade lamindb-setup by @Koncopd in #3262
  • 🐛 Cast int and float when loading from database where appropriate by @falexwolf in #3263
  • 🎨 Fix anndata version warnings by @Zethson in #3259

Full Changelog: 1.15.0...1.15.1

Release 1.15.0

30 Oct 08:20

Choose a tag to compare

See https://docs.lamin.ai/changelog/2025#db-1-15-0

What's Changed

  • ⚡️ More optimal recursive childrens query by @falexwolf in #3238
  • 🚸 Enable passing parquet_kwargs to Artifact.from_dataframe() for configuring pyarrow.ParquetWriter by @falexwolf in #3239
  • 🚸 Also support external features in DataFrameCurator by @falexwolf in #3240
  • 📝 Simplify API reference by @falexwolf in #3241
  • 🚸 Also introduce csv_kwargs for Artifact.from_dataframe() by @falexwolf in #3242
  • 🐛 Allow features.remove_values() to work with features of dtype=list[cat] by @sunnyosun in #3237
  • ♻️ Simplify features.add_values() and improve logging messages by @falexwolf in #3243
  • 📝 Refactor Record docs by @falexwolf in #3245
  • ✨ Add Record.features to conveniently populate features of records by @falexwolf in #3246
  • 🐛 Handle run=None correctly when populating subsequent creating runs of collections by @falexwolf in #3247
  • ✨ Enable constraining features by schema in record.features.add_values() and record.features.remove_values() by @falexwolf in #3248
  • 🐛 Fix to_dataframe() with features by @Koncopd in #3249
  • 🗃️ Remove db_index on Reference.text field by @falexwolf in #3250
  • ⚡ Speed up add_values() and add tests for more feature dtypes by @falexwolf in #3251
  • 🚸 Improve the UX for the local development directory by @falexwolf in #3252

Full Changelog: 1.14.0...1.15.0

Release 1.14.0

27 Oct 08:44

Choose a tag to compare

See https://docs.lamin.ai/changelog/2025#db-1-14-0

What's Changed

  • ✏️ Fix coherce_dtype in schema.describe by @sunnyosun in #3181
  • 📝 Improve bioregistry guide by @sunnyosun in #3182
  • 🎨 Raise error in curators when dtype is list but values are not by @sunnyosun in #3183
  • 💄 Strip cat from feature dtype display by @falexwolf in #3185
  • ♻️ Improve dealing with ad hoc annotations of lists of categorical features by @falexwolf in #3184
  • 💄 Better way of displaying the schema slot identifier type in .describe() by @falexwolf in #3186
  • 🐛 Set db tokens for connections in all contexts (threads, tasks), disable task-specific database wrappers in jupyter for ipykernel>=7.0.0 by @falexwolf in #3172
  • ♻️ Adapt curator tests to new describe() format by @falexwolf in #3190
  • 🐛 Fix a bug that prevented re-curating existing artifacts in some cases by @falexwolf in #3187
  • ⬆️ Support fsspec 2025.9.0 by @Koncopd in #3192
  • ♻️ Enable bulk-re-creating records that would violate a unique constraint by @sunnyosun in #3189
  • 🐛 Exclude records in trash from unique constraint on name under a type, add name uniqueness under a type and is_valid_type constraints to all typed entities by @falexwolf in #3191
  • 🚸 Populate reference and reference_type for sliding transforms by @sunnyosun in #3193
  • ♻️ Fix type annotation and double-loading of dataframe in DataFrameCurator by @falexwolf in #3194
  • ♻️ Add a RecordRun link model by @falexwolf in #3195
  • 🐛 Capture outputs of root logger in LogStreamTracker by @falexwolf in #3196
  • ♻️ Enable run.describe() by @falexwolf in #3197
  • 🚸 Return a SQLRecordList in Artifact.from_dir() by @falexwolf in #3198
  • 🚸 Enable passing sync_git_repo via env variable by @falexwolf in #3199
  • 🚸 Clearer error and logging messages for sync_git_repo and ln.finish() by @falexwolf in #3200
  • ♻️ Refactor removing features by @falexwolf in #3202
  • 🐛 Also include key & storage location in error handling upon skip_hash_lookup = True by @falexwolf in #3203
  • 🚸 Add fallback behavior if artifact was moved in storage by @falexwolf in #3204
  • 🚸 Better dialogue for user delete within existing storage location by @falexwolf in #3205
  • 🚸 Better message upon start of a script in ln.track() by @falexwolf in #3206
  • 🚸 Ask for extra storage-level delete confirmation in case _real_key is not None by @falexwolf in #3207
  • 🔧 Set max_pool_connections=64 by default for s3fs filesystem by @Koncopd in #3210
  • 🚚 Deprecate dtype='cat' in favor of dtype=ln.Record by @falexwolf in #3208
  • ♻️ Move define_valid_features.py and similar scripts into the package by @falexwolf in #3211
  • 🚸 Improve Schema.describe(), harmonize with describe() of Artifact, Collection, and Run by @falexwolf in #3213
  • 💄 Simplify lineage & ontology graph displays by @falexwolf in #3215
  • ✅ More tests and comments regarding recovering items from trash based on hash by @falexwolf in #3219
  • 🔊 Log writing in-memory objects into cache on artifact creation by @Koncopd in #3220
  • ⬆️ Upgrade lamindb-setup by @fredericenard in #3214
  • 🚸 Allow features to have reserved Django field names by @sunnyosun in #3209
  • 🚸 Re-design .describe() and refactor the related code base by @falexwolf in #3218
  • 🐛 Fix exporting sheets with User feature by @sunnyosun in #3221
  • 🐛 Fix s3 upload and download problems arising from local aws configs by @Koncopd in #3222
  • 🐛 Fix migration of PR3221 by @sunnyosun in #3225
  • 🎨 Correctly handle empty lists in curation by @sunnyosun in #3224
  • ⬆️ Upgrade lamindb-setup by @Koncopd in #3227
  • ✨ Add transform.describe() by @falexwolf in #3226
  • 🚸 Clearer and more consistent .to_dataframe() - indicate including features via include="features" by @falexwolf in #3230
  • 🚸 Enable users to annotate & validate without having to learn about the Schema concept by @falexwolf in #3231
  • 📝 README v4 by @falexwolf in #3216
  • 🩹 Minor fixes in backward compat calls and README by @falexwolf in #3232
  • ♻️ Serialize Iterable of SQLRecord in params tracking by @falexwolf in #3233
  • ♻️ Allow collections with duplicated artifacts by @falexwolf in #3235
  • 🐛 Attach schema when validating with external features by @falexwolf in #3236
  • ⬆️ Upgrade Django to 5.2 by @falexwolf in #3234
  • 🐛 Respect feature.dtype in FeatureManager.get_values() by @sunnyosun in #3229

Full Changelog: 1.13.1...1.14.0

Release 1.13.1

16 Oct 11:44

Choose a tag to compare

See https://docs.lamin.ai/changelog/2025#db-1-13-0

What's Changed

  • 🩹 Prettify logging related to automated lookups based on name and hash by @falexwolf in #3167
  • ♻️ Map features based on name instead of uid by @sunnyosun in #3168
  • ✅ Add tests for lightning integration module by @Zethson in #3159
  • 🐛 Fix bug in serializing dtypes from objects in deeply nested type hierarchies, expand tests by @falexwolf in #3169
  • 🔧 Introduce skip_hash_lookup for Collection by @falexwolf in #3170
  • 🚸 Format on-prem UI URLs by @falexwolf in #3173
  • 🚸 Add restore() to all registries with soft-delete by @falexwolf in #3175
  • 🐛 Never return existing transform with same key from trash by @falexwolf in #3176
  • ✨ Enable curating features with nested subtypes by @sunnyosun in #3174
  • ⬆️ Upgrade lamindb-setup by @Koncopd in #3178
  • ✨ Add Transform.from_git() by @falexwolf in #3177
  • 🥅 Better error message for trying to write on a public connection. by @Koncopd in #3179

Full Changelog: 1.13.0...1.13.1

Release 1.13.0

13 Oct 20:25

Choose a tag to compare

See https://docs.lamin.ai/changelog/2025#db-1-13-0

What's Changed

  • 📝 Fix docstrings of block models by @Koncopd in #3138
  • 🚸 Add clear errors for locked records, test RLS for locked records and Block models by @Koncopd in #3131
  • 🐛 Require a restricted storage location when writing an Artifact to a restricted space by @falexwolf in #3139
  • 🔧 Introduce a skip_hash_lookup argument for Artifact by @falexwolf in #3140
  • ⬆️ Upgrade lamindb-setup by @Koncopd in #3142
  • 🚸 Ignore cycles arising between input artifacts and re-created artifacts by @falexwolf in #3143
  • ⚡️ Speed up Curator.add_new_from() by @sunnyosun in #3144
  • 🩹 Polish logging during ln.track() and small refactor in input tracking by @falexwolf in #3145
  • 🐛 Do not retrieve records from trash based on hash lookup by @falexwolf in #3146
  • 🐛 Various fixes for filtering by @Koncopd in #3147
  • 🚸 Better UX for lamin annotate CLI command by @falexwolf in #3150
  • 🐛 Fix schema mutation when removing features by @falexwolf in #3148
  • 🐛 Fix annotation with features of dtype = list[str] by @falexwolf in #3152
  • 🐛 Sanitize dataframe proxy for dict validation to enable schema-based validation of categoricals in dicts by @falexwolf in #3153
  • ♻️ All references to ln.examples.datasets and mini_immuno instead of their legacy counterparts by @falexwolf in #3154
  • 🐛 Fix hash calculation for hybrid composite schemas, refactor external feature annotation in Artifact.from_dataframe() by @falexwolf in #3155
  • 🚸 Limit name search upon record creation to records of same type by @falexwolf in #3156
  • 📝 Improve README by @falexwolf in #3157
  • ✨ Enable tracking run parameters without validation by @falexwolf in #3151
  • 📝 Polish the run docs by @falexwolf in #3158
  • ♻️ Serialize parameters to JSON by @falexwolf in #3161
  • ⬇️ Upper bount ipykernel to lower than 7.0.0 by @Koncopd in #3163
  • ♻️ Refactor local-to-cloud transfer notebooks by @falexwolf in #3164
  • ♻️ Canonicalize code organization in lightning integration by @falexwolf in #3166

Full Changelog: 1.12.1...1.13.0

Release 1.12.1

07 Oct 12:32

Choose a tag to compare

See https://docs.lamin.ai/changelog/2025#db-1-12-1

What's Changed

Full Changelog: 1.12.0...1.12.1