v0.31.0
rishikanthc/Scriberrv0.31.0Jul 2, 2026by github-actions[bot]
AI Summary
A major update introducing table branches, OAuth configuration, blob v2 schema support, and Polars integration, alongside breaking changes to index statistics and query filter handling.
Key Highlights
- Introduction of table branch support for version control.
- Full support for OAuth connection configuration across Python and Node.
- New Blob v2 schema, read, and materialization APIs.
- Integration with Polars DataFrames.
- FM-Index scalar index for substring search.
Breaking Changes
- drop unused loss field from IndexStatistics
- combine repeated where filters with AND instead of replacing
New Features
- unify sync create_index API to match async API
- support remote tables in PyTorch dataloaders
- add update_field_metadata to edit per-field metadata
- add table branch support
- support FM-Index scalar index for substring search
- add polars dataframe integration
- add OAuth connection config
- add approx mode to vector queries
- re-export arrow and datafusion crates from lancedb
Full Release Notes
## 🛠 Breaking Changes - refactor!: drop unused loss field from IndexStatistics by @wjones127 in https://github.com/lancedb/lancedb/pull/3496 - fix!: combine repeated where filters with AND instead of replacing by @wjones127 in https://github.com/lancedb/lancedb/pull/3585 ## 🎉 New Features - feat(python): unify sync create_index API to match async API by @wjones127 in https://github.com/lancedb/lancedb/pull/2882 - feat(table): route merge_insert through the MemWAL LSM write path by @touch-of-grey in https://github.com/lancedb/lancedb/pull/3354 - feat(python): support remote tables in PyTorch dataloaders by @Xuanwo in https://github.com/lancedb/lancedb/pull/3432 - feat: add update_field_metadata to edit per-field metadata by @brendanclement in https://github.com/lancedb/lancedb/pull/3482 - feat: deprecate replace_field_metadata for update_field_metadata by @brendanclement in https://github.com/lancedb/lancedb/pull/3484 - feat(python): support blob modes in query to_pandas by @BubbleCal in https://github.com/lancedb/lancedb/pull/3487 - feat(rust): support datafusion expressions for merge insert predicates by @Ar-maan05 in https://github.com/lancedb/lancedb/pull/3444 - feat(remote): implement set/unset_lsm_write_spec REST variant by @hamersaw in https://github.com/lancedb/lancedb/pull/3501 - feat: add table branch support by @brendanclement in https://github.com/lancedb/lancedb/pull/3490 - feat: support checking out a version on a branch by @brendanclement in https://github.com/lancedb/lancedb/pull/3504 - feat: support FM-Index scalar index for substring search by @jackye1995 in https://github.com/lancedb/lancedb/pull/3532 - feat: adds isin support to the 'Expr' builder by @stumpylog in https://github.com/lancedb/lancedb/pull/3523 - feat: expand IndexConfig with rich per-index metadata by @wjones127 in https://github.com/lancedb/lancedb/pull/3497 - feat(python): accept Expr in Table.delete and merge when_not_matched_by_source_delete by @stumpylog in https://github.com/lancedb/lancedb/pull/3524 - feat: support rename_table on LanceNamespaceDatabase by @nuthalapativarun in https://github.com/lancedb/lancedb/pull/3520 - feat(bindings): expose new IndexConfig fields in Python and Node.js by @wjones127 in https://github.com/lancedb/lancedb/pull/3534 - feat: skills to connect and update column metadata by @dantasse in https://github.com/lancedb/lancedb/pull/3541 - feat: add table branch support to remote tables and Python/TS bindings by @brendanclement in https://github.com/lancedb/lancedb/pull/3540 - feat(query): add approx mode to vector queries by @BubbleCal in https://github.com/lancedb/lancedb/pull/3549 - feat: send read-freshness signal on the lance-namespace path by @brendanclement in https://github.com/lancedb/lancedb/pull/3551 - feat(rust): add blob v2 schema declaration and write path by @geruh in https://github.com/lancedb/lancedb/pull/3528 - feat(rust): add blob read and materialization APIs by @geruh in https://github.com/lancedb/lancedb/pull/3562 - feat(rust): add OAuth header provider by @jackye1995 in https://github.com/lancedb/lancedb/pull/3579 - feat(python): expose OAuth connection config by @jackye1995 in https://github.com/lancedb/lancedb/pull/3586 - feat(node): expose OAuth connection config by @jackye1995 in https://github.com/lancedb/lancedb/pull/3587 - feat: add skill to work with branches better by @dantasse in https://github.com/lancedb/lancedb/pull/3596 - feat: add polars dataframe integration by @westonpace in https://github.com/lancedb/lancedb/pull/3584 - feat(remote): monotonic reads via x-lancedb-min-read-version watermark by @jackye1995 in https://github.com/lancedb/lancedb/pull/3597 - feat(rust): re-export arrow and datafusion crates from lancedb by @wjones127 in https://github.com/lancedb/lancedb/pull/3576 ## 🐛 Bug Fixes - feat(python): support blob modes in query to_pandas by @BubbleCal in https://github.com/lancedb/lancedb/pull/3487 - fix(rerankers/mrr): raise ValueError on empty vector_results list by @devteamaegis in https://github.com/lancedb/lancedb/pull/3469 - fix(rerankers): guard against empty vector_results in RRFReranker.rerank_multivector by @devteamaegis in https://github.com/lancedb/lancedb/pull/3467 - fix(python): route blob query pandas through scanner by @BubbleCal in https://github.com/lancedb/lancedb/pull/3491 - fix(python): make LanceDBClientError pickleable by @hashwnath in https://github.com/lancedb/lancedb/pull/3470 - fix(python): run AsyncTable.search embeddings on a dedicated executor by @Ar-maan05 in https://github.com/lancedb/lancedb/pull/3459 - fix(python): push down namespace full reads by @BubbleCal in https://github.com/lancedb/lancedb/pull/3516 - fix(util): convert numpy scalars in value_to_sql by @devteamaegis in https://github.com/lancedb/lancedb/pull/3522 - fix(nodejs): treat NAPI_RS_FORCE_WASI as truthy only when set to 'true' by @nuthalapativarun in https://github.com/lancedb/lancedb/pull/3519 - fix: support LargeList label list indexes by @Xuanwo in https://github.com/lancedb/lancedb/pull/3529 - fix(python): raise clear TypeError for bare List/Tuple in pydantic schema conversion by @Ar-maan05 in https://github.com/lancedb/lancedb/pull/3511 - fix(rust): report local write progress bytes from Lance by @GHX5T-SOL in https://github.com/lancedb/lancedb/pull/3422 - fix(util): escape single quotes in struct field names in value_to_sql by @JSap0914 in https://github.com/lancedb/lancedb/pull/3548 - fix(python): clarify single dictionary input error by @whitewooood in https://github.com/lancedb/lancedb/pull/3537 - fix(rust): return typed errors instead of panicking in Bedrock embedding path by @Ar-maan05 in https://github.com/lancedb/lancedb/pull/3512 - fix(ci): allow shell pre-commit hooks in bumpversion configs by @wjones127 in https://github.com/lancedb/lancedb/pull/3554 - fix: overflow using sys.maxsize for k in query with namespace connection by @rpgreen in https://github.com/lancedb/lancedb/pull/3561 - fix: parse RFC 3339 created_at and improve IndexConfig repr by @wjones127 in https://github.com/lancedb/lancedb/pull/3558 - fix: add missing stacklevel=2 to warnings.warn() and fix broken message concatenation (Fixes #3563) by @rtmalikian in https://github.com/lancedb/lancedb/pull/3564 - fix(remote): omit empty api key header by @jackye1995 in https://github.com/lancedb/lancedb/pull/3573 - fix(remote): support namespace clients with dynamic headers by @jackye1995 in https://github.com/lancedb/lancedb/pull/3574 - fix: ensure read freshness provider is built into namespace client by @rpgreen in https://github.com/lancedb/lancedb/pull/3571 - fix(python): raise clear error when permutation API is used on remote tables (Fixes #2934) by @rtmalikian in https://github.com/lancedb/lancedb/pull/3591 - fix: add missing stacklevel=2 to warnings.warn() calls (Fixes #3589) by @rtmalikian in https://github.com/lancedb/lancedb/pull/3590 - fix(python): route sync namespace connections through rust by @jackye1995 in https://github.com/lancedb/lancedb/pull/3598 - fix(python): route async namespace connections through rust by @jackye1995 in https://github.com/lancedb/lancedb/pull/3603 - fix!: combine repeated where filters with AND instead of replacing by @wjones127 in https://github.com/lancedb/lancedb/pull/3585 - fix(python): average MRR reciprocal ranks over all rankings by @Ar-maan05 in https://github.com/lancedb/lancedb/pull/3599 ## 📚 Documentation - docs: add cross-SDK parity guidance for code review by @brendanclement in https://github.com/lancedb/lancedb/pull/3464 - docs(python): add missing parameter documentation for when_matched_update_all by @Neo-X7 in https://github.com/lancedb/lancedb/pull/3536 ## 🚀 Performance Improvements - perf: migrate list_indices to use Lance's describe_indices by @wjones127 in https://github.com/lancedb/lancedb/pull/3108 - perf: drop N+1 in RemoteTable::list_indices by @wjones127 in https://github.com/lancedb/lancedb/pull/3535 ## Other Changes - refactor: extract create_index module from table.rs by @wirybeaver in https://github.com/lancedb/lancedb/pull/3521 ## 🔧 Build and CI - ci: fix pypi publish on mac/windows/arm by @wjones127 in https://github.com/lancedb/lancedb/pull/3449 - ci: drop manylinux2_17 wheel builds by @wjones127 in https://github.com/lancedb/lancedb/pull/3455 - ci: move Lance dependency bump flow into skill by @Xuanwo in https://github.com/lancedb/lancedb/pull/3475 - ci: update python lockfile weekly by @wjones127 in https://github.com/lancedb/lancedb/pull/3498 - ci: update deprecated GitHub Actions to latest versions (Fixes #3577) by @rtmalikian in https://github.com/lancedb/lancedb/pull/3608