Open WebUI
A self-hosted ChatGPT-style interface that sits on top of Ollama or any OpenAI-compatible API. Accounts, history, RAG and document upload included.
Ollama gives you an API. Open WebUI gives you something you can hand to another human being. That is the whole pitch, and on a home network it is the difference between a demo and a tool people actually use.
Deployment is the standard two-container pair:
docker run -d --name ollama -p 11434:11434 -v ollama:/root/.ollama ollama/ollama
docker run -d --name open-webui -p 3000:8080 --add-host=host.docker.internal:host-gateway \
-v openwebui:/app/backend/data open-webui/open-webui:main
The first account you create becomes the admin; after that, registration is closed by default. Set WEBUI_AUTH=true and keep it — an unauthenticated chat UI on your LAN is a shell for anyone on the guest Wi-Fi.
The RAG feature is the reason to install it
Document upload is not a gimmick. Point it at a folder of PDFs and it will chunk, embed and quote them. Two practical notes from running this on modest hardware:
- The embedding model runs on the same CPU as everything else. A small one (bge-small class, ~130 MB) keeps document ingestion from pinning all cores.
- Ingestion is bursty. Do it at night, or your photo indexer and your chat UI will fight over two cores.
Sizing
The container idles at a few hundred MB. Add Ollama's resident model on top and a 4 GB machine is fully committed. On 8 GB it is comfortable. This is a front-end — it does not make inference faster, and it will not make a 7B model fit in 4 GB.
Pros
- Turns a bare Ollama endpoint into something a non-technical family member can use
- Multi-user accounts and per-user chat history, which Ollama itself has none of
- Built-in RAG: drop a PDF in and it chunks, embeds and cites from it
- Single container, works behind any reverse proxy
Cons
- The licence is not plain BSD-3 — larger deployments must keep the Open WebUI branding, so read it before you white-label
- Python web app, so idle RAM is a few hundred MB before you have asked a single question
- Feature velocity is high enough that a pinned tag is safer than `:latest`
Alternatives worth a look
Ollama
The default way to run a local LLM. One binary, a model library, and an OpenAI-compatible endpoint on port 11434.
LocalAI
One OpenAI-compatible API that covers text, embeddings, speech-to-text and image generation — all on CPU, no GPU required.
Last verified 2026-10-17 (docs). Prices and licence terms change — check the vendor page before you buy. Spotted an error?