0.86.0¶
Released 2026-09-11 — GitHub Release
Changes¶
⚠️ Breaks¶
Use VortexError in editions (#9833) @robert3005
Remove the unstable encodings feature (#9710) @robert3005
Replace normalized encoding with explicit normalization (#9767) @connortsui20
vortex-file: open_cached uses an explicit cache key (#9733) @myrrc
feat: require Send on VortexWrite and its futures (#9648) @claude[bot]
Add physical parameters to OutputSink (#9585) @connortsui20
Let a row dispatch declare a runtime output dtype (#9581) @connortsui20
✨ Features¶
Add tensor row inputs for RowFn (#9776) @connortsui20
feat(btrblocks): compress binary arrays with VarBin offsets and FSST (#9576) @joseph-isaacs
refactor(array): propagate allocators through builders (#9670) @gatesn
feat: CMake integration for
vortex-ffi&vortex-cpp(#9774) @0ax1Split SplitBy::Layout into Layout and LayoutSubSplitting variants (#9043) @robert3005
Assert logical and physical plans for TPC-H SLT tests (#9789) @AdamGS
feat(ci): build and bundle Windows artifacts for the Java and Python bindings (#9739) @robert3005
refactor(array): use buffer allocator in execution context (#9669) @gatesn
Add
Utf8types forRowFn(#9715) @connortsui20Add mechamism to lock edition definition and how to evolve objects in editions (#9660) @robert3005
feat(duckdb): report per-file column statistics from the vortex COPY writer (#9471) @moshap-firebolt
feat(ffi): add vx_scalar_new_extension for extension-typed literals (#9691) @balicat
Support canonicalising decimal RunEnd arrays (#9665) @onursatici
Add filter-and-scatter RowFn execution (#9521) @connortsui20
feat(cuda): add a FastLanes delta decode kernel (#9535) @joseph-isaacs
duckdb: support hive partitioning and ‘filename’ column (#9540) @myrrc
🚀 Performance¶
Pushdown filter through scalar function regardless of number of children (#9830) @robert3005
perf(onpair): speed up compression with onpair 0.2.1 and row training (#9806) @gargiulofrancesco
perf(datafusion): Only wrap stream in prunable stream when predicate can still change (#9788) @AdamGS
Avoid materializing constant structs for select (#9718) @danking
Avoid row index canonicalization for trivial masks (#9717) @danking
Avoid materializing constant structs for get_item (#9716) @danking
Trim constant-operand cases from scalar function benchmarks (#9696) @connortsui20
Decode RowFn constants directly (#9680) @connortsui20
Pack Boolean RowFn output directly (#9626) @connortsui20
Conditionally slice elements to selected index bounds before filtering wide list arrays (#9679) @mhk197
Avoid iterative drop for shallow expression trees (#9657) @robert3005
Better fixed-width buffer filtering (#8723) @robert3005
Use indexed sources for fallible constant rows (#9629) @connortsui20
Map constant RowFn inputs directly (#9628) @connortsui20
Build packed boolean output (#9620) @connortsui20
Avoid single-chunk grouped accumulator states (#9597) @mhk197
refactor(vortex-spatial): execute distance with RowFn (#9616) @HarukiMoriarty
Measure numeric arithmetic and comparison benchmarks per CPU feature (#9599) @connortsui20
Benchmark primitive comparison across CPU features (#9598) @connortsui20
Use dense retry for nullable row functions (#9517) @connortsui20
🐛 Bug Fixes¶
17 changes
Fix DuckDB scans over Vortex being merged or stalling (#9803) @joseph-isaacs
fix(cloud): parse OpenDAL boolean properties the way object_store does (#9782) @jackylee-ch
Fix: Use arrow’s casting logic to cast file stats when reporting them to DF (#9818) @AdamGS
fix(bench): clamp producer values to signed database bounds (#9800) @connortsui20
fix(buffer): reject ZSTs and address allocator review comments (#9807) @gatesn
fix(vx): stop advertising –json on ‘vx tree array’ (#9780) @jackylee-ch
Support unsigned sequence in the DuckDB exporter (#9720) @danking
fix(dict): cap max_dict_bytes at the u32 range BinaryView addresses (#9690) @mnshdw
fix(dict): clear encoder state in DictEncoder::reset (#9693) @mnshdw
bench: run the full compress suite under
--gpu-decompress(#9399) @joseph-isaacsduckdb: forbid aggregations and filter pushdowns over virtual columns (#9238) @myrrc
feat: sequence cast compute (#8403) @siddarth2810
fix: price delta’s bases and tail padding in its compression estimate (#9602) @rapour
fix: stabilize conjunct selectivity (#9543) @joseph-isaacs
Carry partial RowFn validity with MaskValues (#9534) @connortsui20
📖 Documentation¶
8 changes
Comprehensive security policy and vulnerability reporting process (#9747) @joseph-isaacs
docs(vortex-layout): mark the bloom filter aggregate as unstable (#9753) @connortsui20
Clarify Boolean collection code generation (#9676) @connortsui20
docs(vortex-spatial): add crate overview (#9683) @HarukiMoriarty
Clarify
RowFninfallibility documentation (#9618) @connortsui20docs(java): replace the Java API example that no longer compiles (#9635) @jackylee-ch
docs: filter pushdown is connected, not future work (#9637) @jackylee-ch
🧰 Maintenance¶
38 changes
Align AGENTS.md instructions with rest of guidance in the repo (#9826) @robert3005
Fix onpair btrblocks golden snapshot (#9835) @robert3005
Fix python formatting after typechecker change (#9828) @robert3005
duckdb: don’t optimize_recursive() before exporting chunks (#9795) @myrrc
Replace basedpyright with ty for Python type checking (#9546) @robert3005
Fix deprecation warning in btrblocks varbin scheme (#9819) @robert3005
bench: track small u8 dictionary take (#9566) @joseph-isaacs
Replace filter-and-scatter RowFn fallback with filtered valid-row execution (#9645) @robert3005
Adds clickbench logical & physical plans (#9794) @joseph-isaacs
Update alp to 0.0.4 (#9793) @robert3005
Switch wasmer setup to setup-wasmer and pin version to 7.4.0 (#9786) @robert3005
Fix path WORK_DIR path normalization in SLT tests (#9790) @AdamGS
Lock file maintenance (#9563) @renovate[bot]
Update rui314/setup-mold digest to 7e4f20a (#9560) @renovate[bot]
Update taiki-e/install-action digest to d438492 (#9561) @renovate[bot]
Lock file maintenance (#9139) @renovate[bot]
Reuse compression/decompression results in compression benchmarks (#9744) @robert3005
ci: configure RunsOn volume sizes (#9772) @robert3005
Move benchmark machines to c8gd.metal-24xl (#9761) @robert3005
Return the lazy filtered row index array directly (#9760) @robert3005
refactor(decimal): dispatch numeric kernels on one storage width (#9756) @mhk197
chore: deny clippy::inline_always at the workspace level (#9726) @joseph-isaacs
docs(spark): refresh the user guide against the shipped connector (#9607) @jackylee-ch
docs(vx): state which inspection commands support –json (#9638) @jackylee-ch
fix(policy): update policy to match the new claude and codex bot ids (#9650) @robert3005
refactor(vortex-spatial): execute geo kernels with RowFn (#9623) @HarukiMoriarty
Upgrade fastlanes to 0.7.0 (#9641) @robert3005
refactor(runend): clarify filter implementation (#9633) @connortsui20
refactor(dict): clarify compute invariants (#9632) @connortsui20
refactor: simplify array optimizer (#9634) @connortsui20
Update anthropics/claude-code-action digest to 16b3b31 (#9559) @renovate[bot]
Extend MaskValuesRef to filter execution (#9542) @connortsui20
Upgrade toolchain to 1.98.0 (#9539) @robert3005