Open WebUI is a multi-user web interface for language models, talking to Ollama or any OpenAI-compatible endpoint, with conversation history, document retrieval, per-user permissions and a tool and function system. It replaces ChatGPT's web interface for people running their own models or their own API keys.
Our verdict on Open WebUI#
Check the licence before you build anything on this. Open WebUI is no longer plain BSD-3-Clause. From v0.6.6, released 19 April 2025, it ships under a modified BSD-3 that adds a branding-protection clause, and the project's own documentation states plainly that it is not an OSI-approved open source licence. The clause forbids altering, removing or obscuring Open WebUI branding, with three exemptions: deployments with 50 or fewer end users in any rolling 30-day period, contributors with written permission, or an enterprise licence. Code up to and including v0.6.5 stays BSD-3, and contributions after the change require a CLA. For a household or a small team you are inside the 50-user exemption and nothing changes. For a white-labeled internal portal at a company of 200, you either keep the branding or you buy a licence. Everything most articles say about this project being BSD is out of date.
Who Open WebUI is for#
Choose it if
- A household or small team of under 50 people wanting one chat interface across several model backends.
- Anyone who wants per-user accounts, group permissions and admin control over which models each group can reach.
- People who want document chat without standing up a separate retrieval stack, since ingestion and a vector store are built in.
- Users mixing a local Ollama with a hosted OpenAI-compatible endpoint behind a single UI and one conversation history.
Look elsewhere if
- You need to rebrand the interface and have more than 50 users in a rolling 30 days, which the licence does not permit without a paid agreement.
- You need an OSI-approved licence for procurement or policy reasons, because this one explicitly is not.
- You want a thin client, since the standard image carries embedding and speech models and idles around 600 MB before anyone logs in.
What running it actually looks like#
One container listening on 8080 inside, commonly published as 3000, with a single named volume at /app/backend/data. Tags matter: :main is the full image, :main-slim drops the bundled embedding and speech-to-text models for a roughly 0.3 GB smaller pull, :cuda adds GPU support for local embeddings, and :ollama bundles Ollama in the same container, which is convenient and makes upgrades of the two things one decision instead of two. Multi-arch images cover x86_64 and arm64 including Raspberry Pi. Point OLLAMA_BASE_URL at your inference server; inside Docker the default http://localhost:11434 resolves to the container itself, which is the single most common first-run failure. The first account created becomes the administrator. Upgrades are a tag bump and a restart, with database migrations applied on start.
Resource profile#
- Memory
- 600 MB idle, around 1400 MB in ordinary use. The standard image bundles a sentence-transformers embedding model and speech-to-text weights that load into memory; the `main-slim` tag omits them and is around 0.3 GB smaller to pull and correspondingly lighter at runtime.
- CPU and acceleration
- The chat path is cheap because inference happens elsewhere. Document ingestion for retrieval is the spike: chunking and embedding a large PDF pins a core for a while unless you point embeddings at an external model.
- Storage growth
- The SQLite database grows with conversation history and stays modest. Uploaded documents and the vector store under the data directory are what grow, and neither is pruned when you delete a chat.
- Operational load
- 2 of 5, Light. One container and one volume, upgrades are a tag bump with automatic schema migrations. The attention cost is the persistent-config behavior, which makes environment variables stop working after first boot, and a fast release cadence with occasional UI churn.
Figures describe a small single-household install and are the working assumptions behind our stack planner. Your numbers will differ with library size, user count and hardware. See methodology.
Data and backup surface#
Everything lives under DATA_DIR, which is /app/backend/data in the container. webui.db is the SQLite database holding users, chats, prompts, model configuration and the persisted settings; the same directory holds uploaded files, the vector store and the cache. Stop the container before copying, or use sqlite3 .backup on the database file, because a live cp of a SQLite file under write can produce an archive that restores into a corrupt state. On PostgreSQL, pg_dump the database and copy the uploads and vector store alongside it. The cache subdirectory and downloaded embedding model weights are regenerable and can be excluded. Keep WEBUI_SECRET_KEY with the backup: without it every session token and stored credential is invalid on restore.
Derived backup shape
SQLite backup. sqlite3 <db> ".backup out.db" while running, or stop the container and copy. A live cp of a WAL-mode SQLite file can restore corrupt.
Traps and surprises#
The licence changed and is not OSI-approved
From v0.6.6 (19 April 2025) Open WebUI adds a branding clause to BSD-3-Clause: you may not alter or remove Open WebUI branding unless you have 50 or fewer users in a rolling 30-day period, written permission as a contributor, or an enterprise licence. Removing it outside those cases is a material breach. Everything through v0.6.5 remains plain BSD-3.
Environment variables stop taking effect after first boot
Settings marked as ConfigVar are copied into the database on first launch and read from there afterwards, so editing your compose file and restarting changes nothing and you conclude the variable is broken. Either change the setting in the admin UI, or set ENABLE_PERSISTENT_CONFIG=False to force environment variables to win, accepting that UI changes then stop persisting across restarts.
localhost inside a container is not your host
OLLAMA_BASE_URL defaults to http://localhost:11434, which inside Docker points at the Open WebUI container, not at the Ollama server on your host. The symptom is an empty model list with no error. Use http://host.docker.internal:11434, or put both on the same compose network and use the service name, or run with host networking.
WEBUI_SECRET_KEY regenerates if you do not set it
If you never set WEBUI_SECRET_KEY, one is generated and stored in the data volume. Recreate the container without that volume, or restore a database backup without the key file, and every existing session is invalidated and stored credentials cannot be decrypted. Set it explicitly to a long random string in your compose file and store it with your other secrets.
Deleting a chat does not delete its uploads
Files you attached for retrieval stay in the data directory and their embeddings stay in the vector store after the conversation is gone. On an instance used for document questions this quietly becomes the largest thing on the volume, and it is also a privacy problem if you assumed deleting the chat removed the document. Audit the uploads directory periodically and clear orphaned files from the admin settings.
Specifications#
- Category
- Local AI and private search
- Licence
- Open WebUI License (BSD-3-Clause plus a branding clause) (Source available)
- Written in
- Python / Svelte
- First release
- 2023
- Maturity
- Stable
- Datastore
- SQLite by default at DATA_DIR/webui.db, PostgreSQL optional
- Default ports
8080- Ships as
- docker, pip/uv package, helm chart
- arm64 builds
- Yes
- Identity
- Native OIDC. Generic OIDC and several named OAuth providers are built in, with role and group claim mapping, but `WEBUI_URL` must be set correctly first or the redirect fails.
- Replaces
- ChatGPT, Claude.ai, Perplexity, Poe
- Project site
- openwebui.com
- Source
- github.com/open-webui/open-webui
- Documentation
- docs.openwebui.com
Alternatives to Open WebUI#
Everything else in local ai and private search, closest in operational weight first.
| Tool | Ops load | Idle RAM | Licence |
|---|---|---|---|
| Ollama | 2, Light | 150 MB | MIT |
| SearXNG | 2, Light | 150 MB | AGPL-3.0-or-later |
| LocalAI | 3, Moderate | 300 MB | MIT |
Where Open WebUI comes up elsewhere#
Head to head
Migration guides
Sources#
Facts on this page were checked against the project's own material. Where a number is our own estimate rather than a published figure, the text says so.
Published . Last reviewed . Found something out of date? Tell us and we will fix it and log the change.