Open WebUI is a self-hosted chat interface. Point it at Ollama and you get chat history, file uploads, and multiple users on top of your local models.
1. Check Ollama is up
curl http://localhost:11434/api/tags
Returns JSON listing your installed models. If it fails, start Ollama first — see Ollama on macOS and Linux or on Windows.
2. Start Open WebUI
docker run -d -p 3000:8080 \
--add-host=host.docker.internal:host-gateway \
-v open-webui:/app/backend/data \
--name open-webui --restart always \
ghcr.io/open-webui/open-webui:main
Runs the container in the background on port 3000, makes your host machine reachable from inside the container as host.docker.internal (needed on Linux), and stores all data in a named volume so it survives restarts and upgrades.
On Windows, run the same command in PowerShell as one line, or swap the trailing \ for backticks.
No Docker? pip install open-webui then open-webui serve works on Python 3.11 and serves on port 8080 instead.
3. First login
Open http://localhost:3000 and sign up. The first account created becomes the administrator — it controls user management and system settings, so make it yours before sharing the URL.
Running it only for yourself and want no login screen at all? Add -e WEBUI_AUTH=False to the docker run command. You cannot switch that setting back later.
4. Pick a model
The model selector sits at the top of a new chat and lists every model Ollama has. Type a name that is not installed yet — for example gemma3:4b — and Open WebUI offers to pull it for you.
If the list is empty, Open WebUI is not reaching Ollama. Go to Settings > Admin > Connections, find Manage Ollama API Connections, and set the URL to:
http://host.docker.internal:11434
That is the container’s route back to Ollama on your host. A plain localhost there means inside the container, which is why the default sometimes finds nothing.
Upgrading
docker rm -f open-webui
docker pull ghcr.io/open-webui/open-webui:main
Removes the container and fetches the newer image; re-run the command from step 2. Your chats live in the open-webui volume, not the container, so nothing is lost.
Next: call Ollama from your own code or serve a model with vLLM.