首次使用需在浏览器下载并缓存所选模型;默认端口为 7860,访问 http://localhost:7860;latest 标签随每次发布变动,需要稳定版本应固定镜像 digest。
MiniSearch
felladrinApache-2.0活跃维护浏览器里直接跑的极简 AI 搜索平台,聚合多个搜索源并调用本地大模型做问答,无需后端服务器。
Minimalist web-searching platform with an AI assistant that runs directly from your browser. Demo: https://felladrin-minisearch.hf.space
docker run -p 7860:7860 ghcr.io/felladrin/minisearchAI 模型可在浏览器内用 WebGPU 或 CPU 运行;README 未说明具体显存或 GPU 型号要求。
自托管的隐私搜索平台,AI 助手直接在浏览器里跑,不用 API key 也不外泄查询
浏览器里直接跑的极简 AI 搜索平台,聚合多个搜索源并调用本地大模型做问答,无需后端服务器。
核心能力
- AI 模型在浏览器内用 WebGPU 或 CPU 推理
- 内置 SearXNG 聚合网页与图片结果
- 用 cross-encoder 模型在本地重排搜索结果
- 回答附带引用来源并支持追问记忆
- 历史与缓存存于浏览器 IndexedDB
容易踩的坑
- 2026.11.8最新正式版2026-11-08 · 2026-11-08 04:41 UTC
2026-11-08
- A model download that was interrupted, for example by reloading the page halfway, no longer stops every model from loading. wllama 3.8.1 checks every model in its cache before loading any, and throws on the first one that misses a file; before each load, MiniSearch now deletes the files of models whose download did not finish, so only that model downloads again.
- The default system prompt's citation example is now a placeholder,
[example.com](https://example.com/page), instead of a real YouTube video link that small models copied as if it were a source. On the benchmark's eleven core questions, over 110 answers from five small models, links to URLs that are not among the results fell from 12 to 7, the YouTube link disappeared, and the share of answers citing a result stayed level (48% before, 50% after). A saved prompt that is exactly the previous default moves to the new one; an edited prompt stays as it is. - Four models leave the Wllama catalog because they answer worse than LittleLamb 290M, the default for browsers without WebGPU and the catalog's quality floor: StableLM 2 Zephyr 1.6B, SmolLM 2 135M, Granite 4.0 350M and Pints 1.5B (16 to 25 points out of 84 on the benchmark, against 38 for LittleLamb). Granite 4.0 1B goes too: on WebGPU it writes only
@characters until it is stopped, though it answers well on the CPU.docs/wllama-model-evaluation.mdnow holds the scores of every catalog model and the rule that decided. - A browser whose saved settings point at a model that left the catalog switches to the default model on its next answer, and records the switch in the logs. Before, it failed to answer at all.
- Browsers with WebGPU now start on their own default model, Gemma 3 4B, set with the new
WLLAMA_DEFAULT_GPU_MODEL_ID; browsers without it keep LittleLamb 290M fromWLLAMA_DEFAULT_MODEL_ID, which runs well on the CPU. Both only seed a profile that never saved settings. The GPU variable does not fall back to the CPU one, because.env.examplesets that one and most deployments would otherwise hand GPUs the CPU model; a deployment that pinnedWLLAMA_DEFAULT_MODEL_IDand wants the same model on GPUs should set both. Gemma 3 4B scored highest of twelve GPU candidates on the benchmark (docs/wllama-model-evaluation.md), with every point in two runs of fifteen questions in eleven languages, and on WebGPU it started answering in about 8 seconds. - Qwen 3.5 0.8B (533 MB) joins the Wllama catalog. On the benchmark's eleven core questions it scored 70 of 84 (one run), above larger models such as Qwen 3 1.7B (66) and Granite 4.2 3B (59), and on WebGPU it writes about 32 tokens per second. Like Qwen 3.5 4B it ignores
reasoning_effort, so it thinks for the full 1024 tokens before most answers (about 33 seconds on an Apple M1 Max). - The README and the docs no longer give a number of models or a size range, so adding or removing a model does not leave them out of date.
- Thinking models get a 1024-token reasoning budget instead of 256, because a chain of thought cut off that early degraded the answer. Every model is also asked for
reasoning_effort: "low", which Granite 4.2 and Spark X2.6 honor by thinking less; the other templates ignore it. Five models that think by default had no budget at all and now get the same 1024 tokens: LittleLamb 290M, Qwen 3 0.6B, Qwen 3 1.7B, Polaris 4B and DeepSeek R1 Distill Qwen 1.5B. LittleLamb, the default for browsers without WebGPU, thought for up to 3,663 tokens on a single answer and sometimes never answered; with the budget it answered all 33 questions of three benchmark runs.
2026-11-05
- Relative month and year words in a query are anchored to absolute ones before the search leaves the browser: "next month" reaches the engines as "December 2026" and "明年" as "2027年". The anchor is appended rather than substituted, so a query that already names a year keeps its own phrasing, and two anchors per query is the ceiling. The typed query still drives the pr
- 2026.11.3.12026-11-03 · 2026-11-03 18:55 UTC
查看更新说明
2026-11-03
- The five thinking models added on 2026-11-02 (Spark X2.6 1.7B and 4B, Granite 4.2 3B, Qwen 3.5 4B, Gemma 4 E2B) no longer ship with thinking switched off. Their chain of thought arrives on wllama's
reasoning_contentchannel and is now wrapped in the configured reasoning markers, so the existing thinking UI shows it while the model reasons and the answer streams in after. The model warmup counts a reasoning token as a working model, so thinking models no longer log a failed warmup. - The same five models now cap their chain of thought with
reasoningBudgetTokens(wllama'sreasoning_budget_tokens, 256 tokens): when the model has thought that long without answering, the engine closes the reasoning channel and forces the final answer. Without the cap, Spark X2.6 and Granite 4.2 could spend the whole 4096-token context on reasoning and deliver no answer at all.
- The five thinking models added on 2026-11-02 (Spark X2.6 1.7B and 4B, Granite 4.2 3B, Qwen 3.5 4B, Gemma 4 E2B) no longer ship with thinking switched off. Their chain of thought arrives on wllama's
- 2026.11.32026-11-03 · 2026-11-03 01:52 UTC
查看更新说明
2026-11-02
- Five new browser models joined the Wllama catalog: Spark X2.6 1.7B, Granite 4.2 3B, Qwen 3.5 4B, Gemma 4 E2B and Spark X2.6 4B, each tested end to end against the shipped wasm build with the search-answer prompt. The Gemma 4 and Qwen 3.5 architectures were previously absent from the catalog, and the new entries run on the wasm engine's supported architectures (
gemma4,qwen35,spark2_5,granite). Models whose chat template thinks by default ship withchatTemplateKwargs: { enable_thinking: false }, a new per-model field passed to wllama aschat_template_kwargs, because MiniSearch renders only the content channel and a thinking template would otherwise spend the whole token budget on reasoning and answer with nothing.docs/ai-integration.mdnow records the two measured ceilings a candidate must fit (shard files under 2000 MiB, since Chromium's OPFS silently truncates beyond it; total weights under ~3.7 GB, since the wasm linear memory caps at 4 GiB), andnpm run wllama-catalog-checkHEADs every shard of every catalog model on HuggingFace to verify the claimed sizes.
- Five new browser models joined the Wllama catalog: Spark X2.6 1.7B, Granite 4.2 3B, Qwen 3.5 4B, Gemma 4 E2B and Spark X2.6 4B, each tested end to end against the shipped wasm build with the search-answer prompt. The Gemma 4 and Qwen 3.5 architectures were previously absent from the catalog, and the new entries run on the wasm engine's supported architectures (
- 2026.10.202026-10-20 · 2026-10-20 02:42 UTC
查看更新说明
Release 2026.10.20. See changelog.md for notable changes, and the compare view for the full commit list.
- 2026.10.112026-10-11 · 2026-10-11 00:56 UTC
查看更新说明
2026-10-10
- The text-search fallback now cascades over Parallel and You.com instead of asking a single provider. On each search the configured providers are tried in a random order, one after the other, until one returns results, under the same 15-second budget, which is split across the providers still untried and not paused so a hanging one cannot starve the rest. A provider that answers HTTP 429 is paused until its
Retry-Afterand skipped meanwhile, as You.com's acceptable use policy asks. A single search can now reach more than one provider; each sees the query text and this server's IP address, never the user's.SEARCH_FALLBACK_PROVIDERSpicks the providers (all of them when empty), andSEARCH_FALLBACK_PARALLEL_API_KEYandSEARCH_FALLBACK_YOUCOM_API_KEYhold the optional keys.SEARCH_FALLBACK_PROVIDERandSEARCH_FALLBACK_API_KEYare removed: if either is still set while the fallback is enabled, the server stops at start with an error naming the replacement, and so does a provider key with a control character inside it./statusgained per-provider counters undersearches.fallbackProviders.
- The text-search fallback now cascades over Parallel and You.com instead of asking a single provider. On each search the configured providers are tried in a random order, one after the other, until one returns results, under the same 15-second budget, which is split across the providers still untried and not paused so a hanging one cannot starve the rest. A provider that answers HTTP 429 is paused until its
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
About
MiniSearch is a self-hosted search engine with an AI assistant.
The AI can run entirely inside your browser tab, on GPU or CPU, so a working setup needs no API key, no separate inference server, and no third party seeing your queries. Web results come from a bundled SearXNG metasearch instance, are reranked locally, and the whole thing ships as a single Docker container.
Features
- Private by design. No tracking, no telemetry, no accounts. Search history, cached results, and chats are stored in your browser and never leave your machine.
- AI in your browser. Pick from several curated models that run on WebGPU where available and on CPU elsewhere. Models are downloaded once and cached by the browser.
- Any backend you like. Connect an OpenAI-compatible API (Ollama, LM Studio, vLLM, llama.cpp server, or a hosted provider), use the crowdsourced AI Horde, or let the server proxy your own API without exposing its key.
- A real search pipeline. Text and image results aggregated by SearXNG, reranked locally by a cross-encoder model, cached, and rate-limited; all inside the container.
- Answers you can verify. Responses cite the sources they draw from, support follow-up questions with conversation memory, reveal the model's reasoning on demand, and can be read aloud.
- Local history and analytics. Fuzzy-searchable history with pinning and full-session restore, plus usage statistics and an activity heatmap. Retention is configurable, and storage stays in the browser.
- Fits your workflow. Set it as your browser's default search engine, trigger it from Raycast, embed it in your own pages, and optionally protect your instance with access keys.
Quick start
Run the published image:
docker run -p 7860:7860 ghcr.io/felladrin/minisearch
Then open http://localhost:7860 and start searching.
latest moves on every release, so it changes under you. To stay on a known-good build, pin the digest, which always identifies the same image:
docker inspect --format '{{index .RepoDigests 0}}' ghcr.io/felladrin/minisearch:latest
docker run -p 7860:7860 ghcr.io/felladrin/minisearch@sha256:1a2b3c...
The version the running instance reports (in the menu, and under build on /status) tells you which commit it was built from.
Images carry provenance and SBOM attestations, which you can inspect with:
docker buildx imagetools inspect ghcr.io/felladrin/minisearch:latest
Add the service to your docker-compose.yml:
services:
minisearch:
image: ghcr.io/felladrin/minisearch:latest
ports:
- "7860:7860"
git clone https://github.com/felladrin/MiniSearch.git
cd MiniSearch
docker compose -f docker-compose.production.yml up --build
Duplicate the Space to get your own hosted instance, no server required. Environment variables can be set in the Space settings.
How it works
flowchart LR
subgraph browser [Your browser]
UI[Search UI]
LocalAI[In-browser model<br/>WebGPU or CPU]
Storage[(IndexedDB<br/>history and cache)]
end
subgraph container [Docker container]
Server[App server]
SearXNG[SearXNG<br/>metasearch]
Reranker[Reranker<br/>ONNX Runtime]
end
UI <--> Storage
UI -->|search| Server
Server --> SearXNG
SearXNG --> Web((Web))
Server --> Reranker
UI -.->|in-browser inference| LocalAI
UI -.->|remote inference, optional| RemoteAPI[OpenAI-compatible API<br/>or AI Horde]
Your query goes to the app server, which asks the bundled SearXNG instance to aggregate results from multiple search engines. The server reranks them with a small cross-encoder model before returning them, and the browser caches them locally. If the AI response is enabled, the assistant reads the top results and writes a cited answer, either with a model running in your browser or through the backend you configured. The full picture is in docs/overview.md.
Configuration
MiniSearch works out-of-the-box, but you can customize it if you want. More details at docs/configuration.md.
FAQ
Add a custom search engine in your browser settings using the pattern http://localhost:7860/?q=%s, replacing the host with your instance's address. Your search term replaces %s.
Add this Quicklink to Raycast, and edit it to point to your own instance if you have one.
Yes. Open the menu, set "AI Processing Location" to Remote server (OpenAI-compatible API), then fill in the base URL, and optionally an API key and a model name. If the model is left blank, it is picked from the ones the API lists.
Yes. Configure the INTERNAL_OPENAI_COMPATIBLE_API_* variables from the Configuration table and restart the container. A new option with the name you chose appears in the "AI Processing Location" menu, and the key stays on the server.
Contributing
See the Contributing Guidelines, Code of Conduct, and Security Policy.
Releases
Each release is cut with a CalVer tag (YYYY.M.D). Notable changes are documented in the Changelog.