What is SeekStorm?
SeekStorm is an open-source search engine written in Rust that combines lexical (full-text) search and vector search in one index. It can be embedded in an application as the seekstorm library, run as a multi-tenancy search server with a REST API and web UI, or exposed to AI agents through a local MCP server. The project is developed by SeekStorm, which its about page describes as an independent, bootstrapped company founded in 2020 and based in Warsaw, Poland. The same team previously built FAROO, a peer-to-peer web search engine, and the README links the author's SymSpell, PruningRadixTrie and WordSegmentationTM libraries.
Architecturally, SeekStorm runs two separate engines behind one query planner: an inverted index with BM25F ranking for lexical relevance and a sharded, leveled IVF index for approximate nearest neighbour vector search. Each query can be lexical, vector or hybrid, and hybrid results are combined with Reciprocal Rank Fusion. The README describes one shard per processor core, levels of 64k documents per shard that are committed to disk and become immutable (so there are no segment merges), and a plain on-disk layout of API key, index, shard and level directories containing index.bin, vector.bin, facet.bin and a Zstandard-compressed docstore.bin. The architecture page covers the design in more detail.
Distribution covers the seekstorm, seekstorm_server and seekstorm_mcp_server crates on crates.io, a Docker image for the server, and REST client SDKs for Rust, Python, TypeScript, C# and Java. The server runs on Linux, Windows and macOS, and SIMD acceleration is available on x86-64 (AVX2) and AArch64 (NEON). The same binary index format is used by the library, the server and SeekStorm Cloud, the company's managed service, so an index can move between them without re-indexing.
The current release is v4.0.1, published October 31, 2026. It fixes panics that could occur when an empty term was committed while automatic spelling-correction dictionary creation was enabled, through an update of the symspell_complete_rs dependency. v4.0.0, released the same day, made the index segment number persistent: segment_number_bits1 was renamed to segment_number_bits, moved into IndexMetaObject, stored in index.json and clamped to 8 to 12, while existing indices remain loadable. Native vector search arrived in 3.0.0 (April 2026), and 3.4.0 (October 2026) added the MCP server and HTTP QUERY support on two REST endpoints. The full history is in the changelog.
The repository is licensed under the Apache License 2.0; the InstantSearch adapter is a separate MIT-licensed project. The README roadmap lists a distributed search cluster as a proof of concept and plans such as S3 object storage as an index backend, Japanese and Korean tokenizers, WebAssembly and language bindings for the library, so these are not part of the current release. The public DeepHN demo is still based on the earlier C# codebase. Other search projects listed on iThub include OpenSearch, Algolia and the vector databases Milvus and Weaviate.
SeekStorm screenshots
Explore the interface. Open a screenshot to view it at full size.

Official README screenshot of the SeekStorm 3.0.0 server console, cropped to the multitenancy, tenant, index, lexical and vector statistics.

Benchmark figure published by the SeekStorm project from its search_benchmark_game; results as reported by the project.

Figure published by the SeekStorm project: 6,370 and 2,700 microseconds for vector search versus 305 for lexical search on 5 million documents and 16 million vectors.
Source: official SeekStorm project page.
Key capabilities
- Lexical search with BM25F Ranking options are BM25F and BM25F_Proximity, the latter adding term proximity. Query types are OR (union), AND (intersection), phrase and NOT, with result types TopK, Count and TopKCount. Block-max WAND and Maxscore are used for early termination, and posting lists use roaring-bitmap compression.
- Tokenizers, stemming and phrase n-grams Six tokenizers are available, including Chinese word segmentation behind the default
zhfeature flag, plus stemming for 38 languages and optional predefined or custom stopword lists. Frequent-word lists drive N-gram indexing of bigrams and trigrams; the README reports phrase queries 2.18x faster in mean latency and 7.63x at p99.9 with this technique. - Native vector search Vectors are stored in a sharded, leveled IVF index clustered with K-Medoid (PAM), with
nprobeand similarity thresholds controlling recall and latency. Precision is F32 or I8, similarity is cosine, dot product or Euclidean, and TurboQuant and affine scalar quantization are supported. Field and facet filters apply during the vector search rather than as a post-filter. - Built-in embeddings or external vectors Embeddings can be generated from any text field with Model2Vec, using a chunker that respects sentence boundaries and Unicode segmentation. Alternatively, externally generated embeddings are imported as a Vector, Binary or Json field, and a query can pass its own
query_vector. Multi-vector indexing works across multiple fields and multiple chunks per field. - Hybrid search per query
SearchMode::Lexical,SearchMode::VectorandSearchMode::Hybridare chosen per query, and hybrid results are fused with Reciprocal Rank Fusion. The project states that hybrid search is exhaustive rather than a re-ranking of preliminary candidates. With the defaultvbfeature, each result carries lexical and vector scores and its source. - Real-time indexing The README states that every document is searchable immediately, even before and during commit, for both lexical and vector search. Indexing is incremental, and documents can be updated, deleted and iterated in both directions for export or inspection. The project quotes about 35K documents per second of indexing on a laptop.
- Faceting, filtering and sorting String and numeric range facets support counting and filtering, with histogram and min/max aggregation. Results can be sorted by any field, ascending or descending, with multiple fields combined by tie-breaking, and an empty query can still return facets and sorted results. Geo proximity search, filtering and sorting work on Point fields.
- Typo tolerance, completion and highlighting Fuzzy queries and query spelling correction return results when a query contains spelling errors, and typo-tolerant query auto-completion supports instant search. Results can include KWIC snippets and highlighting, and one-way and multi-way synonyms are supported. The spelling dictionary can be built automatically during indexing.
- Field types and storage Field types include integers from U8 to I64, F32 and F64, Timestamp, Bool, string and string-set types, Text, Point, Json, Binary and Vector. The README lists no limit on field number, field length or index size. The index runs fully in RAM or from memory-mapped files in the same file format, and backup is a file copy.
- Multi-tenancy search server
seekstorm_servermanages tenants through API keys with quotas for indices, documents, operations and disk usage, plus rate limits. AMASTER_KEY_SECRETenvironment variable is required; the README warns that generated API keys are otherwise compromised. The server console shows tenant, index, lexical and vector statistics. - REST API and client SDKs Indexing and search run through a REST API with CORS, documented with code-first OpenAPI on seekstorm.com/documentation. Since 3.4.0 the query and iterator endpoints also accept the HTTP QUERY verb. Client SDKs exist for Rust, Python, TypeScript, C# and Java on the same REST API.
- Data ingestion The server console ingests local CSV, JSON, newline-delimited JSON and concatenated JSON files, and PDF files either one at a time or for a whole directory. PDF support uses the
pdfiumcrate behind the defaultpdffeature. The README includes a tutorial that builds an English Wikipedia search index in five steps. - Embedded web UI The server includes a web server and UI that searches any index without code. It offers query auto-correction, auto-completion, instant search, keyword highlighting, a histogram with date filter, facets, sorting and document preview, and the project presents it as a demo, test tool and template.
- MCP server for AI agents
seekstorm_mcp_server, added in 3.4.0, embeds the library and runs as a child process over stdio, so no separate server process or network connection is needed. It exposes lexical, vector and hybrid search with filters, facets, sorting and highlighting, plus document indexing, JSON and NDJSON ingestion, PDF indexing and index management as tools. If no index exists atSEEKSTORM_INDEX_PATH, one is created with a default schema. - Rust library The
seekstormcrate is added withcargo add seekstormand used with Tokio. The default featureszh,pdfandvbcan be turned off with--no-default-featuresto reduce size, and an optionalgxhashfeature switches hashing. API documentation is on docs.rs. - Algolia InstantSearch adapter A separate MIT-licensed InstantSearch adapter on npm redirects an existing Algolia InstantSearch.js frontend to a SeekStorm backend without rewriting the UI. It can also be used to build a new interface with the InstantSearch widget library.
- Published benchmarks On 5 million English Wikipedia documents, the project reports an average lexical latency of 306 microseconds against 2,656 for Lucene 10.3.0 and 2,205 for Tantivy 0.25 in its search_benchmark_game, run with SeekStorm 1.0.0. For vector search it reports 188 microseconds on SIFT1M and 2.7 ms on 16 million Wikipedia vectors at 95% recall@10. The README notes that "sub-millisecond" refers to average latency and that P99 is 0.8 to 6.8 ms depending on query type.
- SeekStorm Cloud The managed service runs the same index for customers. The pricing section on seekstorm.com describes usage-based pricing split by resource (documents, updates, queries) with a monthly commitment, a cost estimator, a configurable monthly spending cap, custom Enterprise pricing and 24/7 priority support included from a $5,000 monthly commitment. Current rates are on the pricing section of the website.
Where SeekStorm fits
Site and product search
The README lists product and site search with facets, typo tolerance, query completion and instant search as a primary use. Documents are indexed through the REST API or ingested from JSON or CSV files, and facets on string or numeric fields drive filtering and counts. The embedded web UI shows facets, a date histogram and sorting, and the faceted search guide documents the schema and query parameters.
Retrieval for RAG and AI agents
The MCP server is installed with cargo install seekstorm_mcp_server and added to an MCP client configuration such as Claude Desktop or Cursor with an index path. Agents can then index documents and PDFs and run lexical, vector or hybrid search. Because indexing is real-time, a newly added document is searchable immediately.
Embedding search inside an application
Rust applications add the seekstorm crate, define a JSON schema, create an index with an IndexMetaObject, index documents and call search with a query type and search mode. No server process is involved, and the index is a directory of files in RAM or memory-mapped. The same index can later be served by the server or SeekStorm Cloud.
Searching a document collection
The server console ingests a directory of PDF files or a large NDJSON dump, and the README's tutorial builds an English Wikipedia search engine in five steps. With a Text field configured for internal inference, the server chunks text and generates Model2Vec embeddings at index time, so the same collection supports lexical, vector and hybrid queries from the web UI.
Hosting search for multiple tenants
The multi-tenancy server issues API keys per tenant and enforces quotas for indices, documents, operations and disk usage, along with optional rate limits. It is started with the Docker image, mapping a storage volume and setting MASTER_KEY_SECRET, and indices are managed through the server's REST endpoints.
Replacing an Algolia InstantSearch backend
Sites with an existing InstantSearch.js frontend can install the InstantSearch adapter and point it at a SeekStorm server or SeekStorm Cloud. The project describes this as swapping only the backend, with no UI rewrite.
Install
docker run -ti -p "8000:80" -v "$(pwd)/seekstorm_storage:/seekstorm_index:z" wolfgarbe/seekstorm_serverReviews of SeekStorm
Be the first to share your experience with SeekStorm.
Write a review
Loading review form…

