Search that understands meaning.
Runs in the browser. Completely private.
Offline semantic search for any documentation site. Understands meaning, runs entirely in the browser, and never sends data to the cloud.
How it works
Smart search for static documentation, with no servers or third-party services required.
Runs Locally in the Browser
Uses lightweight AI models that execute directly in the browser. No data ever leaves your users' devices.
Understands What You Mean
Goes beyond exact keyword matching. Searching for 'authentication' also finds results about 'sign-in', 'login', and 'sessions'.
Hybrid Keyword + Semantic
Combines fast keyword matching with meaning-aware similarity scoring for the most relevant results, instantly.
Choose your search model
Pick the model that fits your documentation size and language requirements.
| Model | Dimensions | Size | Languages | Best For |
|---|---|---|---|---|
| MiniLM L6 v2 ★ | 384 | ~23 MB | English only | Fast, general English docs |
| Multilingual MiniLM L12 | 384 | ~118 MB | 50+ languages | i18n documentation |
| Multilingual E5 Small | 384 | ~118 MB | 100+ languages | Wide language coverage |
| Multilingual MPNet Base | 768 | ~270 MB | 50+ languages | Best multilingual quality |
💡 Multilingual documentation: If your documentation website contains multiple languages (such as English, Chinese, German, Spanish, etc.), select a multilingual model using docmd-search --settings. The default model is English-only and will produce poor search relevance for other languages.
Use it anywhere: the client API
A lightweight client runtime (under 5 KB) that runs entirely in the browser. Build custom search UIs for any website or application.
import * as Search from '@docmd/plugin-search/client'; // 1. Initialise and load index folder. // Batch 0 is loaded instantly for sub-millisecond search startup, // while remaining chunk batches load progressively in background. await Search.load('/.docmd-search', (loaded, total) => { console.log(`Loaded batch ${loaded}/${total}`); }); // 2. Query search using hybrid vector + keyword matching. const results = Search.search('authentication secure routes', 10); results.forEach(({ score, chunk }) => { console.log(`[${(score * 100).toFixed(0)}%] ${chunk.file}#${chunk.heading || ''}`); console.log(chunk.text); });
Frequently asked questions
Common questions about docmd-search and offline semantic search.
Does it run entirely in the browser?
Read the full documentation →
Do users need to download AI models?
Learn how offline search works →
Does it work with multiple languages?
paraphrase-multilingual-MiniLM-L12-v2, which supports over 50 languages. The default model is English-only.Configure multilingual search →
What is the confidence score badge?
showConfidence setting displays a percentage badge next to each search result showing how closely it matches the query. This helps users quickly judge which results are most relevant.Read about browser client settings →
Start building in minutes
Open source, MIT licensed. One command to your first documentation site.