1 unstable release
Uses new Rust 2024
| new 0.1.0 | Feb 16, 2026 |
|---|
#276 in Memory management
1.5MB
31K
SLoC
Vector index storage and loading for frankensearch.
This crate implements the FSVI binary format reader/writer plus exact brute-force top-k vector search, with optional HNSW ANN acceleration.
FSVI File Layout
All multi-byte integers are little-endian. The vector slab is 64-byte aligned for cache-line / SIMD friendliness.
┌───────────────────────────────────────────┐
│ Header (variable length) │
│ magic: b"FSVI" (4 bytes) │
│ version: u16 (2 bytes) │
│ embedder_id_len: u16 (2 bytes) │
│ embedder_id: [u8] (variable) │
│ embedder_revision_len: u16 (2 bytes) │
│ embedder_revision: [u8] (variable) │
│ dimension: u32 (4 bytes) │
│ quantization: u8 (1 byte) │
│ reserved: [u8; 3] (3 bytes) │
│ record_count: u64 (8 bytes) │
│ vectors_offset: u64 (8 bytes) │
│ header_crc32: u32 (4 bytes) │
├───────────────────────────────────────────┤
│ Record Table │
│ record_count × 16 bytes each: │
│ doc_id_hash: u64 (8 bytes) │
│ doc_id_offset: u32 (4 bytes) │
│ doc_id_len: u16 (2 bytes) │
│ flags: u16 (2 bytes) │
├───────────────────────────────────────────┤
│ String Table │
│ Concatenated UTF-8 doc_id strings │
├───────────────────────────────────────────┤
│ Padding (to 64-byte alignment) │
├───────────────────────────────────────────┤
│ Vector Slab │
│ record_count × dimension × elem_size │
│ (2 bytes/elem for f16, 4 for f32) │
└───────────────────────────────────────────┘
Dependencies
~28–63MB
~1M SLoC