How to Use Open WebUI
Open WebUI setup: the official Docker command, one-step Ollama connection, first chat, theme and persona basics, and the real errors - all verified today.
Note
Before you start
- Ollama installed and running (our install guide gets you there in 10 minutes)
- Docker Desktop or Docker Engine (the officially recommended path) - or Python 3.11/3.12 for the pip route (3.13 is NOT supported yet)
- ~2GB free disk and a modern browser (Chrome 111+, Safari 16.4+, Firefox 128+)
- One Ollama model already pulled - e.g. `ollama run llama3.2`
Jump to section
- 1
Install Open WebUI
One Docker command from the official docs: pull the image, mount a data volume, and expose port 3000. Docker Compose and pip alternatives are verified too.
- 2
Create your admin account
The first account gets Administrator privileges and is the only one that can approve new signups. Your data stays on your machine by default.
- 3
Connect Ollama
Open WebUI auto-connects to a local Ollama on first start; Docker users must point it at host.docker.internal:11434, and everything is manageable under Admin Settings.
- 4
First chat
Pick a model from the selector - Open WebUI can even pull a model straight from Ollama's library without leaving the UI.
- 5
Customize: theme and personas
Interface theme lives in your personal settings; personas are system prompts on the model itself. System prompts you set beat defaults, model-level admin settings beat yours.
- 6
Share and manage
Models are private by default and must be explicitly shared; shared chats get a dashboard where you can revoke links at any time.
Open WebUI is the chat interface for the local models you already run - a self-hosted, feature-rich UI that connects to Ollama in roughly one step and gives you a private ChatGPT-style experience. This guide covers the official setup path (Docker), the Ollama connection, your first chat, theme and persona customization, and the real errors people hit - with every command verified against docs.openwebui.com today. It sits on the stack from our Ollama install guide and assumes you have a model already pulled - if not, do that first (10 minutes), then come back.
This is the UI layer for the whole local-AI stack: hardware reality is in our laptop LLM guide, and the directory entry with one-paragraph context is here.
Before you start
- Ollama running - Open WebUI connects to it automatically when both are on the same machine.
- Docker installed (recommended). Docker Desktop on macOS/Windows works; on Linux, Docker Engine.
- Version warning: the
:mainDocker image is a rolling build, and the project ships major releases roughly weekly. Screens may drift slightly from this guide between releases - the settings paths below are the stable ones. - Python users: 3.11 or 3.12 only. The official docs state 3.13 is not supported yet.
Step 1: Install Open WebUI
The official quick-start command (all in one):
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
What each piece does (official flag table):
| Flag | Purpose |
|---|---|
-p 3000:8080 | Exposes the UI on port 3000 of your machine (the container’s internal port is 8080) |
-v open-webui:/app/backend/data | Persistent storage - without this volume your chats vanish when the container is recreated |
--add-host=host.docker.internal:host-gateway | Lets the container reach host services (like Ollama) via the name host.docker.internal |
--restart always | Starts the container on boot and after crashes |
Then open http://localhost:3000.
No Docker? The pip route (official):
pip install open-webui
open-webui serve
That serves on http://localhost:8080. If open-webui isn’t found, the docs’ fix: python -m open_webui serve.
Image flavors (official tags)
:main is the standard image. :main-slim skips bundled Whisper/embedding models (downloads on first use), :cuda adds NVIDIA GPU support (add --gpus all to the run command; note the FAQ: Docker GPU support exists on Windows and Linux Engine, not Docker Desktop for macOS), and :ollama bundles an entire Ollama inside the container for an all-in-one instance. Pin a release tag like :vX.Y.Z for production; :main/:latest roll forward.
Step 2: Create your admin account
The first account you create becomes the Administrator - and it’s the only role that can approve further signups (new ones arrive as Pending). The official FAQ is deliberate about this: the signup gate exists to protect instances from casual network exposure, and your account data lives locally. Keep these credentials recoverable - losing the admin account means admin-activation loops for everyone else (there’s a documented password-reset procedure for that).
Two settings areas you’ll use constantly (official settings doc):
- User Settings (avatar → Settings) - your theme, default model, personal system prompt.
- Admin Settings (avatar → Settings → Admin) - instance-wide: connections, features, security. The admin setting is the ceiling; users can only switch things on within it.
Step 3: Connect Ollama
On first start, Open WebUI automatically attempts to connect to a local Ollama - usually nothing to do. Two adjustments matter:
If Ollama runs on the same host as the container, use the special DNS name (a Docker container’s localhost is the container itself - official FAQ):
- Connection URL:
http://host.docker.internal:11434
Find the settings: avatar → Settings → Admin Settings → Connections → Ollama → Manage (the wrench icon). From there you can also download models and tweak the connection.
Ollama isn't reachable yet? Check the base URL
If the connection fails, open Admin Settings → Connections and confirm the Ollama URL. Pointing at localhost:11434 from inside the container is the classic mistake - use host.docker.internal:11434 (or set OLLAMA_BASE_URL - e.g. -e OLLAMA_BASE_URL=http://host.docker.internal:11434 - at container start for a remote Ollama server).
Pull models without leaving the UI: open the model selector, type a model name that isn’t there yet (e.g. gemma4), and Open WebUI offers to download it from Ollama’s library directly - the official docs show this as the fastest path.
Step 4: First chat
- Select your Ollama model in the model picker at the top.
- Send a real prompt - something your model can actually answer well.
- Open a second terminal and confirm the request hit Ollama:
ollama psshould show the model loaded with recent activity.
Reasoning models (DeepSeek-R1, Qwen3): if their thinking... /thought> blocks render as raw text instead of a collapsed section, the official fix is to run Ollama with the reasoning parser:
ollama serve --reasoning-parser deepseek_r1
Context-length gotcha (official, high-impact): Open WebUI’s num_ctx advanced parameter overrides the Ollama-side OLLAMA_CONTEXT_LENGTH whenever it’s set - and toggling it on pre-fills 2048, which is tiny. Symptoms: silently truncated answers, blank replies, or raw tool-call JSON when native function calling runs out of token room. Rule: leave num_ctx unset (Ollama’s default applies), or set it explicitly to a realistic value like 8192 when you need long conversations.
Step 5: Customize - theme, personas, task model
Theme (dark mode): User Settings → interface theme - Open WebUI ships light/dark, and the design system auto-adapts to both. This is a per-user setting; the admin can’t force it off.
Personas via system prompts: a persona is just a system prompt attached to the model. The official FAQ frames it perfectly: “The model isn’t ‘aware’ of itself; it’s simply been instructed to claim a specific identity. You can do the same thing in Open WebUI by adding a system prompt to your model configuration.” Edit it per model in the model editor (or per chat). Remember the precedence: model-level settings admins configure in Workspace beat your personal system prompt.
Task Model (cost control): Open WebUI runs background tasks - title generation, auto-tags, RAG query generation - which each cost an API call if you’re on cloud models. Official guidance: set a Task Model (Admin Settings → Experience → Interface → Tasks) to a small cheap or local model. With a pure-Ollama setup this is free either way.
Step 6: Sharing basics
- Models are private by default - the docs state all models must be explicitly shared before other users see them.
- Shared chats get a dedicated dashboard: User Settings → Data Controls → Shared Chats → Manage - search past shared links, re-copy them, or revoke access instantly.
- Multi-user by design: this is worth knowing before you buy a bigger machine - Open WebUI assumes many users from day one (per the settings doc).
How to verify it worked
- http://localhost:3000 (Docker) or :8080 (pip) loads the UI and your account has Administrator privileges
- Admin Settings → Connections lists your Ollama instance and the model picker shows your pulled models
- A chat message produced a real answer, and
ollama psconfirmed the model loaded - Theme toggle changes the UI (User Settings → interface theme)
- A persona/model system prompt changes how the model answers
-
docker rm -f open-webuifollowed by the samedocker runcommand restores all your chats (volume intact - this is the official durability test)
Troubleshooting
Port 3000 is already in use
The container fails to start with a port error. Change only the host side of the mapping: -p 3001:8080 and open http://localhost:3001. If the container name open-webui is also taken, remove the old one first: docker rm -f open-webui.
Can’t connect to Ollama / “connection refused”
Three causes in order of likelihood: (1) the URL points at localhost:11434 inside the container - use http://host.docker.internal:11434 (or set OLLAMA_BASE_URL at container start); (2) Ollama is bound 127.0.0.1 only and your WebUI runs on another machine - the official FAQ direction is to bind 0.0.0.0 and firewall accordingly; (3) the connection was entered once and went stale - the docs mention removing an unreachable saved URL if Settings becomes slow to load, plus AIOHTTP_CLIENT_TIMEOUT_MODEL_LIST=3 to lower the 10s failover timeout.
Model isn’t in the selector
Open WebUI hides models per a whitelist when “Model IDs (Filter)” is set - leave it empty to show all models (official). Otherwise: refresh models in Admin Settings → Connections → Ollama → Manage, confirm the model exists with ollama ls, and check the connection endpoint. A slow-seeming model list usually means an unreachable saved URL is being probed.
Blank replies or raw tool-call JSON
The num_ctx trap: when native function calling injects tool schemas into the prompt, a 2048-token cap runs out of room and the model returns blank or a raw JSON blob (official troubleshooting). Fix: set num_ctx to a realistic value (8192+) where it’s set, or Ollama-side OLLAMA_CONTEXT_LENGTH, and keep Open WebUI’s num_ctx control off otherwise.
Logged out / “Error decrypting tokens” after restart
You have no persistent WEBUI_SECRET_KEY, so the app generates a new one every start, invalidating sessions (official FAQ). Generate one and pass it when starting the container:
openssl rand -hex 32
docker run -d -p 3000:8080 -v open-webui:/app/backend/data \
-e WEBUI_SECRET_KEY="YOUR_HEX_KEY" \
--name open-webui --restart always \
ghcr.io/open-webui/open-webui:mainSame key on every start = stable logins and decryptable tool tokens.
”The prompt is too long” mid-chat
Officially expected behavior: the model provider rejects requests beyond its context window - Open WebUI deliberately ships no auto-trimmer. The provider treats the whole conversation (system prompt + history + files + tool calls) as one prompt. Practical fixes: start a new chat, or install a context-filter function (Admin Panel → Functions) that trims/condenses older turns.
Update pulled, but nothing changed / data disappeared
Pulling a new image doesn’t update the running container - you must remove and re-create it (official FAQ procedure). Data disappearing always traces to missing or deleted volumes: if -v open-webui:/app/backend/data wasn’t in the original run, the data lived inside the container and is gone with it. The volume is your durability contract - verify it before deleting containers.
You did it
- Open WebUI runs at :3000 (Docker) or :8080 (pip) and you’re the admin
- Ollama is connected and models are visible and pullable from the UI
- You had a real chat, and you know where
num_ctxcan silently cap it - You set your theme, tried a persona system prompt, and know the precedence
- You know shared-chat revocation and the privacy defaults
- Your setup survives
docker rm -f+ re-run (volume intact)
Official sources
- Quick Start (Docker/pip/uv commands, flags, image tags, first-login rules): docs.openwebui.com/getting-started/quick-start/
- Connect Ollama (auto-connect, host.docker.internal, model selector, num_ctx): starting-with-ollama
- Settings doc (admin vs user settings, interface theme): docs.openwebui.com/getting-started/quick-start/settings
- FAQ (privacy, accounts, WEBUI_SECRET_KEY, volumes, context): docs.openwebui.com/faq
- Troubleshooting index: docs.openwebui.com/troubleshooting/
All fetched 13 August 2026; :main Docker image rolls weekly, so re-verify commands when you revisit.
Next: keep the stack local with how to pick what fits your laptop RAM, or plug Open WebUI’s native MCP support into the MCP world once you’re comfortable.
Questions, answered first
How do I set up Open WebUI?
The official one-liner is `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`, then open http://localhost:3000, create the first account (it becomes admin), and connect Ollama - which Open WebUI attempts automatically. Without Docker, `pip install open-webui` then `open-webui serve` puts it on port 8080. Full walkthrough below.
Does Open WebUI work without a GPU?
Yes - Open WebUI is just the interface; the model runs in Ollama, and Ollama works on CPU-only laptops (slower, but fine for chat). You need neither a GPU nor a cloud API key for the local stack. A CUDA-capable GPU speeds the model up, not the WebUI.
Is my data sent anywhere?
The official FAQ is explicit: Open WebUI 'does not send your data to external services by default' - chat, accounts, and files stay on your machine, and it runs entirely offline in air-gapped environments. The one exception: if you connect a cloud provider (OpenAI, Anthropic, vLLM), prompts you send to that provider go there - that's the nature of the connection.
Why does it ask me to create an account? I'm the only user.
Because the first account is the admin account that secures the instance (the docs call this an anti-exposure measure - if your instance is ever reachable from the network, an unauthenticated UI would be a hole). Your account is stored locally; subsequent signups get 'Pending' status until you approve them. If you truly want no login, the single-user mode env var WEBUI_AUTH=False exists, but the docs warn it's irreversible.
Can I use cloud models like GPT or Claude in Open WebUI?
Yes. The Core uses standard protocols - OpenAI Chat Completions and the Ollama API - so OpenAI, Anthropic (via their API), vLLM, llama.cpp servers, and any OpenAI-compatible endpoint plug in as providers, in parallel with local models. The docs explicitly recommend OpenAI-compatible endpoints over bespoke integrations.
You did it
- Open WebUI responds at http://localhost:3000 (Docker) or :8080 (pip)
- Your account has Administrator privileges (first account rule)
- Admin Settings → Connections shows your Ollama instance as healthy
- You had a real conversation with an Ollama model inside the WebUI
- You can name where the theme toggle lives and what a persona/ system prompt does
- You know your data stays local and models are private until you share them