Open WebUI functions: pipes, filters and actions

Open WebUI functions let platform teams add custom model pipes, policy and redaction filters, and action buttons. Because they run arbitrary Python, they need a documented review and change process before any user sees them.

On this page

What Open WebUI functions add to a shared deployment

Open WebUI functions are the extension mechanism for pipes, filters and actions, and because they run arbitrary Python inside your instance, they need code review controls before anyone enables them. If you run one Open WebUI instance for many staff and need a policy check, a redaction step or a custom model route that the built-in settings do not cover, functions are the layer where that logic can live. Pipes expose additional models or route requests to a backend the interface does not connect to natively. Filters run on messages before they reach the model and on responses before they reach the user, which is where prompt policy and redaction are applied. Actions add buttons to messages so users can trigger a defined operation.

Decide whether you need functions at all. Many requirements are met by configuration. Model access can often be limited through roles, groups and per-model permissions, and provider connections are managed in the admin settings. Where the requirement is a shared control across several tools, such as logging every prompt, enforcing per-team budgets or applying one redaction policy to every client application, a separate AI gateway in front of Open WebUI may be the better home for that control. Functions are a good fit when the logic is specific to this interface and must run inside it, for example a filter tied to your own classification labels or a pipe that wraps an internal model service.

Before enabling any function, confirm the exact feature set against the Open WebUI documentation for the version you run, because the signatures, valve settings and admin controls for pipes, filters and actions have changed across releases. Check the release notes for the version in use and the current features documentation rather than relying on examples written for an earlier build. Ask whether the feature you need is available in your version, how it is enabled for users and who in your organization can install or edit functions.

Plan code review as a standing process, not a one-time check. Every function should be source-controlled, reviewed by someone who can read Python and understands your data handling rules, and deployed through the same change path as other production code. Restrict who holds the administrator role that can install functions, and record which version of each function is active. A filter that silently drops or alters content can break compliance commitments without any visible error, so test it with representative prompts, including attempts to bypass it, before it reaches staff.

Estimate the ongoing cost of ownership with the function, not only the first build. Each function must be retested when Open WebUI is upgraded, when the model provider changes behavior and when your policy text changes. If you ask a partner for a quote, ask who will own review and regression testing after handover, how upgrades will be verified and what documentation will record the purpose and data flow of each function.

Which Open WebUI function type fits each job

This table compares pipes, filters and actions by what each one does, the job it suits, who can add it and the review risk it carries. Use it as a first filter: if the job is a model backend, a message policy or a user button, the matching row points to the function type. Exact hook names and runtime behavior change between releases, so confirm them in the Open WebUI documentation for your target version before you design around them.

OptionWhat it does and who adds itTypical job it fitsMain review risk
PipeAppears as a model choice and generates responses from your Python code. Administrators add it, subject to your version's permissions.Custom model backend, such as calling an internal service or wrapping a provider with company logic.Code runs on the server with its privileges and can reach internal systems, so every change needs review.
FilterRuns on messages before they reach the model and, depending on the hook, on responses. Administrators install it and set its scope.Message policy, redaction of personal data, prompt checks or request logging.A bug or bypass can leak data or alter every conversation it touches.
ActionAdds a button under messages that runs code when a user clicks it. Administrators install it, and you should confirm which users can trigger it.User-triggered step, such as sending an answer to an internal ticket or exporting a summary.Users can trigger side effects in external systems, so check which credentials the action can reach.
Separate gateway or model serverRuns routing, policy and logging outside Open WebUI, behind its own service and access controls. Built by your platform or security team under its own change process.Shared policy across many clients, high traffic, or controls that must hold regardless of the chat interface.Another service to operate, secure and keep aligned with Open WebUI upgrades.
Before you build any of theseConfirm hook names, parameters and per-version behavior in the Open WebUI documentation for your target release.Any function job, before design starts.A function designed against a hook that changes in a later release can break after an upgrade.

How Open WebUI functions change a chat request

Open WebUI functions act at different points in a chat request, and the point a function uses determines who it affects. A pipe presents itself to users as a model in the model selector. When a user chooses it, Open WebUI passes the conversation to the pipe, and the pipe decides what happens next. It might call an external service, combine several models or return a response of its own. Because a pipe replaces the model call rather than sitting beside it, the people who choose that model are the ones who see its behavior. Confirm the exact entry points and expected return values for your version in the Open WebUI documentation before writing one.

A filter sits on the message path around the model call. Its inlet logic runs before the request reaches the model and can inspect or change the messages being sent. Its outlet logic runs after the response and can inspect or change what the user receives. Redaction, content policy checks and audit logging usually live here. A filter can be enabled for every user and every model, which is what makes it useful for policy and also what makes it risky. Before enabling one, list which models and which roles can reach the chat, and test a conversation with each group that matters to your organization.

An action adds a control to a message or to the chat as a whole, such as a button that a user clicks to run a function against that content. Actions are not in the request path by default. They run only when someone invokes them, so the risk depends on who can see the control and what data the action receives. An action that forwards message content to an outside service creates a data flow that your privacy and security reviewers need to approve. Confirm where action controls appear in your version, which context they receive, and whether role settings can restrict who sees them.

A shared deployment needs a few controls that a single-user installation can ignore. A broken global filter can stop chats for every user at once, so test changes outside production and keep a documented rollback. Edits to a function usually take effect on live traffic immediately, which calls for a change record and a named approver. Functions run Python code on the server, so only trusted administrators should install or edit them. Also confirm how install, enable, update and disable behave in your version, including what happens to chats already in progress, because the lifecycle and hook points have changed between releases.

Setting up Open WebUI functions with a review gate

This sequence moves an Open WebUI function from an idea to a reviewed, tested and recorded version that is enabled only for the users and models it was approved for, and can be switched off with a verified effect. Each step ends with a check so the review gate can be audited.

  1. Define the policy or model job

    Write down what the function must do, which model or models it applies to, which user groups see it, and what it must never do. Decide whether it is a pipe that adds a model, a filter that inspects every message, or an action that appears as a button. Name the owner who signs off on the design. Done when the owner has a one-page specification that states the expected input, output and excluded content, so the reviewers have a fixed standard to test against.

  2. Write or obtain the function code

    Have an engineer write the function in Python, or obtain it from a source the organization has already vetted, and keep the copy in version control with its author recorded. Functions run arbitrary Python inside the Open WebUI server, so treat the code as privileged software. Done when the code matches the specification and has a named author and a single commit or artifact that can be referenced later.

  3. Review the code in a non-production instance

    Import the function into a separate Open WebUI instance that has no production data, connected identity or production model credentials. A second engineer reads the code for outbound network calls, file system access, credential handling, logging of user content and dependencies. Done when the reviewer has written findings, each finding is fixed or accepted by the owner, and the reviewed commit is identified.

  4. Test with representative prompts and files

    Run the function against a fixed set of prompts and files that reflect real use, including ones that should trigger it and ones that should not. For a redaction filter, confirm that test content containing sample identifiers is altered as intended and that ordinary text passes unchanged. For an action, confirm the output and any side effects. Done when results are recorded for every test case, and any unexpected alteration or failure has a documented fix and a rerun.

  5. Record the approved version

    Store the approved code, its commit reference, the reviewer and owner names, the test cases with results, and the Open WebUI version it was tested against in your change record. Note that a later Open WebUI upgrade requires a retest. Done when someone outside the project can find the approved version and see the evidence behind the approval.

  6. Enable the function for intended users or models

    Install the approved version on production and scope it to the models or groups named in the specification, using the administration controls for function access and group permissions. Keep action buttons restricted so that admin-only actions are not offered to ordinary users. Done when a test account from an ordinary group confirms the function is absent from the interface and an admin account confirms it is present where intended.

  7. Verify that disabling removes its effect

    Disable the function and send the same test prompts again. Confirm that the redaction or policy behavior has stopped, that pipe models no longer appear, and that action buttons are gone. Re-enable it and confirm it returns as approved. Done when the disabled state is recorded with before and after results, and the team knows how to disable the function quickly if a fault appears.

Why Open WebUI functions run arbitrary Python

A function is Python code that runs inside the Open WebUI process, so it inherits everything that process can reach. The four controls below are the decisions a platform owner should settle before any function reaches a shared deployment, because each one determines who can change what runs on every user's request.

Who can install and edit functions

Installing or editing a function is effectively administrator access to the running service. A function can read message content, alter model responses and call other internal systems, so it should not be an ordinary user capability. Decide in writing which administrators may add functions, whether any role may edit existing ones, and how that matches the role-based access control groups you already run in Open WebUI. Verify it by testing with a non-admin account that the function management screens and API routes are blocked.

Secrets used by functions

Functions often need API keys for search, ticketing or internal services. Pasting those values into function settings places them in the application database, where they are visible to anyone who can open the function configuration. Agree where each secret will be stored, which team owns it, and how it is rotated on the same schedule and approval path as your other service credentials. Check that rotation does not require editing function code, and that old values stop working after a change.

Outbound calls from functions

A pipe or action that calls an external API sends data across your network boundary, and filters may forward message text to a service you did not review. Map every destination each function can reach, then compare that list with your egress rules, proxy configuration and data classification. In air-gapped or restricted networks, the function will fail at the boundary rather than at the application layer, so test each path from the production network segment. Record which data categories may leave for each destination.

Change logging and change tickets

A function change alters behavior for every user on the next request, so it needs the same traceability as a configuration or code release. Require that each install, edit or deletion references an approved change ticket, and keep a record of who made the change, when, and what code was present before and after. Store exported function source in your version control system so that a reviewed copy exists outside the running service. Confirm during an audit exercise that you can reconstruct the active code for any given date.

How to review a function before it reaches users

Every Open WebUI function should pass a written review before any user can select it, because a function is Python that runs inside the Open WebUI process with the access that process has. The review is a procedure with defined inputs and a signed outcome, not a quick look at the code. Assign one named reviewer, give them the source of the exact version to be installed, and do not accept a function that is only available as a pasted snippet with no record of where it came from.

The reviewer needs two kinds of knowledge. Security knowledge covers outbound network calls, file reads and writes, subprocess or dynamic code execution, and secrets handling. Application knowledge covers how pipes, filters and actions are called by Open WebUI, what the message and body objects contain, and which valves or user settings the function reads. A reviewer who knows Python but not the platform will miss filters that silently alter every prompt, and one who knows the platform but not Python may miss obfuscated imports. Where one person does not hold both, pair a platform engineer with a security engineer and record both names on the sign-off.

Work through the code in a fixed order. First, read every import and list the third-party packages. Second, search for outbound network calls, including HTTP clients, sockets, webhooks and calls to model providers that the function does not need. Third, check file access, especially paths outside the function's own data and anything that touches the Open WebUI data directory or database. Fourth, check logging: a filter that writes the message body to standard output or a log file copies user content into a store that may have a different retention and access model. Record each finding as pass, fail or needs a decision, with the line reference.

Test with sample data only. Build a test plan that runs the function against synthetic prompts, including prompts that contain obvious dummy identifiers so you can confirm redaction works, and prompts that try to make the function leak or skip its policy. Do not use production conversations, customer records or copies of real personal data in a test environment, because the test instance may have weaker controls and its logs will be read by people who should not see that data. Keep the test inputs and expected outputs with the review record so a later reviewer can repeat them.

Close the review with a sign-off record that names the function, its source and version or commit, the reviewer, the date, the findings and their resolution, the test results, and the approver who allowed installation. Re-review is required whenever the function's code changes, and also when any dependency it imports is updated, since a clean function can become unsafe after a package change. Ask your team to confirm how valve values changed by administrators are tracked, because a setting change can alter behavior without any code change.

What to confirm in your Open WebUI version and environment

Functions depend on details that change between Open WebUI releases and on how your deployment runs. The cards below list the limits to verify in the version you install, from hook types and scoping to replica behavior, restart state and license terms. Treat each one as a test to run on staging, not as an assumption to carry into production.

Hook and function types in your release

Pipes, filters and actions each attach to a different point in the request or response flow, and the exact hook points available depend on the release you run. List the hooks your installed version exposes and compare them with the design you plan to build. Test a simple pass-through filter and a pipe that returns a fixed response on a staging instance before you commit to a design that depends on a specific hook signature.

Scoping functions to models and groups

A policy filter that redacts data for one team but not another depends on whether a function can be limited to particular models or user groups. Confirm whether scope is set per function, per model or per group in your version. Then test that a user outside the permitted group cannot trigger the function through the web interface, the API or a shared chat link.

How replicas share function code

The scaling guide requires PostgreSQL, Redis and shared file storage for multiple replicas, but those components cover sessions, uploads and application state, not necessarily the function code itself. Confirm where function definitions are stored, whether every replica loads the same version after an edit, and how a function saved on one replica reaches the others. Run a test edit across two replicas and check the result on each.

Function state across restarts

Valves, saved settings and any state a pipe keeps in memory may behave differently after a container restart, an upgrade or the loss of one replica. Confirm which values persist in the database, which load from code at startup, and whether in-memory caches reset. Run a restart test with a live filter in place and record whether a redaction rule or model mapping still applies to the first request afterward.

License terms at your user count

The Open WebUI License, which applies from v0.6.6 (April 19, 2025), forbids altering or removing branding in deployments above 50 users in any rolling 30-day period, unless the operator holds an enterprise license or written contributor permission. Count users active in any rolling 30-day window, not only the accounts you expect to use the tool. Ask enterprise sales how licensing is quoted against an expected seat count before you add branding changes through functions.

Release notes for your version

The latest published release referenced for this page is v0.12.3, dated October 16, 2026, after v0.12.0 on October 10 and v0.11.0 in July. Hook names, scoping options and storage behavior can change between these versions, so check the release notes for the exact version you run. Record that version in your test plan and repeat the hook, scoping and restart checks after every upgrade.

Keeping functions working across Open WebUI upgrades

Every upgrade of Open WebUI is also a change to your functions, because pipes, filters and actions depend on internal interfaces that the project can change between releases. These include the shape of the request and response objects a pipe receives, the points at which a filter runs, and the event data an action button uses. Treat each enabled function as a dependency with its own test, and plan every upgrade as a change to the function set as well as to the server.

Before any production upgrade, build an inventory of every enabled function. Include global filters that apply to all models, because they are easy to forget and affect every conversation. Record each function's version and its valve settings, which are the configuration values that control its behavior. Back up the database, then upgrade a staging copy and run a fixed set of test conversations against each model. Check that filters still modify messages as intended, that pipes return complete responses, and that actions render and fire. Compare the results with a baseline captured before the upgrade. Confirm with your own environment whether all valve values survive the move.

The project's release history shows why upgrade windows need slack. According to the Open WebUI releases page on GitHub, v0.11.0 shipped in July, v0.12.0 followed on October 10, and v0.12.3 was published on October 16, 2026. Two releases within a week mean a minor version can be followed quickly by patch fixes. Avoid moving a new release into production on the day it ships, and schedule a window that leaves room for a follow-up patch. Read the release notes for every version between your current release and your target, since a function that passes on the target may fail on an intermediate version you skip.

The license change that applies from v0.6.6 onward is covered on the upgrade practice page, so review it there before you choose a target version. The licensing review and the function regression plan should happen together, because both determine which release is viable for your deployment. Record the decision and its date in the same change record as the test results, so auditors and internal reviewers can trace why a version was adopted.

Finally, keep the regression suite under change control. Store the test conversations, expected outputs and the function source in version control, and rerun the suite after any edit to a function, any change to its valves, and any change to the Python dependencies it imports. Assign an owner for each function, who signs off on its test results before the production upgrade proceeds. Without that ownership, the first failing function usually surfaces as a user complaint rather than a planned finding.

What does it cost and take to build Open WebUI functions?

How much does it cost to build Open WebUI functions?

No price applies until the scope is written, and DeployOpen does not publish a price list. A quote follows from the agreed scope, which sets the number of functions, the hooks each one uses, the policy logic, the test depth and the review process. Costs fall into two groups. One-time work covers design, coding, testing, documentation and handover. Recurring work covers keeping functions reviewed and working after platform upgrades, and it applies only if you buy ongoing support. Ask any provider to split the quote this way so you can see what recurs and who performs each task.

What determines how long an Open WebUI functions project takes?

No duration is given here because none has been established for this work, so confirm timing against your written scope. The main drivers are the number of functions, whether you need pipes, filters and actions or only some of them, how complex the policy rules are, and how many environments must be tested before release. Redaction rules that depend on your data classes take longer to pin down than a single action button. Reviewer availability often sets the pace more than coding does, so name reviewers early. Ask for milestones tied to deliverables and review dates.

Can an internal team build Open WebUI functions without outside help?

Yes, if the team has Python skills, working knowledge of Open WebUI administration and a named owner who approves changes. Functions run Python code inside the platform, so builders need to understand request handling, model routing and how a filter alters messages before they reach a model. Platform skills cover groups, access settings and how functions are enabled for users. The review owner matters as much as the coders, because someone must accept or reject each function before it reaches users. A team missing one of these skills can still start, but it should run a reviewed pilot with a small set of functions first.

What does the client need to provide before an Open WebUI functions build?

Four inputs decide whether the build can start on schedule. First, a written policy that states what the functions must enforce, such as which content is blocked, redacted or logged. Second, sample data rules that describe the data classes, example patterns and cases that must never be stored or sent to a model. Third, a test instance that matches your production Open WebUI version and connected model providers, so behavior can be checked before release. Fourth, named reviewers with authority to approve or reject code, including someone from security or compliance. Missing any of these usually adds rework, because the functions are then written against assumptions.

How is a fixed-scope Open WebUI functions engagement agreed?

Most engagements are fixed-scope, which means the scope, deliverables and timelines are agreed in writing before work starts. The written scope should list each function, its hook type, the policy it enforces, the test cases that prove it works and the review steps. It should also state what is out of scope, such as changes to the Open WebUI core or work on connected model servers. Changes after signing go through a written change request that adjusts scope, cost or timing. Ask for acceptance criteria that a reviewer can check, so both sides agree on what done means before the first line of code is written.

What makes an Open WebUI functions quote go up or down?

The quote rises with more functions, more hook types, more complex policy logic, deeper test coverage and more review rounds. It falls when the policy is already written and precise, the data rules are settled, a test instance is ready and reviewers are available on known dates. Integration with external services, such as a data loss prevention tool or a logging platform, adds design and test effort. Ongoing support adds a recurring cost that is separate from the build. When you compare quotes, check that each one lists the same functions, tests and review steps, because a lower figure often covers less work.

Who reviews Open WebUI functions after each platform upgrade?

Post-upgrade review depends on the retainer scope you agree. A retainer can include support, upgrades and continuous testing, and the written agreement should state which of these apply to your functions. Without a retainer, your internal owner must retest functions after each upgrade, for example when moving past v0.12.3, which was published on October 16, 2026. Check the release notes and run your test cases on a test instance before upgrading production. Ask any provider to confirm in writing whether re-testing after upgrades is included, how long a response is expected to take and who is responsible if a function breaks.

What security risks come with Open WebUI functions that run Python?

Because functions execute Python inside the platform, a poorly reviewed function can read or change user messages, expose secrets, call external services or log sensitive data. A filter that runs on every message affects all users, so a single error has wide reach. Typical controls include code review before enablement, least-privilege settings for who can install or edit functions, separate test and production instances, and logging of function changes. Secrets should come from a managed store rather than being written into the code. Confirm these controls against your own risk assessment and the internal policies your reviewers apply.

How DeployOpen scopes and delivers Open WebUI functions

DeployOpen treats each Open WebUI function as code that runs inside your deployment, so the work starts with a written scope and a code review before anything reaches users. We plan the pipes, filters and actions against your model providers, identity groups and policy requirements, then build, test and document them in infrastructure you control.

How we scope

  • The written scope names each pipe, filter and action, the providers and groups it touches, and its owner.
  • Scoping records which functions may change request or response data, including any redaction or policy checks they apply.
  • Fixed-scope engagements agree deliverables and timelines in writing before work starts, and ongoing support can run as a retainer.

How we build

  • Functions are written as Python with defined inputs, outputs and error handling, so behavior is reviewable line by line.
  • Outbound calls, secrets and file access are limited to what each function needs, and dependencies are pinned and reviewed.
  • Test cases run against staging models and sample conversations, covering normal requests, edge cases and blocked content.

How we hand over

  • Handover includes the source code, configuration, install steps and a record of each review decision.
  • Runbooks describe how to enable, disable and roll back each function, and who may approve a change.
  • Your team receives walkthroughs of how functions are loaded, permissioned and updated in your Open WebUI version.

How we support

  • Each function is retested before an Open WebUI upgrade reaches production, since releases may change behavior it relies on.
  • Code is re-reviewed when you add functions or change providers, identity groups or policy rules they depend on.
  • Ongoing support, upgrades and continuous testing are available as retainers, and the scope states what each one covers.

Sources and further reading

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.