Custom Dashboard Pages
This page explains how plugins can ship custom dashboard pages.
1. How loading works
When Athena starts and the dashboard is enabled, it checks every loaded plugin for:
/plugins/<plugin_name>/src/dashboard/addon.json
If present, Athena copies your plugin dashboard files into the main dashboard app and adds your addon to the sidebar automatically.
2. Required manifest
Create:
/plugins/<plugin_name>/src/dashboard/addon.json
Example:
{
"name": "Template Addon",
"slug": "template-addon",
"icon": "TbPlug",
"description": "Sample custom dashboard page bundled with the plugin template."
}Required fields
name: Sidebar or page title.
slug: URL path key. It must be unique.
Optional fields
icon: Tabler icon key. Defaults to
TbPlug.description: Subtitle shown in the addon layout header.
The
slugshould be lowercase kebab-case and should not change after release, otherwise old links and bookmarks may break.
3. Folder structure
Use this structure inside your plugin:
How each folder is used:
pages/: Copied to the dashboard app route/addons/<slug>/...components/: Copied todashboard/components/addons/<slug>/...api/: Copied todashboard/app/api/addons/<slug>/...
4. Route and imports
For addon slug template-addon:
src/dashboard/pages/page.jsxbecomes/addons/template-addonImport shared components from
dashboard/components/addons/template-addon
Example import in your page.jsx:
If you rename the slug, update any imports that include the old slug path.
The dashboard currently maps addon icons using a fixed icon map. If you use a custom icon key that is not available there, the UI falls back to TbPlug.
5. Fetching plugin data
The most common pattern is reading your plugin config through Web API dashboard routes:
Save updates with:
Last updated