| 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 |