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
| Field | Type | Meaning |
|---|---|---|
id | string | Unique widget id. |
component | string | HTML file under Frontend/Components/. |
page | string | Page slug from the table below. |
location | string | Injection point on that page. |
priority | number | Ordering among widgets at the same location. |
enabled, hidden | boolean or rule | See visibility rules. |
pluginName, title, description, icon | string | Labels shown in the card header. |
size | full | 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 / useRawRendering | boolean | Render 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 withequals(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
page | location values | Source |
|---|---|---|
admin-ai-agent | after-header before-content bottom-of-page top-of-page | (app)/admin/featherpanel-ai-agent/page.tsx |
admin-analytics | bottom-of-page top-of-page | (app)/admin/analytics/page.tsx |
admin-analytics-activity | bottom-of-page top-of-page | (app)/admin/analytics/activity/page.tsx |
admin-analytics-content | bottom-of-page top-of-page | (app)/admin/analytics/content/page.tsx |
admin-analytics-infrastructure | bottom-of-page top-of-page | (app)/admin/analytics/infrastructure/page.tsx |
admin-analytics-knowledgebase | bottom-of-page top-of-page | (app)/admin/analytics/knowledgebase/page.tsx |
admin-analytics-plugins | bottom-of-page top-of-page | (app)/admin/analytics/plugins/page.tsx |
admin-analytics-servers | bottom-of-page top-of-page | (app)/admin/analytics/servers/page.tsx |
admin-analytics-system | bottom-of-page top-of-page | (app)/admin/analytics/system/page.tsx |
admin-analytics-tickets | bottom-of-page top-of-page | (app)/admin/analytics/tickets/page.tsx |
admin-analytics-users | bottom-of-page top-of-page | (app)/admin/analytics/users/page.tsx |
admin-analytics-vds | bottom-of-page top-of-page | (app)/admin/analytics/vds/page.tsx |
admin-api-keys | bottom-of-page top-of-page | (app)/admin/api-keys/page.tsx |
admin-databases-management | after-header bottom-of-page top-of-page | (app)/admin/databases/management/page.tsx |
admin-dev-console | bottom-of-page top-of-page | (app)/admin/dev/console/page.tsx |
admin-dev-logs-redirect | bottom-of-page top-of-page | (app)/admin/dev/logs/page.tsx |
admin-dev-plugins | after-header before-list bottom-of-page top-of-page | (app)/admin/dev/plugins/page.tsx |
admin-dev-plugins-create | bottom-of-page top-of-page | (app)/admin/dev/plugins/create/page.tsx |
admin-dev-plugins-edit | bottom-of-page top-of-page | (app)/admin/dev/plugins/[identifier]/edit/page.tsx |
admin-feathercloud-marketplace | after-header before-content bottom-of-page top-of-page | (app)/admin/feathercloud/marketplace/page.tsx |
admin-feathercloud-spells | after-header before-content bottom-of-page top-of-page | (app)/admin/feathercloud/spells/page.tsx |
admin-featherzerotrust | bottom-of-page top-of-page | (app)/admin/featherzerotrust/page.tsx |
admin-home | after-header after-widgets-grid before-widgets-grid bottom-of-page top-of-page | (app)/admin/page.tsx |
admin-images | after-header before-list bottom-of-page top-of-page | (app)/admin/images/page.tsx |
admin-knowledgebase-article-edit | after-header before-content bottom-of-page top-of-page | (app)/admin/knowledgebase/articles/[id]/edit/page.tsx |
admin-knowledgebase-categories | after-header before-list bottom-of-page top-of-page | (app)/admin/knowledgebase/categories/page.tsx |
admin-knowledgebase-category-articles | after-header before-list bottom-of-page top-of-page | (app)/admin/knowledgebase/categories/[id]/articles/page.tsx |
admin-ldap-providers | bottom-of-page top-of-page | (app)/admin/ldap-providers/page.tsx |
admin-locations | after-header before-list bottom-of-page top-of-page | (app)/admin/locations/page.tsx |
admin-logs | bottom-of-page top-of-page | (app)/admin/logs/page.tsx |
admin-mail-templates | after-header before-list bottom-of-page top-of-page | (app)/admin/mail-templates/page.tsx |
admin-mounts | after-header top-of-page | (app)/admin/mounts/page.tsx |
admin-node-databases | bottom-of-page top-of-page | (app)/admin/databases/nodes/page.tsx |
admin-node-databases-id | bottom-of-page top-of-page | (app)/admin/nodes/[id]/databases/page.tsx |
admin-nodes | after-header before-list bottom-of-page top-of-page | (app)/admin/nodes/page.tsx |
admin-nodes-create | after-header bottom-of-page top-of-page | (app)/admin/nodes/create/page.tsx |
admin-nodes-edit | after-header bottom-of-page top-of-page | (app)/admin/nodes/[id]/edit/page.tsx |
admin-nodes-status | after-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-notifications | after-header before-list bottom-of-page top-of-page | (app)/admin/notifications/page.tsx |
admin-oidc-providers | bottom-of-page top-of-page | (app)/admin/oidc-providers/page.tsx |
admin-plugin-page | bottom-of-page top-of-page | (app)/admin/[...pluginPath]/page.tsx |
admin-plugins | after-header bottom-of-page top-of-page | (app)/admin/plugins/page.tsx |
admin-pterodactyl-importer | after-header before-content bottom-of-page top-of-page | (app)/admin/pterodactyl-importer/page.tsx |
admin-rate-limits | after-header before-list bottom-of-page top-of-page | (app)/admin/rate-limits/page.tsx |
admin-realms | after-header before-list bottom-of-page top-of-page | (app)/admin/realms/page.tsx |
admin-roles | after-header before-list bottom-of-page top-of-page | (app)/admin/roles/page.tsx |
admin-roles-create | bottom-of-page top-of-page | (app)/admin/roles/create/page.tsx |
admin-roles-edit | bottom-of-page top-of-page | (app)/admin/roles/[id]/edit/page.tsx |
admin-servers | after-header before-list top-of-page | (app)/admin/servers/page.tsx |
admin-servers-create | after-header bottom-of-page top-of-page | (app)/admin/servers/create/page.tsx |
admin-servers-edit | after-header bottom-of-page top-of-page | (app)/admin/servers/[id]/edit/page.tsx |
admin-settings | after-header bottom-of-page top-of-page | (app)/admin/settings/page.tsx |
admin-spells | after-header before-list bottom-of-page top-of-page | (app)/admin/spells/page.tsx |
admin-spells-create | after-header bottom-of-page top-of-page | (app)/admin/spells/create/page.tsx |
admin-spells-edit | after-header bottom-of-page top-of-page | (app)/admin/spells/[id]/edit/page.tsx |
admin-storage-sense | bottom-of-page top-of-page | (app)/admin/storage-sense/page.tsx |
admin-subdomains | after-header before-list bottom-of-page top-of-page | (app)/admin/subdomains/page.tsx |
admin-tickets | after-header before-list bottom-of-page top-of-page | (app)/admin/tickets/page.tsx |
admin-tickets-categories | bottom-of-page top-of-page | (app)/admin/tickets/categories/page.tsx |
admin-tickets-priorities | bottom-of-page top-of-page | (app)/admin/tickets/priorities/page.tsx |
admin-tickets-statuses | bottom-of-page top-of-page | (app)/admin/tickets/statuses/page.tsx |
admin-tickets-view | after-header after-messages sidebar-bottom sidebar-top top-of-page | (app)/admin/tickets/[uuid]/page.tsx |
admin-translations | after-header bottom-of-page top-of-page | (app)/admin/translations/page.tsx |
admin-users | after-header before-list bottom-of-page top-of-page | (app)/admin/users/page.tsx |
admin-users-create | after-header bottom-of-page top-of-page | (app)/admin/users/create/page.tsx |
admin-users-edit | after-header bottom-of-page top-of-page | (app)/admin/users/[uuid]/edit/page.tsx |
admin-users-servers | bottom-of-page top-of-page | (app)/admin/users/[uuid]/servers/page.tsx |
admin-vds-node-edit | bottom-of-page top-of-page | (app)/admin/vds-nodes/[id]/edit/page.tsx |
admin-vds-nodes-create | after-header bottom-of-page top-of-page | (app)/admin/vds-nodes/create/page.tsx |
admin-vm-instance-edit | bottom-of-page top-of-page | (app)/admin/vm-instances/[id]/edit/page.tsx |
admin-vm-instances | after-header before-list top-of-page | (app)/admin/vm-instances/page.tsx |
admin-vm-instances-create | after-header bottom-of-page top-of-page | (app)/admin/vm-instances/create/page.tsx |
admin-vm-nodes | after-header before-list bottom-of-page top-of-page | (app)/admin/vds-nodes/page.tsx |
admin-web-node-edit | after-header bottom-of-page top-of-page | (app)/admin/web-nodes/[id]/edit/page.tsx |
admin-web-nodes | after-header before-list bottom-of-page top-of-page | (app)/admin/web-nodes/page.tsx |
admin-web-nodes-create | after-header bottom-of-page top-of-page | (app)/admin/web-nodes/create/page.tsx |
admin-webplates | after-header before-list bottom-of-page top-of-page | (app)/admin/webplates/page.tsx |
admin-webplates-create | after-header bottom-of-page top-of-page | (app)/admin/webplates/create/page.tsx |
admin-webplates-edit | after-header bottom-of-page top-of-page | (app)/admin/webplates/[id]/edit/page.tsx |
admin-webspaces | after-header before-list top-of-page | (app)/admin/webspaces/page.tsx |
Client area, auth and account
page | location values | Source |
|---|---|---|
auth-forgot-password | auth-forgot-password-after-form auth-forgot-password-before-form auth-forgot-password-bottom auth-forgot-password-top | (app)/auth/forgot-password/ForgotPasswordForm.tsx |
auth-login | auth-login-after-form auth-login-before-form auth-login-top | (app)/auth/login/LoginForm.tsx |
auth-register | auth-register-after-form auth-register-before-form auth-register-bottom auth-register-top | (app)/auth/register/RegisterForm.tsx |
auth-reset-password | auth-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-2fa | auth-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-2fa | auth-verify-2fa-after-form auth-verify-2fa-before-form auth-verify-2fa-bottom auth-verify-2fa-top | (app)/auth/verify-2fa/VerifyTwoFactorForm.tsx |
dashboard | after-server-list before-server-list bottom-of-page top-of-page | (app)/dashboard/page.tsx |
dashboard-account | after-profile-card after-tabs bottom-of-page top-of-page | (app)/dashboard/account/page.tsx |
dashboard-knowledgebase | after-categories-list after-header before-categories-list bottom-of-page top-of-page | (app)/dashboard/knowledgebase/page.tsx |
dashboard-knowledgebase-article | after-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-category | after-articles-list after-header before-articles-list bottom-of-page top-of-page | (app)/dashboard/knowledgebase/category/[id]/page.tsx |
dashboard-servers | after-header after-server-list before-server-list bottom-of-page top-of-page | (app)/dashboard/servers/page.tsx |
dashboard-status | after-global-stats after-header after-node-list before-node-list bottom-of-page top-of-page | (app)/dashboard/status/page.tsx |
dashboard-tickets-create | after-header bottom-of-page top-of-page | (app)/dashboard/tickets/create/page.tsx |
dashboard-tickets-list | after-filters after-header after-tickets-list before-tickets-list bottom-of-page top-of-page | (app)/dashboard/tickets/page.tsx |
dashboard-tickets-view | after-header after-messages bottom-of-page sidebar-bottom sidebar-top top-of-page | (app)/dashboard/tickets/[uuid]/page.tsx |
WebSpace pages
page | location values | Source |
|---|---|---|
dashboard-webspaces | after-header after-toolbar bottom-of-page top-of-page | (app)/dashboard/webspaces/page.tsx |
webspace-access | bottom-of-page top-of-page | (app)/webspace/[uuidShort]/access/page.tsx |
webspace-activities | bottom-of-page top-of-page | (app)/webspace/[uuidShort]/activities/page.tsx |
webspace-analytics | bottom-of-page top-of-page | (app)/webspace/[uuidShort]/analytics/page.tsx |
webspace-apps | bottom-of-page top-of-page | (app)/webspace/[uuidShort]/apps/page.tsx |
webspace-backups | bottom-of-page top-of-page | (app)/webspace/[uuidShort]/backups/page.tsx |
webspace-console | after-header after-terminal bottom-of-page top-of-page | src/components/webspace/WebSpaceConsolePage.tsx |
webspace-databases | bottom-of-page top-of-page | (app)/webspace/[uuidShort]/databases/page.tsx |
webspace-databases-new | bottom-of-page top-of-page | (app)/webspace/[uuidShort]/databases/new/page.tsx |
webspace-domains | bottom-of-page top-of-page | (app)/webspace/[uuidShort]/domains/page.tsx |
webspace-email | bottom-of-page top-of-page | (app)/webspace/[uuidShort]/email/page.tsx |
webspace-file-editor | bottom-of-page top-of-page | (app)/webspace/[uuidShort]/files/edit/page.tsx |
webspace-files | bottom-of-page top-of-page | (app)/webspace/[uuidShort]/files/page.tsx |
webspace-files-trash | bottom-of-page top-of-page | (app)/webspace/[uuidShort]/files/trash/page.tsx |
webspace-logs | bottom-of-page top-of-page | (app)/webspace/[uuidShort]/logs/page.tsx |
webspace-malware | bottom-of-page top-of-page | (app)/webspace/[uuidShort]/malware/page.tsx |
webspace-plugin-page | bottom-of-page top-of-page | (app)/webspace/[uuidShort]/[[...pluginPath]]/page.tsx |
webspace-schedules | bottom-of-page top-of-page | (app)/webspace/[uuidShort]/schedules/page.tsx |
webspace-settings | bottom-of-page top-of-page | (app)/webspace/[uuidShort]/settings/page.tsx |
webspace-users | bottom-of-page top-of-page | (app)/webspace/[uuidShort]/users/page.tsx |
webspace-waf | bottom-of-page top-of-page | (app)/webspace/[uuidShort]/waf/page.tsx |
Game server pages
page | location values | Source |
|---|---|---|
server-activities | activity-bottom activity-top | (app)/server/[uuidShort]/activities/page.tsx |
server-allocations | allocation-bottom allocation-header | (app)/server/[uuidShort]/allocations/page.tsx |
server-backups | backup-bottom backup-header | (app)/server/[uuidShort]/backups/page.tsx |
server-backups-new | after-header bottom-of-page top-of-page | (app)/server/[uuidShort]/backups/new/page.tsx |
server-console | after-header after-performance after-terminal after-wings-status before-performance before-terminal bottom-of-page top-of-page under-server-info-cards | src/components/server/ServerConsolePage.tsx |
server-databases | after-databases-list after-warning-banner before-databases-list bottom-of-page top-of-page | (app)/server/[uuidShort]/databases/page.tsx |
server-databases-new | after-header bottom-of-page top-of-page | (app)/server/[uuidShort]/databases/new/page.tsx |
server-fastdl | after-header bottom-of-page top-of-page | (app)/server/[uuidShort]/fastdl/page.tsx |
server-file-editor | after-header bottom-of-page top-of-page | (app)/server/[uuidShort]/files/edit/page.tsx |
server-files | after-files-list after-header after-search-bar before-files-list bottom-of-page top-of-page | (app)/server/[uuidShort]/files/page.tsx |
server-firewall | after-header after-rules-list before-rules-list bottom-of-page top-of-page | (app)/server/[uuidShort]/firewall/page.tsx |
server-import | after-header after-imports-list before-imports-list bottom-of-page top-of-page | (app)/server/[uuidShort]/import/page.tsx |
server-import-new | after-header bottom-of-page top-of-page | (app)/server/[uuidShort]/import/new/page.tsx |
server-lifecycle-hooks | bottom-of-page top-of-page | (app)/server/[uuidShort]/lifecycle-hooks/page.tsx |
server-lifecycle-step-create | bottom-of-page top-of-page | (app)/server/[uuidShort]/lifecycle-hooks/step/new/page.tsx |
server-lifecycle-step-edit | bottom-of-page top-of-page | (app)/server/[uuidShort]/lifecycle-hooks/step/[stepId]/edit/page.tsx |
server-plugin-page | bottom-of-page top-of-page | (app)/server/[uuidShort]/[[...pluginPath]]/page.tsx |
server-proxy | after-header after-proxies-list before-proxies-list bottom-of-page top-of-page | (app)/server/[uuidShort]/proxy/page.tsx |
server-proxy-new | after-header bottom-of-page top-of-page | (app)/server/[uuidShort]/proxy/new/page.tsx |
server-schedules | after-header after-schedules-list bottom-of-page top-of-page | (app)/server/[uuidShort]/schedules/page.tsx |
server-schedules-edit | after-header | (app)/server/[uuidShort]/schedules/[id]/edit/page.tsx |
server-schedules-new | after-header | (app)/server/[uuidShort]/schedules/new/page.tsx |
server-settings | after-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-startup | after-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-spell | after-header bottom-of-page top-of-page | (app)/server/[uuidShort]/startup/transfer/spell/page.tsx |
server-subdomains | after-header after-subdomains-list before-subdomains-list bottom-of-page top-of-page | (app)/server/[uuidShort]/subdomains/page.tsx |
server-subdomains-new | after-header bottom-of-page top-of-page | (app)/server/[uuidShort]/subdomains/new/page.tsx |
server-tasks | after-header after-tasks-list before-tasks-list bottom-of-page top-of-page | (app)/server/[uuidShort]/schedules/[id]/tasks/page.tsx |
server-tasks-edit | after-header bottom-of-page top-of-page | (app)/server/[uuidShort]/schedules/[id]/tasks/[taskId]/edit/page.tsx |
server-tasks-new | after-header bottom-of-page top-of-page | (app)/server/[uuidShort]/schedules/[id]/tasks/new/page.tsx |
server-users | after-header after-subusers-list before-subusers-list bottom-of-page top-of-page | (app)/server/[uuidShort]/users/page.tsx |
VDS pages
page | location values | Source |
|---|---|---|
vds-activities | bottom-of-page top-of-page | (app)/vds/[id]/activities/page.tsx |
vds-backups | bottom-of-page top-of-page | (app)/vds/[id]/backups/page.tsx |
vds-console | (app)/vds/[id]/VdsConsolePage.tsx | |
vds-network | bottom-of-page top-of-page | (app)/vds/[id]/network/page.tsx |
vds-plugin-page | bottom-of-page top-of-page | (app)/vds/[id]/[[...pluginPath]]/page.tsx |
vds-settings | bottom-of-page top-of-page | (app)/vds/[id]/settings/page.tsx |
vds-users | bottom-of-page top-of-page | (app)/vds/[id]/users/page.tsx |