All notable changes to this community fork will be documented in this file.
- Lua binding with IEEE 754 compliant float serialization (#237)
bindings/lua/sqlite_vec.luaprovidesload(),serialize_f32(), andserialize_json()functions- Lua 5.1+ compatible with lsqlite3
- IEEE 754 single-precision float encoding with round-half-to-even (banker's rounding)
- Proper handling of special values: NaN, Inf, -Inf, -0.0, subnormals
- Example script and runner in
/examples/simple-lua/
-
Android 16KB page support (#254)
- Added
LDFLAGSsupport to Makefile for passing linker-specific flags - Enables Android 15+ compatibility via
-Wl,-z,max-page-size=16384 - Required for Play Store app submissions on devices with 16KB memory pages
- Added
-
Improved shared library build and installation (#149)
- Configurable install paths via
INSTALL_PREFIX,INSTALL_LIB_DIR,INSTALL_INCLUDE_DIR,INSTALL_BIN_DIR - Hidden internal symbols with
-fvisibility=hidden, exposing only public API EXT_CFLAGScaptures user-providedCFLAGSandCPPFLAGS
- Configurable install paths via
-
Optimize/VACUUM integration test and documentation
- Added test demonstrating optimize command with VACUUM for full space reclamation
- Linux linking error with libm (#252)
- Moved
-lmflag fromCFLAGStoLDLIBSat end of linker command - Fixes "undefined symbol: sqrtf" errors on some Linux distributions
- Linker now correctly resolves math library symbols
- Moved
- Fixed incomplete KNN and Matryoshka guides (#208, #209)
- Completed unfinished sentence describing manual KNN method trade-offs
- Added paper citation and Matryoshka naming explanation
-
GLOB operator for text metadata columns (#191)
- Standard SQL pattern matching with
*(any characters) and?(single character) wildcards - Case-sensitive matching (unlike LIKE)
- Fast path optimization for prefix-only patterns (e.g.,
'prefix*') - Full pattern matching with
sqlite3_strglob()for complex patterns
- Standard SQL pattern matching with
-
IS/IS NOT/IS NULL/IS NOT NULL operators for metadata columns (#190)
- Note: sqlite-vec metadata columns do not currently support NULL values. These operators provide syntactic compatibility within this limitation.
ISbehaves like=(all metadata values are non-NULL)IS NOTbehaves like!=(all metadata values are non-NULL)IS NULLalways returns false (no NULL values exist in metadata)IS NOT NULLalways returns true (all metadata values are non-NULL)- Works on all metadata types: INTEGER, FLOAT, TEXT, and BOOLEAN
- All compilation warnings eliminated
- Fixed critical logic bug:
metadataInIdxtype corrected fromsize_ttoint(prevented -1 wrapping to SIZE_MAX) - Fixed 5 sign comparison warnings with proper type casts
- Fixed 7 uninitialized variable warnings by adding initializers and default cases
- Clean compilation with
-Wall -Wextra(zero warnings)
- Fixed critical logic bug:
- LIKE operator for text metadata columns (#197)
- Standard SQL pattern matching with
%and_wildcards - Case-insensitive matching (SQLite default)
- Standard SQL pattern matching with
-
Locale-dependent JSON parsing (#241)
- Custom locale-independent float parser fixes JSON parsing in non-C locales
- No platform dependencies, thread-safe
-
musl libc compilation (Alpine Linux)
- Removed non-portable preprocessor macros from vendored sqlite3.c
-
Distance constraints for KNN queries (#166)
- Support GT, GE, LT, LE operators on the
distancecolumn in KNN queries - Enables cursor-based pagination:
WHERE embedding MATCH ? AND k = 10 AND distance > 0.5 - Enables range queries:
WHERE embedding MATCH ? AND k = 100 AND distance BETWEEN 0.5 AND 1.0 - Works with all vector types (float32, int8, bit)
- Compatible with partition keys, metadata, and auxiliary columns
- Comprehensive test coverage (15 tests)
- Fixed variable shadowing issues from original PR
- Documented precision handling and pagination caveats
- Support GT, GE, LT, LE operators on the
-
Optimize command for space reclamation (#210)
- New special command:
INSERT INTO vec_table(vec_table) VALUES('optimize') - Reclaims disk space after DELETE operations by compacting shadow tables
- Rebuilds vector chunks with only valid rows
- Updates rowid mappings to maintain data integrity
- New special command:
-
Cosine distance support for binary vectors (#212)
- Added
distance_cosine_bit()function for binary quantized vectors - Enables cosine similarity metric on bit-packed vectors
- Useful for memory-efficient semantic search
- Added
-
ALTER TABLE RENAME support (#203)
- Implement
vec0Rename()callback for virtual table module - Allows renaming vec0 tables with standard SQL:
ALTER TABLE old_name RENAME TO new_name - Properly renames all shadow tables and internal metadata
- Implement
-
Language bindings and package configurations for GitHub installation
- Go CGO bindings (
bindings/go/cgo/) withAuto()and serialization helpers - Python package configuration (
pyproject.toml,setup.py) forpip install git+... - Node.js package configuration (
package.json) fornpm install vlasky/sqlite-vec - Ruby gem configuration (
sqlite-vec.gemspec) forgem installfrom git - Rust crate configuration (
Cargo.toml,src/lib.rs) forcargo add --git - All packages support installing from main branch or specific version tags
- Documentation in README with installation table for all languages
- Go CGO bindings (
-
Python loadable extension support documentation
- Added note about Python requiring
--enable-loadable-sqlite-extensionsbuild flag - Recommended using
uvfor virtual environments (uses system Python with extension support) - Documented workarounds for pyenv and custom Python builds
- Added note about Python requiring
-
Memory leak on DELETE operations (#243)
- Added
vec0Update_Delete_ClearRowid()to clear deleted rowids - Added
vec0Update_Delete_ClearVectors()to clear deleted vector data - Prevents memory accumulation from deleted rows
- Vectors and rowids now properly zeroed out on deletion
- Added
-
CI/CD build infrastructure (#228)
- Upgraded deprecated ubuntu-20.04 runners to ubuntu-latest
- Added native ARM64 builds using ubuntu-24.04-arm
- Removed cross-compilation dependencies (gcc-aarch64-linux-gnu)
- Fixed macOS link flags for undefined symbols
This fork is based on asg017/sqlite-vec v0.1.7-alpha.2.
All features and functionality from the original repository are preserved. See the original documentation for complete usage information.
This is a community-maintained fork created to merge pending upstream PRs and provide continued support while the original author is unavailable. Once development resumes on the original repository, users are encouraged to switch back.
All original implementation credit goes to Alex Garcia.