- Introduce `PIPELINES_API_KEY` in the secrets file to secure pipelines communication - Replace hardcoded RAG and web search URLs with template variables, enabling flexible configuration - Add new template variables (`ENABLE_WEB_SEARCH`, `WEB_SEARCH_ENGINE`, `WEB_LOADER_ENGINE`, `SEARXNG_QUERY_URL`, `EXTERNAL_WEB_LOADER_URL`) with defaults - Include OpenWebUI secret env file in the service definition for consistent secret injection - Set `ENABLE_PERSISTENT_CONFIG` to false to align with the parametrized deployment approach These changes decouple service endpoints from the deployment template, allowing users to easily customize web search and RAG integrations without modifying service definitions.
default-applications-tree
This repository defines the available applications and their configuration templates. Each application lives in its own subdirectory and is registered in applications-tree.json.
applications-tree.json
The root applications-tree.json file lists all available applications. Each entry in the apps array registers one application:
{
"apps": [
{
"name": "Nextcloud",
"subtitle": "File Synchronization",
"version": "31.0.8-fpm-alpine",
"icon": "data:image/svg+xml;base64,..."
}
]
}
App entry fields
| Field | Required | Description |
|---|---|---|
name |
yes | Display name of the application. Must match the directory name (case-insensitive). |
version |
yes | Default version tag used when deploying. Use "latest" for the most recent image. |
subtitle |
no | Short tagline shown in the app listing UI. |
icon |
no | Base64-encoded SVG or PNG image used as the app icon in the UI (data:image/svg+xml;base64,... or data:image/png;base64,...). |
Application directory structure
Each application has its own directory (e.g. nextcloud/). The directory name must match the name in applications-tree.json. It must contain a template.json file and can contain additional JSON files for services, domains, secrets, firewall rules, etc.
nextcloud/
template.json ← mandatory configuration template
service-nextcloud.json ← service definition
domain-nextcloud.json ← domain/ingress configuration
nextcloud-secret.json ← secrets / environment variables
firewall-nextcloud.json ← firewall rules
...
template.json
The template.json file defines the application's metadata and the list of configuration fields that are presented in the deployment form.
Top-level structure
{
"name": "Nextcloud",
"title": "Nextcloud",
"subtitle": "File Synchronization",
"description": "Nextcloud is a suite of client-server software...",
"icon": "data:image/svg+xml;base64,...",
"fields": [ ... ]
}
Top-level fields
| Field | Required | Description |
|---|---|---|
name |
yes | Must match the directory name. Used as the application identifier. |
title |
no | Human-readable display title shown in the form header (falls back to name if omitted). |
subtitle |
no | Short tagline displayed below the title. |
description |
no | Longer description of the application shown in the form or app listing. |
icon |
no | Base64-encoded SVG or PNG icon (data:image/svg+xml;base64,...). |
fields |
yes | Array of configuration field definitions (see below). |
Field definitions
Each element of the fields array defines one configuration variable. Fields are rendered as form inputs during deployment. Fields with generated set are auto-populated and not shown in the form.
Field properties
| Property | Required | Description |
|---|---|---|
description |
yes | Label text displayed before the input. |
key |
yes | The environment variable name that will hold the value. |
value |
no | Default value pre-filled in the form. For select fields this defines the available options (see below). |
required |
no | Set to "true" to make the field mandatory. The form will not submit until it is filled. |
type |
no | Input type. Defaults to "text". See Field types. |
info |
no | Additional hint or explanatory text shown alongside or below the field. |
generated |
no | Auto-generation pattern. When set the field is not shown in the form; its value is generated automatically. See Generated values. |
advanced |
no | Set to "true" to hide the field from the UI by default. It can be revealed by pressing the > button. |
Field types
The type property controls how the field is rendered:
| Type | Description |
|---|---|
text |
(default) Single-line plain text input. |
password |
The value is hidden from human-readable display wherever it is shown in the UI. |
textarea |
Multi-line text input. |
select |
Dropdown. Options are defined in value as a comma-separated list. Each option can be optionValue or displayText:optionValue. |
Select field examples
Simple yes/no toggle:
{
"description": "Enable feature",
"key": "FEATURE_ENABLED",
"value": "false,true",
"type": "select"
}
Options with display labels:
{
"description": "Email provider",
"key": "MAIL_PROVIDER",
"value": "1:Gmail,2:Microsoft Outlook/Hotmail,3:Other",
"type": "select"
}
TOTP authentication toggle (advanced):
{
"description": "TOTP authentication (true/false)",
"key": "GUACAMOLE_TOTP",
"value": "false,true",
"required": "true",
"type": "select",
"advanced": "true"
}
Generated values
When generated is set the field value is computed automatically. The format is:
"<source>|<encoding>|<length>"
| Part | Options | Description |
|---|---|---|
source |
time, random |
time seeds the hash from the current timestamp; random uses a random number. |
encoding |
md5, sha256 |
Hash algorithm applied to the source value. |
length |
integer | Number of characters to take from the hash output. |
Examples
| Pattern | Result |
|---|---|
"time|md5|8" |
8-character MD5 hash seeded from the current time. |
"random|md5|12" |
12-character MD5 hash seeded from a random number. |
"random|sha256|20" |
20-character SHA-256 hash seeded from a random number. |
"" |
Auto-generated with default settings (pattern not specified). |
Complete field example
{
"description": "Nextcloud admin password",
"key": "NEXTCLOUD_ADMIN_PASSWORD",
"value": "",
"required": "true",
"type": "password",
"info": "Must be at least 8 characters long."
}
Auto-generated database password (not shown in the form):
{
"description": "Postgres password for user",
"key": "POSTGRES_PASSWORD",
"value": "",
"required": "true",
"generated": "random|md5|12"
}
Advanced optional SMTP field:
{
"description": "Email sending protocol",
"key": "MAIL_PROTOCOL",
"value": "",
"info": "Options are: empty (for no encryption), ssl, tls",
"advanced": "true"
}