Open WebUI HQ
Flat isometric illustration of a glowing pink cube on a stepped plinth with lines radiating to a dozen small pink pucks across a dark slab
Comparisons

Open WebUI vs LibreChat: Which to Self-Host

A documentation-level comparison of Open WebUI and LibreChat: install footprint, configuration model, model connections, retrieval and licensing terms.

By Open WebUI HQ Editorial · · 6 min read

Open WebUI and LibreChat solve the same problem: a self-hosted chat interface in front of models you choose, local or remote. They solve it with different amounts of machinery, and the difference shows up in what you maintain rather than in what the chat window looks like. This comparison reads both projects’ own documentation and sets the two stacks against each other on the decisions that are expensive to reverse.

At a glance

Open WebUILibreChat
Unit of installOne container imageGit clone plus a Docker Compose stack
Documented quick startdocker run with one volumegit clone, copy .env.example, docker compose up -d
Default port3000 mapped to container 80803080
DatastoreApplication data directory on one volumeMongoDB, plus Meilisearch for search
Configuration surfaceAdmin panel plus environment variables, persisted in the database.env file plus a mounted librechat.yaml
Local model connectionNative Ollama connection or OpenAI-compatible endpointOpenAI-compatible custom endpoint declared in YAML
RetrievalBuilt into the applicationSeparate RAG API service in the stack
LicenceOpen WebUI licence, BSD-3 with a branding clause from v0.6.6MIT
First accountBecomes the administratorBecomes the administrator

Install footprint is the real difference

Open WebUI’s documented quick start is a single docker run with one published port and one named volume. Everything stateful, including the database, lives in that volume. There is no separate database container to schedule, back up or upgrade unless you deliberately move to Postgres.

LibreChat’s documented local install is a repository clone, an environment file copied from the example, and docker compose up -d. The compose stack brings up the application together with MongoDB and the supporting services, and the documentation notes a concrete consequence of that dependency: Apple Silicon Macs do not support the AVX instructions the default MongoDB image requires, so M-series users need a compose override pinning an older MongoDB image or the database crashes on startup. That is not a criticism of the design, it is the ordinary cost of a multi-service stack, and it is the kind of detail that decides whether an evening install succeeds.

If your instance is one machine serving a handful of people, the single-container model is less to hold in your head. If you are already running compose stacks with a database and a search service, LibreChat’s footprint is familiar rather than heavy.

The practical install detail for Open WebUI is covered in installing Open WebUI with Docker, including which image tag to pin and why the data volume is the whole application.

Configuration: database-backed panel versus files

Open WebUI configures itself largely through an admin panel, and those settings persist in its own database. Environment variables seed the configuration, but stored values take precedence afterwards. That is convenient right up to the moment it is not: the documented recovery path for a saved-but-unreachable endpoint URL is RESET_CONFIG_ON_START=true to force environment variables to win at next startup, or ENABLE_PERSISTENT_CONFIG=false to stop database values taking precedence at all, at the cost of interface changes no longer persisting across restarts.

LibreChat pushes configuration the other way. Core settings live in .env, and the richer configuration lives in librechat.yaml, which the documentation shows being bind-mounted into the container through a compose override. Endpoints, model lists and per-endpoint behaviour are declared there as text.

The tradeoff is straightforward. A panel is faster for one administrator making occasional changes. A file is easier to review, diff, template and put in version control, which is what you want when configuration drift across environments is the failure mode you fear.

Connecting local models

Open WebUI treats Ollama as a first-class connection alongside OpenAI-compatible endpoints, and the documented environment variable is OLLAMA_BASE_URL. LibreChat reaches Ollama through its generic custom-endpoint mechanism: Ollama exposes an OpenAI-compatible API, so it is declared under endpoints.custom with a baseURL such as http://localhost:11434/v1/ and a placeholder apiKey, because the field is required even though Ollama ignores it. LibreChat can also fetch the model list dynamically, with the documented constraint that the endpoint’s name must start with “ollama” for that to work.

Both hit the same networking wall for the same reason. LibreChat’s own Ollama page carries the reminder to use host.docker.internal instead of localhost when the application runs in a container, which is precisely the trap described in Open WebUI not connecting to Ollama. Neither project can route around the fact that localhost inside a container means the container.

One configuration note in the LibreChat documentation is worth borrowing whichever front end you pick: set the title-generation model to the conversation’s current model, so the interface does not load a second model just to name the chat. On a single-GPU machine that one setting is the difference between one model resident and two competing for memory.

Retrieval

Open WebUI ships document retrieval inside the application, and its troubleshooting guide treats embeddings, ingestion, upload limits and worker crashes as part of the same system. LibreChat runs retrieval as a separate RAG API service in the stack.

Either way, the mechanics that determine answer quality are identical and independent of the front end: chunking, the embedding model, and what actually lands in the prompt. The reasoning behind that is in how Open WebUI and local models fit together, and it applies unchanged to LibreChat. Switching interfaces will not improve retrieval; changing the embedding model or the chunking will.

The architectural difference matters for operations rather than results. A separate service can be scaled, restarted or given its own hardware without touching the chat application. An in-process implementation is one less moving part but shares the application’s memory budget, which the Open WebUI documentation reflects with a whole troubleshooting page on memory and CUDA out-of-memory conditions during embedding.

Licensing, which is where people get surprised

LibreChat is MIT licensed, which is as permissive as it gets.

Open WebUI’s terms changed with v0.6.6 in April 2025. The code remains permissively licensed, but a branding-protection clause was added on top of BSD-3. The project’s own summary states that branding requirements apply to deployments of 50 or more users in aggregate, that self-hosted internal deployments with 50 or fewer users may rebrand fully, and that everything up to and including v0.6.5 remains BSD-3 and can be forked from that point with no restrictions.

For a household, a homelab or a small team, nothing changes. For an organisation planning to white-label a chat interface for hundreds of staff, or for anyone packaging the software into a commercial product, this is the clause to read in full before building on it, not after.

Which to run

Choose Open WebUI when the priority is the smallest possible operational surface, when you want an administrator panel rather than a configuration file, when Ollama is the primary backend, and when your deployment sits inside the licence’s unrestricted range. It is the shorter path from nothing to a working local chat stack.

Choose LibreChat when configuration-as-code matters to you, when you want retrieval as a separately scalable service, when MIT is a requirement your organisation actually enforces, or when you are already comfortable operating a compose stack with a database.

What neither choice changes: the model backend determines answer quality, memory determines speed, and the context window determines what the model can still see. Before committing hardware to either, the VRAM and context sizer will tell you whether the model you have in mind fits at the context length you want, which is the constraint both front ends inherit and neither can soften.

Sources

  1. Open WebUI documentation: Quick Start
  2. Open WebUI documentation: Open WebUI License
  3. LibreChat documentation: Local installation with Docker
  4. LibreChat documentation: Ollama as a custom endpoint
#open-webui #librechat #self-hosting #comparison#local-llm

Related