|
1 | 1 | # Changelog |
2 | 2 |
|
3 | | -All notable changes to this community fork will be documented in this file. |
| 3 | +## [1.0.0] - 2026-02-09 |
| 4 | + |
| 5 | +### Changed |
| 6 | + |
| 7 | +- **npm package renamed from `@mceachen/sqlite-vec` to `@photostructure/sqlite-vec`** |
| 8 | + |
| 9 | +### About this fork |
| 10 | + |
| 11 | +This package is a community fork of [Alex Garcia](https://github.com/asg017)'s |
| 12 | +excellent [`sqlite-vec`](https://github.com/asg017/sqlite-vec), building on |
| 13 | +[Vlad Lasky](https://github.com/vlasky)'s community fork which merged 15+ |
| 14 | +upstream PRs. We're grateful to both for their foundational work. |
| 15 | + |
| 16 | +[PhotoStructure](https://photostructure.com) depends on sqlite-vec for |
| 17 | +production vector search and is committed to maintaining this fork for as long as |
| 18 | +we need it. Our current focus is: |
| 19 | + |
| 20 | +- **Stability:** Memory leak fixes, sanitizer-verified error paths, comprehensive test coverage |
| 21 | +- **Node.js packaging:** Prebuilt binaries for all major platforms (including Alpine/musl and Windows ARM64), Electron support, no post-install scripts |
| 22 | + |
| 23 | +The version was bumped to 1.0.0 to signal the package rename and avoid confusion |
| 24 | +with the `0.x` releases under the previous name. The underlying C extension is |
| 25 | +unchanged from 0.4.1. |
| 26 | + |
| 27 | +All code remains open source under the original MIT/Apache-2.0 dual license. |
| 28 | + |
| 29 | +## [0.4.1] - 2026-02-09 |
| 30 | + |
| 31 | +### Fixed |
| 32 | + |
| 33 | +- **Remaining memory leaks from upstream PR #258** ([`c9be38c`](https://github.com/mceachen/sqlite-vec/commit/c9be38c)) |
| 34 | + - `vec_eachFilter`: Fixed pzErrMsg leak when vector parsing fails with invalid input |
| 35 | + - `vec_slice`: Fixed vector cleanup leaks in INT8 and BIT cases on malloc failure |
| 36 | + - Changed early `return` to `goto done` to ensure cleanup functions are called |
| 37 | + - These leaks only occurred in error paths (invalid input, OOM) not covered by existing tests |
| 38 | + |
| 39 | +### Added |
| 40 | + |
| 41 | +- **Rust example updates for zerocopy 0.8** ([`53aeaeb`](https://github.com/mceachen/sqlite-vec/commit/53aeaeb)) |
| 42 | + - Updated `examples/simple-rust/` to use zerocopy 0.8 API |
| 43 | + - Changed `AsBytes` trait to `IntoBytes` (renamed in zerocopy 0.8) |
| 44 | + - Updated documentation in `site/using/rust.md` |
| 45 | + - Incorporates [upstream PR #244](https://github.com/asg017/sqlite-vec/pull/244) |
| 46 | + |
| 47 | +- **Comprehensive error path test coverage** ([`95cc6c8`](https://github.com/mceachen/sqlite-vec/commit/95cc6c8)) |
| 48 | + - New `tests/test-error-paths.py` with 30 tests targeting error-handling code paths |
| 49 | + - Tests exercise error conditions that previously went untested (invalid inputs, NULL values, mismatched types/dimensions) |
| 50 | + - Covers `vec_each`, `vec_slice`, `vec_distance_*`, `vec_add`, `vec_sub`, vec0 INSERT/KNN operations |
| 51 | + - Repeated error operations test (50 iterations) to stress-test cleanup paths |
| 52 | + - Ensures sanitizers (ASan/LSan) will catch any reintroduced memory leaks in error paths |
| 53 | + |
| 54 | +### Context |
| 55 | + |
| 56 | +This release completes the integration of upstream PR #258's memory leak fixes. Previous releases (0.3.2, 0.3.3) addressed most issues, but three error paths remained unfixed: |
| 57 | +- Error message allocation in `vec_each` with invalid vectors |
| 58 | +- Malloc failure handling in `vec_slice` for INT8/BIT vectors |
| 59 | + |
| 60 | +These paths were not detected by sanitizers because they were never executed by the test suite. The new error path tests ensure these code paths are now covered. |
| 61 | + |
| 62 | +## [0.4.0] - 2026-02-07 |
| 63 | + |
| 64 | +### Added |
| 65 | + |
| 66 | +- **Electron support** for packaged ASAR apps |
| 67 | + - `getLoadablePath()` now resolves `app.asar` to `app.asar.unpacked` automatically |
| 68 | + - Works transparently — no code changes needed in Electron apps |
| 69 | + - Added README documentation with `electron-builder` and `electron-forge` configuration examples |
| 70 | + |
| 71 | +## [0.3.3] - 2026-02-04 |
| 72 | + |
| 73 | +### Fixed |
| 74 | + |
| 75 | +- **Parser logic bugs** ([`45f09c1`](https://github.com/mceachen/sqlite-vec/commit/45f09c1)) |
| 76 | + - Fixed `&&`→`||` condition checks in token validation across multiple parsing functions |
| 77 | + - Affected: `vec0_parse_table_option`, `vec0_parse_partition_key_definition`, `vec0_parse_auxiliary_column_definition`, `vec0_parse_primary_key_definition`, `vec0_parse_vector_column` |
| 78 | + |
| 79 | +- **Float precision for f32 distance calculations** ([`45f09c1`](https://github.com/mceachen/sqlite-vec/commit/45f09c1)) |
| 80 | + - Use `sqrtf()` instead of `sqrt()` for f32 vectors to avoid unnecessary double precision |
| 81 | + - May result in minor floating-point differences in distance results |
| 82 | + |
| 83 | +- **Memory leaks in metadata and insert operations** ([`f56fdeb`](https://github.com/mceachen/sqlite-vec/commit/f56fdeb)) |
| 84 | + - Fixed zSql memory leaks in `vec0_write_metadata_value` (never freed on any path) |
| 85 | + - Fixed zSql leak and missing `sqlite3_finalize` in `vec0Update_Delete_ClearMetadata` |
| 86 | + - Fixed potential crash from uninitialized function pointers on early error in `vec0Update_Insert` |
| 87 | + - Fixed memory leak in `vec_static_blob_entriesClose` (internal rowids/distances arrays) |
| 88 | + |
| 89 | +### Added |
| 90 | + |
| 91 | +- **KNN filtering documentation** ([`fd69fed`](https://github.com/mceachen/sqlite-vec/commit/fd69fed)) |
| 92 | + - New documentation explaining when filters are applied during vs. after KNN search |
| 93 | + - Metadata columns, partition keys, and distance constraints filter DURING search |
| 94 | + - JOIN filters and subqueries filter AFTER search (may return fewer than k results) |
| 95 | + - Documented workarounds: use metadata columns or over-fetch with LIMIT |
| 96 | + |
| 97 | +### Infrastructure |
| 98 | + |
| 99 | +- Added clang-tidy static analysis configuration ([`a39311f`](https://github.com/mceachen/sqlite-vec/commit/a39311f)) |
| 100 | +- Expanded memory testing with UBSan/TSan support and multi-platform CI matrix ([`de0edf3`](https://github.com/mceachen/sqlite-vec/commit/de0edf3)) |
| 101 | +- Fixed test infrastructure: `make test-all` target, auto-detect pytest, fix test-unit linking ([`c39ada1`](https://github.com/mceachen/sqlite-vec/commit/c39ada1)) |
| 102 | + |
| 103 | +## [0.3.2] - 2026-01-04 |
| 104 | + |
| 105 | +### Added |
| 106 | + |
| 107 | +- **Memory testing framework** ([`c8654d0`](https://github.com/mceachen/sqlite-vec/commit/c8654d0)) |
| 108 | + - Valgrind and AddressSanitizer support via `make test-memory` |
| 109 | + - Catches memory leaks, use-after-free, and buffer overflows |
| 110 | + |
| 111 | +### Fixed |
| 112 | + |
| 113 | +- **Memory leaks in KNN queries** ([`e4d3340`](https://github.com/mceachen/sqlite-vec/commit/e4d3340), [`df2c2fc`](https://github.com/mceachen/sqlite-vec/commit/df2c2fc), [`f05a360`](https://github.com/mceachen/sqlite-vec/commit/f05a360)) |
| 114 | + - Fixed leaks in `vec0Filter_knn` metadata IN clause processing |
| 115 | + - Fixed leaks and potential crashes in `vec_static_blob_entries` filter |
| 116 | + - Ensured `knn_data` is freed on error paths |
| 117 | + |
| 118 | +- **Memory leaks in vtab lifecycle** ([`5f667d8`](https://github.com/mceachen/sqlite-vec/commit/5f667d8), [`49dcce7`](https://github.com/mceachen/sqlite-vec/commit/49dcce7)) |
| 119 | + - Fixed leaks in `vec0_init` and `vec0Destroy` error paths |
| 120 | + - Added NULL check before blob read to prevent crashes |
| 121 | + - `vec0_free` now properly frees partition, auxiliary, and metadata column names |
| 122 | + |
| 123 | +- **Cosine distance with zero vectors** ([`5d1279b`](https://github.com/mceachen/sqlite-vec/commit/5d1279b)) |
| 124 | + - Returns 1.0 (max distance) instead of NaN for zero-magnitude vectors |
| 125 | + |
| 126 | +## [0.3.1] - 2026-01-04 |
| 127 | + |
| 128 | +### Added |
| 129 | + |
| 130 | +- **Lua binding with IEEE 754 compliant float serialization** ([`1d3c258`](https://github.com/mceachen/sqlite-vec/commit/1d3c258)) |
| 131 | + |
| 132 | + - New `bindings/lua/sqlite_vec.lua` module for Lua 5.1+ |
| 133 | + - `serialize_f32()` for IEEE 754 binary format |
| 134 | + - `serialize_json()` for JSON format |
| 135 | + - Example script in `examples/simple-lua/` |
| 136 | + - Incorporates [upstream PR #237](https://github.com/asg017/sqlite-vec/pull/237) with extensive bugfixes for float encoding |
| 137 | + |
| 138 | +- **Safer automated release workflow** ([`6d06b7d`](https://github.com/mceachen/sqlite-vec/commit/6d06b7d)) |
| 139 | + - `prepare-release` job creates a release branch before building |
| 140 | + - All builds use the release branch with correct version baked in |
| 141 | + - Main branch only updated after successful npm publish |
| 142 | + - If any step fails, main is untouched |
| 143 | + |
| 144 | +### Fixed |
| 145 | + |
| 146 | +- **Numpy header parsing**: fixed `&&`→`||` logic bug ([`90e0099`](https://github.com/mceachen/sqlite-vec/commit/90e0099)) |
| 147 | + |
| 148 | +- **Go bindings patch updated for new SQLite source** ([`ceb488c`](https://github.com/mceachen/sqlite-vec/commit/ceb488c)) |
| 149 | + |
| 150 | + - Updated `bindings/go/ncruces/go-sqlite3.patch` for compatibility with latest SQLite |
| 151 | + |
| 152 | +- **npm-release workflow improvements** |
| 153 | + - Synchronized VERSION file with package.json during version bump ([`c345dab`](https://github.com/mceachen/sqlite-vec/commit/c345dab), [`baffb9b`](https://github.com/mceachen/sqlite-vec/commit/baffb9b) ) |
| 154 | + - Enhanced npm publish to handle prerelease tags (alpha, beta, etc.) ([`0b691fb`](https://github.com/mceachen/sqlite-vec/commit/0b691fb)) |
| 155 | + |
| 156 | +## [0.3.0] - 2026-01-04 |
| 157 | + |
| 158 | +### Added |
| 159 | + |
| 160 | +- **OIDC npm release workflow with bundled platform binaries** ([`f7ae5c0`](https://github.com/mceachen/sqlite-vec/commit/f7ae5c0)) |
| 161 | + |
| 162 | + - Single npm package contains all platform builds (prebuildify approach) |
| 163 | + - Simpler, more secure, works offline and with disabled scripts |
| 164 | + - Platform binaries: linux-x64, linux-arm64, darwin-x64, darwin-arm64, win32-x64, win32-arm64 |
| 165 | + |
| 166 | +- **Alpine/MUSL support** ([`f7ae5c0`](https://github.com/mceachen/sqlite-vec/commit/f7ae5c0)) |
| 167 | + - Added linux-x64-musl and linux-arm64-musl builds |
| 168 | + - Uses node:20-alpine Docker images for compilation |
| 169 | + |
| 170 | +### Fixed |
| 171 | + |
| 172 | +- **MSVC-compatible `__builtin_popcountl` implementation** ([`fab929b`](https://github.com/mceachen/sqlite-vec/commit/fab929b)) |
| 173 | + - Added fallback for MSVC which lacks GCC/Clang builtins |
| 174 | + - Enables Windows ARM64 and x64 builds |
| 175 | + |
| 176 | +### Changed |
| 177 | + |
| 178 | +- **Node.js package renamed to `@mceachen/sqlite-vec`** ([`fe9f038`](https://github.com/mceachen/sqlite-vec/commit/fe9f038)) |
| 179 | + - Published to npm under scoped package name |
| 180 | + - Updated documentation to reflect new package name |
| 181 | + - All other language bindings will continue to reference upstream ([vlasky/sqlite-vec](https://github.com/vlasky/sqlite-vec)) |
| 182 | + |
| 183 | +### Infrastructure |
| 184 | + |
| 185 | +- Updated GitHub Actions to pinned versions via pinact ([`b904a1d`](https://github.com/mceachen/sqlite-vec/commit/b904a1d)) |
| 186 | +- Added `bash`, `curl` and `unzip` to Alpine build dependencies ([`aa7f3e7`](https://github.com/mceachen/sqlite-vec/commit/aa7f3e7), [`9c446c8`](https://github.com/mceachen/sqlite-vec/commit/9c446c8)) |
| 187 | +- Documentation fixes ([`4d446f7`](https://github.com/mceachen/sqlite-vec/commit/4d446f7), [`3a5b6d7`](https://github.com/mceachen/sqlite-vec/commit/3a5b6d7)) |
| 188 | + |
| 189 | +----- |
| 190 | + |
| 191 | +# Earlier releases are from https://github.com/vlasky/sqlite-vec |
4 | 192 |
|
5 | 193 | ## [0.2.4-alpha] - 2026-01-03 |
6 | 194 |
|
|
0 commit comments