We're kicking off the year 2025 with the exciting release of Kùzu 0.8.0, which brings two new features:
- Kùzu-WASM for in-browser graph analytics. You can now run your graph database while keeping all data and compute within your browser session!
fts
extension for full-text search. You can now run keyword-based search queries using BM25 in Kùzu.
In addition to these new features, we’ve streamlined the developer workflow during relationship table creation by unifying CREATE REL TABLE GROUP
into a single, flexible CREATE REL TABLE
syntax.
Finally, we’ve significantly improved our execution of aggregation queries via a new parallel hash aggregation mechanism.
Please check our release post for more details. Hope you enjoy this release!
What's Changed
- Add check of test file name on
-
, fix doc_example.test of JSON extension by @SterlingT3485 in #4537 - Add GDS support for vertex property scanning by @benjaminwinger in #4453
- Implement list_has_all by @acquamarin in #4546
- Added Unicode \u and \U parsing to the cli by @MSebanc in #4492
- Migrate macOS CI to use both x86-64 and ARM64 runner by @mewim in #4542
- Avoid importing polars in arrow scan by @acquamarin in #4551
- GDS interface cleanup by @andyfengHKU in #4524
- Use a flag to determine if the SelectionVector uses INCREMENTAL_SELECTED_POS by @benjaminwinger in #4552
- Fix VersionInfo SelectionVector creation by @benjaminwinger in #4556
- Remove some redundant compiler flags on Windows rust builds by @benjaminwinger in #4555
- Using shared_mutex instead of mutex in CatalogSet by @ted-wq-x in #4533
- Implement full text search by @acquamarin in #4416
- Rel scan selection optimizations by @benjaminwinger in #4558
- Fix wrong sniff type when sample_size = 1 by @SterlingT3485 in #4565
- Alter table with index by @acquamarin in #4563
- Fix the type cast in nested struct by @SterlingT3485 in #4560
- Wasm buffer manager support by @benjaminwinger in #4523
- Implement optional args in full text search by @acquamarin in #4569
- Fix config parameters binding for C API by @mewim in #4574
- Deprecated Ubuntu 23 runners from multi-platform test by @mewim in #4576
- Add more explicit comparisons when checking test result output by @benjaminwinger in #4280
- Minor path writer refactor by @andyfengHKU in #4580
- Fix rollback during Node Table COPY by @royi-luo in #4467
- Rework build pipeline by @mewim in #4581
- Gds node predicate push down by @andyfengHKU in #4461
- Migrate macOS build docs to internal repo by @mewim in #4585
- Handle failed queries in test runner if expected output is tuples by @royi-luo in #4584
- Add missing include; fix clangd by @mewim in #4586
- Fix flat select bug by @andyfengHKU in #4590
- Fixed cli handling of escape sequences after autocompletion by @MSebanc in #4589
- Revert "Fixed cli handling of escape sequences after autocompletion" by @andyfengHKU in #4594
- Increase buffer pool size for LargeListTest by @royi-luo in #4596
- Delta extension by @acquamarin in #4587
- Add test case name check & Share build between test and extension-test by @SterlingT3485 in #4572
- Add a homeDir field in LocalFileSystem for removefile to check by @SterlingT3485 in #4543
- Avoid double updating linesPerBlock in SharedFileErrorHandler if an exception is thrown by @royi-luo in #4601
- Implement drop/add property with if exists by @acquamarin in #4598
- Refactors the compilation of extensions by @acquamarin in #4602
- Remove unnecessary logic in ProcessorTask::finalizeIfNecessary by @royi-luo in #4573
- Cardinality estimation on top of HLL by @ray6080 in #4433
- Add recursive join benchmark by @andyfengHKU in #4603
- Parallel init dense gds array by @andyfengHKU in #4588
- Add inturrupt to path writer by @andyfengHKU in #4609
- Add sparse frontier implementation by @andyfengHKU in #4557
- Implement
FORMAT
option inLOAD FROM
clause. by @acquamarin in #4613 - Add e-notation double by @andyfengHKU in #4616
- Implement conjunctive full text search by @acquamarin in #4605
- Remove unnecessary lock in isVisibleNoLock check by @ray6080 in #4623
- Fix cost model for Extend by @ray6080 in #4429
- Add call function for bm info by @ray6080 in #4622
- Add exception when trying to load from a directory (or a file name with extension) by @SterlingT3485 in #4614
- Add setting
enable_plan_optimizer
by @royi-luo in #4619 - Implementing Parallel WCC (#4604) by @andyfengHKU in #4621
- Rename call function to simple table function by @andyfengHKU in #4626
- Refactor table bind func input by @andyfengHKU in #4627
- Add optimizer pass to repopulate cardinalities + combine cardinalities in Logical Plan/Operator by @royi-luo in #4606
- handle newline in front of profile/explain by @acquamarin in #4618
- Allow prepared statemenet parameter in CALL function by @acquamarin in #4628
- Add graph projection by @andyfengHKU in #4630
- refactor table bind func by @andyfengHKU in #4635
- Fix incorrect set of sequence val after exporting database by @ray6080 in #4636
- Add Ice Berg Extension by @SterlingT3485 in #4600
- Remove unnecessary join in fts by @andyfengHKU in #4637
- Support attach relational database with schema by @acquamarin in #4639
- Fix list-contains binding by @acquamarin in #4644
- Add iceberg metadata alter name test by @SterlingT3485 in #4645
- Trim Unnecessary Quote for CLI JSON output by @SterlingT3485 in #4643
- Implement
get_keys
function in fts by @acquamarin in #4647 - Remove offset from table func by @andyfengHKU in #4648
- Make iceberg test output to be stable by @SterlingT3485 in #4654
- Add include for
std::optional
in extension by @acquamarin in #4653 - Remove unnecessary sink in copy from subquery by @andyfengHKU in #4650
- Update PRODUCTION_RELEASES for extension by @mewim in #4659
- Add null checks to zone map by @royi-luo in #4642
- remove graph entry from fts input by @andyfengHKU in #4660
- Rollback hash index checkpoint by @royi-luo in #4559
- Fixed cli handling of escape sequences after autocompletion by @andyfengHKU in #4595
- Added type names to cli auto complete by @MSebanc in #4591
- Improve subquery planning by @andyfengHKU in #4651
- refactor table function constructor by @andyfengHKU in #4664
- Refactor scalar function constructor by @andyfengHKU in #4666
- Hash join flatten fix by @andyfengHKU in #4668
- Remove encoded join and enumeration flags from end-to-end testing framework by @ray6080 in #4669
- Skip query result from rewritten queries by @ray6080 in #4633
- Add more complete order by key types check by @ray6080 in #4671
- Refactor table func interface with const params by @ray6080 in #4670
- Add more clang tidy checks by @ray6080 in #4672
- Support IGNORE_ERRORS when scanning from pyarrow/pandas by @royi-luo in #4646
- Rename reader config to file scan info by @andyfengHKU in #4673
- Rework auto begin/commit/rollback transaction during query lifetime by @ray6080 in #4674
- Add parsing time to compilation time and remove unnecessary clone of plan by @ray6080 in #4675
- Remove codecov badge from README by @mewim in #4678
- Fts bug fix by @acquamarin in #4677
- Add extension dir to tidy analyzer by @ray6080 in #4680
- Move morsel dispatcher out of frontier pair by @andyfengHKU in #4681
- remove property collector by @acquamarin in #4684
- Fix date-part function by @acquamarin in #4682
- Support skip/limit options for pandas scan by @royi-luo in #4662
- Fix macos extension test by @royi-luo in #4683
- Fix python3.13 bug by @acquamarin in #4687
- Index entry serialization by @acquamarin in #4686
- Add parallel k-core implementation by @andyfengHKU in #4676
- Refactor RJOutputWriter by @andyfengHKU in #4692
- Support import/export database with indexes by @acquamarin in #4691
- Add parallel page rank by @andyfengHKU in #4689
- Implement single-directional rel table storage (not including updates) by @royi-luo in #4688
- Optimize page rank contention by @andyfengHKU in #4698
- Refactor on disk graph interface by @andyfengHKU in #4701
- Remove OnDiskGraphDirectedNbrScanState by @andyfengHKU in #4706
- HNSW-based vector index by @ray6080 in #4578
- Vector index prepare execute by @ray6080 in #4695
- Implement internal tables by @acquamarin in #4696
- Add InternalID equal function and getRelID function for Java API by @mewim in #4713
- Replace terms vertex compute with hash index lookup by @acquamarin in #4712
- Remove kU_ParsingOptions by @royi-luo in #4710
- Skip limit parameter by @acquamarin in #4711
- Fix FTS prepare test by @acquamarin in #4707
- Distinct optimizations by @benjaminwinger in #4709
- Rework index entry ser/deSer by @ray6080 in #4721
- Improve fts query performance by @andyfengHKU in #4717
- Handle updates for single-direction rel tables by @royi-luo in #4705
- Support vector index in importing/exporting database by @ray6080 in #4722
- Parallel weighted shortest path by @andyfengHKU in #4699
- Fix fts conjunctive case with stopwords by @acquamarin in #4725
- Fix distinct limit by @ray6080 in #4727
- Fix Java docstring by @mewim in #4729
- Clear catalog interface by @andyfengHKU in #4726
- Implement show-extension functions by @acquamarin in #4732
- Skip header detection if detected number of columns doesn't match by @royi-luo in #4737
- Raise error when fts is built on non-string property by @acquamarin in #4738
- Improve catalog function interface by @andyfengHKU in #4733
- Fix unordered_map at error caused by non-existing expression in factorized group by @ray6080 in #4728
- Push review changes for #4705 by @royi-luo in #4735
- Fix query graph merge by @ray6080 in #4741
- Add support for nested type in java API by @royi-luo in #4720
- Move rel group as a new catalog set by @andyfengHKU in #4742
- Add checkpoint configuration parameters to the API bindings by @royi-luo in #4739
- Remove CreateTableEntry WAL Record by @andyfengHKU in #4745
- Add missing header to fix GCC 14 build by @mewim in #4752
- Fix Java comment by @mewim in #4753
- Add max db size flag to shell by @ray6080 in #4751
- Fixing incorrect casting during standalone call by @WWW0030 in #4746
- Implement show-indexes function by @acquamarin in #4750
- Fix fts dense frontier bug by @acquamarin in #4757
- Refactor extensionUtils apis by @acquamarin in #4759
- A bit cleanup of the binder code by @ray6080 in #4754
- Deprecate rel group by @andyfengHKU in #4755
- Fixed nodejs progress test randomly failing on arm64 by @MSebanc in #4765
- Hash aggregate finalization parallelization by @benjaminwinger in #4655
- Fix rust tests on rustc 1.82+ by @benjaminwinger in #4774
- Cli highlighting fix by @MSebanc in #4773
- Remove alterInfo from TableCatalogEntry by @ray6080 in #4766
- Support alter for rel groups by @royi-luo in #4764
- Make propertyID global unique by @acquamarin in #4770
- Better error messages when forgetting to load extension by @royi-luo in #4771
- Implement yield clause after inQueryCall by @acquamarin in #4775
- Fix rel group bugs by @andyfengHKU in #4776
- Fix renaming property with indexes by @acquamarin in #4763
- Revert "Fix rust tests on rustc 1.82+" by @benjaminwinger in #4779
- Only set +whole-archive on rust 1.82+ by @benjaminwinger in #4780
- Fix import/export database with reloaddb by @acquamarin in #4781
- Fix rel group insert by @andyfengHKU in #4787
- Fix mismatched column IDs during insert and copy after drop and add columns by @ray6080 in #4786
- Add comment to rel group by @ray6080 in #4792
- Fix ApiTest.Interrupt by @royi-luo in #4789
- Extension repo url by @acquamarin in #4794
- Fix compatibility with older version of MSVC runtime by @mewim in #4796
- Fold default value when add property by @andyfengHKU in #4793
- clean up wal replay record by @ray6080 in #4799
- Tidy: const qualifier and c-style cast in mapper by @ray6080 in #4800
- Cast FROM&TO column type during bulk insertion. by @andyfengHKU in #4804
- Implement
sqlite_all_varchar_option
to sqlite extension by @acquamarin in #4803 - Better error message in the yield clause by @acquamarin in #4809
- Fix UTF-8 toLower by @acquamarin in #4805
- Adding tests for YIELD, SKIP, and LIMIT by @WWW0030 in #4810
- Update API docs: QueryResult getNext() reuses the same underlying flat tuple by @royi-luo in #4820
- Error on long list in list lambda by @acquamarin in #4816
- Fix zone maps for is/is not null by @royi-luo in #4823
- Adding extension DB tests by @WWW0030 in #4822
- Fix 4541 by @andyfengHKU in #4813
- Use MemoryManager to allocate undo buffer by @ray6080 in #4825
- Fix race condition in random engine by @ray6080 in #4827
- WebAssembly API implementation by @mewim in #4815
- Fix CI build and deploy job for WASM by @mewim in #4829
- Enhance NAPI value transformation to handle null, arrays, and objects by @mewim in #4830
- Add tests for getNext() doc examples by @royi-luo in #4821
- Use the most significant bits for partitioning in the HashAggregate by @benjaminwinger in #4819
- Refactor export db by @andyfengHKU in #4833
- Add include guard checks for extension and test headers by @ray6080 in #4831
- Add more FST tests by @sdht0 in #4808
- Change
clear_cache()
function to standalone call by @acquamarin in #4835 - Fix bugs found during vector size testing by @royi-luo in #4834
- Rename gds node output by @acquamarin in #4839
- WebAssembly minor improvements by @mewim in #4846
- Bump version to 0.8.0 by @mewim in #4847
New Contributors
Full Changelog: v0.7.0...v0.8.0