Settings reference
All 275 FeatherPanel admin settings in 17 categories, with type, allowed values and validation, generated from the settings controller.
Last synced from FeatherPanel 3faf369 on .
On this page
How settings work
Panel behaviour lives in the database, not in files. Admins change it under Admin → Settings, which needs the admin.settings.view and admin.settings.edit permissions. Each setting has a key (used by the API and CLI) and a PHP constant in ConfigInterface (used by plugins and core code).
- API:
GET /api/admin/settings,GET /api/admin/settings/categories,GET /api/admin/settings/category/{category},GET /api/admin/settings/{setting}andPATCH /api/admin/settings. See the settings endpoints. - CLI:
featherpanel settingsopens an interactive editor;featherpanel saas listsettings,featherpanel saas getsetting <key>andfeatherpanel saas setsetting <key> <value>work in scripts. See the panel CLI.
Values marked sensitive (16 keys) are stored encrypted withDATABASE_ENCRYPTION_KEY and are never returned in clear text by the API; the form shows a placeholder and only sends a new value if you type one.
App
Some default settings for the application. Category id app, 33 settings.
| Key | Type | Description | Values / validation |
|---|---|---|---|
app_namerequired | text | The name of the application (shown in the sidebar and browser title) | required|string|max:255 |
app_urlrequired | text | The URL of the application | required|string|max:255 |
wings_remote_url | text | Optional URL Wings uses for panel callbacks (SFTP auth, remote APIs). Set to a DNS-only (grey-cloud) hostname when Cloudflare Precursor Maximize Security or Under Attack Mode blocks daemon traffic to App URL. Leave empty to use App URL. Re-fetch each node config after changing. | nullable|string|max:255 |
app_logo_whiterequired | image | The logo of the application (sidebar & UI, light mode) | required|string|max:2048 |
app_logo_darkrequired | image | The logo of the application (sidebar & UI, dark mode) | required|string|max:2048 |
app_timezonerequired | select | The timezone of the application | required|string|max:255 |
app_sso_redirect_pathrequired | text | Path used by generated SSO login links after authentication (must start with /, e.g. /dashboard) | required|string|max:255 |
app_sso_token_lifetime_minutesrequired | number | Default lifetime in minutes for admin-generated SSO login tokens (1-1440) | required|integer|min:1|max:1440 |
api_clients_allow_public_key_authrequired | select | Allow API clients to authenticate with their public key as a Bearer token (set to false to require the private key) | true, falserequired|string|max:255 |
app_background_image_url | image | Default background image URL for all users (leave empty to use theme defaults) | string|max:2048 |
app_background_lockrequired | select | Force the configured background image URL for all users (disables per-user background overrides) | true, falserequired|string|max:255 |
app_locale_defaultrequired | select | Default panel language for users who have not chosen one (must match an installed translation code, e.g. en, de, fr) | required|string|max:16 |
app_locale_lockrequired | select | Force the configured language for all users (disables per-user language selection) | true, falserequired|string|max:255 |
app_server_spell_banner_stylerequired | select | How spell/egg banners appear on the server console header: off, cover (side art), strip (top bar), or hero (image behind header controls) | off, cover, strip, herorequired|string|max:32 |
app_server_spell_banner_backgroundrequired | select | Use the spell/egg banner as the full panel background on server pages (same layer as the dashboard theme background): off, blend (soft over current theme), or replace (spell image instead of theme background) | off, blend, replacerequired|string|max:32 |
app_accent_color_defaultrequired | select | Default accent color for the UI (purple, blue, green, red, orange, pink, teal, yellow, white, violet, cyan, lime, amber, rose, slate) | purple, blue, green, red, orange, pink, teal, yellow, white, violet, cyan, lime, amber, rose, slaterequired|string|max:255 |
app_accent_color_lockrequired | select | Force the configured accent color for all users (disables per-user accent selection) | true, falserequired|string|max:255 |
app_theme_defaultrequired | select | Default theme (light or dark) | light, darkrequired|string|max:255 |
app_theme_lockrequired | select | Force the configured theme (light/dark) for all users (disables per-user theme toggle) | true, falserequired|string|max:255 |
app_theme_pack_default | text | Default plugin theme pack id (default or pluginId:themeId) | nullable|string|max:255 |
app_theme_pack_lockrequired | select | Force the configured theme pack for all users | true, falserequired|string|max:255 |
app_ui_pack_default | text | Active UI pack id for layout takeovers (empty = none, or pluginId:packId) | nullable|string|max:255 |
app_ui_pack_lockrequired | select | Force the configured UI pack for all users | true, falserequired|string|max:255 |
app_background_type_defaultrequired | select | Default background type (aurora, gradient, solid, image, pattern) used when no user preference is stored | aurora, gradient, solid, image, patternrequired|string|max:255 |
app_background_type_lockrequired | select | Force the configured background type for all users (disables per-user background mode selection) | true, falserequired|string|max:255 |
app_backdrop_blur_defaultrequired | number | Default backdrop blur in pixels (0, 4, 8, 12, 16, 24) | required|integer|min:0|max:24 |
app_backdrop_blur_lockrequired | select | Force the configured backdrop blur value for all users | true, falserequired|string|max:255 |
app_backdrop_darken_defaultrequired | number | Default backdrop darken overlay in percent (0-100) | required|integer|min:0|max:100 |
app_backdrop_darken_lockrequired | select | Force the configured backdrop darken value for all users | true, falserequired|string|max:255 |
app_background_image_fit_defaultrequired | select | Default background image fit (cover, contain, fill) | cover, contain, fillrequired|string|max:255 |
app_background_image_fit_lockrequired | select | Force the configured background image fit for all users | true, falserequired|string|max:255 |
temp_files_enabledrequired | select | Allow users to share server files via temp uploads (uploaded from Wings, not through the panel). | true, falserequired|string|max:255 |
temp_files_api_tokensensitive | text | Optional temp uploads API token (tf_…). Empty = anonymous uploads (15 GB max). With token = 30 GB max. | nullable|string|max:255 |
Modules
Turn whole panel modules on or off. A disabled module disappears from sidebars, dashboard and search, and its API refuses requests.. Category id modules, 4 settings.
| Key | Type | Description | Values / validation |
|---|---|---|---|
module_game_enabledrequired | select | Game servers module (Wings nodes, servers, spells and realms) | true, falserequired|string|max:255 |
module_web_enabledrequired | select | Web hosting module (WebSpaces, web nodes, mail and DNS hosts) | true, falserequired|string|max:255 |
module_vds_enabledrequired | select | VDS module (virtual servers on Proxmox) | true, falserequired|string|max:255 |
pterodactyl_importer_visibilityrequired | select | When the Pterodactyl importer shows up in the admin sidebar and search | auto, always, hiddenrequired|string|in:auto,always,hidden |
VDS
Virtual server (Proxmox) console, VNC, graphs, snapshots, rescue/ISO actions and monitoring notifications. Panel proxy needs async-runner and reverse-proxy /vnc-proxy* → :9100.. Category id vds, 55 settings.
| Key | Type | Description | Values / validation |
|---|---|---|---|
vnc_proxy_via_panelrequired | select | Proxy VNC through the panel (wss://panel/vnc-proxy/{token}). Requires async-runner and reverse-proxy forwarding /vnc-proxy* to it. Hides Proxmox from the browser. | true, falserequired|string|max:255 |
vnc_use_pve_redirectrequired | select | Open Proxmox noVNC in a new tab (creates a short-lived PVE console user). Takes priority over the panel VNC proxy when enabled. | true, falserequired|string|max:255 |
vds_graphs_enabledrequired | select | Show resource history graphs (Proxmox RRD data) on the VDS console. | true, falserequired|string|in:true,false |
vds_graphs_max_timeframerequired | select | Longest time range users can pick in the VDS resource graphs. | hour, day, week, month, yearrequired|string|in:hour,day,week,month,year |
vds_console_paste_enabledrequired | select | Allow typing text and pasting the clipboard into the VDS console (sent as key presses over VNC). | true, falserequired|string|in:true,false |
vds_console_paste_max_charsrequired | number | Maximum number of characters a single paste may send to the VDS console. | required|integer|min:1|max:20000 |
vds_console_screenshot_enabledrequired | select | Show the screenshot button on the VDS console (captured in the browser as PNG). | true, falserequired|string|in:true,false |
vds_ctrl_alt_del_enabledrequired | select | Allow sending Ctrl+Alt+Del from the VDS console actions menu. | true, falserequired|string|in:true,false |
vds_iso_moderequired | select | Who can supply ISOs for VDS users: provider = only ISOs from the admin library / allowed storages, provider_user = users may also upload or download their own ISOs, disabled = no ISO mounting for users. Can be overridden per VDS. | provider, provider_user, disabledrequired|string|in:provider,provider_user,disabled |
vds_iso_allowed_isos | textarea | Comma or newline separated ISO file names or volids (wildcards * allowed) users may mount. Empty = all ISOs on the allowed storages. | nullable|string|max:8192 |
vds_iso_library_onlyrequired | select | Default on: only offer provider ISOs registered in Admin → VDS ISO library. Set to false to also list unregistered ISO files on the allowed storages (advanced). | true, falserequired|string|in:true,false |
vds_iso_user_upload_enabledrequired | select | Let users upload an ISO file from their computer (when the ISO mode allows user ISOs). | true, falserequired|string|in:true,false |
vds_iso_user_url_enabledrequired | select | Let users have Proxmox download an ISO from a URL (when the ISO mode allows user ISOs). | true, falserequired|string|in:true,false |
vds_iso_user_max_size_mbrequired | number | Maximum size of a user ISO in MB. | required|integer|min:1|max:102400 |
vds_iso_user_max_per_userrequired | number | Maximum number of ISOs a single user may keep (across all VDS). | required|integer|min:0|max:100 |
vds_iso_user_url_domains | textarea | Comma or newline separated domains users may download ISOs from (subdomains included, e.g. debian.org). Empty = any public host. | nullable|string|max:4096 |
vds_iso_user_require_approvalrequired | select | New user ISOs stay pending until an admin approves them in the VDS ISO library. | true, falserequired|string|in:true,false |
vds_rescue_enabledrequired | select | Allow users to reboot their VDS into a rescue ISO from the console actions menu (QEMU only). | true, falserequired|string|in:true,false |
vds_snapshots_enabledrequired | select | Enable the VDS snapshots tab (Proxmox snapshots: list, create, rollback, delete). | true, falserequired|string|in:true,false |
vds_snapshots_default_limitrequired | number | Default number of snapshots per VDS. Can be overridden per VDS in the admin instance editor. 0 disables creating snapshots. | required|integer|min:0|max:100 |
vds_snapshots_include_ramrequired | select | Let users include the RAM state when creating a snapshot of a running QEMU VDS (uses more storage). | true, falserequired|string|in:true,false |
vds_monitor_enabledrequired | select | Run the VDS monitor cron that powers the down, high CPU and backup failed notifications. | true, falserequired|string|in:true,false |
vds_monitor_interval_minutesrequired | number | How often (minutes) the VDS monitor checks Proxmox. | required|integer|min:1|max:60 |
vds_notify_down_enabledrequired | select | Notify users when their VDS stops unexpectedly (not through a panel power action). | true, falserequired|string|in:true,false |
vds_notify_high_cpu_enabledrequired | select | Notify users when their VDS stays above the CPU threshold. | true, falserequired|string|in:true,false |
vds_high_cpu_thresholdrequired | number | CPU usage (percent of all vCPUs) that counts as high for VDS notifications. | required|integer|min:1|max:100 |
vds_high_cpu_duration_minutesrequired | number | How long (minutes) CPU must stay above the threshold before users are notified. | required|integer|min:1|max:1440 |
vds_notify_backup_failed_enabledrequired | select | Notify users when a VDS backup fails. | true, falserequired|string|in:true,false |
vds_notify_cooldown_hoursrequired | number | Minimum hours between two notifications of the same kind for the same VDS and user. | required|integer|min:1|max:168 |
vds_suspend_show_reasonrequired | select | Show the suspension reason to the VDS owner on the suspended screen. | true, falserequired|string|in:true,false |
vds_suspend_message | text | Custom message shown to users on a suspended VDS (e.g. how to contact billing). Empty = default text. | nullable|string|max:500 |
vds_expiry_warn_daysrequired | number | Notify the owner this many days before a VDS expires (0 = no warning). | required|integer|min:0|max:60 |
vds_expiry_stop_vmrequired | select | Also power off a VDS when it is auto-suspended because it expired. | true, falserequired|string|in:true,false |
vds_placement_strategyrequired | select | How the recommended node for new VDS is picked in the node capacity overview and the create form. | most_free_memory, most_free_disk, fewest_instancesrequired|string|in:most_free_memory,most_free_disk,fewest_instances |
vds_placement_overcommit_percentrequired | number | Memory that may be allocated per node, as a percentage of its physical RAM (100 = no overcommit). Full nodes are never recommended. | required|integer|min:50|max:1000 |
vds_migration_enabledrequired | select | Allow admins to live-migrate a VDS to another Proxmox node of the same cluster (needs shared or migratable storage). | true, falserequired|string|in:true,false |
vds_console_brand_name | text | White-label name shown on the VDS console screen header. Empty = default. | nullable|string|max:64 |
vds_console_brand_logo | text | White-label logo URL (https) shown on the VDS console screen header. Empty = none. | nullable|string|max:500 |
vds_reauth_moderequired | select | Ask users to re-confirm dangerous VDS actions: off, password = account password, 2fa_or_password = 2FA code when the user has 2FA enabled, otherwise the password. | off, password, 2fa_or_passwordrequired|string|in:off,password,2fa_or_password |
vds_reauth_actions | text | Comma separated actions that need re-confirmation: reinstall, rollback (snapshot), restore (backup), firewall_policy. | nullable|string|max:200 |
vds_bandwidth_enabledrequired | select | Count monthly VDS traffic (sampled by the VDS monitor cron, which must be enabled). | true, falserequired|string|in:true,false |
vds_bandwidth_limit_gbrequired | number | Default monthly traffic limit per VDS in GB. 0 = unlimited. Can be overridden per VDS. | required|integer|min:0|max:10000000 |
vds_bandwidth_countrequired | select | Which traffic counts towards the limit: both directions, outbound only or inbound only. | both, out, inrequired|string|in:both,out,in |
vds_bandwidth_actionrequired | select | What happens when a VDS exceeds its monthly limit: notify only, throttle the network interfaces, or suspend the VDS. Throttle/suspend are lifted automatically when the next month starts. | notify, throttle, suspendrequired|string|in:notify,throttle,suspend |
vds_bandwidth_throttle_mbitrequired | number | Network speed (Mbit/s) applied to every interface of a throttled VDS. | required|integer|min:1|max:100000 |
vds_bandwidth_warn_percentrequired | number | Notify users when this percentage of the monthly limit is used. 0 = no early warning. | required|integer|min:0|max:100 |
vds_firewall_enabledrequired | select | Let VDS users manage their own Proxmox VM firewall (rules, presets, inbound policy). Requires the Proxmox datacenter firewall to be enabled. Off by default. | true, falserequired|string|in:true,false |
vds_firewall_max_rulesrequired | number | Maximum firewall rules per VDS. | required|integer|min:1|max:500 |
vds_firewall_allow_policyrequired | select | Allow users to change the default inbound policy (ACCEPT / DROP / REJECT) of their VDS firewall. | true, falserequired|string|in:true,false |
vds_firewall_presets | text | Comma separated rule presets offered to users: ssh, web, rdp, mail, dns, ping, ftp, mysql, minecraft. Empty = no presets. | nullable|string|max:500 |
vds_schedules_enabledrequired | select | Let VDS users create scheduled tasks (auto reboot, auto snapshot with rotation) executed by the panel cron. | true, falserequired|string|in:true,false |
vds_schedules_max_per_vdsrequired | number | Maximum scheduled tasks per VDS. | required|integer|min:0|max:50 |
vds_schedules_actions | text | Comma separated schedule actions users may pick: reboot, snapshot. | nullable|string|max:200 |
vds_schedules_allow_hourlyrequired | select | Allow hourly schedules (otherwise only daily and weekly). | true, falserequired|string|in:true,false |
vds_schedules_max_keeprequired | number | Maximum automatic snapshots a snapshot schedule may keep (still limited by the VDS snapshot limit). | required|integer|min:1|max:50 |
Links
Public links shown across the panel footer (support, social media, legal). Category id links, 12 settings.
| Key | Type | Description | Values / validation |
|---|---|---|---|
app_support_urlrequired | text | The support URL of the application | required|string|max:255 |
website_url | text | Main website URL | string|max:255 |
discord_url | text | Discord invite or community server URL | string|max:255 |
linkedin_url | text | LinkedIn profile or page URL | string|max:255 |
telegram_url | text | Telegram channel or group URL | string|max:255 |
tiktok_url | text | TikTok profile URL | string|max:255 |
twitter_url | text | Twitter/X profile URL | string|max:255 |
whatsapp_url | text | WhatsApp contact or group URL | string|max:255 |
youtube_url | text | YouTube channel URL | string|max:255 |
status_page_url | text | Status page URL (e.g., status.example.com) | string|max:255 |
legal_tosrequired | text | The legal TOS of the application | required|string|max:255 |
legal_privacyrequired | text | The legal privacy of the application | required|string|max:255 |
Auth Page
Customize the login and register experience, marketing panel, QR sign-in, and method layout. Category id auth_page, 20 settings.
| Key | Type | Description | Values / validation |
|---|---|---|---|
auth_shell_tagline | textarea | Short marketing line under the brand on the auth left panel. This is auth-only copy - it does NOT use SEO description. Leave empty for the default translated tagline. | nullable|string|max:500 |
auth_aside_title | text | Optional bold heading under the brand name on the marketing panel (e.g. “Welcome to our panel”). Leave empty to hide. | nullable|string|max:120 |
auth_login_headline | text | Override the login form title (default: Welcome back). Leave empty for the translated default. | nullable|string|max:120 |
auth_login_subheadline | text | Override the login form subtitle. Leave empty for the translated default. | nullable|string|max:240 |
auth_register_headline | text | Override the register page title. Leave empty for the translated default. | nullable|string|max:120 |
auth_register_subheadline | text | Override the register page subtitle. Leave empty for the translated default. | nullable|string|max:240 |
auth_sso_headline | text | Headline when Discord/OIDC is the primary login panel (third-party SSO portal). Leave empty for the default “Continue with SSO” style copy. | nullable|string|max:120 |
auth_sso_subheadline | text | Supporting text under the SSO portal headline. Leave empty for the translated default. | nullable|string|max:240 |
auth_show_marketing_panelrequired | select | Show the full-bleed left marketing column on large screens (brand, tagline, QR). When false, auth pages use a centered form column only. | true, falserequired|string|max:16 |
auth_aside_image_url | image | Optional hero image for the auth marketing panel (shown behind brand/QR). Leave empty for gradient atmosphere only. | nullable|string|max:2048 |
auth_templaterequired | select | Choose the login page template: split (form plus marketing panel), centered (focused form), or spotlight (form with a compact brand panel). | split, centered, spotlightrequired|string|max:32 |
auth_visual_presetrequired | select | Choose the visual treatment for auth backgrounds and surfaces: aurora, glass, minimal, or contrast. | aurora, glass, minimal, contrastrequired|string|max:32 |
auth_show_qr_loginrequired | select | Enable Discord-style QR code login (phone already signed in approves the desktop session). | true, falserequired|string|max:16 |
auth_form_densityrequired | select | Vertical spacing on auth forms: comfortable (roomy), compact (default), or dense (minimal scroll). | comfortable, compact, denserequired|string|max:32 |
auth_secondary_layoutrequired | select | How alternate login methods appear: chips (compact wrap), stack (full-width rows), or collapsed (hidden behind “More ways to sign in”). | chips, stack, collapsedrequired|string|max:32 |
auth_show_theme_customizerrequired | select | Show the theme/appearance button on auth pages (top-right). | true, falserequired|string|max:16 |
auth_footer_stylerequired | select | Auth footer under the form: full (links + powered-by), minimal (links only), or hidden. | full, minimal, hiddenrequired|string|max:32 |
login_default_methodrequired | select | Default sign-in panel on the login page (local, ldap, email_code, discord, or oidc). Falls back to the first available method if the choice is hidden or unavailable. | local, ldap, email_code, discord, oidcrequired|string|max:64 |
login_methods_orderrequired | text | Comma-separated order of login methods on the page. Valid ids: local, passkey, ldap, email_code, discord, oidc | required|string|max:255 |
Telemetry
Enable or disable installation reports, browser analytics, heatmaps, and session recordings to FeatherPanel.. Category id telemetry, 1 settings.
| Key | Type | Description | Values / validation |
|---|---|---|---|
telemetryrequired | select | Send daily aggregate counts to Umami: resource totals, backup outcomes, scheduling, databases, shared access, API keys, SSH keys, mounts, tickets, mailboxes, and feature usage over the last 30 days. No installation identifiers or individual activity records are sent. Browser tracking, recordings, and external error reporting remain disabled. The collector receives the server connection IP. Disable to stop reports. | true, falserequired|string|in:true,false |
Security
Security and authentication settings. Category id security, 39 settings.
| Key | Type | Description | Values / validation |
|---|---|---|---|
email_login_enabledrequired | select | Enable passwordless email login with 6-digit OTP codes sent to user email addresses (requires SMTP to be configured) | true, falserequired|string|max:255 |
captcha_providerrequired | select | Captcha service provider (Turnstile, hCaptcha, Google reCAPTCHA, or Friendly Captcha) | turnstile, hcaptcha, recaptcha, friendlycaptcharequired|string|max:255 |
turnstile_enabledrequired | select | The Turnstile enabled of the application | true, falserequired|string|max:255 |
turnstile_key_pub | text | The Turnstile key pub of the application | string|max:255 |
turnstile_key_privsensitive | password | The Turnstile private key of the application | string|max:255 |
hcaptcha_site_key | text | The hCaptcha site key of the application | string|max:255 |
hcaptcha_secret_keysensitive | password | The hCaptcha secret key of the application | string|max:255 |
recaptcha_site_key | text | The reCAPTCHA site key of the application | string|max:255 |
recaptcha_secret_keysensitive | password | The reCAPTCHA secret key of the application | string|max:255 |
recaptcha_versionrequired | select | Use reCAPTCHA v2 (checkbox) or v3 (invisible score). Keys must match the version in Google Admin. | v2, v3required|string|max:10 |
recaptcha_v3_min_scorerequired | text | Minimum v3 score (0.0-1.0). Higher is stricter. Ignored when version is v2. | required|string|max:10 |
recaptcha_v3_actionrequired | text | reCAPTCHA v3 action name (must match what the frontend sends). Use letters, numbers, underscores, and slashes only. | required|string|max:100 |
friendly_captcha_site_key | text | The Friendly Captcha site key of the application | string|max:255 |
friendly_captcha_secret_keysensitive | password | The Friendly Captcha secret key of the application | string|max:255 |
registration_enabledrequired | select | Can users register themselves? | true, falserequired|string|max:255 |
registration_require_email_verificationrequired | select | Require users to verify their email before they can log in after registration. | true, falserequired|string|max:255 |
registration_device_limit_enabledrequired | select | Block new registrations when a browser/device already has the maximum number of panel accounts. | true, falserequired|string|max:255 |
registration_device_max_accountsrequired | number | Maximum number of accounts allowed per browser/device before registration is blocked (main account is the oldest account seen on that device). | required|integer|min:1|max:10 |
email_domain_blocking_enabledrequired | select | When enabled, registration and email changes are rejected if the address domain matches a row in Admin → Blocked email domains (suffix match). Manage the list on that page. | true, falserequired|string|max:255 |
abuseipdb_enabledrequired | select | Enable AbuseIPDB integration for registration checks, user IP scanning, and optional reporting when banning users. Get an API key at https://www.abuseipdb.com/. | true, falserequired|string|max:255 |
abuseipdb_api_keysensitive | password | AbuseIPDB API key (stored encrypted). Required when AbuseIPDB is enabled. | string|max:255 |
abuseipdb_check_on_registerrequired | select | Check a registering user\ | true, falserequired|string|max:255 |
abuseipdb_min_confidence_scorerequired | number | Minimum AbuseIPDB abuse confidence score (0-100) to treat an IP as reported. AbuseIPDB recommends 75-100 for blocking. | required|integer|min:0|max:100 |
abuseipdb_max_age_daysrequired | number | Only consider AbuseIPDB reports from the last N days when checking an IP (1-365). | required|integer|min:1|max:365 |
abuseipdb_register_actionrequired | select | What to do when a registering IP meets the confidence score threshold. | block, log, auto_banrequired|string|max:32 |
require_two_fa_adminsrequired | select | Require two-factor authentication for admins | true, falserequired|string|max:255 |
avatar_providerrequired | select | Default avatar provider for users without a custom profile picture | gravatar, panel_logo, ui_avatars, robohash, dicebear, customrequired|string|max:255 |
avatar_custom_url | text | Custom avatar URL template (only used when avatar provider is custom). Placeholders: {email}, {username}, {name}, {hash}, {app_url} | nullable|string|max:2048 |
user_allow_avatar_changerequired | select | Allow users to change their avatar | true, falserequired|string|max:255 |
user_allow_username_changerequired | select | Allow users to change their username | true, falserequired|string|max:255 |
user_allow_email_changerequired | select | Allow users to change their email address | true, falserequired|string|max:255 |
user_allow_first_name_changerequired | select | Allow users to change their first name | true, falserequired|string|max:255 |
user_allow_last_name_changerequired | select | Allow users to change their last name | true, falserequired|string|max:255 |
user_allow_api_keys_createrequired | select | Allow users to create API keys | true, falserequired|string|max:255 |
user_allow_account_deletionrequired | select | Allow users to permanently delete their own account | true, falserequired|string|max:255 |
user_account_deletion_moderequired | select | How account deletions are processed: instant, delayed, or after active services expire | instant, delayed, after_servicesrequired|string|max:64 |
user_account_deletion_delay_daysrequired | text | Days to wait before hard-deleting when mode is delayed (1-365) | required|string|max:10 |
user_account_deletion_verify_2farequired | select | Require two-factor authentication to confirm account deletion | true, falserequired|string|max:255 |
user_account_deletion_verify_email_otprequired | select | Require email one-time password to confirm account deletion | true, falserequired|string|max:255 |
Email configuration settings. Category id email, 12 settings.
| Key | Type | Description | Values / validation |
|---|---|---|---|
smtp_enabledrequired | select | Enable outbound panel email (SMTP or HTTP API providers) | true, falserequired|string|max:255 |
mail_provider_presetrequired | select | UI provider preset (autofills transport and SMTP defaults; not used by the mail runner) | custom, resend, resend_smtp, brevo, brevo_smtp, sendgrid, sendgrid_smtp, mailgun, mailgun_smtp, postmark, postmark_smtp, mailersend, mailersend_smtp, sparkpost, sparkpost_smtp, ses, ses_smtp, gmail, outlook, mailtrap, smtp2gorequired|string|max:64 |
mail_transportrequired | select | Delivery method: smtp (lettre) or an HTTP API provider | smtp, resend, sendgrid, mailgun, postmark, brevo, mailersend, sparkpost, sesrequired|string|in:smtp,resend,sendgrid,mailgun,postmark,brevo,mailersend,sparkpost,ses |
smtp_fromrequired | text | From address for all outbound panel mail (must be verified with your provider) | required|string|max:255 |
smtp_host | text | SMTP hostname (used when mail transport is smtp) | string|max:255 |
smtp_port | number | SMTP port (used when mail transport is smtp) | integer|min:1|max:65535 |
smtp_user | text | SMTP username (used when mail transport is smtp) | string|max:255 |
smtp_passsensitive | password | SMTP password or app password (used when mail transport is smtp) | string|max:255 |
smtp_encryption | select | SMTP encryption: starttls/tls for port 587, ssl for port 465 SMTPS, none for plain SMTP | starttls, tls, ssl, nonestring|in:starttls,tls,ssl,none |
mail_api_keysensitive | password | API key for HTTP mail providers. For Amazon SES use ACCESS_KEY:SECRET_KEY | string|max:512 |
mail_api_domain | text | Mailgun sending domain (required for Mailgun API) | string|max:255 |
mail_api_region | text | Provider region: us/eu (Mailgun, SparkPost), or AWS SES region (e.g. us-east-1) | string|max:64 |
Status Page
User-facing status page configuration. Category id status_page, 12 settings.
| Key | Type | Description | Values / validation |
|---|---|---|---|
status_page_enabledrequired | select | Enable the user-facing status page | true, falserequired|string|max:255 |
maintenance_mode_enabledrequired | select | Maintenance mode: only staff with admin dashboard access can use the panel. Everyone else sees the maintenance notice and the status page | true, falserequired|string|max:255 |
maintenance_mode_message | text | Message shown to users during maintenance (optional) | nullable|string|max:1000 |
status_page_public_enabledrequired | select | Allow unauthenticated users to access /status and /api/status publicly | true, falserequired|string|max:255 |
status_page_show_node_statusrequired | select | Show node status (healthy/unhealthy counts) on status page | true, falserequired|string|max:255 |
status_page_show_load_usagerequired | select | Show CPU, memory, and disk usage on status page | true, falserequired|string|max:255 |
status_page_show_total_serversrequired | select | Show total server count on status page | true, falserequired|string|max:255 |
status_page_show_individual_nodesrequired | select | Show individual node details on status page | true, falserequired|string|max:255 |
status_page_allow_iframerequired | select | Allow the status page to be embedded in an iframe (disables X-Frame-Options: SAMEORIGIN) | true, falserequired|string|max:255 |
status_page_show_raw_valuesrequired | select | Show raw resource values (CPU core count, RAM in GB, disk in GB) alongside percentage values on the status page | true, falserequired|string|max:255 |
status_page_show_player_countrequired | select | Show total online player count per node (sum of all players on all servers of that node) | true, falserequired|string|max:255 |
status_page_servers_visible_by_defaultrequired | select | Default "Show on Status Page" value for newly created servers. Existing servers are unchanged; set false to hide new servers from the public status page unless explicitly opted in. | true, falserequired|string|max:255 |
Knowledgebase
Knowledgebase and documentation settings. Category id knowledgebase, 6 settings.
| Key | Type | Description | Values / validation |
|---|---|---|---|
knowledgebase_enabledrequired | select | Enable the knowledgebase feature for users | true, falserequired|string|max:255 |
knowledgebase_public_enabledrequired | select | Allow unauthenticated users to access /knowledgebase and /api/knowledgebase/* publicly | true, falserequired|string|max:255 |
knowledgebase_show_categoriesrequired | select | Show category listings in knowledgebase | true, falserequired|string|max:255 |
knowledgebase_show_articlesrequired | select | Show article listings in knowledgebase | true, falserequired|string|max:255 |
knowledgebase_show_attachmentsrequired | select | Show downloadable attachments in articles | true, falserequired|string|max:255 |
knowledgebase_show_tagsrequired | select | Show article tags in knowledgebase | true, falserequired|string|max:255 |
OAuth
Discord, Google and GitHub sign-in, plus shared SSO rules. For OIDC/SSO use Admin → OIDC / SSO Providers.. Category id oauth, 12 settings.
| Key | Type | Description | Values / validation |
|---|---|---|---|
discord_oauth_enabledrequired | select | The Discord OAuth enabled of the application Callback URL: | true, falserequired|string|max:255 |
discord_oauth_client_id | text | The Discord OAuth client ID of the application | required|string|max:255 |
discord_oauth_client_secretsensitive | password | The Discord OAuth client secret of the application | |
sso_google_enabledrequired | select | Enable sign in with Google. Callback URL: | true, falserequired|string|max:255 |
sso_google_client_id | text | The Google OAuth client ID | string|max:2048 |
sso_google_client_secretsensitive | password | The Google OAuth client secret | |
sso_github_enabledrequired | select | Enable sign in with GitHub. Callback URL: | true, falserequired|string|max:255 |
sso_github_client_id | text | The GitHub OAuth app client ID | string|max:2048 |
sso_github_client_secretsensitive | password | The GitHub OAuth app client secret | |
sso_allowed_email_domains | text | Comma separated email domains allowed to sign in or register through Google, GitHub or OIDC (for example example.com, corp.example.org). Leave empty to allow any domain. | string|max:2048 |
sso_allow_registrationrequired | select | Create a new panel account when someone signs in with Google or GitHub and no account is linked yet. Also requires registration to be enabled. | true, falserequired|string|max:255 |
sso_auto_link_verified_emailrequired | select | Link a Google, GitHub or OIDC sign-in to an existing account with the same verified email. Off by default: users link providers from their account settings instead. | true, falserequired|string|max:255 |
Servers
Servers configuration settings. Category id servers, 29 settings.
| Key | Type | Description | Values / validation |
|---|---|---|---|
server_allow_egg_changerequired | select | Allow users to change the server spells/eggs | true, falserequired|string|max:255 |
server_allow_startup_changerequired | select | Allow users to change the server startup | true, falserequired|string|max:255 |
server_allow_custom_docker_imagerequired | select | Allow users to enter a custom Docker image on the startup page. When disabled, users may only select images configured on the spell. | true, falserequired|string|max:255 |
server_allow_subusersrequired | select | Allow users to add subusers to their servers | true, falserequired|string|max:255 |
server_allow_schedulesrequired | select | Allow users to create and manage schedules for their servers | true, falserequired|string|max:255 |
server_lifecycle_hooks_enabledrequired | select | Show the Lifecycle Hooks page in server navigation and allow configuration. Uses the same schedule permissions as tasks (schedule.read / schedule.update). When disabled, the menu entry is hidden, hooks do not run on power actions or server crashes, and API changes are rejected. Independent of schedules: you can enable hooks without enabling cron schedules. | true, falserequired|string|max:255 |
server_lifecycle_hooks_container_shell_enabledrequired | select | Allow Container Shell lifecycle hook steps and Container Shell schedule tasks (docker exec /bin/sh -c inside the server container). This is a security-sensitive capability: users with schedule.update (and control.console for schedule tasks) can run arbitrary shell commands in running containers when hooks fire or schedules run. Default off. Lifecycle hook steps additionally require Lifecycle Hooks Enabled; schedule tasks additionally require Schedules to be allowed. Existing Container Shell steps and tasks will not execute while this is disabled. | true, falserequired|string|max:255 |
server_run_script_enabledrequired | select | Allow the "run a custom container script" endpoint, which runs an arbitrary script inside a spell-allowed Docker image. Separate from the lifecycle Container Shell setting. Security-sensitive capability, default off. | true, falserequired|string|max:255 |
server_backup_retention_moderequired | select | Default backup retention when limit is reached (servers/VMs can override per entity). Hard limit blocks new backups. FIFO rolling removes the oldest eligible backup to make room. | hard_limit, fifo_rollingrequired|string|max:255 |
server_allow_user_backup_policy_editrequired | select | Allow server owners to change backup retention mode (inherit / hard limit / FIFO) from the panel and user API. Backup slot count (backup limit) is admin-only. Admins can always edit servers and VM instances. | true, falserequired|string|max:255 |
server_allow_allocation_selectrequired | select | Allow users to select which allocation to assign when auto-allocating | true, falserequired|string|max:255 |
server_allow_user_made_firewallrequired | select | Allow users to create and manage their own server firewall rules | true, falserequired|string|max:255 |
server_allow_user_made_proxyrequired | select | Allow users to create and manage their own server reverse proxy configurations | true, falserequired|string|max:255 |
server_proxy_max_per_serverrequired | number | Maximum number of reverse proxy configurations per server | required|integer|min:1|max:10 |
server_upload_chunk_size_mbrequired | number | Part size in MB for chunked file uploads to FeatherWings nodes. Keep it below your proxy\ | required|integer|min:5|max:90 |
server_allow_cross_realm_spell_changerequired | select | Allow users to change server spells/eggs across different realms. When disabled, users can only select spells from the same realm as their server. | true, falserequired|string|max:255 |
server_allow_user_server_deletionrequired | select | Allow users to delete their servers. When disabled, users can only delete their servers via the admin panel. | true, falserequired|string|max:255 |
server_allow_user_made_importrequired | select | Allow users to import server files from remote SFTP or FTP servers. The server must be offline for imports to work. | true, falserequired|string|max:255 |
server_allow_user_made_fastdlrequired | select | Allow users to create and manage their own FastDL configurations | true, falserequired|string|max:255 |
server_allow_user_made_subdomainsrequired | select | Allow users to create and manage server subdomains | true, falserequired|string|max:255 |
server_require_subdomainrequired | select | Require users to create a panel subdomain before starting a server. Hides allocation IPs until a subdomain exists. Enable "Allow user-made subdomains" first. Roles with user.servers.bypass_subdomain_requirement are exempt. | true, falserequired|string|max:255 |
server_auto_start_on_node_reconnectrequired | select | When a game node reconnects after reboot or downtime, automatically start servers that have Auto Start enabled (skips manually stopped and suspended servers). Configure stagger delays below instead of Wings YAML. | true, falserequired|string|max:255 |
server_auto_start_stagger_secondsrequired | number | Seconds between each auto-started server on the same node after reconnect. Prevents starting every server at once. | required|integer|min:0|max:300 |
server_auto_start_initial_delay_secondsrequired | number | Seconds to wait after Wings reconnects before starting the first auto-start server (gives Docker time to settle). | required|integer|min:0|max:600 |
server_allow_user_auto_startrequired | select | Allow server owners to toggle Auto Start after node reboot from the server settings page. Admins can always configure this per server. | true, falserequired|string|max:255 |
server_hide_ipsrequired | select | Default for privacy mode. When true, IP addresses are masked in activity logs, and privacy mode (hides IPs, hosts, emails, keys and credentials in the panel) starts on for users who have not chosen a value. Each user can still switch it from the top bar. | true, falserequired|string|max:255 |
file_trash_enabledrequired | select | Enable a trash bin for server file deletions. Deleted files are moved to trash instead of being permanently removed, and users can restore or empty trash from the file manager. | true, falserequired|string|max:255 |
file_trash_max_size_mbrequired | number | Maximum total size of trashed files per server, in megabytes. When exceeded, the oldest trashed items are permanently deleted. Use 0 for no size limit. | required|integer|min:0 |
file_trash_retention_daysrequired | number | Automatically purge trashed files older than this many days. Use 0 to keep items until manually deleted or the size limit is reached. | required|integer|min:0 |
Chatbot
AI chatbot configuration settings. Category id chatbot, 21 settings.
| Key | Type | Description | Values / validation |
|---|---|---|---|
chatbot_enabledrequired | select | Enable the AI chatbot | true, falserequired|string|max:255 |
chatbot_ai_providerrequired | select | AI provider for the chatbot | basic, google_gemini, openrouter, openai, ollama, grok, perplexityrequired|string|max:255 |
chatbot_temperature | number | Temperature for AI responses (0.0-1.0). Lower = more focused, Higher = more creative | numeric|min:0|max:1 |
chatbot_max_tokens | number | Maximum number of tokens in AI responses | integer|min:1|max:8192 |
chatbot_max_history | number | Maximum number of previous messages to include in context | integer|min:1|max:50 |
chatbot_system_prompt | textarea | System prompt to prepend to all messages (optional) | string|max:1000 |
chatbot_user_prompt | textarea | User context prompt to append to all messages (optional) | string|max:1000 |
chatbot_google_ai_api_keysensitive | password | Google AI Studio API key for Gemini | |
chatbot_google_ai_model | text | Google Gemini model to use (e.g., gemini-2.5-flash, gemini-2.5-pro) | string|max:255 |
chatbot_openrouter_api_keysensitive | password | OpenRouter API key | |
chatbot_openrouter_model | text | OpenRouter model to use (e.g., openai/gpt-4o-mini, anthropic/claude-3-haiku) | string|max:255 |
chatbot_openai_api_keysensitive | password | OpenAI API key | |
chatbot_openai_model | text | OpenAI model to use (e.g., gpt-4o-mini, gpt-4o, gpt-3.5-turbo) | string|max:255 |
chatbot_openai_base_url | text | OpenAI base URL (e.g., https://api.openai.com) | string|max:255 |
chatbot_ollama_base_url | text | Ollama server base URL (e.g., http://localhost:11434) | string|max:255 |
chatbot_ollama_model | text | Ollama model to use (e.g., llama3.2, mistral, codellama) | string|max:255 |
chatbot_grok_api_keysensitive | password | xAI (Grok) API key | string|max:255 |
chatbot_grok_model | text | xAI (Grok) model to use (e.g., grok-2-1212, grok-beta, grok-vision-beta) | string|max:255 |
chatbot_perplexity_api_keysensitive | password | Perplexity API key | string|max:255 |
chatbot_perplexity_model | text | Perplexity model to use (e.g., sonar-pro, sonar-small-chat) | string|max:255 |
chatbot_perplexity_base_url | text | Perplexity base URL (e.g., https://api.perplexity.ai) | string|max:255 |
Ticket System
Ticket system configuration settings. Category id ticket_system, 3 settings.
| Key | Type | Description | Values / validation |
|---|---|---|---|
ticket_system_enabledrequired | select | Enable or disable the ticket system feature | true, falserequired|string|max:255 |
ticket_system_allow_attachmentsrequired | select | Allow users to attach files to tickets | true, falserequired|string|max:255 |
ticket_system_max_open_ticketsrequired | number | Maximum number of open tickets a user can have at once (0 = unlimited) | required|integer|min:0|max:1000 |
SEO
Search Engine Optimization settings. Category id seo, 4 settings.
| Key | Type | Description | Values / validation |
|---|---|---|---|
app_seo_titlerequired | text | The default title for the application pages | required|string|max:255 |
app_seo_descriptionrequired | textarea | The default description for the application pages | required|string|max:500 |
app_seo_keywordsrequired | textarea | Comma-separated keywords for SEO | required|string|max:500 |
app_seo_indexingrequired | select | Allow search engines to index this panel (when disabled, we send noindex,nofollow). | true, falserequired|string|max:255 |
PWA
Progressive Web App settings. Category id pwa, 5 settings.
| Key | Type | Description | Values / validation |
|---|---|---|---|
app_pwa_enabledrequired | select | Allow users to install the panel as an app on desktop, Android, and iOS | true, falserequired|string|max:255 |
app_pwa_short_name | text | Short name under the home-screen icon (falls back to app name) | nullable|string|max:12 |
app_pwa_description | textarea | PWA description (falls back to SEO description, then app name) | nullable|string|max:500 |
app_pwa_theme_colorrequired | text | Theme color for the PWA browser bar | required|string|max:7 |
app_pwa_bg_colorrequired | text | Background color for the PWA splash screen | required|string|max:7 |
Other
Other configuration settings. Category id other, 4 settings.
| Key | Type | Description | Values / validation |
|---|---|---|---|
app_developer_moderequired | select | Is the application in developer mode? | true, falserequired|string|max:255 |
custom_js | textarea | Custom JavaScript to inject into the page | string |
custom_css | textarea | Custom CSS to inject into the page | string |
cache_driverrequired | select | Cache driver to use (file, redis) (redis is recommended for production) but redis can be unstable in some cases | file, redisrequired|string|max:255 |
Keys without a settings field
These 61 keys exist in ConfigInterface but have no field on the settings page. They are written by other screens (setup wizard state, Mythic Cloud link, feature pages with their own forms) or by code. Change them only through the screen that owns them, or with featherpanel saas setsetting if you know what the key does.
| Key | Constant |
|---|---|
app_demo_yes | APP_DEMO_YES |
app_server_spell_banner_enabled | APP_SERVER_SPELL_BANNER_ENABLED |
branding_show_powered_by | BRANDING_SHOW_POWERED_BY |
branding_show_version | BRANDING_SHOW_VERSION |
chatbot_avatar_url | CHATBOT_AVATAR_URL |
chatbot_display_name | CHATBOT_DISPLAY_NAME |
feathercloud_access_last_rotated | FEATHERCLOUD_ACCESS_LAST_ROTATED |
feathercloud_access_private_key | FEATHERCLOUD_ACCESS_PRIVATE_KEY |
feathercloud_access_public_key | FEATHERCLOUD_ACCESS_PUBLIC_KEY |
feathercloud_api_base_url | FEATHERCLOUD_API_BASE_URL |
feathercloud_authorizer_email | FEATHERCLOUD_AUTHORIZER_EMAIL |
feathercloud_authorizer_feather_uuid | FEATHERCLOUD_AUTHORIZER_FEATHER_UUID |
feathercloud_authorizer_mythic_user_id | FEATHERCLOUD_AUTHORIZER_MYTHIC_USER_ID |
feathercloud_authorizer_name | FEATHERCLOUD_AUTHORIZER_NAME |
feathercloud_cloud_id | FEATHERCLOUD_CLOUD_ID |
feathercloud_cloud_last_rotated | FEATHERCLOUD_CLOUD_LAST_ROTATED |
feathercloud_cloud_name | FEATHERCLOUD_CLOUD_NAME |
feathercloud_cloud_private_key | FEATHERCLOUD_CLOUD_PRIVATE_KEY |
feathercloud_cloud_public_key | FEATHERCLOUD_CLOUD_PUBLIC_KEY |
feathercloud_eggs_base_url | FEATHERCLOUD_EGGS_BASE_URL |
feathercloud_eggs_enabled | FEATHERCLOUD_EGGS_ENABLED |
feathercloud_issues_enabled | FEATHERCLOUD_ISSUES_ENABLED |
feathercloud_last_synced_at | FEATHERCLOUD_LAST_SYNCED_AT |
feathercloud_linked_at | FEATHERCLOUD_LINKED_AT |
feathercloud_marketplace_enabled | FEATHERCLOUD_MARKETPLACE_ENABLED |
feathercloud_member_map | FEATHERCLOUD_MEMBER_MAP |
feathercloud_member_user_uuid | FEATHERCLOUD_MEMBER_USER_UUID |
feathercloud_oauth_url | FEATHERCLOUD_OAUTH_URL |
feathercloud_pastes_enabled | FEATHERCLOUD_PASTES_ENABLED |
feathercloud_relink_pending_at | FEATHERCLOUD_RELINK_PENDING_AT |
feathercloud_team_name | FEATHERCLOUD_TEAM_NAME |
feathercloud_team_slug | FEATHERCLOUD_TEAM_SLUG |
feathercloud_team_uuid | FEATHERCLOUD_TEAM_UUID |
feathercloud_translate_base_url | FEATHERCLOUD_TRANSLATE_BASE_URL |
feathercloud_translate_project | FEATHERCLOUD_TRANSLATE_PROJECT |
featherpanel_premium_active | FEATHERPANEL_PREMIUM_ACTIVE |
featherpanel_premium_checked_at | FEATHERPANEL_PREMIUM_CHECKED_AT |
featherpanel_premium_expires_at | FEATHERPANEL_PREMIUM_EXPIRES_AT |
featherpanel_premium_features | FEATHERPANEL_PREMIUM_FEATURES |
featherpanel_premium_free_claimed_at | FEATHERPANEL_PREMIUM_FREE_CLAIMED_AT |
featherpanel_premium_free_expires_at | FEATHERPANEL_PREMIUM_FREE_EXPIRES_AT |
featherpanel_premium_free_method | FEATHERPANEL_PREMIUM_FREE_METHOD |
featherpanel_premium_last_failure_at | FEATHERPANEL_PREMIUM_LAST_FAILURE_AT |
oidc_allowed_group_claim | OIDC_ALLOWED_GROUP_CLAIM |
oidc_allowed_group_value | OIDC_ALLOWED_GROUP_VALUE |
oidc_auto_provision | OIDC_AUTO_PROVISION |
oidc_client_id | OIDC_CLIENT_ID |
oidc_client_secret | OIDC_CLIENT_SECRET |
oidc_disable_local_login | OIDC_DISABLE_LOCAL_LOGIN |
oidc_email_claim | OIDC_EMAIL_CLAIM |
oidc_enabled | OIDC_ENABLED |
oidc_issuer_url | OIDC_ISSUER_URL |
oidc_provider_name | OIDC_PROVIDER_NAME |
oidc_require_email_verified | OIDC_REQUIRE_EMAIL_VERIFIED |
oidc_scopes | OIDC_SCOPES |
oidc_subject_claim | OIDC_SUBJECT_CLAIM |
setup_completed | SETUP_COMPLETED |
sidebar_navigation_config | SIDEBAR_NAVIGATION_CONFIG |
subdomain_cf_api_key | SUBDOMAIN_CF_API_KEY |
subdomain_cf_email | SUBDOMAIN_CF_EMAIL |
subdomain_max_per_server | SUBDOMAIN_MAX_PER_SERVER |