My friend Sam and I were bored one weekend, and wanted to make something self-contained but still useful. We ended up with Victor [0], a vector database designed to run in the browser. It’s written in Rust, which gives us access to things like super-fast and compact serialization and deserialization, but it’s compiled to WASM and uses web-sys to interact with the browser’s JS APIs to write the database contents to disk.
We worked hard on designing it in a way that makes sense for the browser. It uses the private origin file system [1] and stores the vectors in a compact format (one byte per vector dimension).
Since storage space is at a premium in the browser, we also provide built-in PCA to allow you to compress your vectors. It’s completely transparent to the user and automatically kicks in once a vector storage file exceeds 10mb. We’re trying to think of a better way to design this API, so let us know any ideas you have!
[0]: https://github.com/not-pizza/victor/
[1]: https://developer.mozilla.org/en-US/docs/Web/API/File_System...