Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
189 commits
Select commit Hold shift + click to select a range
4760024
feat(mem-wal): add ShardWriter::abort + Sealed manifest fence for dro…
hamersaw Jun 26, 2026
b2673c8
feat(mem_wal): tombstone-preserving point lookup (#7482)
hamersaw Jun 26, 2026
621da36
fix(index): implement with_io_priority for FailNewFileStore test stor…
LuciferYang Jun 26, 2026
67c88fb
feat(bitpacking): add owned bitpacking codecs (#7496)
BubbleCal Jun 26, 2026
a1cae2d
feat(mem_wal): non-blocking ShardWriter::delete_no_wait (#7483)
hamersaw Jun 26, 2026
59cf5c7
fix: invalidate indices for fields rewritten by Merge (#7491)
wkalt Jun 26, 2026
898ad32
ci(python): typecheck arrow.py and test_arrow.py (#7265)
YuangGao Jun 29, 2026
c9b5325
fix: account for SQ offset in dot distance (#7481)
Xuanwo Jun 29, 2026
6a2a7d4
fix(merge-insert): apply Delete/Fail on the indexed-scan path (#7484)
hamersaw Jun 29, 2026
f59b484
feat(index): support distributed LabelList scalar index builds (#7223)
jackye1995 Jun 29, 2026
6d02a57
fix: improve FM index query performance (#7507)
jackye1995 Jun 29, 2026
268d3d7
chore: release beta version 9.0.0-beta.9
Jun 29, 2026
2d89b3c
fix(mem-wal): apply cross-generation block-list to in-memory scan arm…
hamersaw Jun 29, 2026
e25b71e
chore: release beta version 9.0.0-beta.10
Jun 29, 2026
3e54532
docs: improve phrasing and update format spec image (#7505)
prrao87 Jun 29, 2026
c57864c
feat(fts)!: make v2 the default index format (#7512)
BubbleCal Jun 30, 2026
7914da6
feat(namespace-dir): implement update_table and delete_from_table (#6…
XuQianJin-Stars Jun 30, 2026
8f4cc7b
refactor(index): extract BasicTrainer trait from ScalarIndexPlugin (#…
westonpace Jun 30, 2026
1ba84bc
docs: document read_blobs for blob payload reads (#7530)
Xuanwo Jun 30, 2026
d5dc614
refactor(index): introduce RowIdRemapper trait to decouple ScalarInde…
westonpace Jun 30, 2026
4d866ea
fix(core): allow all-null Map columns in schema evolution (#7462)
Ali2Arslan Jun 30, 2026
78df02c
fix(index): work around rustc nightly ICE in NGramIndexBuilder::strea…
westonpace Jun 30, 2026
be55555
fix: avoid stack overflow on deep logical filters (#7510)
Xuanwo Jun 30, 2026
15bbd4a
fix(arrow): preserve inner nulls in convert_to_floating_point (#7498)
LuciferYang Jun 30, 2026
7c2b1a5
feat(mem_wal): support prefiltered LSM vector and FTS search (#7138)
touch-of-grey Jul 1, 2026
6203383
fix(index): preserve schema metadata when re-serializing loaded HNSW …
yanghua Jul 1, 2026
7a5282a
perf(arrow): avoid per-element allocation in BFloat16Array::from (#7500)
LuciferYang Jul 1, 2026
784a876
feat(namespace-dir): implement alter_transaction for DirectoryNamespa…
XuQianJin-Stars Jul 1, 2026
7a7bacc
fix(lance-encoding): rebase nested-list offsets correctly across page…
yesunbmh Jul 1, 2026
876ad93
fix: recover from stale cached manifest size on read (#7542)
wkalt Jul 1, 2026
1fdc8b1
fix(compaction): exclude system indices from compaction binning (#7516)
xuanyu-z Jul 1, 2026
546e766
ci: detect Cargo.lock drift offline + harden java --locked (#7425)
wjones127 Jul 1, 2026
4ac49ea
ci: group Dependabot updates into one PR per lockfile (#7457)
wjones127 Jul 1, 2026
53fe06e
fix(rowids): tolerate sparse overlapping chunks in the stable row id …
wkalt Jul 1, 2026
4a2169d
chore(deps): bump the cargo group in /python with 8 updates (#7560)
dependabot[bot] Jul 1, 2026
26b9760
chore(deps): bump the cargo group with 9 updates (#7561)
dependabot[bot] Jul 1, 2026
d7f5b55
perf: merge half-open range queries on the same BTree index (#7477)
xloya Jul 1, 2026
843c8c2
fix(lance-io): include goosefs feature in DEFAULT_CLOUD_BLOCK_SIZE cf…
XuQianJin-Stars Jul 2, 2026
d86f1fc
chore(ci): ignore RUSTSEC-2026-0194/0915 for transitive quick-xml (#7…
zhangyue19921010 Jul 2, 2026
c500365
docs: add blob v2 overview images (#7581)
Xuanwo Jul 2, 2026
acc9a93
docs: add FTS v2 migration note (#7522)
BubbleCal Jul 2, 2026
a5f4336
docs(python): document beta release install index (#7582)
Xuanwo Jul 2, 2026
7134acf
perf(index): skip FM-Index rebuild when merging a single fully-live s…
jackye1995 Jul 2, 2026
9644d16
chore: release beta version 9.0.0-beta.11
Jul 2, 2026
94922c1
test(bitpacking): actually exercise u64 unchecked round-trip for widt…
LuciferYang Jul 2, 2026
413ee8a
fix(cache): count key footprint in MokaCacheBackend eviction weight (…
Ali2Arslan Jul 2, 2026
92535a5
fix(index): exclude shared metadata cache from LanceIndexStore deep s…
Ali2Arslan Jul 2, 2026
1be4815
perf(dataset): reuse session-cached manifest when opening a dataset (…
zhangyue19921010 Jul 2, 2026
5f00e57
docs(arrow): add SAFETY comments to lance-arrow unsafe blocks (#7511)
LuciferYang Jul 2, 2026
6d7b7e3
feat(index): read a column's min/max from ZoneMap without a scan (#7463)
Ali2Arslan Jul 2, 2026
6a306ee
perf(index): coalesce concurrent scalar-index opens (single-flight) (…
Ali2Arslan Jul 2, 2026
871b9ba
fix(index): record IVF_HNSW index file sizes after writing footer (#7…
Ali2Arslan Jul 2, 2026
0b82051
perf(filtered-read): lower hot-path read/decode spans to debug (#7590)
LuQQiu Jul 2, 2026
52f05bf
feat: support update with blob encoding column (#7579)
nyl3532016 Jul 2, 2026
dca65b9
chore(deps): bump the cargo group across 1 directory with 10 updates …
dependabot[bot] Jul 2, 2026
9cf1e00
fix(index): accept large_string (LargeUtf8) for BTREE and ZONEMAP sca…
FANNG1 Jul 2, 2026
c39719e
feat(compaction): introduce RowAddrRemap structure to avoid remap OOM…
zhangyue19921010 Jul 3, 2026
66d28cc
chore: release beta version 9.0.0-beta.12
Jul 3, 2026
45eb977
fix: preserve structural page load errors (#7571)
ddupg Jul 3, 2026
fd122fb
ci: pin license-header-checker to fix flaky install step (#7142)
wombatu-kun Jul 3, 2026
ffaee6c
feat: add blob write preparation API (#7558)
Xuanwo Jul 3, 2026
aed9e4e
chore: release beta version 9.0.0-beta.13
Jul 3, 2026
1963998
feat: support per-base storage options with base_<id>.<key> prefix (#…
jackye1995 Jul 3, 2026
9ef3fd3
fix: preserve DataFile base_id in DataReplacement commits (#7609)
jackye1995 Jul 3, 2026
31c0ccd
feat(blob-v2): configure packed blob file max size with field metadat…
jo-migo Jul 3, 2026
c4a75d9
fix: chunk ngram posting list writes by byte size to avoid i32 offset…
lancedb-robot Jul 3, 2026
24b085f
feat: support multi-base tables in merge insert with target base rout…
jackye1995 Jul 3, 2026
3a914d9
chore: release beta version 9.0.0-beta.14
Jul 3, 2026
882779a
fix: treat blob descriptors as opaque projections (#7618)
Xuanwo Jul 3, 2026
f24e42c
chore: release beta version 9.0.0-beta.15
Jul 3, 2026
4f39296
fix: avoid scheduler deadlock on same-priority chunks (#7588)
Xuanwo Jul 6, 2026
78a814b
chore: release beta version 9.0.0-beta.16
Jul 6, 2026
06447f1
feat: add RLE v2 run length widths (#7376)
Xuanwo Jul 6, 2026
a96d0d7
perf(fts): cache the num_tokens-only DocSet on LazyDocSet (#7600)
BubbleCal Jul 6, 2026
5afc915
fix(fts): split tail-partition merge by the worker memory budget (#7601)
BubbleCal Jul 6, 2026
da1cd0e
fix(goosefs): decouple OpenDAL root from URL path to avoid ObjectStor…
XuQianJin-Stars Jul 6, 2026
1b5076a
fix(encoding): select RLE widths by encoded size (#7636)
Xuanwo Jul 6, 2026
4300d1a
fix: return Arrow JSON from FragmentSession.take (#7470)
xloya Jul 6, 2026
bae5e8b
fix: return Arrow JSON from FileFragment.take (#7471)
xloya Jul 6, 2026
d3fce11
fix: convert Arrow JSON in merge-insert full-fragment-rewrite fast pa…
xloya Jul 6, 2026
ad730da
fix(python): avoid CPU bf16 compile flake (#7587)
ddupg Jul 6, 2026
00c47ff
ci: add Java 25 to the JNI build-and-test matrix (#7391)
LuciferYang Jul 6, 2026
f518949
fix(fts): use async send in FTS index builder to prevent thread-pool …
a-agmon Jul 6, 2026
091acfc
fix: respect PQ num_bits for numpy codebooks (#7586)
ddupg Jul 6, 2026
bf4f32b
fix(mem-wal): fence writer on WAL persistence failure (#7547)
hamersaw Jul 6, 2026
6783795
chore(deps): bump cmov from 0.5.3 to 0.5.4 in /test_data/fri_straddle…
dependabot[bot] Jul 6, 2026
e8d4e3f
fix(mem_wal): use slice-aware size estimate for memtable flush thresh…
hamersaw Jul 7, 2026
9cbc09a
fix(deps): bump crossbeam-epoch to 0.9.20 for RUSTSEC-2026-0204 (#7644)
wjones127 Jul 7, 2026
9c04698
chore: release beta version 9.0.0-beta.17
Jul 7, 2026
6c291ab
fix: convert Arrow JSON to Lance JSON in single-fragment create path …
xloya Jul 7, 2026
9e7776e
fix(fts): enforce fuzzy max_expansions globally across index partitio…
BubbleCal Jul 7, 2026
5e9c196
fix: build list FTS indexes as row documents (#7656)
Xuanwo Jul 7, 2026
104ef4f
chore(lance): add S3 scan diagnostics (#7552)
Xuanwo Jul 7, 2026
bb9ecfb
fix(python): fix tuple bug in _coerce_query_vector condition check (#…
hushengquan Jul 7, 2026
4754a76
docs(core): document spawn_cpu limitations and audit call sites (#7643)
wjones127 Jul 7, 2026
63040e1
feat(lance-linalg): runtime SIMD dispatch for pre-Haswell x86_64 from…
tobocop2 Apr 28, 2026
6141fed
fix(lance-linalg): gate f32 cosine dispatch behind cfg(target_feature…
stumpylog Jun 10, 2026
d5bff02
fix: shift offsets after trimming values in merge_with_schema (#6581)
kaan-simbe Jul 7, 2026
969ee6b
docs: update MemWAL format spec (#7655)
jackye1995 Jul 7, 2026
378dbb0
Merge branch 'main' into fix/runtime-simd-multiversion
tobocop2 Jul 7, 2026
378b055
feat(io): publish object store metrics via the metrics crate (#7533)
wjones127 Jul 7, 2026
e366c9a
fix(fsst): correct decoder output-buffer size contract to 8x (#7589)
LuciferYang Jul 7, 2026
98efff9
perf(arrow): zero-copy BFloat16Array::from(Vec<bf16>) via Buffer::fro…
LuciferYang Jul 7, 2026
3e82c05
fix: convert Arrow JSON when updating columns via merge/update path (…
xloya Jul 7, 2026
64c18e5
docs: add cleanup and auto cleanup documentation (#6546)
westonpace Jul 7, 2026
cb4d8a2
fix: map `object_store::Error::NotFound` to `Error::NotFound` instead…
LuciferYang Jul 7, 2026
55c35c3
docs: add fragment sizing guidance to performance guide (#6606)
hamersaw Jul 7, 2026
250b7d7
chore(fsst): drop duplicate arrow-array dev-dependency (#7616)
LuciferYang Jul 7, 2026
c3218b2
feat: support segment selection in pylance prewarm (#7677)
jackye1995 Jul 8, 2026
a53cf8e
fix: solve hang in train_streaming_coreset_ivf_model (#7676)
cmccabe Jul 8, 2026
d581bb9
chore: release beta version 9.0.0-beta.18
Jul 8, 2026
77cce31
Merge remote-tracking branch 'upstream/main' into fix/runtime-simd-mu…
tobocop2 Jul 8, 2026
d39482c
test(lance-linalg): cover batch cosine kernels and scalar x86 gather
tobocop2 Jul 8, 2026
059edc8
fix(index): describe bitmap-less system indices in describe_indices (…
hamersaw Jul 8, 2026
c5316c6
fix(fts): use complete English stop-word list for ICU tokenizer (#7621)
LuQQiu Jul 8, 2026
a1bb71b
feat(python): expose MemWAL shard delete (#7649)
u70b3 Jul 8, 2026
9d298da
refactor(python): move tensorflow integration out of tree (#7685)
Xuanwo Jul 8, 2026
60ca362
feat: support nested field FTS (#7686)
Xuanwo Jul 8, 2026
b69d4a5
fix(index): cap IVF train prefetch memory for nullable columns (#7143)
geserdugarov Jul 8, 2026
53b5a43
fix(python): ignore PyTorch 3.14 script_method warning (#7689)
Xuanwo Jul 8, 2026
3934722
feat: compile-time feature-gated Rust backtrace for JNI error diagnos…
summaryzb Jul 8, 2026
6400545
perf(index): add exact null-row bitmap to zone map and bloom filter (…
westonpace Jul 8, 2026
2cde3b9
fix: avoid creating directory namespace manifest on read (#7687)
Xuanwo Jul 8, 2026
18381f3
perf: increase default memory pool to 150MB with 40MB sort spill rese…
westonpace Jul 8, 2026
7dd95a5
chore: enable CodeRabbit automatic PR reviews (#7595)
westonpace Jul 8, 2026
41e6e74
fix(index): translate address-domain scalar index results to row ids …
charleshuang119 Jul 8, 2026
1fd9a0d
chore(deps): bump torch from 2.12.1 to 2.13.0 in /python in the uv gr…
dependabot[bot] Jul 8, 2026
d923892
chore(deps): bump the cargo group with 9 updates (#7694)
dependabot[bot] Jul 8, 2026
568ee56
chore(deps): bump the cargo group in /python with 6 updates (#7693)
dependabot[bot] Jul 8, 2026
dea61ee
chore(deps): bump the cargo group in /java/lance-jni with 5 updates (…
dependabot[bot] Jul 8, 2026
d217a02
feat(python): expose Lance metrics via OpenTelemetry (#7537)
wjones127 Jul 8, 2026
8a08fa8
Merge branch 'main' into fix/runtime-simd-multiversion
tobocop2 Jul 9, 2026
a9f84dd
fix: relax test_query_delta_indices assertion for approximate index (…
XuQianJin-Stars Jul 9, 2026
8f0e6d3
chore: release beta version 9.0.0-beta.19
Jul 9, 2026
a33cd39
feat: compress RLE child buffers (#7663)
Xuanwo Jul 9, 2026
af8a90f
fix: return error instead of panicking on values too wide for miniblo…
zhangyue19921010 Jul 9, 2026
ef256e2
feat(java): expose MemWAL shard delete (#7688)
hamersaw Jul 9, 2026
fc882fb
test(index): fix flaky IVF_RQ recall test with multi-bit RaBitQ (#7679)
wombatu-kun Jul 9, 2026
d000a67
chore: address review feedback on runtime SIMD dispatch
tobocop2 Jul 9, 2026
2c71e4c
Merge branch 'main' into fix/runtime-simd-multiversion
tobocop2 Jul 9, 2026
e96a091
fix(index): batch IVF streaming partition search off the CPU pool (#7…
a-agmon Jul 9, 2026
08f1bbd
fix: late-materialize blob columns read as binary (#7593)
wkalt Jul 9, 2026
3a3854c
perf(dataset): reuse session-cached manifest on checkout (#7661)
zhangyue19921010 Jul 9, 2026
d5205dc
refactor: share the AVX horizontal-sum helper across the distance ker…
tobocop2 Jul 9, 2026
5dbd140
fix(transaction): reduce redundant code for new_version calculations …
yangshangqing95 Jul 9, 2026
bdeda97
test: parameterize the AVX horizontal-sum tests with rstest
tobocop2 Jul 9, 2026
1903ba4
fix: bounds-check the scalar gather fallback on x86_64
tobocop2 Jul 9, 2026
acf70b7
Merge remote-tracking branch 'upstream/main' into fix/runtime-simd-mu…
tobocop2 Jul 9, 2026
0bdf0a1
fix(lance-io): drop reservation when future is cancelled (#7638)
valkum Jul 9, 2026
c247ddd
fix: validate gather indices once, before backend dispatch
tobocop2 Jul 9, 2026
fb2403c
Merge branch 'main' into fix/runtime-simd-multiversion
tobocop2 Jul 9, 2026
9d24be1
feat(java): forward table properties to declareTable on namespace cre…
puchengy Jul 9, 2026
0969e3d
Merge branch 'main' into fix/runtime-simd-multiversion
tobocop2 Jul 9, 2026
dda6cab
refactor(java): rename WriteDatasetBuilder.tableProperties to propert…
puchengy Jul 9, 2026
71ff5e5
fix(encoding): tolerate legacy RLE chunks that overflow the declared …
jackye1995 Jul 9, 2026
c5c3bf1
chore: release beta version 9.0.0-beta.20
Jul 9, 2026
bb8af46
fix: require FMA before selecting the AVX2 dispatch tier
tobocop2 Jul 9, 2026
2c16954
perf: choose the SIMD tier once per batch for f32 dot and l2
tobocop2 Jul 9, 2026
97865b5
perf: keep the batch iterator wrapper-free on AVX2-baseline builds
tobocop2 Jul 10, 2026
5ba1e20
fix: round-trip empty blob values in the 2.1+ structural encoding (#7…
wkalt Jul 10, 2026
334229a
perf: keep the AVX+FMA kernel on the AVX2-baseline batch path
tobocop2 Jul 10, 2026
07cd967
fix: require avx2 and fma before taking the direct-kernel batch path
tobocop2 Jul 10, 2026
1946a5a
chore: upgrade Rust toolchain to 1.97.0 (#7712)
wjones127 Jul 10, 2026
6b94ccd
perf: only use the AVX kernel where the scalar path degenerates
tobocop2 Jul 10, 2026
5cb1569
perf(index): pack prewarmed FTS posting groups (#7720)
BubbleCal Jul 10, 2026
38f7bea
fix(lance-core): avoid aliasing &mut Runtime in global_cpu_runtime (#…
LuciferYang Jul 10, 2026
67586aa
Merge branch 'main' into fix/runtime-simd-multiversion
tobocop2 Jul 10, 2026
1ce1764
test(index): stabilize simple index nearest centroid test (#7723)
BubbleCal Jul 10, 2026
1aec146
chore: release beta version 9.0.0-beta.21
Jul 10, 2026
86e6c84
Merge branch 'main' into fix/runtime-simd-multiversion
tobocop2 Jul 10, 2026
fbd22b4
docs: specify data overlay files for the table format (#7381)
wjones127 Jul 10, 2026
225bd4b
Merge branch 'main' into fix/runtime-simd-multiversion
tobocop2 Jul 10, 2026
f698426
fix(encoding): honor zstd compression scheme and level on large per-v…
claydugo Jul 10, 2026
787f759
fix(scanner): honor batch_readahead to bound v2 scan decode concurren…
zhangyue19921010 Jul 13, 2026
faa704d
feat(fts)!: add configurable posting block size (#7466)
BubbleCal Jul 13, 2026
e7bce1e
feat: support list blob scans (#7664)
Xuanwo Jul 13, 2026
b0edda2
docs: clarify Lance format stability (#7475)
Xuanwo Jul 13, 2026
d6fb34d
refactor(encoding): clarify mini-block repdef budget (#7751)
Xuanwo Jul 13, 2026
4f7224b
fix(encoding): decode empty inline-bitpacked blocks (#7752)
Xuanwo Jul 13, 2026
4318ea0
ci: auto-label issues by bug / feature / performance (#7727)
wjones127 Jul 13, 2026
f0fcb81
fix(index): keep HNSW IVF scratch dir alive during partition writing …
geserdugarov Jul 13, 2026
5dc074f
feat(fts): impact skip data for posting lists (#7602)
BubbleCal Jul 13, 2026
ae25040
feat: support multi-segment indices in hamming clustering (#7758)
jackye1995 Jul 13, 2026
a7528ff
feat: data overlay files — model, feature flag, and write/commit path…
wjones127 Jul 13, 2026
a3d4719
feat(credentials): vend AWS credentials via AssumeRoleWithWebIdentity…
rpgreen Jul 13, 2026
18d93d4
Merge branch 'main' into fix/runtime-simd-multiversion
tobocop2 Jul 13, 2026
5bda9bd
fix: preserve case in generated field path expressions (#7698)
skyshineb Jul 13, 2026
b1670de
fix: gate f32 batch dispatch kernels to sub-avx2+fma builds
tobocop2 Jul 13, 2026
6d0f401
Merge branch 'main' into fix/runtime-simd-multiversion
tobocop2 Jul 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .bumpversion.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[tool.bumpversion]
current_version = "9.0.0-beta.8"
current_version = "9.0.0-beta.21"
parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)(-(?P<prerelease>(beta|rc))\\.(?P<prerelease_num>\\d+))?"
serialize = [
"{major}.{minor}.{patch}-{prerelease}.{prerelease_num}",
Expand Down
16 changes: 16 additions & 0 deletions .coderabbit.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json
language: en-US
early_access: false
reviews:
profile: assertive
poem: false
review_status: true
auto_review:
enabled: true
auto_incremental_review: true
ignore_title_keywords:
- WIP
- Draft
drafts: false
base_branches:
- main
79 changes: 79 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
name: Bug report
description: Report incorrect, unexpected, or crashing behavior.
labels: ["bug"]
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to file a bug report! Please search
[existing issues](https://github.com/lance-format/lance/issues) first to
avoid filing a duplicate.
- type: textarea
id: description
attributes:
label: Description
description: A clear and concise description of what the bug is.
validations:
required: true
- type: textarea
id: reproduction
attributes:
label: Steps to reproduce
description: >-
A minimal, self-contained code snippet or sequence of steps that
reproduces the problem. The more we can copy-paste and run, the faster
we can fix it.
placeholder: |
1. Write a dataset with `...`
2. Scan with filter `...`
3. Observe `...`
render: python
validations:
required: true
- type: textarea
id: expected
attributes:
label: Expected behavior
description: What did you expect to happen?
validations:
required: false
- type: input
id: lance-version
attributes:
label: Lance version
description: >-
Output of `python -c "import lance; print(lance.__version__)"`, or the
`lance`/`pylance` version from your `Cargo.toml` / `pyproject.toml`.
placeholder: "e.g. 0.40.0"
validations:
required: true
- type: dropdown
id: language
attributes:
label: Language binding
multiple: true
options:
- Python
- Rust
- Java
- Other / not sure
validations:
required: true
- type: input
id: environment
attributes:
label: Environment
description: OS, architecture, and storage backend (local, S3, GCS, Azure, ...).
placeholder: "e.g. Ubuntu 22.04, x86_64, S3"
validations:
required: false
- type: textarea
id: logs
attributes:
label: Logs / traceback
description: >-
Any relevant log output or stack trace. This will be automatically
formatted as code, so no need for backticks.
render: shell
validations:
required: false
7 changes: 7 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
blank_issues_enabled: true
contact_links:
- name: Question / usage help
url: https://discord.gg/lance
about: >-
For questions and general discussion, please ask in the Lance Discord
rather than opening an issue.
11 changes: 11 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
name: Feature request
about: Suggest a new capability or an improvement to an existing one.
labels: feature
---

<!--
Describe what you'd like Lance to do and why. There's no required format —
mention the problem or use case, and a rough idea of the solution if you have
one. Please search existing issues first to avoid duplicates.
-->
12 changes: 12 additions & 0 deletions .github/ISSUE_TEMPLATE/performance_issue.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
name: Performance issue
about: Report slow operations, high memory use, or a performance regression.
labels: performance
---

<!--
Describe what's slow or memory-hungry. There's no required format, but concrete
numbers (timings, memory, dataset shape) and a way to reproduce help a lot. If
it's a regression, note the last version that performed well. Please search
existing issues first to avoid duplicates.
-->
17 changes: 16 additions & 1 deletion .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,25 +6,40 @@ updates:
schedule:
interval: "weekly"
day: "wednesday"
groups:
cargo:
patterns:
- "*"

- package-ecosystem: "cargo"
directory: "/python"
versioning-strategy: lockfile-only
schedule:
interval: "weekly"
day: "wednesday"
groups:
cargo:
patterns:
- "*"

- package-ecosystem: "cargo"
directory: "/java/lance-jni"
versioning-strategy: lockfile-only
schedule:
interval: "weekly"
day: "wednesday"
groups:
cargo:
patterns:
- "*"

- package-ecosystem: "uv"
directory: "/python"
versioning-strategy: lockfile-only
schedule:
interval: "weekly"
day: "wednesday"

groups:
uv:
patterns:
- "*"
28 changes: 28 additions & 0 deletions .github/labeler-issues.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
version: 1
# Never remove labels a template or a human already applied.
appendOnly: true
# Content-based labels for issues, applied by srvaroa/labeler via
# .github/workflows/issue-labeler.yml. This covers issues that bypass the
# .github/ISSUE_TEMPLATE forms entirely — those filed via `gh issue create`,
# the REST API, or an agent, which never see the web-UI template chooser.
#
# The primary signal is a leading marker in the title (e.g. "bug:", "[feature]",
# "perf -"), which many people type by hand; a modest body keyword match is a
# secondary fallback. Rules are OR'd (one label per matching entry), so an
# unmatched issue gets no label and is left for human / LLM triage rather than
# guessed at. appendOnly means matches stack harmlessly with template labels.
labels:
# --- Primary signal: a leading bug/feature/perf marker in the title ---
- label: bug
title: "(?i)^\\s*[\\[(]?\\s*bug\\b"
- label: feature
title: "(?i)^\\s*[\\[(]?\\s*(feature|feat)\\b"
- label: performance
title: "(?i)^\\s*[\\[(]?\\s*(perf|performance)\\b"
# --- Secondary fallback: keywords anywhere in the body ---
- label: bug
body: "(?i)(panic|segfault|traceback|stack ?trace|crash|corrupt|incorrect result|wrong result)"
- label: performance
body: "(?i)(regression|latency|throughput|\\bOOM\\b|out of memory|memory usage|too slow)"
- label: feature
body: "(?i)(feature request|would be (nice|great|useful)|it would be nice|support for|add .+ support)"
29 changes: 29 additions & 0 deletions .github/workflows/issue-labeler.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: Issue Labeler

# Applies bug / feature / performance labels to issues based on their title and
# body. This complements the .github/ISSUE_TEMPLATE forms, which only apply
# labels for issues opened through the web UI; this catches issues opened via
# `gh issue create`, the REST API, or an agent, which bypass templates.
#
# Issues never originate from a fork, so unlike the PR labelers this uses a
# plain `issues` trigger (no pull_request_target) with a scoped GITHUB_TOKEN.
on:
issues:
types: [opened, edited]

concurrency:
group: ${{ github.workflow }}-${{ github.event.issue.number }}
cancel-in-progress: true

jobs:
label:
name: Apply issue labels
permissions:
issues: write
runs-on: ubuntu-latest
steps:
- uses: srvaroa/labeler@bf262763a8a8e191f5847873aecc0f29df84f957 # v1.14.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
config_path: .github/labeler-issues.yml
4 changes: 2 additions & 2 deletions .github/workflows/java-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ jobs:
export CXX=clang++
ldd --version

cargo build --release
cargo build --release --locked
"
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
Expand All @@ -135,7 +135,7 @@ jobs:
run: brew install protobuf
- name: Build native lib
working-directory: java/lance-jni
run: cargo build --release
run: cargo build --release --locked
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: liblance_jni_darwin_aarch64.zip
Expand Down
15 changes: 12 additions & 3 deletions .github/workflows/java.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,14 +47,14 @@ jobs:
run: cargo fmt --check
- name: Rust Clippy
working-directory: java/lance-jni
run: cargo clippy --all-targets -- -D warnings
run: cargo clippy --all-targets --locked -- -D warnings

build-and-test-java:
runs-on: ubuntu-24.04-4x
timeout-minutes: 60
strategy:
matrix:
java-version: [11, 17, 21]
java-version: [11, 17, 21, 25]
name: Build and Test with Java ${{ matrix.java-version }}
steps:
- name: Checkout repository
Expand All @@ -79,7 +79,13 @@ jobs:
distribution: temurin
java-version: ${{ matrix.java-version }}
cache: "maven"
# Skip the format gate on Java 25: google-java-format 1.22.0 (pinned via
# spotless) reaches into com.sun.tools.javac internals and throws
# NoSuchMethodError on JDK 25's javac. No google-java-format release runs
# on JDK 25 without also dropping JDK 11/17 support, so we exclude 25 from
# the (JDK-independent, already-enforced-on-11/17/21) style check instead.
- name: Running code style check with Java ${{ matrix.java-version }}
if: matrix.java-version != '25'
working-directory: java
run: |
mvn spotless:check
Expand All @@ -91,4 +97,7 @@ jobs:
env:
LANCE_INTEGRATION_TEST: "1"
run: |
mvn install
# spotless is also bound into the build lifecycle, so on Java 25 the
# format gate must be skipped here too (-Dspotless.skip=true), not just
# in the standalone step above.
mvn install ${{ matrix.java-version == '25' && '-Dspotless.skip=true' || '' }}
20 changes: 17 additions & 3 deletions .github/workflows/license-header-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,25 @@ jobs:
- name: Check out code
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Install license-header-checker
env:
# Pin to a specific release and download the asset directly from the
# release CDN. This avoids the flaky dynamic "latest" tag lookup in the
# upstream install.sh (it fetches the releases page and parses tag_name,
# which intermittently returns empty and fails the job).
LHC_VERSION: "1.5.0"
run: |
set -euo pipefail
curl -sfSL https://raw.githubusercontent.com/lluissm/license-header-checker/master/install.sh -o /tmp/install-lhc.sh
bash /tmp/install-lhc.sh
rm -f /tmp/install-lhc.sh
mkdir -p ./bin
base="https://github.com/lluissm/license-header-checker/releases/download/v${LHC_VERSION}"
asset="license-header-checker_${LHC_VERSION}_linux_amd64.tar.gz"
curl -sfSL "${base}/${asset}" -o "/tmp/${asset}"
curl -sfSL "${base}/checksums.txt" -o /tmp/lhc-checksums.txt
# Verify the download against the release checksums before extracting so a
# corrupted or tampered asset cannot be executed. This restores the
# integrity check the upstream install.sh performed via hash_sha256_verify.
(cd /tmp && sha256sum -c --ignore-missing lhc-checksums.txt)
tar -xzf "/tmp/${asset}" -C ./bin license-header-checker
rm -f "/tmp/${asset}" /tmp/lhc-checksums.txt
- name: Check license headers (rust)
run: ./bin/license-header-checker -a -v ./rust/license_header.txt rust rs && [[ -z `git status -s` ]]
- name: Check license headers (python)
Expand Down
36 changes: 36 additions & 0 deletions .github/workflows/rust.yml
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,42 @@ jobs:
- name: Check benchmarks
run: cargo check --profile ci --benches

qemu-pre-haswell:
# Verifies that lance-linalg's runtime SIMD dispatch still works
# correctly when the binary is built with the lower x86-64-v2 baseline
# (the legacy build path documented in CONTRIBUTING.md). Emulates a
# Nehalem CPU under qemu-user; catches any accidental AVX2/FMA
# instructions that leak past the runtime dispatch.
#
# The published-wheel default baseline (`target-cpu=haswell`) is set in
# `.cargo/config.toml`; this job overrides RUSTFLAGS for one job to
# exercise the legacy path without affecting any other build.
name: pre-Haswell SIGILL check (qemu Nehalem)
runs-on: ubuntu-24.04
timeout-minutes: 60
env:
CC: clang
CXX: clang++
RUSTFLAGS: "-C target-cpu=x86-64-v2"
CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUNNER: "qemu-x86_64 -cpu Nehalem"
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Setup rust toolchain
run: |
rustup toolchain install stable
rustup default stable
- uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2
- name: Install dependencies
run: |
sudo apt update
sudo apt install -y protobuf-compiler libssl-dev qemu-user
- name: Build lance-linalg lib tests in release mode
run: |
cargo test --release -p lance-linalg --lib --no-run
- name: Run lance-linalg lib tests under qemu Nehalem
run: |
cargo test --release -p lance-linalg --lib

msrv:
# Check the minimum supported Rust version
name: MSRV Check - Rust v${{ matrix.msrv }}
Expand Down
13 changes: 13 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,16 @@ repos:
rev: v1.26.0
hooks:
- id: typos

# Catch a Cargo.toml change that wasn't reflected in the matching Cargo.lock.
# Runs fully offline (`--frozen` = `--locked` + `--offline`) and does not compile,
# so it stays fast. Checks all three lockfiles since a workspace dep change can
# touch the excluded python/ and java/ locks too.
- repo: local
hooks:
- id: cargo-lock-sync
name: Cargo.lock in sync with Cargo.toml (offline)
entry: bash -c 'for m in Cargo.toml python/Cargo.toml java/lance-jni/Cargo.toml; do cargo metadata --frozen --format-version 1 --manifest-path "$m" >/dev/null 2>&1 || { echo "Cargo.lock is out of date for $m. Refresh it (e.g. cargo check --manifest-path $m) and commit the updated lockfile."; exit 1; }; done'
language: system
files: '(^|/)Cargo\.(toml|lock)$'
pass_filenames: false
Loading
Loading