Why I needed one
The team had drifted into a familiar mess. Some people used a hosted chat product on personal accounts, some pasted keys into desktop apps, and nobody could say which model had seen which piece of customer code. I wanted one place to chat with models, with company sign-in, a choice of local or hosted models, and logs I control.
Open WebUI was the obvious first candidate because it already sat in my homelab in front of Ollama. The question was whether it would survive contact with people who are not me.
What I tested
- Deployment with Docker Compose on a single VM, behind a reverse proxy with TLS.
- Sign-in through the company's OIDC provider, with new users landing in a pending state until approved.
- Local models served by Ollama on a separate GPU box, plus two OpenAI-compatible hosted APIs.
- Document upload and retrieval against internal runbooks.
- Upgrades: three releases applied during the trial, each with a database backup first.
I did not test the voice features, image generation, or the plugin system beyond reading the code of two community functions.
What held up
Model switching is the killer feature. Being able to ask the same question to a local model and a hosted one in the same thread changed how people used it. Within a week the team was routing routine questions to the local model and saving the hosted ones for long-context work, without me writing a policy.
Admin controls are good enough. Groups, per-model permissions and the pending-user state covered what a small team needs. I could hide expensive models from everyone except the two people who needed them.
Upgrades were boring, which is the highest praise I give infrastructure. Pull the image, restart, check the logs.
What didn't
Retrieval is a starting point, not an answer. Document chat worked for short, well-structured runbooks and fell apart on long design documents. Tuning chunk size helped; the defaults are tuned for demos.
The settings surface is huge. Some options live in the admin panel, some in environment variables, and a few in both, where the environment variable only applies on first start. I lost an afternoon to that.
The licence changed under the project's users. Earlier releases were plainly BSD-3. Newer ones add a requirement to keep the Open WebUI branding unless you meet certain conditions. For an internal tool that is fine. If you planned to ship it to clients under your own name, read it carefully first.
How it compares
I ran each alternative for at least a few days on the same VM, with the same models and the same sign-in provider where it was supported.
| Tool | Licence | Cost | Company sign-in | Local models | Document chat | Setup effort | My verdict |
|---|---|---|---|---|---|---|---|
| Open WebUI | Open WebUI License (BSD-3 plus branding clause) | Free, self-hosted | Yes, OIDC | Yes, Ollama built in | Yes, needs tuning | One container | Run it |
| LibreChat | MIT | Free, self-hosted | Yes, OIDC and others | Yes, via custom endpoints | Partial, separate RAG service | Several containers, YAML config | Try it |
| AnythingLLM | MIT | Free, self-hosted; paid hosted plans | Limited in my testing | Yes | Yes, its main focus | One container or desktop app | Try it |
| LobeChat | LobeHub Community License | Free, self-hosted; paid hosted plans | Partial, server-database mode only | Yes | Partial, server-database mode only | Simple alone, more parts for multi-user | Skip |
"Skip" for LobeChat means skip for this job: a shared team tool behind company sign-in. As a personal chat app it is polished.
Verdict
If you already run models yourself and want one place for a team to use them, run Open WebUI. Put it behind your own sign-in, pin the image version, back up the database before every upgrade, and set expectations about document chat.
If the licence's branding clause is a problem for you, LibreChat is the closest MIT-licensed alternative, at the price of more moving parts.