Both run self-hosted, both speak the OpenAI protocol, and both will do the job. The comparisons that rank for this question line up feature tables. This one answers the narrower question you probably arrived with: which of them takes a custom OpenAI-compatible endpoint with less friction, and what each one gives you in exchange.
Everything asserted below comes from each project's own README. There is no benchmark here and no verdict about which is better, because we have not run either at a scale that would justify one.
Where each one came from
| Open WebUI | LibreChat | |
|---|---|---|
| Origin | Local models and Ollama | Multi-provider ChatGPT clone |
| Backends it names | Ollama, OpenAI-compatible APIs | Anthropic, AWS Bedrock, OpenAI, Azure OpenAI, Google, Vertex AI, OpenAI Responses API, plus custom endpoints |
| Custom endpoint config | OPENAI_API_BASE_URL + OPENAI_API_KEY, or the Connections UI | A custom block in librechat.yaml |
| Retrieval | Local RAG across nine vector databases, hybrid search with reranking, web search | Chat with files across its supported endpoints |
| Access control | Granular RBAC and user groups, LDAP/AD, SSO, SCIM 2.0 | Multi-user auth with OAuth2, LDAP and email, admin panel for users, groups and roles |
| Extensibility | Filters, actions, pipes, tools and skills; MCP and OpenAPI tool servers | Agents with MCP tools, an agent marketplace, sandboxed code interpreter |
| Install | pip, uv, Docker, Kubernetes | Docker and several one-click cloud deploys |
The pattern is that Open WebUI has invested most in the deployment and retrieval side, and LibreChat in the provider and agent side. Which of those you care about is usually a better tie-breaker than a feature count.
Pointing Open WebUI at a gateway
Two environment variables, and it is running:
# Open WebUI — the OpenAI-compatible connection is a base URL and a key.
docker run -d -p 3000:8080 \
-e OPENAI_API_BASE_URL=https://api.kunavo.com/v1 \
-e OPENAI_API_KEY=sk-kn-... \
-v open-webui:/app/backend/data \
--name open-webui ghcr.io/open-webui/open-webui:main
# The same two values can be set in Settings -> Connections after
# first launch, which is the faster path when you are trying it out.Because the model picker can be populated from GET /v1/models, an endpoint that serves several families puts all of them in one dropdown — the Claude, GPT and Gemini ids appear together with no second configuration.
Pointing LibreChat at a gateway
LibreChat wants a YAML block rather than environment variables, which is more to write and buys you naming and model control:
# LibreChat — a custom endpoint is a block in librechat.yaml.
version: 1.2.1
endpoints:
custom:
- name: "Kunavo"
apiKey: "${KUNAVO_API_KEY}"
baseURL: "https://api.kunavo.com/v1"
models:
default: ["claude-sonnet-4-6", "gpt-5-4", "gemini-2-5-flash"]
fetch: true # populate the picker from GET /v1/models
titleConvo: true
titleModel: "claude-haiku-4-5"
modelDisplayLabel: "Kunavo"The titleModel line is the one worth copying regardless of endpoint: LibreChat generates a conversation title with a model call, and pinning that to the cheapest model in your list stops the titles being billed at the rate of whatever you happen to be chatting with.
Why put a gateway behind either
Both clients can hold several providers at once, so a gateway is not required. What it changes is how many things you configure and how many bills you get: one base URL and one key in place of an account, a credential and a billing relationship per model family. Adding a family afterwards becomes a model id in a list rather than a new integration.
Kunavo serves the OpenAI-compatible surface both clients speak, so the base URL above is all either needs. Setup detail per client is on the integrations hub, the endpoint reference is at chat completions, and the OpenAI-compatible API guide covers what “compatible” does and does not include.
FAQ
What is the difference between LibreChat and Open WebUI?
Both are self-hosted, open-source chat interfaces that can talk to OpenAI-compatible APIs, and the difference is where each one started. Open WebUI grew up around Ollama and local models, and its README leads with local RAG across nine vector databases, granular RBAC and user groups, a plugin system of filters, actions, pipes and tools, and installation via pip, Docker or Kubernetes. LibreChat grew up as a multi-provider ChatGPT clone: its README leads with named provider support — Anthropic, AWS Bedrock, OpenAI, Azure OpenAI, Google, Vertex AI and the OpenAI Responses API — plus custom endpoints, agents with MCP tools, and a sandboxed code interpreter across several languages.
Which one is easier to point at a custom OpenAI-compatible API?
Open WebUI, if you want it running in one command: the connection is two environment variables, OPENAI_API_BASE_URL and OPENAI_API_KEY, and the same pair can be set in the UI under Connections after first launch. LibreChat asks for a YAML file instead — a custom endpoint is a block in librechat.yaml with name, apiKey, baseURL and a models section. That is more to write and it buys something: you name the endpoint, control which models appear, and can pin a cheap model for conversation titles. Neither needs a proxy; LibreChat's documentation is explicit that custom endpoints work without one.
Which should I choose for a team?
Read each project's own feature list against your requirement rather than taking a verdict from a comparison page, this one included. Open WebUI states granular RBAC and user groups, LDAP/Active Directory, SSO via trusted headers and OAuth, and SCIM 2.0 provisioning. LibreChat states multi-user authentication with OAuth2, LDAP and email login, plus an admin panel for users, groups and roles. Both cover the common case; the differences that matter to a specific organisation are usually in the provisioning details, which is where to look first.
Can either one use Claude, GPT and Gemini at the same time?
Yes, and this is the main reason to put a gateway behind either of them. Both accept an OpenAI-compatible endpoint, and if that endpoint serves several model families then all of them appear in one model picker under one key. Without a gateway you configure each provider separately, with a separate account and separate billing for each; with one, adding a model family is a model id in a list rather than a new integration.
Do I need Ollama to use Open WebUI?
No. Open WebUI supports Ollama and OpenAI-compatible APIs, and its own README describes pointing the API URL at hosted providers to mix them. Running it against a hosted endpoint alone is a supported configuration, not a workaround — which matters if you want the interface without a machine capable of running models locally.
Does a gateway change how either client behaves?
It changes where requests go and what they cost, not how the interface works. Both clients speak the OpenAI protocol to whatever base URL they are given, so features like RAG, agents and RBAC are properties of the client and are unaffected. The one thing to check is the model list: both can populate their picker from GET /v1/models, so the models you see are whatever the endpoint reports rather than a hardcoded list.