A vector search SQLite extension that runs anywhere!
Find a file
Alex Garcia 82f4eb08bf Add NULL checks after sqlite3_column_blob in rescore and DiskANN
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>
2026-03-31 14:31:49 -07:00
.github rm demo gha workflow 2026-03-31 01:21:54 -07:00
benchmarks Add ANN search support for vec0 virtual table (#273) 2026-03-31 01:03:32 -07:00
benchmarks-ann Add comprehensive ANN benchmarking suite (#279) 2026-03-31 01:29:49 -07:00
bindings Add ANN search support for vec0 virtual table (#273) 2026-03-31 01:03:32 -07:00
examples node:sqlite sample 2025-01-24 13:30:14 -08:00
scripts Fix broken unzip -d line in vendor.sh 2026-03-31 13:14:18 -07:00
site Add ANN search support for vec0 virtual table (#273) 2026-03-31 01:03:32 -07:00
tests Add NULL checks after sqlite3_column_blob in rescore and DiskANN 2026-03-31 14:31:49 -07:00
.gitignore Add comprehensive ANN benchmarking suite (#279) 2026-03-31 01:29:49 -07:00
ARCHITECTURE.md Metadata filtering (#124) 2024-11-20 00:59:34 -08:00
LICENSE-APACHE add licenses 2024-05-10 22:42:10 -07:00
LICENSE-MIT add licenses 2024-05-10 22:42:10 -07:00
Makefile Add DiskANN index for vec0 virtual table 2026-03-31 01:21:54 -07:00
README.md sponsor update 2025-01-24 12:00:41 -08:00
reference.yaml Remove vec_npy_each from default entrypoint and move to sqlite3_vec_numpy_init entrypoint 2024-09-25 23:07:17 -07:00
SECURITY.md add security doc 2024-09-26 00:22:31 -07:00
sqlite-dist.toml update sqlite-dist 2024-08-05 16:03:09 -07:00
sqlite-vec-diskann.c Add NULL checks after sqlite3_column_blob in rescore and DiskANN 2026-03-31 14:31:49 -07:00
sqlite-vec-ivf-kmeans.c Add IVF index for vec0 virtual table 2026-03-31 01:18:47 -07:00
sqlite-vec-ivf.c Add IVF index for vec0 virtual table 2026-03-31 01:18:47 -07:00
sqlite-vec-rescore.c Add NULL checks after sqlite3_column_blob in rescore and DiskANN 2026-03-31 14:31:49 -07:00
sqlite-vec.c Temporarily block vector UPDATE for DiskANN and IVF indexes 2026-03-31 14:08:08 -07:00
sqlite-vec.h.tmpl cleanup 2024-11-20 06:48:13 -08:00
test.sql Metadata filtering (#124) 2024-11-20 00:59:34 -08:00
TODO Metadata filtering (#124) 2024-11-20 00:59:34 -08:00
TODO.md Add ANN search support for vec0 virtual table (#273) 2026-03-31 01:03:32 -07:00
VERSION v0.1.10-alpha.1 2026-03-31 01:31:39 -07:00

sqlite-vec

An extremely small, "fast enough" vector search SQLite extension that runs anywhere! A successor to sqlite-vss

Important

sqlite-vec is a pre-v1, so expect breaking changes!

  • Store and query float, int8, and binary vectors in vec0 virtual 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

Mozilla Builders logo

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 PyPI
Node.js npm install sqlite-vec sqlite-vec with Node.js npm
Ruby gem install sqlite-vec sqlite-vec with Ruby Gem
Go go get -u github.com/asg017/sqlite-vec/bindings/go sqlite-vec with Go Go Reference
Rust cargo add sqlite-vec sqlite-vec with Rust Crates.io
Datasette datasette install datasette-sqlite-vec sqlite-vec with Datasette Datasette
rqlite rqlited -extensions-path=sqlite-vec.tar.gz sqlite-vec with rqlite rqlite
sqlite-utils sqlite-utils install sqlite-utils-sqlite-vec sqlite-vec with sqlite-utils sqlite-utils
Github Release GitHub tag (latest SemVer pre-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.

Mozilla Builders logo

sqlite-vec is also sponsored by the following companies:

Fly.io logo Turso logo SQLite Cloud logo Shinkai logo

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 developed
  • sqlite-rembed, Generate text embeddings from remote APIs like OpenAI/Nomic/Ollama, meant for testing and SQL scripts
  • sqlite-lembed, Generate text embeddings locally from embedding models in the .gguf format