TinySearch
Searches, reads and reranks the web locally, then hands the model only the evidence worth putting in its context. No search API key.
- Web search with source URLs
- Clean Markdown from pages
- A browser for pages that need clicking
TinyWebUILive
TinyWebUI is a small, local-first chat workspace for any OpenAI-compatible model. Bring an endpoint, pick a model and a system prompt, and start working. Chats, documents and tool output stay in one SQLite file on your machine. No hosted backend, no account, no build step.
npx tinywebuiA new install starts with two TinySuite MCP servers already connected, so the first chat can already look things up and remember what matters. Keep them, add any other MCP server next to them, or remove them in mcp.json.
Searches, reads and reranks the web locally, then hands the model only the evidence worth putting in its context. No search API key.
Long-term memory across chats. It saves short memories in SQLite and recalls the relevant ones within a token budget.
OpenRouter, OpenAI, Groq, Ollama, vLLM, LM Studio, llama.cpp, or anything else that speaks the OpenAI API. The Settings panel writes every change back to tinywebui.config.json, and the API key never reaches the browser.
The bundled servers launch through uv, which fetches them and Python 3.12 on first start. Without uv, TinyWebUI still runs; the two servers show needs uv until you install it and restart.
tinywebui.config.json
{
"baseUrl": "http://localhost:8080/v1",
"model": "qwen3-coder-30b-a3b-instruct"
}Point baseUrl at its API and leave out apiKey. Open http://127.0.0.1:7777.
No frontend framework and no hosted service. The parts that matter for daily use are still there: durable turns, approvals, attachments, search and an honest token count.
A running turn keeps going when you reload, close the tab or put the laptop to sleep. Reopen the chat to rejoin its stream. Press Enter mid-turn to steer it, or Alt+Enter to queue a follow-up.
Any MCP call that can change something shows its arguments and waits for allow, always allow, or deny. Read-only calls in the same round run in parallel.
Attach text, source files, PDFs and DOCX. The model reads the relevant passages with read_document instead of getting the whole file. Images go along too, with HEIC and AVIF converted for you.
BM25 plus a small on-device embedding model, fused with the same RRF as TinySearch and TinyContext, searches your documents and past chats. Nothing leaves the machine.
Deterministic prefixes keep provider caches warm. Large tool results are compacted once, and the full output stays one expand_context call away.
Every round shows tokens, cache reads and cache writes. The statistics view breaks each request down by where its tokens went: prompt, tool schemas, history, results.
These ship with TinyWebUI and never ask for approval. MCP tools appear beside them under stable server__tool names, over stdio, Streamable HTTP or SSE.
read_documentDocumentssearch_chatsHistoryexpand_contextRecoveryask_userClarifymanage_tasksPlanmanage_automationScheduleAccess
Pick how people sign in with authMode. Private by default: nobody gets in without an account.
Every setting can also come from version-controlled config that hot-reloads, refuses typos, and has a fingerprint you can check against a running instance with tinywebui fingerprint.
The default. The first account you create is the administrator, and everyone else joins with a single-use invitation. Each person's chats and documents stay their own.
Set authMode to local for a workspace without sign-in. It only ever listens on loopback, so it stays on your machine.
Put it behind a sign-in gateway for Google, Microsoft or any SSO. Roles, per-user data, model allowlists and an admin panel, all managed from version-controlled config.
TinyWebUI is open source under AGPL-3.0, needs Node.js 22.13 or later, and ships with TinySearch and TinyContext connected.