finds.dev← search

// the find

oramasearch/orama

★ 10,474 · TypeScript · NOASSERTION · updated Jul 2026

🌌 A complete search engine and RAG pipeline in your browser, server or edge network with support for full-text, vector, and hybrid search in less than 2kb.

Orama is an in-process search engine for JavaScript/TypeScript that handles full-text, vector, and hybrid search entirely in your runtime — browser, Node, or edge — with no external search service required. It ships with BM25 scoring, typo tolerance, geosearch, facets, and a RAG chat layer built on top. The target is anyone who wants Algolia-level search features without paying for Algolia or running Elasticsearch.

The hybrid search implementation is genuinely well thought out: BM25 and vector scores are combined in a single query rather than requiring two separate calls and client-side merging. The plugin architecture is clean — the Docusaurus, Astro, and Nextra plugins mean you can add search to a static docs site in under an hour with zero infrastructure. The data structure choices are visible in the source (AVL tree for numeric ranges, radix trie for text, BKD tree for geospatial) rather than being a black box, which matters if you need to reason about performance. Stemming and tokenization in 30 languages ships out of the box, which most embedded search libraries skip entirely.

Everything lives in memory — there is no persistent index format that survives a process restart without re-inserting all documents, which makes it impractical for large datasets unless you serialize and reload on startup (the data-persistence plugin exists but adds non-trivial complexity). The vector search is brute-force cosine similarity with no HNSW or IVF index, so query time degrades linearly with collection size; fine for thousands of documents, a problem at hundreds of thousands. The RAG/chat layer routes through OpenAI via their 'Secure Proxy' service, which introduces a dependency on Orama's own cloud infrastructure even for the open-source path — that is not really open source if the interesting part calls home. There is no incremental update story for embeddings: if you change a document, you need to regenerate and re-insert its embedding manually.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →