Very exciting and I can’t wait to try it. Dependency issues are the reason I am currently not using sqlite-vss (i.e. not using an index for my vector searches), but man do I wish for better performance.
At the risk of fulfilling a HN stereotype, may I ask why you ditched Rust for this extension?
Went back, and forth a lot, but the short version:
1. Having directly access to SQLite's C APIs is really useful, especially for BLOB I/O and some rarely-used APIs that sqlite-vec uses and aren't available in some SQLite/Rust bindings
2. Writing in Rust for this project would have meant adding a few dependencies which would make some builds a bit more complicated
3. Pure C means easier to compile for some targets I wanted to support, like WASM/mobile devices/raspberry pis
4. A single sqlite-vec.c/h file means you can drag+drop a single file into your C projects and "it just works"
5. I wanted full control over what stays in memory and what doesn't, and it's a bit easier to do so in C (at least in my brain)
6. Most vector search operations aren't too complicated, so I feel comfortable manually handling memory access. You work with fixed length vectors, pretty easy to do manual checks for. If it required a lot of string parsing/validation or other dicey work, then Rust would have been a godsend, but vector search specifically fits C pretty well.
7. Ton of C/C++ vector search examples I could reference from Faiss/hnswlib/annoy
At the risk of fulfilling a HN stereotype, may I ask why you ditched Rust for this extension?