Plugins
Plugins
As with WordPress, you add features with plugins. The difference: a single plugin can include both an admin side (Laravel) and a site side (Next.js). Enable it in the admin, and it reaches the site from the next build.
What plugins can do
Laravel
Admin side
adminRoutes()Admin pages
Add screens under /admin
menu()Sidebar menu
Add items to the admin menu
dashboardWidget()Dashboard
Add widgets to the dashboard
migrations()Tables
Create tables dedicated to the plugin
apiRoutes()Public API
Add APIs read by the static build
mcpRoutes() / mcpScopes()MCP tools
Add tools and permissions for AI agents
artisan() / schedule()Commands and schedules
Scheduled jobs such as data imports
publicSettings() / frontendEnv()Passing settings
Settings and environment variables passed to the site
Next.js
Site side
routes/Site pages
Add new sets of pages to the public site
nav / footerLinksNavigation
Add links to the header and footer
slotsSlots
Insert components below articles, at the end of the home page, and more
sectionsHome page components
Add section types for static pages
sitemapSitemap
List added pages in sitemap.xml
trackingClick tracking
Add classification rules for CTA clicks
Hooks 17
Hook your own logic into moments such as installation, builds, plugin activation and analytics events (the same idea as WordPress actions / filters).
- cms.core.installed
- cms.core.upgraded
- cms.core.booted
- cms.setup.completed
- cms.plugin.installed
- cms.plugin.enabled
- cms.plugin.disabled
- cms.plugin.updated
- cms.build.before
- cms.build.after
- cms.frontend.env
- cms.public_settings
- cms.page.section_types
- cms.mcp.tools
- cms.mcp.scopes
- cms.tracking.event_recorded
- cms.tracking.conversion_recorded
Example plugins
- Bundled
Campaign LPs
Manage and track campaign pages imported from external landing-page tools.
- Bundled
Hello World
A plugin template. Shows the minimal setup for the admin, the API, and the site side.
- Running on our own media
Regional directory
Listing pages by prefecture, municipality, and station, detail pages, and data imports — all in one plugin.
Build, install, distribute
php artisan plugin:make my-feature --frontendScaffold a plugin (admin side + site side)
php artisan plugin:listDiscovered plugins and their status
php artisan plugin:enable my-featureEnable (also creates tables)
php artisan plugin:install plugin-my-feature.zip --enableInstall a distribution zip and enable it
./scripts/package.sh --plugin my-featureBuild a distribution zip
laravel/plugins/my-feature/
├── plugin.json # id, name, version, required core
├── src/Plugin.php # registers admin, API, MCP and jobs
├── routes/ # admin.php / api.php / mcp.php
└── database/migrations/
frontend/src/plugins/my-feature/
├── plugin.ts # nav, footer, analytics rules
├── plugin.server.ts # slots, sections, sitemap
└── routes/default/ # pages added to the siteData is kept when you disable a plugin (just like WordPress). Pages from disabled plugins are left out of the build.