mapo-89/core-panel is a Laravel 13 admin package and scaffold built around Inertia v3, Vue 3, PrimeVue, Fortify, Passport, Socialite, Horizon, and Wayfinder.
Read-only split repository: this package repository is automatically synchronized from
mapo-89/core-panel-monorepo. Do not open pull requests or make direct changes here. All development happens in the monorepo.
The package is split into:
mapo-89/core-panel- optional
mapo-89/core-panel-tenancy
The core package stays tenancy-neutral. Tenant-aware behavior lives in the tenancy addon.
- PHP 8.5
- Laravel 13
- Inertia v3
- Vue 3
- Tailwind CSS v4
- PrimeVue
- Fortify
- Passport
- Socialite
- Horizon
- PostgreSQL or MySQL
- Redis
- Wayfinder
Existing Laravel app:
composer require mapo-89/core-panel
php artisan core-panel:installFresh Laravel app:
composer create-project laravel/laravel core-panel-app
cd core-panel-app
composer require mapo-89/core-panel
php artisan core-panel:installCorePanel also registers the short alias:
php artisan core:installRefresh published CorePanel assets after upgrading the package:
composer update mapo-89/core-panel
php artisan core-panel:update --forceIf you also have optional addons installed:
composer update mapo-89/core-panel mapo-89/core-panel-tenancy
php artisan core-panel:update --force --with-addon-updatesFor normal in-place updates, the command also runs outstanding migrations automatically after refreshing the published assets.
If you use --base-path to target a different application directory, migrations are skipped and must be run manually in that target application.
If your application owns the frontend version metadata itself, set "managed_by_application": true in config/app-version.json. In that case, core-panel:update will leave that file untouched, including --force updates.
Typical update runbook for an existing installation:
composer update mapo-89/core-panel
php artisan core-panel:update --force
npm install
npm run build
php artisan optimize:clearIf the tenancy addon is installed, prefer:
composer update mapo-89/core-panel mapo-89/core-panel-tenancy
php artisan core-panel:update --force --with-addon-updatesIf generated assets such as resources/js/actions, resources/js/routes, resources/js/wayfinder, public/build, or public/hot were previously committed, remove them from the Git index once after adopting the new .gitignore:
git rm -r --cached -- resources/js/actions resources/js/routes resources/js/wayfinder public/build public/hotThe installer now asks for:
APP_URL- database driver:
pgsqlormysql - database host / port / name / user / password
- test database name
- default locale
- fallback locale
- whether an initial admin user should be created
- whether migrations and seeders should run
- whether frontend dependencies should be installed and built
- whether the tenancy addon should be installed
If tenancy is enabled, it also asks for:
- central domain
The default central domain is derived from the host part of APP_URL.
Defaults:
- API auth:
passport - light mode by default
- PrimeVue theme always included
- Horizon always enabled
- social login disabled until configured
For local development with a path repository:
composer create-project laravel/laravel core-panel-app
cd core-panel-app
composer config repositories.core-panel '{"type":"path","url":"/home/manue/projects/packages/core-panel/packages/core-panel","options":{"symlink":true,"versions":{"mapo-89/core-panel":"dev-main"}}}'
composer require mapo-89/core-panel:dev-main
php artisan core-panel:installIf you are developing from the monorepo and want the addon too, register both path repositories:
composer config repositories.core-panel '{"type":"path","url":"/home/manue/projects/packages/core-panel/packages/core-panel","options":{"symlink":true,"versions":{"mapo-89/core-panel":"dev-main"}}}'
composer config repositories.core-panel-tenancy '{"type":"path","url":"/home/manue/projects/packages/core-panel/packages/core-panel-tenancy","options":{"symlink":true,"versions":{"mapo-89/core-panel-tenancy":"dev-main"}}}'If tenancy is enabled during install and the addon exists as a sibling package, the installer can add the local addon dependency automatically.
Non-interactive example:
php artisan core-panel:install \
--no-interaction \
--app-url=https://core-panel-app.test \
--db-connection=pgsql \
--db-host=127.0.0.1 \
--db-port=5432 \
--db-database=core_panel \
--db-username=core_panel \
--db-password=core_panel \
--db-database-test=core_panel_test \
--default-locale=de \
--fallback-locale=en \
--create-admin=true \
--admin-name="Admin User" \
--admin-email=admin@example.test \
--admin-password=secret \
--run-migrations=true \
--run-seeders=true \
--install-frontend=false \
--install-tenancy=true \
--central-domain=core-panel-app.test \
--sync-environment=trueIf you keep the default PostgreSQL installer values, the PostgreSQL user core_panel with password core_panel must already exist before running the install command.
Example:
psql postgres
CREATE ROLE core_panel WITH LOGIN PASSWORD 'core_panel' CREATEDB;
CREATE DATABASE core_panel OWNER core_panel;
CREATE DATABASE core_panel_test OWNER core_panel;
\qphp artisan core-panel:publish --tag=config
php artisan core-panel:publish --tag=lang
php artisan core-panel:publish --tag=components
php artisan core-panel:publish --tag=theme
php artisan core-panel:publish --tag=stubsCorePanel is released under the MIT license.