# wisbargo/open-webui architecture

> Architecture diagram of the GitHub repository wisbargo/open-webui, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/wisbargo/open-webui
- Repository: https://github.com/wisbargo/open-webui

## Overview

Open WebUI is a self-hosted AI platform for chat across local Ollama and OpenAI-compatible models, with collaboration, knowledge retrieval, extensibility, and administration. The main user workflow is composing a chat request in the web UI, sending it through the API, and receiving a model response; the backend also owns chat persistence. README capabilities support the additional feature branches shown. The sampled source confirms the chat API entry point, pipeline administration, retrieval abstractions, and selected collaboration behavior; unsampled subsystem links are kept conservative.

Main entry points: [`backend/open_webui/main.py`](https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/main.py) (ASGI application), [`src/lib/components/admin/Settings.svelte`](https://github.com/wisbargo/open-webui/blob/main/src/lib/components/admin/Settings.svelte) (Admin console), [`backend/open_webui/routers/retrieval.py`](https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/routers/retrieval.py) (Retrieval API), [`src/lib/components/chat/Chat.svelte`](https://github.com/wisbargo/open-webui/blob/main/src/lib/components/chat/Chat.svelte) (Chat interface)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_conversation["Chat and inference"]
  node_web_chat["Chat interface<br/>[Chat.svelte]"]
  node_web_chat_api["Chat API client<br/>[index.ts]"]
  node_backend["ASGI application<br/>[main.py]"]
  node_model_api["Model connections<br/>[openai.py]"]
  node_chat_store[("Chat records<br/>[chats.py]")]
  node_message_store[("Message records<br/>[messages.py]")]
end

subgraph group_knowledge["Knowledge and files"]
  node_knowledge_ui["Knowledge workspace<br/>[Knowledge.svelte]"]
  node_retrieval_api["Retrieval API<br/>[retrieval.py]"]
  node_loaders["Document extraction<br/>[main.py]"]
  node_vector["Vector database layer<br/>[main.py]"]
  node_file_api["File management<br/>[files.py]"]
  node_file_storage["File storage<br/>[provider.py]"]
end

subgraph group_collaboration["Collaboration and workflows"]
  node_channels_ui["Shared channels<br/>[Channel.svelte]"]
  node_channels_api["Channel API<br/>[channels.py]"]
  node_calendar_ui["Calendar"]
  node_automation_api["Scheduled automations<br/>[automations.py]"]
  node_notes_ui["Notes workspace<br/>[Notes.svelte]"]
end

subgraph group_extensions["Extensions and media"]
  node_plugin_ui["Plugin settings<br/>[Functions.svelte]"]
  node_plugin_api["Plugin management<br/>[functions.py]"]
  node_mcp_client["MCP integration<br/>[client.py]"]
  node_audio_api["Voice and audio<br/>[audio.py]"]
  node_image_api["Image generation<br/>[images.py]"]
end

subgraph group_operations["Identity and operations"]
  node_admin_ui["Admin console<br/>[Settings.svelte]"]
  node_auth_api["Authentication<br/>[auths.py]"]
  node_groups_api["Roles and groups<br/>[groups.py]"]
  node_analytics_api["Usage and evaluation<br/>[analytics.py]"]
end

node_user(("User"))
node_webhook(("Webhook destinations"))

node_user -->|"composes prompt"| node_web_chat
node_web_chat -->|"sends chat"| node_web_chat_api
node_web_chat_api -->|"calls API"| node_backend
node_backend -->|"routes inference"| node_model_api
node_backend -->|"persists chat"| node_chat_store
node_backend -->|"persists messages"| node_message_store
node_user -->|"selects knowledge"| node_knowledge_ui
node_knowledge_ui -->|"requests retrieval"| node_retrieval_api
node_retrieval_api -->|"extracts documents"| node_loaders
node_retrieval_api -->|"searches vectors"| node_vector
node_user -->|"uploads files"| node_file_api
node_file_api -->|"stores files"| node_file_storage
node_user -->|"collaborates"| node_channels_ui
node_channels_ui -->|"manages channels"| node_channels_api
node_user -->|"manages schedule"| node_calendar_ui
node_user -->|"edits notes"| node_notes_ui
node_user -->|"configures extensions"| node_plugin_ui
node_plugin_ui -->|"manages plugins"| node_plugin_api
node_plugin_api -.->|"connects MCP"| node_mcp_client
node_user -->|"uses voice"| node_audio_api
node_user -->|"requests images"| node_image_api
node_user -->|"administers platform"| node_admin_ui
node_admin_ui -->|"manages access"| node_auth_api
node_admin_ui -->|"manages groups"| node_groups_api
node_admin_ui -->|"reviews usage"| node_analytics_api
node_automation_api -.->|"sends notifications"| node_webhook

click node_web_chat "https://github.com/wisbargo/open-webui/blob/main/src/lib/components/chat/Chat.svelte"
click node_web_chat_api "https://github.com/wisbargo/open-webui/blob/main/src/lib/apis/chats/index.ts"
click node_backend "https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/main.py"
click node_model_api "https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/routers/openai.py"
click node_chat_store "https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/models/chats.py"
click node_message_store "https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/models/messages.py"
click node_knowledge_ui "https://github.com/wisbargo/open-webui/blob/main/src/lib/components/chat/MessageInput/Commands/Knowledge.svelte"
click node_retrieval_api "https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/routers/retrieval.py"
click node_loaders "https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/retrieval/loaders/main.py"
click node_vector "https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/retrieval/vector/main.py"
click node_file_api "https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/routers/files.py"
click node_file_storage "https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/storage/provider.py"
click node_channels_ui "https://github.com/wisbargo/open-webui/blob/main/src/lib/components/channel/Channel.svelte"
click node_channels_api "https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/routers/channels.py"
click node_calendar_ui "https://github.com/wisbargo/open-webui/blob/main/src/lib/components/calendar/CalendarView.svelte"
click node_automation_api "https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/routers/automations.py"
click node_notes_ui "https://github.com/wisbargo/open-webui/blob/main/src/lib/components/chat/MessageInput/InputMenu/Notes.svelte"
click node_plugin_ui "https://github.com/wisbargo/open-webui/blob/main/src/lib/components/admin/Functions.svelte"
click node_plugin_api "https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/routers/functions.py"
click node_mcp_client "https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/utils/mcp/client.py"
click node_audio_api "https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/routers/audio.py"
click node_image_api "https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/routers/images.py"
click node_admin_ui "https://github.com/wisbargo/open-webui/blob/main/src/lib/components/admin/Settings.svelte"
click node_auth_api "https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/routers/auths.py"
click node_groups_api "https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/routers/groups.py"
click node_analytics_api "https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/routers/analytics.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_web_chat,node_web_chat_api,node_backend,node_model_api,node_chat_store,node_message_store,node_user toneBlue
class node_knowledge_ui,node_retrieval_api,node_loaders,node_vector,node_file_api,node_file_storage toneAmber
class node_channels_ui,node_channels_api,node_calendar_ui,node_automation_api,node_notes_ui,node_webhook toneMint
class node_plugin_ui,node_plugin_api,node_mcp_client,node_audio_api,node_image_api toneRose
class node_admin_ui,node_auth_api,node_groups_api,node_analytics_api toneIndigo
```

## Components

### Chat and inference

- [Chat interface](https://github.com/wisbargo/open-webui/blob/main/src/lib/components/chat/Chat.svelte): `src/lib/components/chat/Chat.svelte`
- [Chat API client](https://github.com/wisbargo/open-webui/blob/main/src/lib/apis/chats/index.ts): `src/lib/apis/chats/index.ts`
- [ASGI application](https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/main.py): `backend/open_webui/main.py`
- [Model connections](https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/routers/openai.py): `backend/open_webui/routers/openai.py`
- [Chat records](https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/models/chats.py): `backend/open_webui/models/chats.py`
- [Message records](https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/models/messages.py): `backend/open_webui/models/messages.py`

### Knowledge and files

- [Knowledge workspace](https://github.com/wisbargo/open-webui/blob/main/src/lib/components/chat/MessageInput/Commands/Knowledge.svelte): `src/lib/components/chat/MessageInput/Commands/Knowledge.svelte`
- [Retrieval API](https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/routers/retrieval.py): `backend/open_webui/routers/retrieval.py`
- [Document extraction](https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/retrieval/loaders/main.py): `backend/open_webui/retrieval/loaders/main.py`
- [Vector database layer](https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/retrieval/vector/main.py): `backend/open_webui/retrieval/vector/main.py`
- [File management](https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/routers/files.py): `backend/open_webui/routers/files.py`
- [File storage](https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/storage/provider.py): `backend/open_webui/storage/provider.py`

### Collaboration and workflows

- [Shared channels](https://github.com/wisbargo/open-webui/blob/main/src/lib/components/channel/Channel.svelte): `src/lib/components/channel/Channel.svelte`
- [Channel API](https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/routers/channels.py): `backend/open_webui/routers/channels.py`
- [Calendar](https://github.com/wisbargo/open-webui/blob/main/src/lib/components/calendar/CalendarView.svelte): `src/lib/components/calendar/CalendarView.svelte`
- [Scheduled automations](https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/routers/automations.py): `backend/open_webui/routers/automations.py`
- [Notes workspace](https://github.com/wisbargo/open-webui/blob/main/src/lib/components/chat/MessageInput/InputMenu/Notes.svelte): `src/lib/components/chat/MessageInput/InputMenu/Notes.svelte`

### Extensions and media

- [Plugin settings](https://github.com/wisbargo/open-webui/blob/main/src/lib/components/admin/Functions.svelte): `src/lib/components/admin/Functions.svelte`
- [Plugin management](https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/routers/functions.py): `backend/open_webui/routers/functions.py`
- [MCP integration](https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/utils/mcp/client.py): `backend/open_webui/utils/mcp/client.py`
- [Voice and audio](https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/routers/audio.py): `backend/open_webui/routers/audio.py`
- [Image generation](https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/routers/images.py): `backend/open_webui/routers/images.py`

### Identity and operations

- [Admin console](https://github.com/wisbargo/open-webui/blob/main/src/lib/components/admin/Settings.svelte): `src/lib/components/admin/Settings.svelte`
- [Authentication](https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/routers/auths.py): `backend/open_webui/routers/auths.py`
- [Roles and groups](https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/routers/groups.py): `backend/open_webui/routers/groups.py`
- [Usage and evaluation](https://github.com/wisbargo/open-webui/blob/main/backend/open_webui/routers/analytics.py): `backend/open_webui/routers/analytics.py`

### Other components

- **User**
- **Webhook destinations**

## Connections

- User → Chat interface: composes prompt
- Chat interface → Chat API client: sends chat
- Chat API client → ASGI application: calls API
- ASGI application → Model connections: routes inference
- ASGI application → Chat records: persists chat
- ASGI application → Message records: persists messages
- User → Knowledge workspace: selects knowledge
- Knowledge workspace → Retrieval API: requests retrieval
- Retrieval API → Document extraction: extracts documents
- Retrieval API → Vector database layer: searches vectors
- User → File management: uploads files
- File management → File storage: stores files
- User → Shared channels: collaborates
- Shared channels → Channel API: manages channels
- User → Calendar: manages schedule
- User → Notes workspace: edits notes
- User → Plugin settings: configures extensions
- Plugin settings → Plugin management: manages plugins
- Plugin management → MCP integration: connects MCP
- User → Voice and audio: uses voice
- User → Image generation: requests images
- User → Admin console: administers platform
- Admin console → Authentication: manages access
- Admin console → Roles and groups: manages groups
- Admin console → Usage and evaluation: reviews usage
- Scheduled automations → Webhook destinations: sends notifications
