| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| README.md | 2026-09-17 | 22.1 kB | |
| v12.0.0 source code.tar.gz | 2026-09-17 | 20.5 MB | |
| v12.0.0 source code.zip | 2026-09-17 | 21.7 MB | |
| Totals: 3 Items | 42.2 MB | 0 | |
What's Changed
Breaking Changes ๐
- feat(io)!: paginated directory listing on ObjectStore by @wjones127 in https://github.com/lance-format/lance/pull/8606
- perf(mem_wal)!: serve the shard manifest from the store that wrote it by @hamersaw in https://github.com/lance-format/lance/pull/8640
- feat(table): predecessor-conditioned publication for external manifest stores by @wkalt in https://github.com/lance-format/lance/pull/8800
- feat(namespace)!: accept multiple columns for the merge insert on key by @wjones127 in https://github.com/lance-format/lance/pull/8915
- feat: make data file parts serializable by @Xuanwo in https://github.com/lance-format/lance/pull/9072
- fix(index)!: do not route json_extract predicates to JSON indices by @westonpace in https://github.com/lance-format/lance/pull/9101
New Features ๐
- feat(java): support segment-based distributed vector search by @summaryzb in https://github.com/lance-format/lance/pull/7169
- feat(index): share IVF partition scans across batch vector queries by @sezruby in https://github.com/lance-format/lance/pull/7640
- feat(mem_wal): make write backpressure injectable and account index memory by @hamersaw in https://github.com/lance-format/lance/pull/7831
- feat(python): add Bitmap binding for RoaringBitmap by @wjones127 in https://github.com/lance-format/lance/pull/7837
- feat(python): add LanceDataset.slice() method by @Sapnilb15 in https://github.com/lance-format/lance/pull/8059
- fix(mem-wal): resolve writer shard spec identity by @u70b3 in https://github.com/lance-format/lance/pull/8112
- feat(python): expose more scanner options on LanceFragment by @keunhong in https://github.com/lance-format/lance/pull/8429
- perf(java): reduce fragment statistics allocations by @everySympathy in https://github.com/lance-format/lance/pull/8452
- feat(python): expose ObjectStoreProvider registration in pylance by @farazshaikh in https://github.com/lance-format/lance/pull/8522
- feat: add mixed data file version capability by @Xuanwo in https://github.com/lance-format/lance/pull/8580
- feat: validate mixed V2 data file versions by @Xuanwo in https://github.com/lance-format/lance/pull/8581
- feat: support per-operation V2 write targets by @Xuanwo in https://github.com/lance-format/lance/pull/8582
- feat: propagate exact V2 versions across dataset operations by @Xuanwo in https://github.com/lance-format/lance/pull/8583
- feat: target exact V2 versions in compaction by @Xuanwo in https://github.com/lance-format/lance/pull/8584
- feat(cleanup): support cleaning specific dataset versions by @hfutatzhanghb in https://github.com/lance-format/lance/pull/8617
- feat: resolve stable file format to 2.2 by @Xuanwo in https://github.com/lance-format/lance/pull/8657
- feat: add column slice stitching by @Xuanwo in https://github.com/lance-format/lance/pull/8660
- feat: support BinaryView in packed blob writer via iterator-based extraction by @lichuang in https://github.com/lance-format/lance/pull/8700
- feat(python): restore index retraining by @ddupg in https://github.com/lance-format/lance/pull/8786
- feat(encoding): add CANDIDATE_BATCH_SIZES and plan_decoded_bytes trait defaults by @westonpace in https://github.com/lance-format/lance/pull/8791
- feat(java): expose createIndex progress callbacks by @hfutatzhanghb in https://github.com/lance-format/lance/pull/8823
- feat(java): align inverted index options by @ddupg in https://github.com/lance-format/lance/pull/8829
- feat(mem_wal): let a writer read its own indexed prefix by @hamersaw in https://github.com/lance-format/lance/pull/8835
- fix(mem_wal): honor distance_range in the LSM vector planner by @hamersaw in https://github.com/lance-format/lance/pull/8845
- feat(python): return matched row offsets from fragment update_columns by @zhangyue19921010 in https://github.com/lance-format/lance/pull/8891
- feat(java): expose merge insert write mode by @zhangyue19921010 in https://github.com/lance-format/lance/pull/8918
- feat: budget blob materialization readahead by @jackye1995 in https://github.com/lance-format/lance/pull/8919
- feat: add caller-managed data file parts by @Xuanwo in https://github.com/lance-format/lance/pull/8923
- feat(java): complete transaction operation mappings by @everySympathy in https://github.com/lance-format/lance/pull/8925
- feat(index): default ivf_rq to 5-bit quantization by @BubbleCal in https://github.com/lance-format/lance/pull/8936
- feat(java): expose referenced file metadata by @everySympathy in https://github.com/lance-format/lance/pull/8962
- feat(mem_wal): record what a flushed SSTable holds by @xuanyu-z in https://github.com/lance-format/lance/pull/8981
- feat(index): proportional hierarchical k-means for IVF training by @BubbleCal in https://github.com/lance-format/lance/pull/9050
- feat(index): split IVF partitions to target size and join undersized ones in one optimize pass by @BubbleCal in https://github.com/lance-format/lance/pull/9051
- feat: expose public accessor for the fragment reuse index by @brendanclement in https://github.com/lance-format/lance/pull/9112
- feat(dataset): expose lance dataset deep clone to python by @dentiny in https://github.com/lance-format/lance/pull/9181
- feat(search): select metric-aware initial IVF probe budgets by @BubbleCal in https://github.com/lance-format/lance/pull/9195
Bug Fixes ๐
- fix: make float filters treat -0.0 and 0.0 as the same value by @LuciferYang in https://github.com/lance-format/lance/pull/6236
- fix(arrow): avoid duplicate field when merging identical List<struct> columns by @LuciferYang in https://github.com/lance-format/lance/pull/7494
- fix: don't fail dataset open on an undecodable inline transaction by @jackye1995 in https://github.com/lance-format/lance/pull/7740
- fix(core): reject non-finite values in AimdConfig::validate by @LuciferYang in https://github.com/lance-format/lance/pull/7942
- fix(index): replace scalar cache entries on store rotation by @u70b3 in https://github.com/lance-format/lance/pull/7962
- fix: validate primary key nullability on every path that can change it by @xuanyu-z in https://github.com/lance-format/lance/pull/8101
- fix(index): filter stale vector segment rows before top-k by @app/lance-gatefixer in https://github.com/lance-format/lance/pull/8351
- fix: cast nested columns during schema evolution by @app/lance-gatefixer in https://github.com/lance-format/lance/pull/8379
- fix(encoding): read wrapped miniblock level counts by @app/lance-gatefixer in https://github.com/lance-format/lance/pull/8410
- fix(index): keep an index this build cannot read out of the erase path by @wombatu-kun in https://github.com/lance-format/lance/pull/8427
- fix(index): keep a commit alive when an index cannot be opened by @wombatu-kun in https://github.com/lance-format/lance/pull/8441
- fix(python): declare LanceSchema.field and field_case_insensitive in the type stub by @jonasdedden in https://github.com/lance-format/lance/pull/8486
- fix(python): correct the misspelled materialize_deletions_threshold option by @jonasdedden in https://github.com/lance-format/lance/pull/8487
- fix(python): declare CompactionOptions with total=False by @jonasdedden in https://github.com/lance-format/lance/pull/8488
- fix(python): accept None for max_rows_per_group by @jonasdedden in https://github.com/lance-format/lance/pull/8489
- fix(python): let create_index_uncommitted accept an IndexConfig by @jonasdedden in https://github.com/lance-format/lance/pull/8490
- fix(python): declare the index training helpers as returning FixedSizeListArray by @jonasdedden in https://github.com/lance-format/lance/pull/8491
- fix(python): annotate LanceFragment.data_files and deletion_file by @jonasdedden in https://github.com/lance-format/lance/pull/8492
- fix(python): annotate count_rows, versions and optimize_indices by @jonasdedden in https://github.com/lance-format/lance/pull/8493
- fix(python): annotate BatchUDF and the batch_udf decorator by @jonasdedden in https://github.com/lance-format/lance/pull/8494
- fix: reject lossy null structs in v2.0 by @app/lance-gatefixer in https://github.com/lance-format/lance/pull/8507
- fix: support Time32 integer casts in filters by @app/lance-gatefixer in https://github.com/lance-format/lance/pull/8508
- fix(compaction): reject unsafe binary column layouts by @app/lance-gatefixer in https://github.com/lance-format/lance/pull/8510
- fix: keep LabelList index current after reordered merge insert by @app/lance-gatefixer in https://github.com/lance-format/lance/pull/8511
- fix(index): remap ZoneMap search results by @app/lance-gatefixer in https://github.com/lance-format/lance/pull/8512
- fix(compaction): avoid stranded remainder fragments by @app/lance-gatefixer in https://github.com/lance-format/lance/pull/8513
- fix(index): skip unrecognized index types by @app/lance-gatefixer in https://github.com/lance-format/lance/pull/8529
- fix(linalg): pick the sum-of-squares accumulator per element type by @LuciferYang in https://github.com/lance-format/lance/pull/8533
- fix: defer blank rows when a fully deleted batch has no row to copy by @LuciferYang in https://github.com/lance-format/lance/pull/8612
- fix(sql): include system columns when requested for SQL-based query by @dentiny in https://github.com/lance-format/lance/pull/8626
- fix(linalg): enforce the hamming_batch_u64 length contract in release by @LuciferYang in https://github.com/lance-format/lance/pull/8639
- fix(linalg): report AVX-512 test coverage by @app/lance-gatefixer in https://github.com/lance-format/lance/pull/8664
- fix: refuse to drop a path that is not a Lance dataset by @xiaguanglei in https://github.com/lance-format/lance/pull/8665
- fix: preserve typed DataFusion errors through Shared and ReplayExec by @app/copilot-swe-agent in https://github.com/lance-format/lance/pull/8677
- fix(linalg): correct multivector distance aggregation by @ddupg in https://github.com/lance-format/lance/pull/8710
- fix(io): prevent io_uring requests from hanging by @Xuanwo in https://github.com/lance-format/lance/pull/8725
- fix(io): reject unordered scheduler ranges by @app/lance-gatefixer in https://github.com/lance-format/lance/pull/8728
- fix(linalg): enforce cosine u8 length contract by @app/lance-gatefixer in https://github.com/lance-format/lance/pull/8737
- fix(fts): preserve global scoring for no-impact indexes by @BubbleCal in https://github.com/lance-format/lance/pull/8748
- fix(fts): canonicalize fuzzy expansion across segments by @BubbleCal in https://github.com/lance-format/lance/pull/8758
- fix(python): spell misnamed without a hyphen so the typos gate passes by @jackylee-ch in https://github.com/lance-format/lance/pull/8766
- fix(index): stream bulk index file copies by @jackye1995 in https://github.com/lance-format/lance/pull/8770
- fix(merge_insert): make analyze_plan follow execute's source routing by @LuciferYang in https://github.com/lance-format/lance/pull/8772
- fix(datagen): align random primitive buffers by @app/lance-gatefixer in https://github.com/lance-format/lance/pull/8776
- fix(fts): use substring-safe ngram defaults by @app/lance-gatefixer in https://github.com/lance-format/lance/pull/8779
- fix(python): don't seed IVF centroids with NaN vectors by @jonasdedden in https://github.com/lance-format/lance/pull/8782
- fix(ci): stabilize test_scan_slice against page-cache state by @RupertMaiti2005 in https://github.com/lance-format/lance/pull/8815
- fix(encoding): normalize out-of-range null dictionary keys by @app/lance-gatefixer in https://github.com/lance-format/lance/pull/8827
- fix(substrait): decode deprecated timestamp literals as microseconds by @jonasdedden in https://github.com/lance-format/lance/pull/8832
- fix(hnsw): make a persisted HNSW cover its rows and reject invalid ones by @xuanyu-z in https://github.com/lance-format/lance/pull/8834
- fix(mem_wal): seal the memtable on max_memtable_rows by @hamersaw in https://github.com/lance-format/lance/pull/8837
- fix(fs): fix dataset files permission on local filesystem by @dentiny in https://github.com/lance-format/lance/pull/8839
- fix(encoding): handle empty all-null dictionaries by @app/lance-gatefixer in https://github.com/lance-format/lance/pull/8841
- fix(index): widen the RaBitQ FastScan accumulator above 1024 dims by @wombatu-kun in https://github.com/lance-format/lance/pull/8842
- fix(index): declare FM index row address results by @app/lance-gatefixer in https://github.com/lance-format/lance/pull/8855
- fix(linalg): widen u8 distance accumulators by @app/lance-gatefixer in https://github.com/lance-format/lance/pull/8888
- fix: resolve clone sources with source commit handler by @Xuanwo in https://github.com/lance-format/lance/pull/8902
- fix(index): key metadata cache on manifest etag by @ChilePiquin in https://github.com/lance-format/lance/pull/8904
- fix(linalg): distinguish arrow batch type errors by @app/lance-gatefixer in https://github.com/lance-format/lance/pull/8911
- fix(fts): align v1 merge reads with writer batches by @BubbleCal in https://github.com/lance-format/lance/pull/8922
- fix: preserve complete blob v2 logical schemas by @Xuanwo in https://github.com/lance-format/lance/pull/8929
- fix(io): carry batch_size_bytes through distributed FilteredReadOptions by @lichuang in https://github.com/lance-format/lance/pull/8933
- fix(encoding): accept 1-bit booleans in the single-row full-zip fallback by @zhangyue19921010 in https://github.com/lance-format/lance/pull/8934
- fix: avoid panic when rebasing a commit whose read version was cleaned up by @qiuyuhang in https://github.com/lance-format/lance/pull/8935
- fix(io): reject non-lowercase GooseFS storage_options keys by @XuQianJin-Stars in https://github.com/lance-format/lance/pull/8940
- fix(io): parse GooseFS chunk/block size suffixes like 4MB by @XuQianJin-Stars in https://github.com/lance-format/lance/pull/8943
- fix: remove namespace-managed clone handler plumbing by @Xuanwo in https://github.com/lance-format/lance/pull/8964
- fix(sql): classify malformed SQL queries as invalid input by @wjones127 in https://github.com/lance-format/lance/pull/8974
- fix: let analyze_plan run under a caller-provided TaskContext by @LuQQiu in https://github.com/lance-format/lance/pull/8980
- fix(index): prevent maintenance from undoing index drops by @app/lance-gatefixer in https://github.com/lance-format/lance/pull/8984
- fix(java): remove duplicate IntoJava impl for &BasePath by @LuciferYang in https://github.com/lance-format/lance/pull/8990
- fix: count only visible nulls in the 2.1+ writer by @jackye1995 in https://github.com/lance-format/lance/pull/9020
- fix(mem_wal): run grace eviction on its own task, not the flush handler's ticker by @xuanyu-z in https://github.com/lance-format/lance/pull/9022
- fix(cache): bypass Moka single-flight for zero-capacity caches by @jiaqizho in https://github.com/lance-format/lance/pull/9038
- fix: copy sliced arrays from logical offsets by @jackye1995 in https://github.com/lance-format/lance/pull/9048
- fix(index): keep every HNSW node reachable after a parallel build by @BubbleCal in https://github.com/lance-format/lance/pull/9053
- fix(fts): preserve prewarmed state across request store wrappers by @BubbleCal in https://github.com/lance-format/lance/pull/9075
- fix: stamp overlay row lineage at commit by @app/lance-gatefixer in https://github.com/lance-format/lance/pull/9084
- fix: honor zero scanner limits by @app/lance-gatefixer in https://github.com/lance-format/lance/pull/9111
- fix(encoding): prevent bits_per_value=0 in FullZipLayout for FSL with AllNull child by @westonpace in https://github.com/lance-format/lance/pull/9130
- fix: load external fragment reuse index details from the correct base path by @LuQQiu in https://github.com/lance-format/lance/pull/9141
- fix: skip size probes for bounded blob reads by @Xuanwo in https://github.com/lance-format/lance/pull/9146
- fix(python): preserve filter pushdown with row IDs by @app/lance-gatefixer in https://github.com/lance-format/lance/pull/9154
- fix(dataset): handle lance dataset blobs on deep clone by @dentiny in https://github.com/lance-format/lance/pull/9185
- fix(scanner): respect negated flag when converting
InListfilters to take operations by @dentiny in https://github.com/lance-format/lance/pull/9188
Documentation ๐
- docs: classify the fragment's non-Lance referenced files by format by @LuciferYang in https://github.com/lance-format/lance/pull/8562
- docs: correct stable row ID migration and storage by @app/lance-gatefixer in https://github.com/lance-format/lance/pull/8852
- docs(linalg): document SIMD conversion panics by @app/lance-gatefixer in https://github.com/lance-format/lance/pull/8862
- docs(core): correct AVX tier feature semantics by @app/lance-gatefixer in https://github.com/lance-format/lance/pull/8910
- docs: add Apache Doris integration by @Gabriel39 in https://github.com/lance-format/lance/pull/8983
Performance Improvements ๐
- perf(rowids): count bitmap bits a word at a time by @pengw0048 in https://github.com/lance-format/lance/pull/8642
- perf: stop listing the entire _versions directory for limited version queries by @LuQQiu in https://github.com/lance-format/lance/pull/8679
- perf: run-optimize roaring bitmaps before persisting by @zhangyue19921010 in https://github.com/lance-format/lance/pull/8688
- perf(rowids): reuse cursors across sequential batches by @jiaoew1991 in https://github.com/lance-format/lance/pull/8713
- perf(python): stream reader batches from one producer by @jiaoew1991 in https://github.com/lance-format/lance/pull/8714
- perf(rowids): accelerate dense bitmap decoding by @jiaoew1991 in https://github.com/lance-format/lance/pull/8715
- perf(rowids): stream dataset version runs with a cursor by @jiaoew1991 in https://github.com/lance-format/lance/pull/8716
- perf(merge_insert): probe the most selective indexed key first and stop early by @LuciferYang in https://github.com/lance-format/lance/pull/8719
- perf(commit): drop O(C^2) field lookups from column index validation by @zhangyue19921010 in https://github.com/lance-format/lance/pull/8720
- perf(scan): reduce system column pipeline overhead by @jiaoew1991 in https://github.com/lance-format/lance/pull/8747
- perf(fts): defer phrase confirmation with score bounds by @BubbleCal in https://github.com/lance-format/lance/pull/8749
- perf(fts): share MultiMatch prefilter materialization by @BubbleCal in https://github.com/lance-format/lance/pull/8750
- perf(fts): complete ambiguous WAND ties without full replay by @BubbleCal in https://github.com/lance-format/lance/pull/8751
- perf(build): revert default target back to haswell (avx2) by @westonpace in https://github.com/lance-format/lance/pull/8754
- perf(commit): skip overlap detection for single-segment indices by @zhangyue19921010 in https://github.com/lance-format/lance/pull/8778
- perf(fts): keep compound scorer in fast search by @BubbleCal in https://github.com/lance-format/lance/pull/8817
- perf(fts): index residual compound rows once by @BubbleCal in https://github.com/lance-format/lance/pull/8818
- perf(fts): remove benchmark metrics from query hot paths by @BubbleCal in https://github.com/lance-format/lance/pull/8825
- perf(rowids): probe the fragments instead of merging every row id by @dshepelev15 in https://github.com/lance-format/lance/pull/8883
- perf(index): open fragment reuse indexes 10-2200x faster by @Xuanwo in https://github.com/lance-format/lance/pull/8887
- perf(index): prevent two-file shuffle starvation by @BubbleCal in https://github.com/lance-format/lance/pull/8894
- perf(io): read large metadata msgs as concurrent chunked range requests by @dshepelev15 in https://github.com/lance-format/lance/pull/8914
- perf(index): accelerate RQ scale search by @BubbleCal in https://github.com/lance-format/lance/pull/8924
- perf(rowids): keep the row id index cached and rank bitmaps for lookups by @dshepelev15 in https://github.com/lance-format/lance/pull/8930
- perf(cleanup): avoid reading manifests for version retention by @ziwenzhang in https://github.com/lance-format/lance/pull/9019
- perf(fts): accelerate wide and queries with bulk intersection by @BubbleCal in https://github.com/lance-format/lance/pull/9030
- perf(fts): defer decoding for underfilled conjunctions by @BubbleCal in https://github.com/lance-format/lance/pull/9031
- perf(fts): reuse resident statistics and prepared scorers by @BubbleCal in https://github.com/lance-format/lance/pull/9032
- perf(fts): bound classic conjunction scoring in dense windows by @BubbleCal in https://github.com/lance-format/lance/pull/9033
- perf(index): read IVF prewarm in parallel byte windows by @BubbleCal in https://github.com/lance-format/lance/pull/9049
- perf(fts): skip phrase position decode when the BM25 score cannot entโฆ by @mikewhb in https://github.com/lance-format/lance/pull/9153
- perf: check table deregistration status concurrently in list_directory_tables by @ChilePiquin in https://github.com/lance-format/lance/pull/9164
- perf: push table listing pagination down to the object store by @ChilePiquin in https://github.com/lance-format/lance/pull/9165
- perf: disable manifest indices by default by @jackye1995 in https://github.com/lance-format/lance/pull/9180
Other Changes
- refactor: merge JsonConvertingReader into SchemaAdapter by @xloya in https://github.com/lance-format/lance/pull/7678
- refactor(encoding): align block codecs with miniblock by @Xuanwo in https://github.com/lance-format/lance/pull/8324
- refactor: replace hand-rolled stringโbool parsing with
str_is_truthy/str_to_boolby @app/copilot-swe-agent in https://github.com/lance-format/lance/pull/8675 - refactor: express feature flags as bit shifts by @Xuanwo in https://github.com/lance-format/lance/pull/8893
- revert: add column slice stitching by @Xuanwo in https://github.com/lance-format/lance/pull/8926
Full Changelog: https://github.com/lance-format/lance/compare/release-root/12.0.0-beta.N...v12.0.0