mapo-89/core-panel

A Laravel admin starter kit built with Inertia, Vue, Tailwind CSS, Fortify, Passport, Horizon, and Wayfinder.

Maintainers

Package info

github.com/mapo-89/core-panel

pkg:composer/mapo-89/core-panel

Statistics

Installs: 5

Dependents: 1

Suggesters: 0

Stars: 0

1.1.4 2026-05-20 23:03 UTC

This package is auto-updated.

Last update: 2026-05-20 23:04:20 UTC


README

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.

Stack

  • PHP 8.5
  • Laravel 13
  • Inertia v3
  • Vue 3
  • Tailwind CSS v4
  • PrimeVue
  • Fortify
  • Passport
  • Socialite
  • Horizon
  • PostgreSQL or MySQL
  • Redis
  • Wayfinder

Install

Existing Laravel app:

composer require mapo-89/core-panel
php artisan core-panel:install

Fresh Laravel app:

composer create-project laravel/laravel core-panel-app
cd core-panel-app
composer require mapo-89/core-panel
php artisan core-panel:install

CorePanel also registers the short alias:

php artisan core:install

Update

Refresh published CorePanel assets after upgrading the package:

composer update mapo-89/core-panel
php artisan core-panel:update --force

If 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-updates

For 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:clear

If 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-updates

If 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/hot

The installer now asks for:

  • APP_URL
  • database driver: pgsql or mysql
  • 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

Local Package Development

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:install

If 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=true

If 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;
\q

Publish Commands

php 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=stubs

License

CorePanel is released under the MIT license.