View .md

Widget injection points

Every page (155) where a FeatherPanel plugin can inject a widget, the injection points it exposes and the full widgets.json schema.

Last synced from FeatherPanel 15b94e9 on .

On this page

Widgets let a plugin put its own HTML onto existing panel pages without patching the frontend. The panel renders each widget in an iframe (optionally wrapped in a card; add iframe.sandbox if you want a sandbox) at a named injection point on a page. For whole new pages in the sidebar, use Frontend/sidebar.json instead; see Frontend.

widgets.json

Put a JSON array in Frontend/widgets.json inside the plugin folder. component is a path below Frontend/Components/. This is from the DemoShowcase example plugin that ships with the panel:

[
  {
    "id": "demoshowcase-dashboard-card",
    "component": "demoshowcase/dist/dashboard-card.html",
    "enabled": true,
    "priority": 80,
    "page": "dashboard",
    "location": "after-header",
    "pluginName": "DemoShowcase",
    "title": "Demo Showcase",
    "description": "Example addon card widget",
    "size": "half",
    "card": { "enabled": true, "padding": "sm", "header": { "show": true } },
    "iframe": { "minHeight": "140px", "title": "Demo Showcase card" },
    "hidden": { "type": "plugin_setting", "key": "hide_admin_card", "equals": "true" }
  }
]

Widget fields

FieldTypeMeaning
idstringUnique widget id.
componentstringHTML file under Frontend/Components/.
pagestringPage slug from the table below.
locationstringInjection point on that page.
prioritynumberOrdering among widgets at the same location.
enabled, hiddenboolean or ruleSee visibility rules.
pluginName, title, description, iconstringLabels shown in the card header.
sizefull | half | third | quarter or {default, sm, md, lg, xl}Width preset or column counts per breakpoint.
layout{columns, sm, md, lg, xl, rowSpan, colSpan}Grid placement.
card{enabled, variant, padding, header, bodyClass, footer}variant: default, outline, ghost, soft. padding: none, sm, md, lg. header: show, title, description, icon. footer: show, text.
borderless / useRawRenderingbooleanRender without the card wrapper.
iframe{minHeight, maxHeight, sandbox, allow, loading, referrerPolicy, title, ariaLabel}Attributes of the iframe that hosts the component.
behavior{loadingMessage, errorMessage, retryLabel, emptyStateMessage}Texts for loading and error states.
classes{container, card, header, content, iframe, footer}Extra CSS classes.

Visibility rules

enabled and hidden (also used by sidebar.json entries) accept a boolean or a rule object:

  • { "type": "always" } and { "type": "never" }
  • { "type": "plugin_setting", "key": "hide_x", "equals": "true" } compares one of the plugin's settings with equals (default "true"). An unset setting counts as no match.

Admins can also hide any single widget or sidebar entry from the plugin's settings page; that override wins over the manifest.

Pages and injection points

Generated from the usePluginWidgets() calls in the frontend: 155 pages.

Admin area

pagelocation valuesSource
admin-ai-agentafter-header before-content bottom-of-page top-of-page(app)/admin/featherpanel-ai-agent/page.tsx
admin-analyticsbottom-of-page top-of-page(app)/admin/analytics/page.tsx
admin-analytics-activitybottom-of-page top-of-page(app)/admin/analytics/activity/page.tsx
admin-analytics-contentbottom-of-page top-of-page(app)/admin/analytics/content/page.tsx
admin-analytics-infrastructurebottom-of-page top-of-page(app)/admin/analytics/infrastructure/page.tsx
admin-analytics-knowledgebasebottom-of-page top-of-page(app)/admin/analytics/knowledgebase/page.tsx
admin-analytics-pluginsbottom-of-page top-of-page(app)/admin/analytics/plugins/page.tsx
admin-analytics-serversbottom-of-page top-of-page(app)/admin/analytics/servers/page.tsx
admin-analytics-systembottom-of-page top-of-page(app)/admin/analytics/system/page.tsx
admin-analytics-ticketsbottom-of-page top-of-page(app)/admin/analytics/tickets/page.tsx
admin-analytics-usersbottom-of-page top-of-page(app)/admin/analytics/users/page.tsx
admin-analytics-vdsbottom-of-page top-of-page(app)/admin/analytics/vds/page.tsx
admin-api-keysbottom-of-page top-of-page(app)/admin/api-keys/page.tsx
admin-databases-managementafter-header bottom-of-page top-of-page(app)/admin/databases/management/page.tsx
admin-dev-consolebottom-of-page top-of-page(app)/admin/dev/console/page.tsx
admin-dev-logs-redirectbottom-of-page top-of-page(app)/admin/dev/logs/page.tsx
admin-dev-pluginsafter-header before-list bottom-of-page top-of-page(app)/admin/dev/plugins/page.tsx
admin-dev-plugins-createbottom-of-page top-of-page(app)/admin/dev/plugins/create/page.tsx
admin-dev-plugins-editbottom-of-page top-of-page(app)/admin/dev/plugins/[identifier]/edit/page.tsx
admin-feathercloud-marketplaceafter-header before-content bottom-of-page top-of-page(app)/admin/feathercloud/marketplace/page.tsx
admin-feathercloud-spellsafter-header before-content bottom-of-page top-of-page(app)/admin/feathercloud/spells/page.tsx
admin-featherzerotrustbottom-of-page top-of-page(app)/admin/featherzerotrust/page.tsx
admin-homeafter-header after-widgets-grid before-widgets-grid bottom-of-page top-of-page(app)/admin/page.tsx
admin-imagesafter-header before-list bottom-of-page top-of-page(app)/admin/images/page.tsx
admin-knowledgebase-article-editafter-header before-content bottom-of-page top-of-page(app)/admin/knowledgebase/articles/[id]/edit/page.tsx
admin-knowledgebase-categoriesafter-header before-list bottom-of-page top-of-page(app)/admin/knowledgebase/categories/page.tsx
admin-knowledgebase-category-articlesafter-header before-list bottom-of-page top-of-page(app)/admin/knowledgebase/categories/[id]/articles/page.tsx
admin-ldap-providersbottom-of-page top-of-page(app)/admin/ldap-providers/page.tsx
admin-locationsafter-header before-list bottom-of-page top-of-page(app)/admin/locations/page.tsx
admin-logsbottom-of-page top-of-page(app)/admin/logs/page.tsx
admin-mail-templatesafter-header before-list bottom-of-page top-of-page(app)/admin/mail-templates/page.tsx
admin-mountsafter-header top-of-page(app)/admin/mounts/page.tsx
admin-node-databasesbottom-of-page top-of-page(app)/admin/databases/nodes/page.tsx
admin-node-databases-idbottom-of-page top-of-page(app)/admin/nodes/[id]/databases/page.tsx
admin-nodesafter-header before-list bottom-of-page top-of-page(app)/admin/nodes/page.tsx
admin-nodes-createafter-header bottom-of-page top-of-page(app)/admin/nodes/create/page.tsx
admin-nodes-editafter-header bottom-of-page top-of-page(app)/admin/nodes/[id]/edit/page.tsx
admin-nodes-statusafter-global-stats after-header after-individual-nodes after-resource-usage before-global-stats bottom-of-page top-of-page(app)/admin/nodes/status/page.tsx
admin-notificationsafter-header before-list bottom-of-page top-of-page(app)/admin/notifications/page.tsx
admin-oidc-providersbottom-of-page top-of-page(app)/admin/oidc-providers/page.tsx
admin-plugin-pagebottom-of-page top-of-page(app)/admin/[...pluginPath]/page.tsx
admin-pluginsafter-header bottom-of-page top-of-page(app)/admin/plugins/page.tsx
admin-pterodactyl-importerafter-header before-content bottom-of-page top-of-page(app)/admin/pterodactyl-importer/page.tsx
admin-rate-limitsafter-header before-list bottom-of-page top-of-page(app)/admin/rate-limits/page.tsx
admin-realmsafter-header before-list bottom-of-page top-of-page(app)/admin/realms/page.tsx
admin-rolesafter-header before-list bottom-of-page top-of-page(app)/admin/roles/page.tsx
admin-roles-createbottom-of-page top-of-page(app)/admin/roles/create/page.tsx
admin-roles-editbottom-of-page top-of-page(app)/admin/roles/[id]/edit/page.tsx
admin-serversafter-header before-list top-of-page(app)/admin/servers/page.tsx
admin-servers-createafter-header bottom-of-page top-of-page(app)/admin/servers/create/page.tsx
admin-servers-editafter-header bottom-of-page top-of-page(app)/admin/servers/[id]/edit/page.tsx
admin-settingsafter-header bottom-of-page top-of-page(app)/admin/settings/page.tsx
admin-spellsafter-header before-list bottom-of-page top-of-page(app)/admin/spells/page.tsx
admin-spells-createafter-header bottom-of-page top-of-page(app)/admin/spells/create/page.tsx
admin-spells-editafter-header bottom-of-page top-of-page(app)/admin/spells/[id]/edit/page.tsx
admin-storage-sensebottom-of-page top-of-page(app)/admin/storage-sense/page.tsx
admin-subdomainsafter-header before-list bottom-of-page top-of-page(app)/admin/subdomains/page.tsx
admin-ticketsafter-header before-list bottom-of-page top-of-page(app)/admin/tickets/page.tsx
admin-tickets-categoriesbottom-of-page top-of-page(app)/admin/tickets/categories/page.tsx
admin-tickets-prioritiesbottom-of-page top-of-page(app)/admin/tickets/priorities/page.tsx
admin-tickets-statusesbottom-of-page top-of-page(app)/admin/tickets/statuses/page.tsx
admin-tickets-viewafter-header after-messages sidebar-bottom sidebar-top top-of-page(app)/admin/tickets/[uuid]/page.tsx
admin-translationsafter-header bottom-of-page top-of-page(app)/admin/translations/page.tsx
admin-usersafter-header before-list bottom-of-page top-of-page(app)/admin/users/page.tsx
admin-users-createafter-header bottom-of-page top-of-page(app)/admin/users/create/page.tsx
admin-users-editafter-header bottom-of-page top-of-page(app)/admin/users/[uuid]/edit/page.tsx
admin-users-serversbottom-of-page top-of-page(app)/admin/users/[uuid]/servers/page.tsx
admin-vds-node-editbottom-of-page top-of-page(app)/admin/vds-nodes/[id]/edit/page.tsx
admin-vds-nodes-createafter-header bottom-of-page top-of-page(app)/admin/vds-nodes/create/page.tsx
admin-vm-instance-editbottom-of-page top-of-page(app)/admin/vm-instances/[id]/edit/page.tsx
admin-vm-instancesafter-header before-list top-of-page(app)/admin/vm-instances/page.tsx
admin-vm-instances-createafter-header bottom-of-page top-of-page(app)/admin/vm-instances/create/page.tsx
admin-vm-nodesafter-header before-list bottom-of-page top-of-page(app)/admin/vds-nodes/page.tsx
admin-web-node-editafter-header bottom-of-page top-of-page(app)/admin/web-nodes/[id]/edit/page.tsx
admin-web-nodesafter-header before-list bottom-of-page top-of-page(app)/admin/web-nodes/page.tsx
admin-web-nodes-createafter-header bottom-of-page top-of-page(app)/admin/web-nodes/create/page.tsx
admin-webplatesafter-header before-list bottom-of-page top-of-page(app)/admin/webplates/page.tsx
admin-webplates-createafter-header bottom-of-page top-of-page(app)/admin/webplates/create/page.tsx
admin-webplates-editafter-header bottom-of-page top-of-page(app)/admin/webplates/[id]/edit/page.tsx
admin-webspacesafter-header before-list top-of-page(app)/admin/webspaces/page.tsx

Client area, auth and account

pagelocation valuesSource
auth-forgot-passwordauth-forgot-password-after-form auth-forgot-password-before-form auth-forgot-password-bottom auth-forgot-password-top(app)/auth/forgot-password/ForgotPasswordForm.tsx
auth-loginauth-login-after-form auth-login-before-form auth-login-top(app)/auth/login/LoginForm.tsx
auth-registerauth-register-after-form auth-register-before-form auth-register-bottom auth-register-top(app)/auth/register/RegisterForm.tsx
auth-reset-passwordauth-reset-password-after-form auth-reset-password-before-form auth-reset-password-bottom auth-reset-password-top(app)/auth/reset-password/ResetPasswordForm.tsx
auth-setup-2faauth-setup-2fa-after-form auth-setup-2fa-before-form auth-setup-2fa-bottom auth-setup-2fa-top(app)/auth/setup-2fa/SetupTwoFactorForm.tsx
auth-verify-2faauth-verify-2fa-after-form auth-verify-2fa-before-form auth-verify-2fa-bottom auth-verify-2fa-top(app)/auth/verify-2fa/VerifyTwoFactorForm.tsx
dashboardafter-server-list before-server-list bottom-of-page top-of-page(app)/dashboard/page.tsx
dashboard-accountafter-profile-card after-tabs bottom-of-page top-of-page(app)/dashboard/account/page.tsx
dashboard-knowledgebaseafter-categories-list after-header before-categories-list bottom-of-page top-of-page(app)/dashboard/knowledgebase/page.tsx
dashboard-knowledgebase-articleafter-article-content after-attachments after-header before-article-content before-attachments bottom-of-page top-of-page(app)/dashboard/knowledgebase/article/[id]/page.tsx
dashboard-knowledgebase-categoryafter-articles-list after-header before-articles-list bottom-of-page top-of-page(app)/dashboard/knowledgebase/category/[id]/page.tsx
dashboard-serversafter-header after-server-list before-server-list bottom-of-page top-of-page(app)/dashboard/servers/page.tsx
dashboard-statusafter-global-stats after-header after-node-list before-node-list bottom-of-page top-of-page(app)/dashboard/status/page.tsx
dashboard-tickets-createafter-header bottom-of-page top-of-page(app)/dashboard/tickets/create/page.tsx
dashboard-tickets-listafter-filters after-header after-tickets-list before-tickets-list bottom-of-page top-of-page(app)/dashboard/tickets/page.tsx
dashboard-tickets-viewafter-header after-messages bottom-of-page sidebar-bottom sidebar-top top-of-page(app)/dashboard/tickets/[uuid]/page.tsx

WebSpace pages

pagelocation valuesSource
dashboard-webspacesafter-header after-toolbar bottom-of-page top-of-page(app)/dashboard/webspaces/page.tsx
webspace-accessbottom-of-page top-of-page(app)/webspace/[uuidShort]/access/page.tsx
webspace-activitiesbottom-of-page top-of-page(app)/webspace/[uuidShort]/activities/page.tsx
webspace-analyticsbottom-of-page top-of-page(app)/webspace/[uuidShort]/analytics/page.tsx
webspace-appsbottom-of-page top-of-page(app)/webspace/[uuidShort]/apps/page.tsx
webspace-backupsbottom-of-page top-of-page(app)/webspace/[uuidShort]/backups/page.tsx
webspace-consoleafter-header after-terminal bottom-of-page top-of-pagesrc/components/webspace/WebSpaceConsolePage.tsx
webspace-databasesbottom-of-page top-of-page(app)/webspace/[uuidShort]/databases/page.tsx
webspace-databases-newbottom-of-page top-of-page(app)/webspace/[uuidShort]/databases/new/page.tsx
webspace-domainsbottom-of-page top-of-page(app)/webspace/[uuidShort]/domains/page.tsx
webspace-emailbottom-of-page top-of-page(app)/webspace/[uuidShort]/email/page.tsx
webspace-file-editorbottom-of-page top-of-page(app)/webspace/[uuidShort]/files/edit/page.tsx
webspace-filesbottom-of-page top-of-page(app)/webspace/[uuidShort]/files/page.tsx
webspace-files-trashbottom-of-page top-of-page(app)/webspace/[uuidShort]/files/trash/page.tsx
webspace-logsbottom-of-page top-of-page(app)/webspace/[uuidShort]/logs/page.tsx
webspace-malwarebottom-of-page top-of-page(app)/webspace/[uuidShort]/malware/page.tsx
webspace-plugin-pagebottom-of-page top-of-page(app)/webspace/[uuidShort]/[[...pluginPath]]/page.tsx
webspace-schedulesbottom-of-page top-of-page(app)/webspace/[uuidShort]/schedules/page.tsx
webspace-settingsbottom-of-page top-of-page(app)/webspace/[uuidShort]/settings/page.tsx
webspace-usersbottom-of-page top-of-page(app)/webspace/[uuidShort]/users/page.tsx
webspace-wafbottom-of-page top-of-page(app)/webspace/[uuidShort]/waf/page.tsx

Game server pages

pagelocation valuesSource
server-activitiesactivity-bottom activity-top(app)/server/[uuidShort]/activities/page.tsx
server-allocationsallocation-bottom allocation-header(app)/server/[uuidShort]/allocations/page.tsx
server-backupsbackup-bottom backup-header(app)/server/[uuidShort]/backups/page.tsx
server-backups-newafter-header bottom-of-page top-of-page(app)/server/[uuidShort]/backups/new/page.tsx
server-consoleafter-header after-performance after-terminal after-wings-status before-performance before-terminal bottom-of-page top-of-page under-server-info-cardssrc/components/server/ServerConsolePage.tsx
server-databasesafter-databases-list after-warning-banner before-databases-list bottom-of-page top-of-page(app)/server/[uuidShort]/databases/page.tsx
server-databases-newafter-header bottom-of-page top-of-page(app)/server/[uuidShort]/databases/new/page.tsx
server-fastdlafter-header bottom-of-page top-of-page(app)/server/[uuidShort]/fastdl/page.tsx
server-file-editorafter-header bottom-of-page top-of-page(app)/server/[uuidShort]/files/edit/page.tsx
server-filesafter-files-list after-header after-search-bar before-files-list bottom-of-page top-of-page(app)/server/[uuidShort]/files/page.tsx
server-firewallafter-header after-rules-list before-rules-list bottom-of-page top-of-page(app)/server/[uuidShort]/firewall/page.tsx
server-importafter-header after-imports-list before-imports-list bottom-of-page top-of-page(app)/server/[uuidShort]/import/page.tsx
server-import-newafter-header bottom-of-page top-of-page(app)/server/[uuidShort]/import/new/page.tsx
server-lifecycle-hooksbottom-of-page top-of-page(app)/server/[uuidShort]/lifecycle-hooks/page.tsx
server-lifecycle-step-createbottom-of-page top-of-page(app)/server/[uuidShort]/lifecycle-hooks/step/new/page.tsx
server-lifecycle-step-editbottom-of-page top-of-page(app)/server/[uuidShort]/lifecycle-hooks/step/[stepId]/edit/page.tsx
server-plugin-pagebottom-of-page top-of-page(app)/server/[uuidShort]/[[...pluginPath]]/page.tsx
server-proxyafter-header after-proxies-list before-proxies-list bottom-of-page top-of-page(app)/server/[uuidShort]/proxy/page.tsx
server-proxy-newafter-header bottom-of-page top-of-page(app)/server/[uuidShort]/proxy/new/page.tsx
server-schedulesafter-header after-schedules-list bottom-of-page top-of-page(app)/server/[uuidShort]/schedules/page.tsx
server-schedules-editafter-header(app)/server/[uuidShort]/schedules/[id]/edit/page.tsx
server-schedules-newafter-header(app)/server/[uuidShort]/schedules/new/page.tsx
server-settingsafter-delete-server after-header after-server-actions after-server-info after-sftp-details bottom-of-page top-of-page(app)/server/[uuidShort]/settings/page.tsx
server-startupafter-docker-image after-header after-spell-selection after-startup-command after-variables bottom-of-page top-of-page(app)/server/[uuidShort]/startup/page.tsx
server-startup-transfer-spellafter-header bottom-of-page top-of-page(app)/server/[uuidShort]/startup/transfer/spell/page.tsx
server-subdomainsafter-header after-subdomains-list before-subdomains-list bottom-of-page top-of-page(app)/server/[uuidShort]/subdomains/page.tsx
server-subdomains-newafter-header bottom-of-page top-of-page(app)/server/[uuidShort]/subdomains/new/page.tsx
server-tasksafter-header after-tasks-list before-tasks-list bottom-of-page top-of-page(app)/server/[uuidShort]/schedules/[id]/tasks/page.tsx
server-tasks-editafter-header bottom-of-page top-of-page(app)/server/[uuidShort]/schedules/[id]/tasks/[taskId]/edit/page.tsx
server-tasks-newafter-header bottom-of-page top-of-page(app)/server/[uuidShort]/schedules/[id]/tasks/new/page.tsx
server-usersafter-header after-subusers-list before-subusers-list bottom-of-page top-of-page(app)/server/[uuidShort]/users/page.tsx

VDS pages

pagelocation valuesSource
vds-activitiesbottom-of-page top-of-page(app)/vds/[id]/activities/page.tsx
vds-backupsbottom-of-page top-of-page(app)/vds/[id]/backups/page.tsx
vds-console(app)/vds/[id]/VdsConsolePage.tsx
vds-networkbottom-of-page top-of-page(app)/vds/[id]/network/page.tsx
vds-plugin-pagebottom-of-page top-of-page(app)/vds/[id]/[[...pluginPath]]/page.tsx
vds-settingsbottom-of-page top-of-page(app)/vds/[id]/settings/page.tsx
vds-usersbottom-of-page top-of-page(app)/vds/[id]/users/page.tsx