diff --git a/docs/features/channels/index.md b/docs/features/channels/index.md index a7fb0f2e..e1b3e8ca 100644 --- a/docs/features/channels/index.md +++ b/docs/features/channels/index.md @@ -3,4 +3,131 @@ sidebar_position: 1000 title: "Channels" --- -Soon... +**Channels** transform Open WebUI from a personal interface into a collaborative workspace. Unlike standard "Chats"—which are isolated sessions—Channels are persistent, topic-based rooms (similar to Discord or Slack), allowing multiple users and multiple AI models to interact in a shared timeline. + +:::info Beta Feature +Channels is currently a **Beta** feature. Functionality is subject to change, and it must be explicitly enabled by an Administrator before it appears in the interface. +::: + +## Enabling Channels + +By default, the Channels feature may be hidden. An **Admin** must enable it globally for the instance. + +1. Click on your **User Profile** icon in the bottom left (or top right) corner. +2. Select **Admin Panel**. +3. Navigate to **Settings** -> **General**. +4. Locate the toggle labeled **Channels (Beta)**. +5. Toggle it **On** and click **Save**. +6. Refresh the page. The "Channels" section should now appear in the main sidebar. + +## Creating a Channel + +1. Locate the **Channels** header in the sidebar. +2. Click the **(+) Plus** icon next to the "Channels" header. +3. **Name:** Enter a channel name (e.g., `general`, `python-dev`). Spaces should get converted to hyphens. +4. **Access Control:** + * **Public:** All registered users on your Open WebUI instance can see and join this channel. + * **Private/Group Access:** Only you or users with permission can access this channel. + +## Using Channels + +To access a channel, click on an existing channel to join, or create a new one. + +### The `@mention` System + +Channels function differently than standard Chats. In a standard Chat, you select a model at the top, and it responds to every message. **In Channels, the conversation is passive by default.** + +To trigger a response, you must **tag** a specific model using the `@` symbol. + +1. Type `@` in the input box. +2. A popup list of your available models will appear. +3. Select the model you wish to speak to (e.g., `@llama3`, `@gpt-4o`). +4. Type your prompt. + +**Example:** +> **User:** `@gpt-4o` Write a Python script to scrape a website. +> +> *(GPT-4o responds with code)* +> +> **User:** `@llama3` Can you explain the code that GPT-4 just wrote? + +:::tip Multi-Model Workflows +This allows you to chain different models together in one timeline. You can use a "smart" model for reasoning and a "fast" model for formatting, all within the same context window. +::: + +### Tagging Users + +You can also use the `@` symbol to ping other human users in the channel to get their attention or direct a message to them specifically. + +1. Type `@` in the input box. +2. Select the user's name from the list. +3. **Usage:** `@admin Can you check the server logs?` + +### Linking Channels + +You can reference other channels directly within a conversation using the `#` symbol. This creates a clickable link to that channel. + +1. Type `#` in the input box. +2. Select the channel name from the list. +3. **Usage:** `Please post those screenshots in #screenshots instead.` + +:::warning Access Control +If a user **does not** have access to view a linked channel (e.g., `#admin-only`) within a channel they **do** have access to (e.g., `#general-chat`), the linked channel will appear to them as **`#Unknown`**, and clicking it will have no effect. +::: + +### Message Interactions + +Hover over any message in the timeline to access interaction options: + +* **Add Reaction:** Click the **Smiley Face** icon to add a visual emoji eaction to a message. +* **Reply:** Quotes the message within the main channel stream, linking your response to the original message while keeping it visible to everyone in the main flow. +* **Reply in Thread:** Starts a separate, nested conversation thread centered on that specific message. This allows for focused discussions without cluttering the main channel history. +* **Edit:** Click the **Pencil** icon to modify the content of your message. +* **Delete:** Click the **Trash** icon to remove the message from the channel. + +:::note +Currently, reactions are purely visual and do not influence model behavior. +::: + +### Collaboration + +If your Open WebUI instance supports multiple users: + +* **Real-time updates:** Messages appear instantly for all users currently viewing the channel. +* **Shared Context:** When a teammate asks an AI a question, the AI's response becomes part of the context for the *next* user's query. This allows teams to iterate on AI outputs together. + +## Managing Channels + +### Editing and Deleting + +To manage an existing channel: + +1. Hover over the channel name in the sidebar. +2. Click the **Gear (Edit)** icon. + +:::info +Only the Channel Creator or an Admin can delete a channel. +::: + +## Use Cases + +### 1. Team Development (`#dev-team`) + +Create a channel where developers can paste code snippets. Use `@codellama` or `@deepseek-coder` to generate solutions, while human team members comment on the logic in plain text alongside the AI. + +### 2. Roleplay & Creative Writing (`#story-mode`) + +Keep long-running story contexts alive indefinitely without them getting buried in your personal chat history. Switch between different "Character" models (using Modelfiles) within the same story thread to create multi-character dialogues. + +### 3. Project Knowledge Base (`#marketing-strategy`) + +Use a channel as a persistent "War Room" for a specific project. Humans can discuss ideas and paste links freely. When a decision is needed, tag an AI to process the conversation history. + +* *Example:* "Users discuss a marketing plan for 20 messages. Then, a user types: `@gpt-4o` Read the conversation above and create a bulleted list of the action items we just discussed." + +--- + +:::warning +**Privacy Note** +Remember that **Public Channels** are visible to everyone on your instance. Do not share API keys, passwords, or sensitive personal data in public channels. +::: diff --git a/docs/features/image-generation-and-editing/gemini.md b/docs/features/image-generation-and-editing/gemini.md index ae0c5b75..58764f79 100644 --- a/docs/features/image-generation-and-editing/gemini.md +++ b/docs/features/image-generation-and-editing/gemini.md @@ -14,6 +14,14 @@ Open WebUI also supports image generation through the **Google AI Studio API** a 1. Obtain an [API key](https://aistudio.google.com/api-keys) from Google AI Studio. 2. You may need to create a project and enable the `Generative Language API` in addition to adding billing information. +:::warning +If you are utilizing a free API key, it is vital to have a payment method on file. The absence of a valid payment method is a frequent cause of errors during the setup process. +::: + +:::tip +Alternatively, if you are using Vertex AI, you can create an API key in Google Cloud instead of a service account. This key will function correctly, provided it is assigned the appropriate permissions. +::: + ### Configuring Open WebUI 1. In Open WebUI, navigate to the **Admin Panel** > **Settings** > **Images** menu. @@ -23,6 +31,28 @@ Open WebUI also supports image generation through the **Google AI Studio API** a 5. Enter the model you wish to use from these [available models](https://ai.google.dev/gemini-api/docs/imagen#model-versions). 6. Set the image size to one of the available [image sizes](https://ai.google.dev/gemini-api/docs/image-generation#aspect_ratios). +### Example Minimal Setup + +One minimalistic working setup for Gemini can look like this: + +#### Create Image + +- **Create Image Model**: `gemini-2.5-flash-image` +- **Image Size**: `2816x1536` +- **Image Prompt Generation**: on +- **Image Generation Engine**: `Gemini` +- **Gemini Base URL**: `https://generativelanguage.googleapis.com/v1beta` +- **Gemini API Key**: Enter your API Key +- **Gemini Endpoint Method**: `generateContent` + +#### Edit Image + +- **Image Edit Engine**: `Gemini` +- **Model**: `gemini-2.5-flash-image` +- **Image Size**: (can be left empty) +- **Gemini Base URL**: `https://generativelanguage.googleapis.com/v1beta` +- **Gemini API Key**: Enter your API Key + ![Screenshot of the Open WebUI Images settings page with Gemini selected and the API key, model, and image size fields highlighted.](/images/image-generation-and-editing/gemini-settings.png) :::info @@ -65,4 +95,4 @@ Image generation with a LiteLLM proxy using Gemini or Imagen endpoints is suppor To find your LiteLLM connection information, navigate to the **Admin Panel** > **Settings** > **Connections** menu. Your connection information will be listed under the Gemini API connection. -::: \ No newline at end of file +::: diff --git a/docs/features/interface/banners.md b/docs/features/interface/banners.md index 41f67397..2ce4e403 100644 --- a/docs/features/interface/banners.md +++ b/docs/features/interface/banners.md @@ -62,10 +62,10 @@ Each banner object in the JSON list has the following properties: - `id` (string, required): A unique identifier for the banner. This is used to track which banners a user has dismissed. - `type` (string, required): The style of the banner. Must be one of `info`, `success`, `warning`, or `error`. -- `title` (string, required): The title text displayed on the banner. +- `title` (string, optional): The title text displayed on the banner. - `content` (string, required): The main message of the banner. - `dismissible` (boolean, required): Determines if the user can close the banner. `true` means it can be dismissed; `false` means it cannot. -- `timestamp` (integer, optional): **Note:** While this field is present in the configuration, it is not currently used by the frontend. The timestamp does not affect whether a banner is displayed or not. +- `timestamp` (integer, required): **Note:** While this field is present in the configuration, it is not currently used by the frontend. The timestamp does not affect whether a banner is displayed or not. ## Troubleshooting diff --git a/docs/features/notes.md b/docs/features/notes.md new file mode 100644 index 00000000..1bc77d3f --- /dev/null +++ b/docs/features/notes.md @@ -0,0 +1,162 @@ +--- +sidebar_position: 1300 +title: "Notes" +--- + +The **Notes** feature in Open WebUI provides a dedicated workspace for content creation and knowledge management. While normal chats within Open WebUI preserves your linear conversations, **Notes** allow you to curate specific content, such as long-form drafts or coding cheatsheets that exists independently of any single conversation. These notes can be written and enhanced using your LLMs and seamlessly injected into new chats as context. + +## The Note Editor + +The Notes interface is a full-featured writing environment that supports Markdown and Rich Text. + +### Floating Formatting Toolbar + +Notes utilizes a context-aware **Floating Toolbar** for formatting, rather than a static bar at the top of the screen. + +* **Click on empty space:** The toolbar will appear at your cursor location, allowing you to start new elements like Headers or Lists. +* **Double-click text:** Highlighting or double-clicking existing text summons the toolbar to apply styling options. + +**Toolbar Options:** + +* **Headers:** `H1`, `H2`, `H3` for document structure. +* **Lists:** Bullet points (`·`) and Numbered lists (`1.`). +* **Task Lists:** Interactive checkboxes (`☑`) for to-do lists. +* **Styling:** **Bold**, *Italic*, Underline, and ~~Strikethrough~~. +* **Code:** Inline code formatting ``. + +While this toolbar is native to the Notes workspace, it can also be enabled for standard Chats. + +:::info To see this toolbar in your main chat input: + +1. Go to **Settings > Interface**. +2. Toggle **Rich Text Input for Chat** to ON. +3. Toggle **Show Formatting Toolbar** to ON. + +::: + +### Input Tools & Metrics + +* **Metrics:** The top header displays real-time **Word** and **Character** counts, useful for drafting content with length constraints. +* **Voice Dictation:** Click the **Microphone** icon (bottom left) to dictate text directly into the note using speech-to-text. + +--- + +## AI Integration + +LLMs are directly integrated with your notes, turning the editor into an AI-assisted workspace. Click the **AI (Sparkle/Star)** button at the bottom right of the screen to access these features. + +### 1. Enhance + +The **Enhance** feature allows you to use AI as an in-place editor. + +1. Highlight a specific section of text (or select nothing to target the whole note). +2. Click **Enhance**. +3. The LLM (selected in the Note's Controls) will rewrite your text directly in the editor with enhancement in mind. + +:::info Custom Control +If you need a specific style or tone (e.g., "Rewrite this to be more professional"), use the **Chat** sidebar instead: + +1. Select your text. +2. Click the **Chat** button. +3. Enable the **Edit** toggle if you need to modify the context manually. +4. Instruct the AI to rewrite the selection according to your specific needs. +::: + +### 2. Chat (Sidebar) + +The **Chat** button opens a dedicated sidebar conversation focused specifically on the note's content. This is a "Chat with Data" mode. + +* You can ask the AI to summarize the note, extract specific data, or critique your writing. +* **Edit Toggle:** Inside the chat sidebar, there is an **Edit** toggle. This allows you to manually modify the highlighted context sent to the LLM *before* you press send, giving you granular control over the query. + +### Undo / Redo + +The **Undo/Redo** arrows (top right) track all changes. Crucially, this includes changes made by the AI. If the `Enhance` feature produces a result you dislike, you can simply click Undo to revert to your original text. + +--- + +## Using Notes in Chat + +You can inject the content of your Notes into standard chat sessions to provide context to the AI. + +### How to Attach a Note + +1. Go to the main **Chat Input** bar. +2. Click the **`+` (More)** button. +3. Select **Attach Notes**. +4. Choose the desired note(s) from the list. + +The full content of the note will be loaded into the context window for that conversation. + +--- + +## Management & Sharing + +Open WebUI provides several ways to export and manage your notes via the **More (`...`)** menu in the top right corner. + +### Download + +You can export your notes in standard formats: + +* **Plain text (.txt):** The raw text content. +* **Plain text (.md):** Preserves Markdown structure (headers, code blocks, etc.). +* **PDF document (.pdf):** A rendered document with visual formatting applied. + +### Sharing + +* **Copy Link:** Copies the direct URL of the specific Note to your clipboard (useful for returning to the note later). +* **Copy to Clipboard:** Copies the entire *contents* (text) of the note to your clipboard for pasting into other applications. + +### Delete + +You can delete notes permanently from two locations: + +1. **From the Notes Dashboard:** Click the **More (`...`)** button on the individual note card in the list view and select **Delete**. +2. **From the Editor:** While inside an open note, click the **More (`...`)** button in the top right corner of the screen and select **Delete**. + +--- + +## Use Cases + +While Open WebUI has dedicated **Prompts** (for slash commands) and **Documents** (for RAG), **Notes** serves a unique middle ground for iterative work and precise control. + +### 1. The "Living" Draft (Iterative Writing) + +Unlike a static prompt or an uploaded document, a Note is a workspace. + +* **Scenario:** You are writing a blog post or documentation. You draft the outline, use the **Enhance** tool to expand bullet points into paragraphs, and use the **Chat** sidebar to brainstorm titles. The Note becomes the final product, rather than just a reference. + +### 2. High-Fidelity Code Staging + +RAG (Documents) uses vector search, which is probabilistic—it might miss a crucial line of code in a large file. + +* **Scenario:** You have three specific functions from different files that you need to refactor together. Copy/pasting them into the chat is messy. Instead, paste them into a Note. When you attach the Note, you guarantee the LLM sees **100%** of that code exactly as you arranged it, without the "fuzzy" guessing of RAG. + +### 3. Transient Data Sanitization + +Sometimes you need to analyze data (like error logs) but need to clean it first. + +* **Scenario:** You have a server error log containing sensitive API keys. Paste the log into a Note, manually delete the keys or use **Enhance** to "Anonymize this text", and *then* attach the sanitized Note to a chat to ask the AI for a solution. This prevents leaking sensitive data into your main chat history or embeddings. + +--- + +## Limitations + +It is important to understand how Notes function technically compared to other features like "Documents". + +### Context Injection vs. Vector Search + +* **Documents (RAG):** When you upload a file to "Documents". the system uses vector search to find relevant *chunks* of the file based on your query. It is probabilistic. +* **Notes (Deterministic):** When you attach a Note, you are performing **manual context injection**. The system does not guess; it forces the LLM to read the *entire* note. This guarantees the model sees the information, but it requires you to select the correct note manually. + +### Context Window Usage + +Because attaching a Note injects the full text into the chat: + +* If you have a very large note (e.g., 10,000 words) and attach it to a model with a small context window (e.g., 8k tokens), the model may run out of memory or "forget" the beginning of your conversation. + +### Read-Only Context + +When you attach a Note to a standard chat, it is **read-only** for the AI. + +* The AI in the main chat cannot automatically update the text inside your Note file. If the AI suggests changes to your project, you must manually copy those changes back into the Note editor. diff --git a/docs/features/plugin/tools/development.mdx b/docs/features/plugin/tools/development.mdx index 5bfe2a2a..1ae40d7c 100644 --- a/docs/features/plugin/tools/development.mdx +++ b/docs/features/plugin/tools/development.mdx @@ -1627,6 +1627,18 @@ More info about the header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Re In the Tools definition metadata you can specify custom packages. When you click `Save` the line will be parsed and `pip install` will be run on all requirements at once. +:::warning + +**🚨 CRITICAL WARNING: Potential for Package Version Conflicts** + +When multiple tools define different versions of the same package (e.g., Tool A requires `pandas==1.5.0` and Tool B requires `pandas==2.0.0`), Open WebUI installs them in a non-deterministic order. This can lead to unpredictable behavior and break one or more of your tools. + +**The only robust solution to this problem is to use an OpenAPI tool server.** + +We strongly recommend using an [OpenAPI tool server](/features/plugin/tools/openapi-servers/) to avoid these dependency conflicts. + +::: + Keep in mind that as pip is used in the same process as Open WebUI, the UI will be completely unresponsive during the installation. No measures are taken to handle package conflicts with Open WebUI's requirements. That means that specifying requirements can break Open WebUI if you're not careful. You might be able to work around this by specifying `open-webui` itself as a requirement. diff --git a/docs/features/workspace/models.md b/docs/features/workspace/models.md index f14d49e4..78eab8cd 100644 --- a/docs/features/workspace/models.md +++ b/docs/features/workspace/models.md @@ -1,56 +1,131 @@ --- sidebar_position: 0 title: "Models" +sidebar_label: "Models" --- -The `Models` section of the `Workspace` within Open WebUI is a powerful tool that allows you to create and manage custom models tailored to specific purposes. This section serves as a central hub for all your modelfiles, providing a range of features to edit, clone, share, export, and hide your models. +The `Models` section of the `Workspace` within Open WebUI is a powerful tool that allows you to create and manage custom models tailored to specific purposes. -### Modelfile Management +While backends like Ollama have their own `Modelfile` format, Open WebUI employs a robust internal **Preset System**. This allows you to "wrap" any model (including GPT-4, Claude, or local Llama 3) to bind specific **System Prompts**, **Knowledge Collections**, **Tools**, and **Dynamic Variables** to it. -From the `Models` section, you can perform the following actions on your modelfiles: +This section serves as a central hub for all your models, providing a range of features to edit, clone, share, export, and hide your custom agents. -- **Edit**: Dive into the details of your modelfile and make changes to its character and more. -- **Clone**: Create a copy of a modelfile, which will be appended with `-clone` to the cloned `Model ID`. Note that you cannot clone a base model; you must create a model first before cloning it. -- **Share**: Share your modelfile with the Open WebUI community by clicking the `Share` button, which will redirect you to [https://openwebui.com/models/create](https://openwebui.com/models/create). -- **Export**: Download the modelfile's `.json` export to your PC. -- **Hide**: Hide the modelfile from the model selector dropdown within chats. +## Creating and Editing Models -### Modelfile Editing +When you create a new model or edit an existing one, you are building a configuration wrapper around a "Base Model". +To access the model configuration interface, you have two primary entry points from the main Models list: -When editing a modelfile, you can customize the following settings: +1. **New Model**: Click the **+ New Model** button in the top-right corner. This opens a blank configuration page to create a preset from scratch. +2. **Edit Model**: Click the ellipsis (**...**) on an existing model card and select **Edit**. This opens the configuration page pre-filled with that model's current settings. -- **Avatar Photo**: Upload an avatar photo to represent your modelfile. -- **Model Name**: Change the name of your modelfile. -- **System Prompt**: Provide an optional system prompt for your modelfile. -- **Model Parameters**: Adjust the parameters of your modelfile. -- **Prompt Suggestions**: Add prompts that will be displayed on a fresh new chat page. -- **Documents**: Add documents to the modelfile (always RAG [Retrieval Augmented Generation]). -- **Tools, Filters, and Actions**: Select the tools, filters, and actions that will be available to the modelfile. -- **Vision**: Toggle to enable `Vision` for multi-modals. -- **Tags**: Add tags to the modelfile that will be displayed beside the model name in the model selector dropdown. +Both actions lead to the same Model Builder interface, where you can configure the settings below. -### Model Discovery and Import/Export +### Core Configuration -The `Models` section also includes features for importing and exporting models: +- **Avatar Photo**: Upload a custom image to represent your model in the chat interface. +- **Model Name & ID**: The display name and unique identifier for your custom preset (e.g., "Python Tutor" or "Meeting Summarizer"). +- **Base Model**: The actual model beneath the hood that powers the agent. You can choose *any* model connected to Open WebUI. You can create a custom preset for `gpt-4o` just as easily as `llama3`. +- **Description**: A short summary of what the model does. +- **Tags**: Add tags to organize models in the selector dropdown. +- **Visibility & Groups**: + - **Private**: Restricts access to specific users or groups. + - **Groups Selector**: Use the dropdown to grant access to specific teams (e.g., "Admins", "Developers") without making the model public to everyone. -- **Import Models**: Use this button to import models from a .json file or other sources. -- **Export Models**: Use this button to export all your modelfiles in a single .json file. +### System Prompt & Dynamic Variables -To download models, navigate to the **Ollama Settings** in the Connections tab. -Alternatively, you can also download models directly by typing a command like `ollama run hf.co/[model creator]/[model name]` in the model selection dropdown. -This action will create a button labeled "Pull [Model Name]" for downloading. +The **System Prompt** defines the behavior and persona of the model. Unlike standard prompts, Open WebUI supports **Dynamic Variable Injection** using Jinja2-style placeholders. This allows the model to be aware of time, date, and user details. -### Model Switching +| Variable | Description | Output Example | +| :--- | :--- | :--- | +| `{{ CURRENT_DATE }}` | Injects today's date (YYYY-MM-DD). | `2024-10-27` | +| `{{ CURRENT_TIME }}` | Injects the current time (24hr). | `14:30:05` | +| `{{ USER_NAME }}` | The display name of the logged-in user. | `Admin` | - **Example**: Switching between **Mistral**, **LLaVA**, and **GPT-3.5** in a Multi-Stage Task +**Example System Prompt:** + +``` +You are a helpful assistant for {{ USER_NAME }}. +The current date is {{ CURRENT_DATE }}. +``` + +### Advanced Parameters + +Clicking **Show** on **Advanced Params** allows you to fine-tune the inference generation. + +- **Stop Sequences**: A powerful feature that tells the model to force-stop generating text when it hits specific characters. This is vital for roleplay or coding models to prevent them from hallucinating both sides of a conversation. + - *Format:* Enter the string (e.g., `<|end_of_text|>`, `User:`) and press `Enter`. +- **Temperature, Top P, etc.**: Adjust the creativity and determinism of the model. + +### Prompt Suggestions + +**Prompt Suggestions** are clickable "starter chips" that appear above the input bar when a user opens a fresh chat with this model. These are vital for onboarding users to specialized agents. + +- **Purpose**: To guide the user on what the model is capable of or to provide one-click shortcuts for common tasks. +- **How to add**: Type a phrase (e.g., "Summarize this text") and click the **+** button. You can add multiple suggestions. +- **Example**: For a "Python Tutor" model, you might add: + - *"Explain this code step-by-step"* + - *"Find bugs in the following script"* + - *"Write a Unit Test for this function"* + +### Capabilities, Binding & Defaults + +You can transform a generic model into a specialized agent by toggling specific capabilities and binding resources. + +- **Knowledge**: Instead of manually selecting documents for every chat, you can bind a specific knowledgebase **Collection** or **File** to this model. Whenever this model is selected, RAG (Retrieval Augmented Generation) is automatically active for those specific files. +- **Tools**: Force specific tools to be enabled by default (e.g., always enable the **Calculator** tool for a "Math Bot"). +- **Filters**: Attach specific Pipelines/Filters (e.g., a Profanity Filter or PII Redaction script) to run exclusively on this model. +- **Actions**: Attach actionable scripts like `Add to Memories` or `Button` triggers. +- **Capabilities**: Granularly control what the model is allowed to do: + - **Vision**: Toggle to enable image analysis capabilities (requires a vision-capable Base Model). + - **Web Search**: Enable the model to access the configured search provider (e.g., Google, SearxNG) for real-time information. + - **File Upload**: Allow users to upload files to this model. + - **Code Interpreter**: Enable Python code execution. + - **Image Generation**: Enable image generation integration. + - **Usage / Citations**: Toggle usage tracking or source citations. + - **Status Updates**: Show visible progress steps in the chat UI (e.g., "Searching web...", "Reading file...") during generation. Useful for slower, complex tasks. +- **Default Features**: Force specific toggles (like Web Search) to be "On" immediately when a user starts a chat with this model. + +## Model Management + +From the main list view in the `Models` section, click the ellipsis (`...`) next to any model to perform actions: + +- **Edit**: Open the configuration panel for this model. +- **Hide**: Hide the model from the model selector dropdown within chats (useful for deprecated models) without deleting it. +- **Clone**: Create a copy of a model configuration, which will be appended with `-clone`. + +:::note +You cannot clone a raw Base Model directly; you must create a custom model first before cloning it. +::: + +- **Copy Link**: Copies a direct URL to the model settings. +- **Export**: Download the model configuration as a `.json` file. +- **Share**: Share your model configuration with the Open WebUI community by clicking the `Share` button (redirects to [openwebui.com](https://openwebui.com/models/create)). +- **Delete**: Permanently remove the preset. + +### Import and Export + +- **Import Models**: Import models from a `.json` file or from Open WebUI community links. +- **Export Models**: Export all your custom model configurations into a single `.json` file for backup or migration. +- **Discover a Model**: At the bottom of the page, you can explore and download presets made by the Open WebUI community. + +:::info Downloading Raw Models +To download new raw Base Models (like `Llama-3.2-3B-Instruct-GGUF:Q8_0` or `Mistral-7B-Instruct-v0.2-GGUF:Q4_K_M`), navigate to **Settings > Connections > Ollama**. Alternatively, type `ollama run hf.co/{username}/{repository}:{quantization}` in the model selector to pull directly from Hugging Face. This action will create a button within the model selector labeled "Pull [Model Name]" that will begin downloading the model from its source once clicked. +::: + +## Model Switching in Chat + +Open WebUI allows for dynamic model switching and parallel inference within a chat session. + +**Example**: Switching between **Mistral**, **LLaVA**, and **GPT-4** in a Multi-Stage Task. - **Scenario**: A multi-stage conversation involves different task types, such as starting with a simple FAQ, interpreting an image, and then generating a creative response. - **Reason for Switching**: The user can leverage each model's specific strengths for each stage: - **Mistral** for general questions to reduce computation time and costs. - **LLaVA** for visual tasks to gain insights from image-based data. - - **GPT-3.5** for generating more sophisticated and nuanced language output. + - **GPT-4** for generating more sophisticated and nuanced language output. - **Process**: The user switches between models, depending on the task type, to maximize efficiency and response quality. - **How To**: - 1. **Select the Model**: Within the chat interface, select the desired models from the model switcher dropdown. You can select up to two models simultaneously, and both responses will be generated. You can then navigate between them by using the back and forth arrows. - 2. **Context Preservation**: Open WebUI retains the conversation context across model switches, allowing smooth transitions. +**How To:** + +1. **Select the Model**: Within the chat interface, select the desired models from the model switcher dropdown. You can select up to two models simultaneously, and both responses will be generated. You can then navigate between them by using the back and forth arrows. +2. **Context Preservation**: Open WebUI retains the conversation context across model switches, allowing smooth transitions. diff --git a/docs/getting-started/env-configuration.mdx b/docs/getting-started/env-configuration.mdx index 9da3c947..47057126 100644 --- a/docs/getting-started/env-configuration.mdx +++ b/docs/getting-started/env-configuration.mdx @@ -3220,6 +3220,27 @@ Strictly return in JSON format: ### Gemini +:::tip + +One minimalistic working setup for Gemini can look like this: + +- Create Image + - Model: `gemini-2.5-flash-image` + - Image Size: `2816x1536` + - Image Prompt Generation: on + - Image Generation Engine: `Gemini` + - Gemini Base URL: `https://generativelanguage.googleapis.com/v1beta` + - Gemini API Key: Enter your API Key + - Gemini Endpoint Method: `generateContent` +- Edit Image + - Image Edit Engine: `Gemini` + - Model: `gemini-2.5-flash-image` + - Image Size: (can be left empty) + - Gemini Base URL: `https://generativelanguage.googleapis.com/v1beta` + - Gemini API Key: Enter your API Key + +::: + #### Image Generation ##### `IMAGES_GEMINI_API_BASE_URL` diff --git a/docs/license.mdx b/docs/license.mdx index 9a5a11d7..9a5c1eab 100644 --- a/docs/license.mdx +++ b/docs/license.mdx @@ -9,25 +9,44 @@ import { TopBanners } from "@site/src/components/TopBanners"; ## Keeping Open WebUI Free, Fair, and Sustainable -If you've been following Open WebUI’s journey, you know our mission has always been: empower everyone with cutting-edge AI, no strings attached. Open WebUI is an independent project, built and maintained by a small, dedicated core team. Over the last year, we’ve poured **countless hours, late nights, and real financial resources** into making this tool world-class—**and we trust our users enough to keep it free and open**. -But with Open WebUI’s rapid growth and success, we started seeing a pattern we couldn’t ignore: **bad actors taking our work, stripping the branding, selling it as their own, and giving nothing back.** That’s not open source—that’s exploitation. When organizations profit off our efforts, misrepresent our work, and box out the real community, it threatens the very spirit of what we’re trying to build. +:::tip +**Here's the TL;DR:** -That’s why we’ve acted: **with Open WebUI v0.6.6+ (April 2025), our license remains permissive, but now adds a fair-use branding protection clause**. This update does **not** impact genuine users, contributors, or anyone who simply wants to use the software in good faith. If you’re a real contributor, a small team, or an organization adopting Open WebUI for internal use—**nothing changes for you**. This change **only affects those who intend to exploit the project’s goodwill**: stripping away its identity, falsely representing it, and never giving back. +To keep Open WebUI thriving for the long term, we’ve introduced a **lightweight branding protection clause** that helps us sustain the project while ensuring **every user** continues to benefit from rapid innovation **without resorting to gated features or paywalled functionality**. Branding requirements **only apply to larger deployments (50+ users)**. Deployments with 50 or fewer users may fully rebrand if they choose. + +As a small, independent team building mission-critical AI tooling, we rely on fair attribution to **support ongoing development, security, and quality**, all without restricting real users, contributors, or businesses who use Open WebUI responsibly. + +And for those who prefer a fully permissive path, **[anyone can still fork from v0.6.5 with zero restrictions and build from there however they choose](https://github.com/open-webui/open-webui/blob/main/LICENSE_HISTORY)**. It’s a simple, balanced step that protects the ecosystem, strengthens the project, and **ensures we can sustain our mission of empowering everyone**. +::: + + + +If you've been following Open WebUI’s journey, you know our mission has always been: empower everyone with cutting-edge AI, no strings attached. Open WebUI is an independent project, built and maintained by a small, dedicated core team. Over the last year, we’ve poured **countless hours, late nights, and real financial resources** into making this tool world-class, **and we trust our users enough to keep it free and open**. + +But with Open WebUI’s rapid growth and success, we started seeing a pattern we couldn’t ignore: **bad actors taking our work, stripping the branding, selling it as their own, and giving nothing back.** That’s not open source, that’s exploitation. When organizations profit off our efforts, misrepresent our work, and box out the real community, it threatens the very spirit of what we’re trying to build. + +That’s why we’ve acted: **with Open WebUI v0.6.6+ (April 2025), our license remains permissive, but now adds a fair-use branding protection clause**. This update does **not** impact genuine users, contributors, or anyone who simply wants to use the software in good faith. If you’re a real contributor, a small team, or an organization adopting Open WebUI for internal use, **nothing changes for you**. This change **only affects those who intend to exploit the project’s goodwill**: stripping away its identity, falsely representing it, and never giving back. In plain terms: - **Open WebUI is still free and permissively licensed.** -- **You can still use, modify, and redistribute it for any purpose—just don’t remove or alter our branding unless you meet one of three clear criteria (see below).** +- **You can still use, modify, and redistribute it for any purpose, just don’t remove or alter our branding unless you meet one of three clear criteria (see below).** - **The original BSD-3 license continues to apply for all contributions made to the codebase up to and including release v0.6.5.** -We remain committed to transparency, openness, and supporting everyone—from hobbyists to enterprise. This is a “semi-copyleft” measure: we protect just the branding, to keep the project honest and sustainable; everything else is as free as you expect from open-source BSD. +We remain committed to transparency, openness, and supporting everyone, from hobbyists to enterprise. This is a “semi-copyleft” measure: we protect just the branding, to keep the project honest and sustainable; everything else is as free as you expect from open-source BSD. -We take your trust seriously. We want Open WebUI to stay **empowering and accessible**, **driven by real community spirit**—not gated, not locked-in, not co-opted by bad actors. We’re a small, lean team—but we care deeply about giving all our users the best experience and keeping our ecosystem clean and fair. **Thank you for supporting us, and for caring about the future of open AI.** +We take your trust seriously. We want Open WebUI to stay **empowering and accessible**, **driven by real community spirit**, not gated, not locked-in, not co-opted by bad actors. We’re a small, lean team, but we care deeply about giving all our users the best experience and keeping our ecosystem clean and fair. **Thank you for supporting us, and for caring about the future of open AI.** --- ## Open WebUI License: Explained +:::tip + +**TL;DR: Want to use Open WebUI for free? Just keep the branding.** + +::: + **Effective with v0.6.6 (April 19, 2025):** Open WebUI’s license now: @@ -42,45 +61,39 @@ Open WebUI’s license now: - **All code submitted/merged to the codebase up to and including release v0.6.5 remains BSD-3 licensed** (no branding requirement applies for that legacy code). -:::tip - -**TL;DR: Want to use Open WebUI for free? Just keep the branding.** - -::: - -This is not legal advice—refer to the full [LICENSE](https://github.com/open-webui/open-webui/blob/main/LICENSE) for exact language. +This is not legal advice, refer to the full [LICENSE](https://github.com/open-webui/open-webui/blob/main/LICENSE) for exact language. --- ## Frequently Asked Questions (FAQ) -### **1. Can I still use Open WebUI freely for personal projects, businesses, or teaching?** +### 1. Can I still use Open WebUI freely for personal projects, businesses, or teaching? **Yes!** Just don’t remove or alter the “Open WebUI” branding, and you’re covered by the very permissive license with our light branding protection. Just don’t pretend your distribution is “official” from us if it isn’t. -### **2. I want to fork Open WebUI and change the UI to fit my use case. Is that allowed?** +### 2. I want to fork Open WebUI and change the UI to fit my use case. Is that allowed? -**Absolutely.** You can change, extend, and customize the code or the user interface for your organization’s needs—but you’re required to keep “Open WebUI” branding visible *unless*: +**Absolutely.** You can change, extend, and customize the code or the user interface for your organization’s needs, but you’re required to keep “Open WebUI” branding visible *unless*: - Your deployment is for **50 or fewer users in any 30-day window**; or - You’re a substantive project contributor **and** have received written permission to adjust branding for an internal deployment; or - You’ve secured an **enterprise license** with us that explicitly allows branding changes. If you remove or modify branding without meeting these criteria, that’s a material breach of the license. -### **3. Aren’t these clauses contradictory? BSD-3 says you can’t use your name to promote forks, but also requires branding?!** +### 3. Aren’t these clauses contradictory? BSD-3 says you can’t use your name to promote forks, but also requires branding?! -**Good question!** Our branding requirement means you **mayn’t falsely promote** your fork as “endorsed by” or “officially part of” Open WebUI (BSD-3-Clause, section 3)—but it *must* still acknowledge its origins for transparency. +**Good question!** Our branding requirement means you **mayn’t falsely promote** your fork as “endorsed by” or “officially part of” Open WebUI (BSD-3-Clause, section 3), but it *must* still acknowledge its origins for transparency. - **You must keep “Open WebUI” branding visible (unless you qualify as detailed above).** - **You must clarify (in your documentation/about/landing) that it’s a fork, not the official version.** - **You may not imply endorsement by us** for your derivative. -This isn’t contradictory—think of it as “must acknowledge, but not misrepresent.” +This isn’t contradictory, think of it as “must acknowledge, but not misrepresent.” Your compliance **both** (1) *retains our copyright info/branding* and (2) *avoids false advertising*. -### **4. Why did you add this clause? Isn’t open source supposed to be fully free?** +### 4. Why did you add this clause? Isn’t open source supposed to be fully free? -We believe **open source thrives on trust, transparency, and mutual respect**. Open source is about sharing knowledge, empowering others, and building together—but it’s not about letting a handful of bad actors mislead and exploit the community for pure personal gain. +We believe **open source thrives on trust, transparency, and mutual respect**. Open source is about sharing knowledge, empowering others, and building together, but it’s not about letting a handful of bad actors mislead and exploit the community for pure personal gain. Here’s what we’ve actually seen, and why we had to act: @@ -88,38 +101,38 @@ Here’s what we’ve actually seen, and why we had to act: - They market these rebranded solutions in commercial offerings to customers and organizations, sometimes at a massive markup. - In some cases, they even go further by intentionally obscuring the fact that Open WebUI is available for free, so that they can charge unsuspecting users outrageous fees for something that should be accessible to everyone. - Some go so far as to misleadingly imply their users are dealing with the people behind the original Open WebUI, creating confusion and false expectations about who maintains the software, where it comes from, and what kind of support is available. -- When things break or customers need feature updates, these same groups turn around and *demand support from us—the original developers—**while never having contributed a line of code, a helpful bug report, documentation, or any resources back to the project.*** +- When things break or customers need feature updates, these same groups turn around and *demand support from us, the original developers, **while never having contributed a line of code, a helpful bug report, documentation, or any resources back to the project.*** - **In effect, they extract value from the collective effort of independent contributors, misrepresent their role in the project, and give nothing back to the ecosystem or its sustainability.** Let’s be clear: -- **Not everyone who doesn’t contribute is a bad actor.** Using Open WebUI “as is,” for internal or not-for-profit ways, is absolutely fine. We expect most users will never contribute code, and that’s totally fair—that’s how permissive open source works! -- **But there is a line:** When you start misleading your users about what you’re offering, exploiting the goodwill and energy of independent maintainers, and taking more than you give (especially when making money and actively denying credit), **that’s not collaboration—that’s extraction and misrepresentation.** -- **This is especially demoralizing for us as a small, fully independent and self-funded team**, working incredibly hard to keep Open WebUI both free and at the leading edge of AI. The reality is that open source isn’t “free” for the people building it: it takes huge time investments, personal sacrifice, ongoing infrastructure costs, and dedication. When our goodwill is taken advantage of, it directly threatens our ability to keep this project alive and thriving for everyone else. +- **Not everyone who doesn’t contribute is a bad actor.** Using Open WebUI “as is,” for internal or not-for-profit ways, is absolutely fine. We expect most users will never contribute code, and that’s totally fair, that’s how permissive open source works! +- **But there is a line:** When you start misleading your users about what you’re offering, exploiting the goodwill and energy of independent maintainers, and taking more than you give (especially when making money and actively denying credit), **that’s not collaboration, that’s extraction and misrepresentation.** +- The reality is that open source isn’t “free” for the people building it: it takes huge time investments, personal sacrifice, ongoing infrastructure costs, and dedication. When our goodwill is taken advantage of, it directly threatens our ability to keep this project alive and thriving for everyone else. **That’s why** the new branding clause exists. It is a minimal, carefully scoped, and entirely rational measure: -- It preserves openness for genuine users and contributors—anyone can use, deploy, and even build commercial offerings as long as they respect transparency and our community’s work. -- It prevents bad-faith actors from concealing our contributions or misleading users—protecting the project’s identity, trust, and reputation. +- It preserves openness for genuine users and contributors, anyone can use, deploy, and even build commercial offerings as long as they respect transparency and our community’s work. +- It prevents bad-faith actors from concealing our contributions or misleading users, protecting the project’s identity, trust, and reputation. - **Importantly, it also incentivizes individuals and organizations to actively contribute back to Open WebUI.** When companies are required to credit and retain the original branding, it creates a virtuous cycle: they’re far more likely to participate in the project, propose improvements, submit bug fixes, contribute features, or start a conversation about open collaboration for everyone’s benefit. -- This collective approach **ensures that enhancements, security fixes, and new features are shared more openly, accelerating progress for the entire ecosystem—rather than being siloed in closed forks nobody else benefits from.** +- This collective approach **ensures that enhancements, security fixes, and new features are shared more openly, accelerating progress for the entire ecosystem, rather than being siloed in closed forks nobody else benefits from.** -We want Open WebUI to remain **free, empowering, and driven by honest spirit—protecting the project so it can serve everyone, not just those looking to exploit others’ effort for unearned gain.** The **branding protection clause targets only those edge-case exploiters**—no one else’s experience is affected. It is our genuine attempt to keep our community healthy, sustainable, and welcoming, while holding the project’s identity safe from predatory appropriation. +We want Open WebUI to remain **free, empowering, and driven by honest spirit, protecting the project so it can serve everyone, not just those looking to exploit others’ effort for unearned gain.** The **branding protection clause targets only those edge-case exploiters**, no one else’s experience is affected. It is our genuine attempt to keep our community healthy, sustainable, and welcoming, while holding the project’s identity safe from predatory appropriation. -We’re not interested in “locking down” Open WebUI. If we have to revisit the license again, we’ll do it only if truly forced by an escalation of abuse—something we hope won’t happen, because our commitment remains with the wider community. +We’re not interested in “locking down” Open WebUI. If we have to revisit the license again, we’ll do it only if truly forced by an escalation of abuse, something we hope won’t happen, because our commitment remains with the wider community. -We remain as open, reasonable, and fair as ever—and we trust the community to do the right thing. +We remain as open, reasonable, and fair as ever, and we trust the community to do the right thing. -### **5. I’m a real contributor. Do these restrictions limit my rights?** +### 5. I’m a real contributor. Do these restrictions limit my rights? **No, and here’s precisely how it works:** -- **All code contributed and merged up to and including v0.6.5 remains under the original BSD-3-Clause license—no new limitations apply.** - - *This means:* If you contributed anything before v0.6.6, you (and everyone else) retain all the original BSD-3 freedoms: use, modification, redistribution, even sublicensing—**as long as the original BSD-3 license notice remains intact. The BSD-3 license remains in effect for the entire codebase up to and including v0.6.5.** +- **All code contributed and merged up to and including v0.6.5 remains under the original BSD-3-Clause license, no new limitations apply.** + - *This means:* If you contributed anything before v0.6.6, you (and everyone else) retain all the original BSD-3 freedoms: use, modification, redistribution, even sublicensing, **as long as the original BSD-3 license notice remains intact. The BSD-3 license remains in effect for the entire codebase up to and including v0.6.5.** - **BSD-3-Clause is one of the most permissive licenses available:** You can use the code for any purpose, even commercially, change it completely, and license your derivative under whatever terms you like, as long as you preserve the BSD-3 notice. - **The new “fair-use branding” clause only applies to code contributed after v0.6.5 and released as part of v0.6.6 or later,** *and only if you sign the new CLA as part of contributing new material*. - **Importantly:** The new license with the branding protection clause is **not being retroactively applied to the entire codebase**. It is only applied to the portion of the code that we (the core team) ourselves wrote (which, with a conservative estimate, is at least 80% of the code up to v0.6.5), and everything going forward starting with v0.6.6. - - All external/community-contributed code merged before v0.6.6 remains pure BSD-3 and is not covered by the branding clause—**no retroactive relicensing or constraints** will be applied to anyone else’s past contributions. + - All external/community-contributed code merged before v0.6.6 remains pure BSD-3 and is not covered by the branding clause, **no retroactive relicensing or constraints** will be applied to anyone else’s past contributions. - Looking at the history of [contributors to Open WebUI](https://github.com/open-webui/open-webui/graphs/contributors), **at least 80% of the codebase (very conservatively) originates directly from our core team**. Even community pull requests that are merged are always *manually reviewed, edited, heavily reworked, and improved* to meet our standards before being included. Nothing is “blind-merged.” @@ -127,37 +140,35 @@ We remain as open, reasonable, and fair as ever—and we trust the community to - **If you do not like the direction the project takes or disagree with the new license terms, you are always free to fork or build upon the codebase as it existed at v0.6.5 or earlier.** Version 0.6.5 (and anything before it) remains under the original, unmodified BSD-3-Clause, giving you full flexibility to start your own fork, modify, or redistribute as you see fit under terms allowed by BSD-3. -#### **Summary for contributors:** +#### Summary for contributors: -- **Contributions committed up to v0.6.5 are BSD-3 only:** Full flexibility, full BSD-3 freedom. You can fork, relicense, rebrand your own code—anything allowed by BSD-3, provided you retain our BSD notice. +- **Contributions committed up to v0.6.5 are BSD-3 only:** Full flexibility, full BSD-3 freedom. You can fork, relicense, rebrand your own code, anything allowed by BSD-3, provided you retain our BSD notice. - **From v0.6.6 onward,** if you choose to contribute, you will agree (via CLA) to the new license terms, which include the branding protection clause for *new* contributions. -- **Legacy code you contributed remains governed by BSD-3—no changes, no retroactive restrictions.** -- **Complete flexibility to fork:** If you ever need or want to take the project in another direction without the new branding clause, use v0.6.5 or earlier as your starting point—it’s entirely your right under BSD-3. +- **Legacy code you contributed remains governed by BSD-3, no changes, no retroactive restrictions.** +- **Complete flexibility to fork:** If you ever need or want to take the project in another direction without the new branding clause, use v0.6.5 or earlier as your starting point, it’s entirely your right under BSD-3. -If in doubt, or if you have concerns about your past or future contributions, please reach out—we value every contributor and are committed to respecting your rights. +If in doubt, or if you have concerns about your past or future contributions, please reach out, we value every contributor and are committed to respecting your rights. -:::note - -**Note:** +:::info BSD-3 output/forks have **maximum flexibility**: as long as you keep the original BSD-3 notice, you can even apply your own license terms on top of your modifications or distribute them however you wish. ::: -### **6. Does this mean Open WebUI is “no longer open source”?** +### 6. Does this mean Open WebUI is “no longer open source”? -It's a great—and complicated—question, because **"open source" can mean many different things to many people**. +It's a great, and complicated, question, because **"open source" can mean many different things to many people**. -- **In the narrowest, most “by-the-book” sense—our new branding clause means Open WebUI v0.6.6+ isn’t OSI-certified "open source.”** +- **In the narrowest, most “by-the-book” sense, our new branding clause means Open WebUI v0.6.6+ isn’t OSI-certified "open source.”** - Example: The OSI would not certify licenses that require you to keep original branding. -- However, compared to what most people mean in practice — **“is the code available, can I use it, fork it, change it, build things with it, and not pay you or get a special key?”** — the answer is still a resounding **yes**. +- However, compared to what most people mean in practice , **“is the code available, can I use it, fork it, change it, build things with it, and not pay you or get a special key?”** , the answer is still a resounding **yes**. - We are far more open than most so-called “open core” projects, which often wall off features, require payments for APIs, or keep critical work private. **What does all this mean in practice for you?** - *All of the source code is public and developed in the open.* -- *You can use it, run it locally, build on it, host it for your team or business, and even charge for access—as long as you follow the simple, clearly-scoped branding condition. (And if that’s an issue, email us! There’s a path for everyone.)* -- *If you want to fork, extend, or submit PRs, the process and permissions are as open as ever—no “private enterprise fork” that fractures the community or walls off features.* +- *You can use it, run it locally, build on it, host it for your team or business, and even charge for access, as long as you follow the simple, clearly-scoped branding condition. (And if that’s an issue, email us! There’s a path for everyone.)* +- *If you want to fork, extend, or submit PRs, the process and permissions are as open as ever, no “private enterprise fork” that fractures the community or walls off features.* **Why this approach?** Some projects in our position have responded to exploitation by: @@ -166,19 +177,19 @@ Some projects in our position have responded to exploitation by: - Switching to restrictive licenses like SSPL or BSL that block nearly all serious commercial use. **We didn’t want to do that.** -We want a single, shared, public codebase where everyone—from solo hackers to enterprises—can benefit from the same core improvements, transparent development, and community fixes. +We want a single, shared, public codebase where everyone, from solo hackers to enterprises, can benefit from the same core improvements, transparent development, and community fixes. -We believe open ecosystems work best for users, contributors, and the future of AI. If you ever need more permissions or have questions, just talk to us—we’re committed to finding solutions that respect our contributors and community. +We believe open ecosystems work best for users, contributors, and the future of AI. If you ever need more permissions or have questions, just talk to us, we’re committed to finding solutions that respect our contributors and community. -### **7. What if I want to white-label or deeply customize Open WebUI for my enterprise?** +### 7. What if I want to white-label or deeply customize Open WebUI for my enterprise? Contact us! We offer **proprietary and enterprise licenses** allowing fully custom branding, priority support, feature requests, and more. [Click here](https://docs.openwebui.com/enterprise) for details. -### **8. What if I already deployed Open WebUI before v0.6.6?** +### 8. What if I already deployed Open WebUI before v0.6.6? -Anything pre-0.6.6 is pure BSD-3—**these branding limits didn’t exist**. The new branding clause applies only to future versions/releases; retroactive enforcement is not possible. +Anything pre-0.6.6 is pure BSD-3, **these branding limits didn’t exist**. The new branding clause applies only to future versions/releases; retroactive enforcement is not possible. -### **9. What about forks? Can I start one and remove all Open WebUI mentions?** +### 9. What about forks? Can I start one and remove all Open WebUI mentions? **Only if:** - Your fork is for “small scale” deployment (**≤50 users/30-day period**), or @@ -187,7 +198,7 @@ Anything pre-0.6.6 is pure BSD-3—**these branding limits didn’t exist**. The Otherwise, you must retain branding and clearly say your fork isn't the official version. -### **10. I’m an individual academic/non-profit researcher. Can I customize or remove branding for a research study?** +### 10. I’m an individual academic/non-profit researcher. Can I customize or remove branding for a research study? :::info @@ -195,7 +206,7 @@ Please note: *This exemption is intended **exclusively for research studies**, n ::: -**Absolutely—academic research matters to us!** If you’re a researcher at a non-profit or academic institution conducting a **specific, time-limited research project** (for example: a user study, clinical trial, or classroom experiment), you may request permission to **remove or customize Open WebUI branding** for the duration of your study. **This is intended for single, well-defined research projects**—not for regular, day-to-day platform use across a department or lab. +**Absolutely, academic research matters to us!** If you’re a researcher at a non-profit or academic institution conducting a **specific, time-limited research project** (for example: a user study, clinical trial, or classroom experiment), you may request permission to **remove or customize Open WebUI branding** for the duration of your study. **This is intended for single, well-defined research projects**, not for regular, day-to-day platform use across a department or lab. To apply: Please email us at [research-study@openwebui.com](mailto:research-study@openwebui.com) and use the subject line: @@ -216,7 +227,7 @@ We review requests individually and, in almost all cases, will grant permission - Removing branding for ongoing departmental use, internal tooling, or public university portals - “White-labeling” for all organization users beyond a research study scope -We’re happy to help make Open WebUI accessible for your research—just ask! +We’re happy to help make Open WebUI accessible for your research, just ask! --- @@ -226,7 +237,7 @@ If you operate a public fork, or a paid SaaS, and retain the Open WebUI branding > *“This project is a customized fork of [Open WebUI](https://github.com/open-webui/open-webui). This release is not affiliated with or maintained by the official Open WebUI team.”* -Display this message—prominently—in the About section, landing page, or equivalent location. **Transparency is required.** +Display this message, prominently, in the About section, landing page, or equivalent location. **Transparency is required.** --- @@ -252,15 +263,15 @@ We want to make it as straightforward as possible for everyone, users, businesse | Scenario | Allowed Without License? | Guidance / Notes | |---|:---:|---| | **Use Open WebUI “as is” with branding** | ✅ | Just use the software as provided; no changes to logo, name, or identity. Easiest option! | -| **Add custom features, UI extensions, plugins while keeping Open WebUI branding fully intact** | ✅ | Absolutely encouraged! You can add new buttons, workflows, extensions, etc.—just don’t remove or alter Open WebUI’s own name and logo. | +| **Add custom features, UI extensions, plugins while keeping Open WebUI branding fully intact** | ✅ | Absolutely encouraged! You can add new buttons, workflows, extensions, etc., just don’t remove or alter Open WebUI’s own name and logo. | | **Deploy to any number of internal users within your own organization (with all official branding kept)** | ✅ | Scale however you like! No per-user limits for internal/staff/company-wide use as long as Open WebUI branding is always present and prominent. | -| **Integrate Open WebUI with internal tools, scripts, or enterprise authentication** | ✅ | SSO, LDAP, custom backends—all welcomed! Integration is wide open, provided branding remains. | +| **Integrate Open WebUI with internal tools, scripts, or enterprise authentication** | ✅ | SSO, LDAP, custom backends, all welcomed! Integration is wide open, provided branding remains. | | **Add a small, unobtrusive info banner at top, bottom, or side (e.g., “Managed by YourOrg”)** | ✅ | Banner must be visually secondary/subordinate (footer, bottom-right, etc.), not obscuring or distracting from Open WebUI’s branding. | -| **Add a legal or company link/notice in the About modal/dialog** | ✅ | Feel free to provide an additional legal link, team contact, or credits section—just never replace or remove Open WebUI credits. | +| **Add a legal or company link/notice in the About modal/dialog** | ✅ | Feel free to provide an additional legal link, team contact, or credits section, just never replace or remove Open WebUI credits. | | **Add monitoring, analytics, or custom backend features** | ✅ | Backend integrations and observability are totally permitted. No restrictions if branding/UI is untouched. | | **Create and maintain your own public fork (with all branding, plus “fork disclosure” notice)** | ✅ | As long as you keep branding as required and clearly state it’s “a fork of Open WebUI, not official.” | -| **Link to your company/project/github in the footer or About box** | ✅ | No problem if subordinate—must not give impression of replacing or rebranding the app. | -| **For deployments ≤50 users/rolling 30-day period** | ✅ | “Small scale” deployments may remove Open WebUI branding, but only under the explicit user count threshold—see policy for details. | +| **Link to your company/project/github in the footer or About box** | ✅ | No problem if subordinate, must not give impression of replacing or rebranding the app. | +| **For deployments ≤50 users/rolling 30-day period** | ✅ | “Small scale” deployments may remove Open WebUI branding, but only under the explicit user count threshold, see policy for details. | ### **What is NOT ALLOWED Without an Enterprise/Proprietary License** @@ -280,11 +291,11 @@ We want to make it as straightforward as possible for everyone, users, businesse - **Co-branding is not allowed at all.** You may NOT display your branding/logo adjacent to or alongside Open WebUI’s logo/name, nor may you display your branding in a manner that creates visual equivalence or confusion. - **If you want to add a “Managed by Company X” banner**, it must remain clearly distinct, unobtrusive, and subordinate to Open WebUI’s own visual hierarchy. - **Don’t “co-brand” or sandwich your logo next to ours** without explicit written approval. For nearly all non-trivial cases, you will need a commercial or custom license. -- **Always show us a screenshot before launch!** If in doubt, email [hello@openwebui.com](mailto:hello@openwebui.com)—we’re happy to review and advise. +- **Always show us a screenshot before launch!** If in doubt, email [hello@openwebui.com](mailto:hello@openwebui.com), we’re happy to review and advise. ### **Still Unsure?** -If you’re ever unsure, please feel free to contact us and share your planned deployment (even just a screenshot or Figma mockup) before launching. Our goal is to work with everyone and support honest, respectful uses—we’re always happy to offer guidance or help you with the right license if needed. Openness and fairness for all is important to us, so let’s collaborate to make it work for everyone. +If you’re ever unsure, please feel free to contact us and share your planned deployment (even just a screenshot or Figma mockup) before launching. Our goal is to work with everyone and support honest, respectful uses, we’re always happy to offer guidance or help you with the right license if needed. Openness and fairness for all is important to us, so let’s collaborate to make it work for everyone. --- diff --git a/package-lock.json b/package-lock.json index 8330ba3f..4231597d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,7 @@ "clsx": "^2.1.1", "docusaurus-lunr-search": "^3.5.0", "docusaurus-plugin-sass": "^0.2.5", + "marked": "^17.0.1", "prism-react-renderer": "^2.4.0", "react": "^18.3.1", "react-dom": "^18.3.1", @@ -3474,6 +3475,18 @@ } } }, + "node_modules/@docsearch/react/node_modules/marked": { + "version": "16.4.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-16.4.2.tgz", + "integrity": "sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 20" + } + }, "node_modules/@docusaurus/babel": { "version": "3.9.2", "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.9.2.tgz", @@ -13765,9 +13778,9 @@ } }, "node_modules/marked": { - "version": "16.4.1", - "resolved": "https://registry.npmjs.org/marked/-/marked-16.4.1.tgz", - "integrity": "sha512-ntROs7RaN3EvWfy3EZi14H4YxmT6A5YvywfhO+0pm+cH/dnSQRmdAmoFIc3B9aiwTehyk7pESH4ofyBY+V5hZg==", + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/marked/-/marked-17.0.1.tgz", + "integrity": "sha512-boeBdiS0ghpWcSwoNm/jJBwdpFaMnZWRzjA6SkUMYb40SVaN1x7mmfGKp0jvexGcx+7y2La5zRZsYFZI6Qpypg==", "license": "MIT", "bin": { "marked": "bin/marked.js" @@ -14333,6 +14346,18 @@ "uuid": "^11.1.0" } }, + "node_modules/mermaid/node_modules/marked": { + "version": "16.4.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-16.4.2.tgz", + "integrity": "sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 20" + } + }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", diff --git a/package.json b/package.json index 9de67210..eba9b37a 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "clsx": "^2.1.1", "docusaurus-lunr-search": "^3.5.0", "docusaurus-plugin-sass": "^0.2.5", + "marked": "^17.0.1", "prism-react-renderer": "^2.4.0", "react": "^18.3.1", "react-dom": "^18.3.1", diff --git a/src/components/SidebarBanners.tsx b/src/components/SidebarBanners.tsx index 21c489d8..d3f44d25 100644 --- a/src/components/SidebarBanners.tsx +++ b/src/components/SidebarBanners.tsx @@ -3,69 +3,20 @@ import { useEffect, useState } from "react"; export const SidebarBanners = () => { const items = [ - // { - // imgSrc: "/sponsors/banners/n8n-banner.png", - // mobileImgSrc: "/sponsors/banners/n8n-banner-mobile.png", - // url: "https://n8n.io/", - // name: "n8n", - // description: "Does your interface have a backend yet? Try n8n", - // }, - - // { - // imgSrc: "/sponsors/banners/n8n-banner.png", - // mobileImgSrc: "/sponsors/banners/n8n-banner-mobile.png", - // url: "https://n8n.io/", - // name: "n8n", - // description: "Does your interface have a backend yet? Try n8n", - // }, - - // { - // imgSrc: "/sponsors/banners/warp-banner.png", - // mobileImgSrc: "/sponsors/banners/warp-banner-mobile.png", - // url: "https://warp.dev/open-webui", - // name: "Warp", - // description: "The intelligent terminal for developers", - // }, - - // { - // imgSrc: "/sponsors/banners/warp-banner.png", - // mobileImgSrc: "/sponsors/banners/warp-banner-mobile.png", - // url: "https://warp.dev/open-webui", - // name: "Warp", - // description: "The intelligent terminal for developers", - // }, - - // { - // imgSrc: "/sponsors/banners/tailscale-banner.png", - // mobileImgSrc: "/sponsors/banners/tailscale-banner-mobile.png", - // url: "https://tailscale.com/blog/self-host-a-local-ai-stack/?utm_source=OpenWebUI&utm_medium=paid-ad-placement&utm_campaign=OpenWebUI-Docs", - // name: "Tailscale", - // description: "Connect self-hosted AI to any device with Tailscale", - // }, - - // { - // imgSrc: "/sponsors/banners/tailscale-banner.png", - // mobileImgSrc: "/sponsors/banners/tailscale-banner-mobile.png", - // url: "https://tailscale.com/blog/self-host-a-local-ai-stack/?utm_source=OpenWebUI&utm_medium=paid-ad-placement&utm_campaign=OpenWebUI-Docs", - // name: "Tailscale", - // description: "Connect self-hosted AI to any device with Tailscale", - // }, - { - imgSrc: "/sponsors/banners/placeholder.png", - mobileImgSrc: "/sponsors/banners/placeholder-mobile.png", - url: "https://forms.gle/92mvG3ESYj47zzRL9", - name: "Open WebUI", + imgSrc: '/sponsors/banners/openwebui-banner.png', + mobileImgSrc: '/sponsors/banners/openwebui-banner-mobile.png', + url: 'https://docs.openwebui.com/enterprise', + name: 'Open WebUI Inc.', description: - "The top banner spot is reserved for Emerald+ Enterprise sponsors", + 'Upgrade to a licensed plan for enhanced capabilities, including custom theming and branding, and dedicated support.' }, { - imgSrc: "/sponsors/banners/placeholder.png", - mobileImgSrc: "/sponsors/banners/placeholder-mobile.png", - url: "https://forms.gle/92mvG3ESYj47zzRL9", - name: "Open WebUI", - description: - "The top banner spot is reserved for Emerald+ Enterprise sponsors", + imgSrc: '/sponsors/banners/openwebui-banner.png', + mobileImgSrc: '/sponsors/banners/openwebui-banner-mobile.png', + url: 'https://careers.openwebui.com', + name: 'Open WebUI Inc.', + description: '**We are hiring!** Shape the way humanity engages with _intelligence_.' }, ]; diff --git a/src/components/Sponsors/SidebarBanner.tsx b/src/components/Sponsors/SidebarBanner.tsx index a466ac5a..09a1d384 100644 --- a/src/components/Sponsors/SidebarBanner.tsx +++ b/src/components/Sponsors/SidebarBanner.tsx @@ -1,3 +1,5 @@ +import {marked} from 'marked'; + export const SidebarBanner = ({ item }) => { return (
@@ -16,7 +18,7 @@ export const SidebarBanner = ({ item }) => {
- {item.description} +
diff --git a/src/components/Sponsors/TopBanner.tsx b/src/components/Sponsors/TopBanner.tsx index c385a97a..ca17a4f0 100644 --- a/src/components/Sponsors/TopBanner.tsx +++ b/src/components/Sponsors/TopBanner.tsx @@ -1,3 +1,5 @@ +import {marked} from 'marked'; + export const TopBanner = ({ item, bannerClassName = "h-18 ", @@ -49,7 +51,7 @@ export const TopBanner = ({ {description && (
- {item.description} +
)}
diff --git a/src/components/TopBanners.tsx b/src/components/TopBanners.tsx index 0485873e..db9ae3da 100644 --- a/src/components/TopBanners.tsx +++ b/src/components/TopBanners.tsx @@ -8,69 +8,20 @@ export const TopBanners = ({ mobile = true, }) => { const items = [ - // { - // imgSrc: "/sponsors/banners/n8n-banner.png", - // mobileImgSrc: "/sponsors/banners/n8n-banner-mobile.png", - // url: "https://n8n.io/", - // name: "n8n", - // description: "Does your interface have a backend yet? Try n8n", - // }, - - // { - // imgSrc: "/sponsors/banners/n8n-banner.png", - // mobileImgSrc: "/sponsors/banners/n8n-banner-mobile.png", - // url: "https://n8n.io/", - // name: "n8n", - // description: "Does your interface have a backend yet? Try n8n", - // }, - - // { - // imgSrc: "/sponsors/banners/warp-banner.png", - // mobileImgSrc: "/sponsors/banners/warp-banner-mobile.png", - // url: "https://warp.dev/open-webui", - // name: "Warp", - // description: "The intelligent terminal for developers", - // }, - - // { - // imgSrc: "/sponsors/banners/warp-banner.png", - // mobileImgSrc: "/sponsors/banners/warp-banner-mobile.png", - // url: "https://warp.dev/open-webui", - // name: "Warp", - // description: "The intelligent terminal for developers", - // }, - - // { - // imgSrc: "/sponsors/banners/tailscale-banner.png", - // mobileImgSrc: "/sponsors/banners/tailscale-banner-mobile.png", - // url: "https://tailscale.com/blog/self-host-a-local-ai-stack/?utm_source=OpenWebUI&utm_medium=paid-ad-placement&utm_campaign=OpenWebUI-Docs", - // name: "Tailscale", - // description: "Connect self-hosted AI to any device with Tailscale", - // }, - - // { - // imgSrc: "/sponsors/banners/tailscale-banner.png", - // mobileImgSrc: "/sponsors/banners/tailscale-banner-mobile.png", - // url: "https://tailscale.com/blog/self-host-a-local-ai-stack/?utm_source=OpenWebUI&utm_medium=paid-ad-placement&utm_campaign=OpenWebUI-Docs", - // name: "Tailscale", - // description: "Connect self-hosted AI to any device with Tailscale", - // }, - { - imgSrc: "/sponsors/banners/placeholder.png", - mobileImgSrc: "/sponsors/banners/placeholder-mobile.png", - url: "https://forms.gle/92mvG3ESYj47zzRL9", - name: "Open WebUI", + imgSrc: '/sponsors/banners/openwebui-banner.png', + mobileImgSrc: '/sponsors/banners/openwebui-banner-mobile.png', + url: 'https://docs.openwebui.com/enterprise', + name: 'Open WebUI Inc.', description: - "The top banner spot is reserved for Emerald+ Enterprise sponsors", + 'Upgrade to a licensed plan for enhanced capabilities, including custom theming and branding, and dedicated support.' }, { - imgSrc: "/sponsors/banners/placeholder.png", - mobileImgSrc: "/sponsors/banners/placeholder-mobile.png", - url: "https://forms.gle/92mvG3ESYj47zzRL9", - name: "Open WebUI", - description: - "The top banner spot is reserved for Emerald+ Enterprise sponsors", + imgSrc: '/sponsors/banners/openwebui-banner.png', + mobileImgSrc: '/sponsors/banners/openwebui-banner-mobile.png', + url: 'https://careers.openwebui.com', + name: 'Open WebUI Inc.', + description: '**We are hiring!** Shape the way humanity engages with _intelligence_.' }, ];