orama
oramasearch/orama
A lightweight search engine with support for full-text, vector, and hybrid search.
Overview
Orama provides a compact (less than 2kb) full-featured search engine supporting full-text, vector, and hybrid searches. It includes GenAI chat sessions, typo tolerance features, and works seamlessly across browsers, servers, or edge networks.
Categories
Tags
Similar tools
JavaGuide
Snailclimb/JavaGuide
Java guide for backend interviews & AI application development covering system design, LLMs, Agents, and RAG.
firecrawl
firecrawl/firecrawl
The API to search, scrape, and interact with the web at scale.
langchain
langchain-ai/langchain
The agent engineering platform.
awesome-llm-apps
Shubhamsaboo/awesome-llm-apps
Shubhamsaboo/awesome-llm-apps
PaddleOCR
PaddlePaddle/PaddleOCR
Transforms images/PDFs into structured data for AI systems with high accuracy.
graphify
Graphify-Labs/graphify
AI coding assistant skill (Claude Code, Codex, OpenCode, Cursor, Gemini CLI, and more)
Install
npm install oramaREADME
If you need more info, help, or want to provide general feedback on Orama, join the Orama Slack channel
Highlighted features
- Full-Text search
- Vector Search
- Hybrid Search
- GenAI Chat Sessions
- Search Filters
- Geosearch
- Pinning Rules (Merchandising)
- Facets
- Fields Boosting
- Typo Tolerance
- Exact Match
- BM25
- Stemming and tokenization in 30 languages
- Plugin System
Installation
You can install Orama using npm, yarn, pnpm, bun:
npm i @orama/orama
Or import it directly in a browser module:
<html>
<body>
<script type="module">
import { create, insert, search } from 'https://cdn.jsdelivr.net/npm/@orama/orama@latest/+esm'
</script>
</body>
</html>
With Deno, you can just use the same CDN URL or use npm specifiers:
import { create, search, insert } from 'npm:@orama/orama'
Read the complete documentation at https://docs.orama.com.
Orama Features
Usage
Orama is quite simple to use. The first thing to do is to create a new database instance and set an indexing schema:
import { create, insert, remove, search, searchVector } from '@orama/orama'
const db = create({
schema: {
name: 'string',
description: 'string',
price: 'number',
embedding: 'vector[1536]', // Vector size must be expressed during schema initialization
meta: {
rating: 'number',
},
},
})
insert(db, {
name: 'Noise cancelling headphones',
description: 'Best noise cancelling headphones on the market',
price: 99.99,
embedding: [0.2432, 0.9431, 0.5322, 0.4234, ...],
meta: {
rating: 4.5
}
})
const results = search(db, {
term: 'Best headphones'
})
// {
// elapsed: {
// raw: 21492,
// formatted: '21μs',
// },
// hits: [
// {
// id: '41013877-56',
// score: 0.925085832971998432,
// document: {
// name: 'Noise cancelling headphones',
// description: 'Best noise cancelling headphones on the market',
// price: 99.99,
// embedding: [0.2432, 0.9431, 0.5322, 0.4234, ...],
// meta: {
// rating: 4.5
// }
// }
// }
// ],
// count: 1
// }
Orama currently supports 10 different data types:
| Type | Description | Example |
|---|