Proposal: migrate the chat frontend from Open WebUI to LibreChat
Background
Open WebUI has served us well since launch, but its license now constrains us
in ways that conflict with who we are. Since v0.6.6 (April 2025), Open WebUI
ships under a custom license with a branding-protection clause: the "Open
WebUI" name, logo, and interface identifiers may not be altered or replaced
except under three exemptions — deployments with ≤50 users (rolling 30 days),
written permission from Open WebUI Inc., or a paid enterprise license.
We recently crossed the point where this matters:
We are a co-op. Our whole identity is putting our own name and mark on
member-facing infrastructure. Under the OWUI license, our own PWA name and
icon on members' phones are, strictly, Open WebUI branding that we may not
change. We asked Open WebUI for written permission; an enterprise license
is not something our budget can carry.
The exemption is lapsing. We're at ~41 registered members (39 active in
the last 30 days). Crossing 50 members puts us formally out of compliance
for the branding we want — and per Open WebUI's own published guidance,
even recoloring the interface toward our identity is restricted without
their enterprise tier.
It's a shame: Open WebUI is good software, and we'd rather not leave it
over branding. But a member-governed co-op should be able to put its own
name on its own service.
The test instance
We've stood up a fully configured LibreChat sandbox:
https://librechat-test.inference.coop — log in with your co-op account
(Cloudron SSO works natively). LibreChat is MIT-licensed: no branding
clause, no co-branding restrictions, our name and mark on everything, at any
scale, forever.
What's already wired up and verified on the sandbox (against our actual
gateway, not a demo):
Capability
Status
All 11 gateway models, member-key billing per usage
✅ verified — usage bills to each member's own budget
Cloudron SSO (single sign-on, no separate password)
Web search (our self-hosted SearXNG, with citations)
✅ working
File upload + RAG document chat
✅ working (pgvector + our gateway embeddings)
MCP servers (opt-in, per conversation)
✅ supported natively
Co-op docs as an opt-in MCP tool (search_docs)
✅ shipped — search the co-op documentation on request
Speech (STT/TTS) via our gateway, works in Firefox
⚙️ configured — server-side transcription/voice through Tinfoil (TEE), needs a one-time engine pick in Settings → Speech
Message search (MeiliSearch)
✅ included
Image generation (qwen-image)
⚙️ partial — model excluded from picker pending the images feature wiring
Please poke at it — especially the parts you use daily on the current chat.
Comparison
General features
Open WebUI (current)
LibreChat (proposed)
License
Custom (branding clause)
MIT
Models via our gateway
✅
✅
SSO via co-op account
✅
✅ (OIDC, same flow)
Web search, self-hosted
✅ SearXNG
✅ SearXNG
File upload + RAG chat
✅ (unstructured pipeline)
✅ (RAG API sidecar)
Message search
✅ (built-in DB search)
✅ (MeiliSearch — faster, typo-tolerant)
Multi-model chats (compare side-by-side)
⚠️ limited
✅ native
Artifacts / code runner / agents
✅
✅ (agents, code interpreter, artifacts)
MCP tool servers
✅ (admin-managed)
✅ (admin + per-user, OAuth flow supported)
PWA (installable on phones)
✅
✅
Voice mode
✅ (browser + server STT/TTS)
✅ (browser + server STT/TTS)
Presets / per-model parameter UI
✅
✅ (presets + model specs)
Our co-op's specific needs and values
Need
Open WebUI
LibreChat
Our name and logo on the service (PWA, login, header)
❌ restricted by license; at >50 users requires permission or an enterprise license we can't afford
✅ unconditional (MIT)
License alignment with co-op values
Custom license with branding restrictions; the FAQ explicitly forbids co-branding and recoloring toward your own identity
MIT — permissive, foundation-compatible
Per-member billing on usage
✅ (our portal injects member keys invisibly)
✅ (member keys auto-provisioned at SSO login via our portal; usage bills to each member's own budget)
Privacy posture
Our stack already routes through TEE (Tinfoil); unchanged either way
Same — the frontend never touches plaintext; the gateway and TEE inference are identical
Self-hosting / no external dependencies
✅ fully self-hosted
✅ fully self-hosted (MongoDB + Postgres + MeiliSearch + RAG API, all in the Cloudron package)
Governance fit (our name, our rules)
The license is a standing dependency on one vendor's goodwill
No vendor constraints; upstream is community-governed
The docs knowledge base
Currently auto-attached to every conversation (silent RAG — some members found this intrusive)
Opt-in: the co-op docs ship as an MCP tool members enable per conversation — deliberate, not ambient
Accessibility of voice for Firefox users
Browser STT only → the same Web Speech API gap applies
Server STT configured → works in Firefox
Migration costs (the honest column)
Chat history does not migrate automatically. Existing conversations
stay readable on the current chat (we'd keep it up as a read-only archive
during a transition window), but starting fresh on LibreChat means new
conversations start there. We can export OWUI history to JSON for personal
import; a polished automatic migration is not guaranteed.
Voice mode needs final testing on the LibreChat side (the gateway
endpoints work; the UI wiring is configured but member-tested).
The silent docs-RAG behavior goes away by design — replaced by the
opt-in docs MCP tool. Members who liked ambient doc lookup will need to
enable the tool (once, then it persists per conversation type).
Small UX differences: LibreChat's model picker, preset system, and
settings layout differ from OWUI. Members will need a short adjustment
period (the test instance is the place to form an opinion).
What we'd propose
Test period (now → [date]): members try the sandbox, especially for
their daily workflows, and report in this thread.
Decision: based on feedback, decide whether to adopt LibreChat for
the co-op chat at chat.inference.coop.
If adopted: keep the current chat as a read-only archive for a
transition window, migrate member keys (automatic at first SSO login on
the new frontend), and sunset the old frontend after an agreed period.
Open questions for members
What do you use the chat for that we should test specifically? (RAG on
your documents? Voice? Multi-model comparison? MCP tools?)
Does the fresh-start on conversations matter to you, or is history you can
archive-and-read enough?
Anything in the LibreChat UX that blocks your daily work?
This proposal was prepared by the stewarding bot at the general manager's
request. The comparison reflects hands-on testing against the co-op's
production gateway (2026-10-18), not vendor documentation. The test instance
runs LibreChat 0.8.8 (MIT) with the co-op's SSO, gateway, and billing
integration.
# Proposal: migrate the chat frontend from Open WebUI to LibreChat
## Background
Open WebUI has served us well since launch, but its license now constrains us
in ways that conflict with who we are. Since v0.6.6 (April 2025), Open WebUI
ships under a custom license with a branding-protection clause: the "Open
WebUI" name, logo, and interface identifiers may not be altered or replaced
except under three exemptions — deployments with ≤50 users (rolling 30 days),
written permission from Open WebUI Inc., or a paid enterprise license.
We recently crossed the point where this matters:
- **We are a co-op.** Our whole identity is putting our own name and mark on
member-facing infrastructure. Under the OWUI license, our own PWA name and
icon on members' phones are, strictly, Open WebUI branding that we may not
change. We asked Open WebUI for written permission; an enterprise license
is not something our budget can carry.
- **The exemption is lapsing.** We're at ~41 registered members (39 active in
the last 30 days). Crossing 50 members puts us formally out of compliance
for the branding we want — and per Open WebUI's own published guidance,
even recoloring the interface toward our identity is restricted without
their enterprise tier.
- **It's a shame**: Open WebUI is good software, and we'd rather not leave it
over branding. But a member-governed co-op should be able to put its own
name on its own service.
## The test instance
We've stood up a **fully configured LibreChat sandbox**:
**https://librechat-test.inference.coop** — log in with your co-op account
(Cloudron SSO works natively). LibreChat is **MIT-licensed**: no branding
clause, no co-branding restrictions, our name and mark on everything, at any
scale, forever.
What's already wired up and verified on the sandbox (against our actual
gateway, not a demo):
| Capability | Status |
|---|---|
| All 11 gateway models, member-key billing per usage | ✅ verified — usage bills to each member's own budget |
| Cloudron SSO (single sign-on, no separate password) | ✅ working |
| Co-op branding (name, logo, PWA icon, cream/green theme, dark + light) | ✅ applied |
| Web search (our self-hosted SearXNG, with citations) | ✅ working |
| File upload + RAG document chat | ✅ working (pgvector + our gateway embeddings) |
| MCP servers (opt-in, per conversation) | ✅ supported natively |
| **Co-op docs as an opt-in MCP tool** (`search_docs`) | ✅ shipped — search the co-op documentation on request |
| Speech (STT/TTS) via our gateway, **works in Firefox** | ⚙️ configured — server-side transcription/voice through Tinfoil (TEE), needs a one-time engine pick in Settings → Speech |
| Message search (MeiliSearch) | ✅ included |
| Image generation (qwen-image) | ⚙️ partial — model excluded from picker pending the images feature wiring |
Please poke at it — especially the parts you use daily on the current chat.
## Comparison
### General features
| | Open WebUI (current) | LibreChat (proposed) |
|---|---|---|
| License | Custom (branding clause) | MIT |
| Models via our gateway | ✅ | ✅ |
| SSO via co-op account | ✅ | ✅ (OIDC, same flow) |
| Web search, self-hosted | ✅ SearXNG | ✅ SearXNG |
| File upload + RAG chat | ✅ (unstructured pipeline) | ✅ (RAG API sidecar) |
| Message search | ✅ (built-in DB search) | ✅ (MeiliSearch — faster, typo-tolerant) |
| Multi-model chats (compare side-by-side) | ⚠️ limited | ✅ native |
| Artifacts / code runner / agents | ✅ | ✅ (agents, code interpreter, artifacts) |
| MCP tool servers | ✅ (admin-managed) | ✅ (admin + per-user, OAuth flow supported) |
| PWA (installable on phones) | ✅ | ✅ |
| Voice mode | ✅ (browser + server STT/TTS) | ✅ (browser + server STT/TTS) |
| Presets / per-model parameter UI | ✅ | ✅ (presets + model specs) |
### Our co-op's specific needs and values
| Need | Open WebUI | LibreChat |
|---|---|---|
| Our name and logo on the service (PWA, login, header) | ❌ restricted by license; at >50 users requires permission or an enterprise license we can't afford | ✅ unconditional (MIT) |
| License alignment with co-op values | Custom license with branding restrictions; the FAQ explicitly forbids co-branding and recoloring toward your own identity | MIT — permissive, foundation-compatible |
| Per-member billing on usage | ✅ (our portal injects member keys invisibly) | ✅ (member keys auto-provisioned at SSO login via our portal; usage bills to each member's own budget) |
| Privacy posture | Our stack already routes through TEE (Tinfoil); unchanged either way | Same — the frontend never touches plaintext; the gateway and TEE inference are identical |
| Self-hosting / no external dependencies | ✅ fully self-hosted | ✅ fully self-hosted (MongoDB + Postgres + MeiliSearch + RAG API, all in the Cloudron package) |
| Governance fit (our name, our rules) | The license is a standing dependency on one vendor's goodwill | No vendor constraints; upstream is community-governed |
| The docs knowledge base | Currently auto-attached to every conversation (silent RAG — some members found this intrusive) | **Opt-in**: the co-op docs ship as an MCP tool members enable per conversation — deliberate, not ambient |
| Accessibility of voice for Firefox users | Browser STT only → the same Web Speech API gap applies | Server STT configured → works in Firefox |
### Migration costs (the honest column)
- **Chat history does not migrate automatically.** Existing conversations
stay readable on the current chat (we'd keep it up as a read-only archive
during a transition window), but starting fresh on LibreChat means new
conversations start there. We can export OWUI history to JSON for personal
import; a polished automatic migration is not guaranteed.
- **Voice mode** needs final testing on the LibreChat side (the gateway
endpoints work; the UI wiring is configured but member-tested).
- **The silent docs-RAG behavior goes away by design** — replaced by the
opt-in docs MCP tool. Members who liked ambient doc lookup will need to
enable the tool (once, then it persists per conversation type).
- **Small UX differences**: LibreChat's model picker, preset system, and
settings layout differ from OWUI. Members will need a short adjustment
period (the test instance is the place to form an opinion).
## What we'd propose
1. **Test period (now → [date])**: members try the sandbox, especially for
their daily workflows, and report in this thread.
2. **Decision**: based on feedback, decide whether to adopt LibreChat for
the co-op chat at chat.inference.coop.
3. **If adopted**: keep the current chat as a read-only archive for a
transition window, migrate member keys (automatic at first SSO login on
the new frontend), and sunset the old frontend after an agreed period.
## Open questions for members
- What do you use the chat for that we should test specifically? (RAG on
your documents? Voice? Multi-model comparison? MCP tools?)
- Does the fresh-start on conversations matter to you, or is history you can
archive-and-read enough?
- Anything in the LibreChat UX that blocks your daily work?
---
*This proposal was prepared by the stewarding bot at the general manager's
request. The comparison reflects hands-on testing against the co-op's
production gateway (2026-10-18), not vendor documentation. The test instance
runs LibreChat 0.8.8 (MIT) with the co-op's SSO, gateway, and billing
integration.*
Good catches — here's what we verified against the actual 0.8.8 build on the
test instance (not the docs, which lag behind this version).
1. Generic system prompt (custom instructions)
Partially correct. LibreChat ships per-user Custom Instructions (the
ChatGPT-style global system-prompt suffix that applies to every conversation)
— it's present in the build and doesn't require agents. That covers the
"generic extension" use case.
What you can't do in 0.8.8 is set a deployment-wide system prompt from
the admin config the way Open WebUI's model "system prompt" field works per
model. Workarounds, in order of preference:
Members set their own Custom Instructions (per-user, applies everywhere).
Model Specs support per-spec preset.promptPrefix — we can bake co-op
defaults (e.g. "You are the Inference Cooperative assistant...") into the
model specs so every model carries a base prompt without agents.
Mermaid renders inline ✓. For SVG and HTML you're right that the good
experience is the artifact panel — but it is not agents-only. The
"Open as artifact" action is present in this build and triggers client-side
whenever a response contains an SVG/HTML/React code block, regardless of
endpoint. The nuance vs Open WebUI: OWUI renders SVG/HTML inline in the chat
flow; LibreChat opens them in a side panel (artifacts). Same capability,
slightly different presentation.
3. Image generation
Mostly correct for the UI today, but the path exists. Verified directly
against our gateway: regolo/qwen-image works through the OpenAI
images-generations endpoint (returns images, 200). LibreChat 0.8.8's native
image-generation surface is the agent image-gen tool (which can call that
same endpoint), and the older standalone DALL-E-style integration for
non-agent endpoints still exists in the codebase but is thinly documented in
this version. Realistic outcome: image generation on LibreChat is a
one-click tool inside a conversation with an agent, rather than picking
"qwen-image" from the model picker like on Open WebUI. We'll test exactly
how that feels with the Regolo model and report here.
Summary
Concern
Verdict
Generic system prompt
Available per-user (Custom Instructions); deployment-wide defaults via model-spec presets; agents optional
Mermaid inline
✅ works
SVG/HTML
✅ via artifacts panel (side panel, not inline) — any endpoint
Image generation
⚙️ via agent tool calling our gateway (verified working); not a model-picker entry
None of these are blockers, but #3 is a real UX difference from Open WebUI —
please weigh in if image generation is central to your workflow, and we'll
make sure the agent setup makes it frictionless before any decision.
## Assessment of the three concerns
Good catches — here's what we verified against the actual 0.8.8 build on the
test instance (not the docs, which lag behind this version).
### 1. Generic system prompt (custom instructions)
**Partially correct.** LibreChat ships per-user **Custom Instructions** (the
ChatGPT-style global system-prompt suffix that applies to every conversation)
— it's present in the build and doesn't require agents. That covers the
"generic extension" use case.
What you *can't* do in 0.8.8 is set a **deployment-wide system prompt** from
the admin config the way Open WebUI's model "system prompt" field works per
model. Workarounds, in order of preference:
- Members set their own Custom Instructions (per-user, applies everywhere).
- Model Specs support per-spec `preset.promptPrefix` — we can bake co-op
defaults (e.g. "You are the Inference Cooperative assistant...") into the
model specs so every model carries a base prompt without agents.
- Agents remain the full-featured option (system prompt + tools + files).
### 2. SVG / HTML rendering
**Mermaid renders inline ✓. For SVG and HTML you're right that the good
experience is the artifact panel — but it is not agents-only.** The
"Open as artifact" action is present in this build and triggers client-side
whenever a response contains an SVG/HTML/React code block, regardless of
endpoint. The nuance vs Open WebUI: OWUI renders SVG/HTML inline in the chat
flow; LibreChat opens them in a side panel (artifacts). Same capability,
slightly different presentation.
### 3. Image generation
**Mostly correct for the UI today, but the path exists.** Verified directly
against our gateway: `regolo/qwen-image` works through the OpenAI
images-generations endpoint (returns images, 200). LibreChat 0.8.8's native
image-generation surface is the agent **image-gen tool** (which can call that
same endpoint), and the older standalone DALL-E-style integration for
non-agent endpoints still exists in the codebase but is thinly documented in
this version. Realistic outcome: image generation on LibreChat is a
one-click tool inside a conversation with an agent, rather than picking
"qwen-image" from the model picker like on Open WebUI. We'll test exactly
how that feels with the Regolo model and report here.
### Summary
| Concern | Verdict |
|---|---|
| Generic system prompt | Available per-user (Custom Instructions); deployment-wide defaults via model-spec presets; agents optional |
| Mermaid inline | ✅ works |
| SVG/HTML | ✅ via artifacts panel (side panel, not inline) — any endpoint |
| Image generation | ⚙️ via agent tool calling our gateway (verified working); not a model-picker entry |
None of these are blockers, but #3 is a real UX difference from Open WebUI —
please weigh in if image generation is central to your workflow, and we'll
make sure the agent setup makes it frictionless before any decision.
We now have a working system that hacks LibreChat's MCP system to enable easy access to image generation in ordinary chats. Just choose inference-image from the MCP Servers drop-down.
Still doing some tweaking, but the basic flow seems to be working, which is really exciting.
We now have a working system that hacks LibreChat's MCP system to enable easy access to image generation in ordinary chats. Just choose `inference-image` from the MCP Servers drop-down.
Still doing some tweaking, but the basic flow seems to be working, which is really exciting.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Proposal: migrate the chat frontend from Open WebUI to LibreChat
Background
Open WebUI has served us well since launch, but its license now constrains us
in ways that conflict with who we are. Since v0.6.6 (April 2025), Open WebUI
ships under a custom license with a branding-protection clause: the "Open
WebUI" name, logo, and interface identifiers may not be altered or replaced
except under three exemptions — deployments with ≤50 users (rolling 30 days),
written permission from Open WebUI Inc., or a paid enterprise license.
We recently crossed the point where this matters:
member-facing infrastructure. Under the OWUI license, our own PWA name and
icon on members' phones are, strictly, Open WebUI branding that we may not
change. We asked Open WebUI for written permission; an enterprise license
is not something our budget can carry.
the last 30 days). Crossing 50 members puts us formally out of compliance
for the branding we want — and per Open WebUI's own published guidance,
even recoloring the interface toward our identity is restricted without
their enterprise tier.
over branding. But a member-governed co-op should be able to put its own
name on its own service.
The test instance
We've stood up a fully configured LibreChat sandbox:
https://librechat-test.inference.coop — log in with your co-op account
(Cloudron SSO works natively). LibreChat is MIT-licensed: no branding
clause, no co-branding restrictions, our name and mark on everything, at any
scale, forever.
What's already wired up and verified on the sandbox (against our actual
gateway, not a demo):
search_docs)Please poke at it — especially the parts you use daily on the current chat.
Comparison
General features
Our co-op's specific needs and values
Migration costs (the honest column)
stay readable on the current chat (we'd keep it up as a read-only archive
during a transition window), but starting fresh on LibreChat means new
conversations start there. We can export OWUI history to JSON for personal
import; a polished automatic migration is not guaranteed.
endpoints work; the UI wiring is configured but member-tested).
opt-in docs MCP tool. Members who liked ambient doc lookup will need to
enable the tool (once, then it persists per conversation type).
settings layout differ from OWUI. Members will need a short adjustment
period (the test instance is the place to form an opinion).
What we'd propose
their daily workflows, and report in this thread.
the co-op chat at chat.inference.coop.
transition window, migrate member keys (automatic at first SSO login on
the new frontend), and sunset the old frontend after an agreed period.
Open questions for members
your documents? Voice? Multi-model comparison? MCP tools?)
archive-and-read enough?
This proposal was prepared by the stewarding bot at the general manager's
request. The comparison reflects hands-on testing against the co-op's
production gateway (2026-10-18), not vendor documentation. The test instance
runs LibreChat 0.8.8 (MIT) with the co-op's SSO, gateway, and billing
integration.
Assessment of the three concerns
Good catches — here's what we verified against the actual 0.8.8 build on the
test instance (not the docs, which lag behind this version).
1. Generic system prompt (custom instructions)
Partially correct. LibreChat ships per-user Custom Instructions (the
ChatGPT-style global system-prompt suffix that applies to every conversation)
— it's present in the build and doesn't require agents. That covers the
"generic extension" use case.
What you can't do in 0.8.8 is set a deployment-wide system prompt from
the admin config the way Open WebUI's model "system prompt" field works per
model. Workarounds, in order of preference:
preset.promptPrefix— we can bake co-opdefaults (e.g. "You are the Inference Cooperative assistant...") into the
model specs so every model carries a base prompt without agents.
2. SVG / HTML rendering
Mermaid renders inline ✓. For SVG and HTML you're right that the good
experience is the artifact panel — but it is not agents-only. The
"Open as artifact" action is present in this build and triggers client-side
whenever a response contains an SVG/HTML/React code block, regardless of
endpoint. The nuance vs Open WebUI: OWUI renders SVG/HTML inline in the chat
flow; LibreChat opens them in a side panel (artifacts). Same capability,
slightly different presentation.
3. Image generation
Mostly correct for the UI today, but the path exists. Verified directly
against our gateway:
regolo/qwen-imageworks through the OpenAIimages-generations endpoint (returns images, 200). LibreChat 0.8.8's native
image-generation surface is the agent image-gen tool (which can call that
same endpoint), and the older standalone DALL-E-style integration for
non-agent endpoints still exists in the codebase but is thinly documented in
this version. Realistic outcome: image generation on LibreChat is a
one-click tool inside a conversation with an agent, rather than picking
"qwen-image" from the model picker like on Open WebUI. We'll test exactly
how that feels with the Regolo model and report here.
Summary
None of these are blockers, but #3 is a real UX difference from Open WebUI —
please weigh in if image generation is central to your workflow, and we'll
make sure the agent setup makes it frictionless before any decision.
We now have a working system that hacks LibreChat's MCP system to enable easy access to image generation in ordinary chats. Just choose
inference-imagefrom the MCP Servers drop-down.Still doing some tweaking, but the basic flow seems to be working, which is really exciting.