sqlite3_column_blob() returns NULL for zero-length blobs or on OOM. Several call sites in rescore KNN and DiskANN node/vector read passed the result directly to memcpy without checking, risking NULL deref on corrupt or empty databases. IVF already had proper NULL checks. Adds corruption regression tests that truncate shadow table blobs and verify the query errors cleanly instead of crashing. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .github | ||
| benchmarks | ||
| benchmarks-ann | ||
| bindings | ||
| examples | ||
| scripts | ||
| site | ||
| tests | ||
| .gitignore | ||
| ARCHITECTURE.md | ||
| LICENSE-APACHE | ||
| LICENSE-MIT | ||
| Makefile | ||
| README.md | ||
| reference.yaml | ||
| SECURITY.md | ||
| sqlite-dist.toml | ||
| sqlite-vec-diskann.c | ||
| sqlite-vec-ivf-kmeans.c | ||
| sqlite-vec-ivf.c | ||
| sqlite-vec-rescore.c | ||
| sqlite-vec.c | ||
| sqlite-vec.h.tmpl | ||
| test.sql | ||
| TODO | ||
| TODO.md | ||
| VERSION | ||
sqlite-vec
An extremely small, "fast enough" vector search SQLite extension that runs
anywhere! A successor to sqlite-vss
Important
sqlite-vecis a pre-v1, so expect breaking changes!
- Store and query float, int8, and binary vectors in
vec0virtual tables - Written in pure C, no dependencies, runs anywhere SQLite runs (Linux/MacOS/Windows, in the browser with WASM, Raspberry Pis, etc.)
- Store non-vector data in metadata, auxiliary, or partition key columns
sqlite-vec is a
Mozilla Builders project,
with additional sponsorship from
Fly.io ,
Turso,
SQLite Cloud, and
Shinkai.
See the Sponsors section for more details.
Installing
See Installing sqlite-vec
for more details.
| Language | Install | More Info | |
|---|---|---|---|
| Python | pip install sqlite-vec |
sqlite-vec with Python |
|
| Node.js | npm install sqlite-vec |
sqlite-vec with Node.js |
|
| Ruby | gem install sqlite-vec |
sqlite-vec with Ruby |
|
| Go | go get -u github.com/asg017/sqlite-vec/bindings/go |
sqlite-vec with Go |
|
| Rust | cargo add sqlite-vec |
sqlite-vec with Rust |
|
| Datasette | datasette install datasette-sqlite-vec |
sqlite-vec with Datasette |
|
| rqlite | rqlited -extensions-path=sqlite-vec.tar.gz |
sqlite-vec with rqlite |
|
sqlite-utils |
sqlite-utils install sqlite-utils-sqlite-vec |
sqlite-vec with sqlite-utils |
|
| Github Release |
Sample usage
.load ./vec0
create virtual table vec_examples using vec0(
sample_embedding float[8]
);
-- vectors can be provided as JSON or in a compact binary format
insert into vec_examples(rowid, sample_embedding)
values
(1, '[-0.200, 0.250, 0.341, -0.211, 0.645, 0.935, -0.316, -0.924]'),
(2, '[0.443, -0.501, 0.355, -0.771, 0.707, -0.708, -0.185, 0.362]'),
(3, '[0.716, -0.927, 0.134, 0.052, -0.669, 0.793, -0.634, -0.162]'),
(4, '[-0.710, 0.330, 0.656, 0.041, -0.990, 0.726, 0.385, -0.958]');
-- KNN style query
select
rowid,
distance
from vec_examples
where sample_embedding match '[0.890, 0.544, 0.825, 0.961, 0.358, 0.0196, 0.521, 0.175]'
order by distance
limit 2;
/*
┌───────┬──────────────────┐
│ rowid │ distance │
├───────┼──────────────────┤
│ 2 │ 2.38687372207642 │
│ 1 │ 2.38978505134583 │
└───────┴──────────────────┘
*/
Sponsors
Development of sqlite-vec is supported by multiple generous sponsors! Mozilla
is the main sponsor through the new Builders project.
sqlite-vec is also sponsored by the following companies:
As well as multiple individual supporters on Github sponsors!
If your company interested in sponsoring sqlite-vec development, send me an
email to get more info: https://alexgarcia.xyz
See Also
sqlite-ecosystem, Maybe more 3rd party SQLite extensions I've developedsqlite-rembed, Generate text embeddings from remote APIs like OpenAI/Nomic/Ollama, meant for testing and SQL scriptssqlite-lembed, Generate text embeddings locally from embedding models in the.ggufformat