🧩 Community Plugins
The Open WebUI Community site hosts hundreds of community-built Tools and Functions you can import into your instance in one click. This page is a beginner's map: how the library works, how to pick a plugin by what you want to do, and how to import safely.
Being highlighted on this page, or featured, popular, or listed on the Open WebUI Community site, is not an endorsement and does not mean the code has been reviewed for security or quality. Listings are community-submitted and unaudited.
Tools and Functions execute arbitrary Python on your server. A plugin's star count or placement tells you nothing about what its code actually does. Read the source before you import, every time. See the full Plugin Security Warning.
How the library works
- Browse Tools and Functions at openwebui.com, or search by keyword.
- Import with one click (or by pasting the source into the built-in editor). There is no
pip installand no restart. - Where they land: imported Tools appear under Workspace → Tools, imported Functions under Admin Panel → Functions. Both are managed by administrators. For the difference between the two, see Tools & Functions.
Find a plugin by what you want to do
The plugin type is not always obvious from the name, so start from the goal. Search the community site for the terms below, then read the code before importing.
| I want to... | Plugin type | Search the community site for |
|---|---|---|
| Give the model live web search or real-time data | Tool | web search, weather, search |
| Add a model provider (Anthropic, Gemini, a router, a local engine) | Pipe | pipe, the provider name |
| Track or limit per-user cost / usage | Filter | cost, usage, budget, rate limit |
| Redact PII or moderate message content | Filter | pii, redact, moderation |
| Summarize or compact long conversations | Filter | context, memory, compaction |
| Add a button on a message (export, re-run, translate) | Action | action, the task name |
| React to system events (audit logging, signup gating, provisioning) | Event | event, webhook, audit |
| Connect an existing HTTP service | OpenAPI / MCP server | n/a (point Open WebUI at the spec) |
Not sure which type fits? The Which Extension Do I Need? table walks through it.
Highlighted plugins
A hand-picked set to show what is possible, grouped by plugin type. Highlighting is not vetting (see the warning above) — read the source before importing, every time.
Tools
Tools give the model new capabilities it can call.
| Plugin | What it does |
|---|---|
| Inline Visualizer (Streaming) | Renders dashboards, charts, diagrams and interactive HTML/SVG live as the model streams them, painted inline in the chat instead of after the reply finishes. Includes 46-language localization, light/dark theming, a configurable Content Security Policy, and interactive bridges (sendPrompt(), copyText(), toasts, state save/load). Requires the Allow iframe same origin user setting; ships with a companion Skill. |
| MCP App Bridge | Discovers and calls tools on any MCP server, then renders the app's UI resources as sandboxed interactive embeds inline in the chat via Open WebUI's Rich UI pipeline. Honors server-declared CSP and domain policies (connect/resource/frame) and auto-resizes the iframe. Needs a reachable MCP server with a streamable HTTP endpoint. |
| Email Composer | Turns a natural-language request into a ready-to-send email in an interactive Rich UI card: rich-text body with formatting toolbar, To/CC/BCC management, priority badges, word/character count, copy-as-rich-text, download as .eml, and one-click send via mailto:. Needs native function calling; autosave uses the Allow iframe same origin setting. |
| Sub Agent | Delegates tool-heavy, multi-step tasks to autonomous sub-agents that run in an isolated context and return only the final result, so the main conversation does not fill with intermediate tool calls. Runs sub-agents in parallel, with allow/exclude lists controlling which tools (regular, MCP, terminal, builtin) and skills each one may use. Needs native function calling. |
| Ollama Model Card Generator | Admin tool. Auto-generates rich model cards for installed Ollama models from /api/show metadata: descriptions, display names, tags, capabilities, inference params (with VRAM-aware context capping), system and suggestion prompts, and vendor profile images, and can wrap each in a fully-enriched workspace model. 31 toggleable valves with overwrite protection; it writes to the database, so preview first. |
| Reveal.js Slide Deck Builder | Lets the model generate and render fully interactive Reveal.js HTML5 slide decks inline in the chat, with 9 themes, keyboard and arrow navigation, and fullscreen. Loads Reveal.js from a CDN; requires the Allow iframe same origin user setting. |
| Ask User | Lets the model pause and ask 1-5 clarifying questions in sequential pop-up dialogs before it answers, then feeds the collected answers back into its context. Bounded by design (max 5 questions, no open-ended follow-up loops), so vague requests get pinned down cleanly. |
Actions
Actions add buttons to the message toolbar.
| Plugin | What it does |
|---|---|
| Forward to Channel | Adds a forward button to every message that posts it into an Open WebUI Channel. Multi-channel targeting, @mentions for users and models (mentioning a model makes it respond in the channel), DM support, and optional formatting (linked chat title, timestamp). Per-user overrides via UserValves. Needs Channels enabled on the instance. |
| Export to Word (Enhanced) | Exports a conversation to a formatted .docx Word document: syntax-highlighted code (500+ languages), native Word equations from LaTeX, Mermaid diagrams rendered as images, smart tables, and an auto-generated References section. Strips <think> / <analysis> reasoning blocks; configurable fonts and English/Chinese UI. Installs pip dependencies (python-docx, Pygments, latex2mathml, mathml2omml), so review them per the checklist below. |
| Export to Excel | Extracts Markdown tables from a conversation and exports them to a formatted .xlsx spreadsheet, with automatic header detection, multi-table support, zebra striping, smart type conversion, and configurable filenames (chat title, AI-generated, or heading). Exports the last message or the whole chat. |
| Download Code Blocks | Extracts every fenced code block from a response and downloads each as a correctly-named file (170+ language-to-extension mappings). Multi-block navigator modal with syntax-highlighted previews, line numbers and editable filenames, plus an optional one-click batch mode. |
| Fork Chat | Branches a conversation into a brand-new chat at the exact message you click, rebuilding the full history up to that point (tree-aware), sanitizing stuck status artifacts, then redirecting you to the fork. The original chat is left untouched. Like git branch for conversations. |
| Forward to Webhook | Forwards a response to Discord, Slack, Microsoft Teams, or any generic webhook, auto-detecting the platform from the URL and formatting accordingly (Discord embeds with custom colors, Slack mrkdwn, and so on). Multi-URL routing with parallel delivery, optional reasoning-block stripping, and per-user webhook overrides. |
| Regenerate Follow-ups | Regenerates just the follow-up suggestion chips under an assistant message, leaving the response itself untouched. Calls Open WebUI's native follow-up task and swaps the chips in place over a websocket event. Requires follow-up generation enabled in admin settings. |
| Generate Image | Re-implements the message-toolbar "generate image" button removed in v0.6.44, using the message text as the prompt. Adds batch generation, incremental display, re-roll mode and optional LLM prompt enhancement, routed through Open WebUI's internal image engine (ComfyUI, Automatic1111, DALL-E). |
| Pin Message | One-click toggle to pin (favorite) a message, surfacing it with a heart icon in the Chat Overview node graph. Writes the same favorite flag the built-in Overview uses and syncs the frontend over a websocket event. |
| Add Web Sources to Knowledge | Saves the web-search source URLs cited in a response straight into a Knowledge base in one click: pick which URLs and which KB, then it fetches, stores and indexes each, with duplicate detection and batch processing. |
Filters
Filters transform messages on the way in or on the way out.
| Plugin | What it does |
|---|---|
| Markdown Normalizer | Repairs malformed Markdown in LLM output before it renders: unclosed or mangled code blocks, \[...\]-style LaTeX, broken Mermaid diagrams (auto-quotes labels), tables, headings, thought / <details> tags, and leftover XML artifacts. Every fix is independently toggleable, with a full rollback-on-error guarantee and multilingual status messages. |
| Mermaid Doctor | Deterministically repairs broken Mermaid diagrams from small or hallucinating models, rewriting invalid syntax directly in the token stream as it arrives (no second LLM call, zero token overhead). Covers flowcharts, ER diagrams, Gantt charts, mindmaps and pie charts, and can inject few-shot examples to steer the model and strip hallucinated styles. |
| Thinking Toggle | One-click reasoning control for llama.cpp models: toggle thinking on or off from the chat panel and pick a depth budget (512 tokens up to unlimited), one of 13 reasoning-style presets, 11 presentation presets, and 4 sampling presets. Injects enable_thinking and the reasoning budget per request; needs a llama-server started with --reasoning off. |
| Token Usage Display | Appends input / output / total token counts, reasoning and cached-prompt tokens, generation time and tokens-per-second below each response. Reads API-reported usage (Ollama, OpenAI, Anthropic, Gemini) and falls back to tiktoken estimation; every metric is individually toggleable. |
| OpenRouter Balance & Token Tracker | Shows per-message OpenRouter usage under each response: prompt / completion / reasoning / cached token counts, the message cost, speed, and your remaining account credit balance. Auto-detects OpenRouter models; needs your OpenRouter API key in a valve. |
Event Functions
Event Functions run your own Python in response to system-wide events.
| Plugin | What it does |
|---|---|
| Interface Defaults | Sets your instance's Settings → Interface defaults from one function's Valves. New users (signup, OAuth, SCIM) are seeded automatically on creation; two one-shot buttons push the defaults to everyone or factory-reset the instance. Native Valves UI, background bulk ops, no custom UI or monkey-patching. Requires Open WebUI 0.10.0. |
| Theme Designer Pro | Instance-wide theme designer that runs as a standalone admin page (no chat, no iframe sandbox), persisting CSS and state server-side under DATA_DIR/theme/ and pushing changes to every connected user in real time over SSE. Includes an OKLCH color engine, draft/publish preview mode, custom-CSS auto-scoping, and login-page theming. |
Before you import: a beginner safety checklist
A community plugin runs with the same access as the rest of the server. Treat installing one like running someone else's script as an administrator. Before you import:
- Read the code. If you do not understand what it does, do not install it. Be especially wary of network calls to unfamiliar hosts, code that reads your
datadirectory or environment variables, and anything obfuscated. - Check it only does what it claims. A "translation" Action has no reason to phone home or read your database.
- Look at
requirements:. Extra pip dependencies are installed at load time. Unknown packages are a supply-chain risk, and in multi-replica deployments runtime installs race across workers (setENABLE_PIP_INSTALL_FRONTMATTER_REQUIREMENTS=Falseand bake them into your image instead). - Try it on a non-production instance first, then promote it once you trust it.
- Restrict who can import. Only trusted administrators should create or import plugins. Regular users should not have Workspace access unless they need it.
For the deeper version of what a plugin can reach once loaded (and the footguns that come with it), see Under the Hood.
Sharing your own plugin
Built something useful? Publish it to the community site so others can find and import it. The same caveat applies in reverse: a clear README and readable, auditable code are what earn trust, because no one is auditing it for you. Keep secrets in Valves rather than hard-coding them, and write async handlers so your plugin stays compatible as the backend moves toward fully async execution.