Search by

sineld / voyager

sineld

Voyager — the missing Laravel admin. Maintained fork supporting Laravel 12/13/14 on PHP 8.4+.

Package info

github.com/sineld/voyager

pkg:composer/sineld/voyager

Fund package maintenance!

tnylea

fletch3555

emptynick

Statistics

Installs: 8

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v2.0.2 2026-09-12 22:20 UTC

This package is auto-updated.

Last update: 2026-09-12 22:20:20 UTC


README

Tests Latest version Downloads License

Voyager — The Missing Laravel Admin

A maintained fork of Voyager, the BREAD/CRUD admin package for Laravel: media manager, menu builder, settings, roles and permissions, and a database/table editor.

Upstream tcg/voyager stopped at Laravel 11 and PHP 8.3. This fork carries it forward to Laravel 12 / 13 / 14 on PHP 8.4 / 8.5 / 8.6, and repairs the features that broke when Laravel dropped doctrine/dbal and Intervention Image moved to v3.

Requirements

Supported
PHP 8.4, 8.5, 8.6
Laravel 12.x, 13.x, 14.x
Databases MySQL, MariaDB, PostgreSQL, SQLite, SQL Server

Installation

composer require sineld/voyager

Then install Voyager. Use --with-dummy to also get demo data (pages, posts, users, menus):

php artisan voyager:install

# or, with demo content
php artisan voyager:install --with-dummy

Create an admin user:

php artisan voyager:admin your@email.com --create

The panel lives at /admin by default. Change it with voyager.user.redirect and the route prefix in config/voyager.php.

Upgrading from tcg/voyager or kupidonkhv/voyager-fork

The namespace is unchanged (TCG\Voyager\…), so it is a drop-in replacement:

composer remove tcg/voyager        # or kupidonkhv/voyager-fork
composer require sineld/voyager

Nothing in your BREADs, migrations, published views or models needs to change. If you published Voyager's views from an older release, delete resources/views/vendor/voyager so the current views are used.

What this fork fixes

Everything below was broken in kupidonkhv/voyager-fork v1.7.43 and is fixed here.

The table editor works again (Tools → Database). SchemaManager::createTable() was called but never defined, and DatabaseUpdater::updateTable() threw RuntimeException('temporarily disabled'). Creating, altering, renaming and dropping tables is reimplemented on Laravel's native schema builder — no doctrine/dbal.

PostgreSQL no longer fatals. 47 type classes still imported Doctrine\DBAL\Platforms\AbstractPlatform, a class that is not installed, so loading the Postgres type set was a hard fatal error.

Every driver works again. BREAD and database table listing ran a hardcoded information_schema query, which is MySQL-only. Replaced with Laravel's Schema::getTableListing().

Media manager uploads work. The media controller still used the Intervention Image v2 API (encode($ext, $quality), fit(), insert(), and the Intervention\Image\Facades\Image facade) against a v3 dependency.

Laravel 13 image binding conflict resolved. Laravel 13 ships its own image abstraction and claims the same image container binding that Intervention's facade uses, so Voyager could be handed the wrong manager. Voyager now builds its own ImageManager and no longer touches that binding — while still honouring the driver in config/image.php. Previously the BREAD image handlers hardcoded GD and silently ignored an Imagick configuration.

Date columns render again. Carbon 3 removed formatLocalized(), which the BREAD browse and read views called for every date/timestamp column — a 500 on any BREAD with a formatted date. Both strftime-style formats (%B %e, %Y) from older BREADs and plain PHP date() formats are accepted.

Column defaults stopped growing quotes. Drivers report defaults as SQL literals ('hello'), which Voyager stored verbatim, so every save wrapped the value in another pair of quotes.

Schema reads are correct. Laravel's schema reader returns nullable, auto_increment, primary and unique; Voyager expected notnull, autoincrement, is_primary and is_unique, so nullability, auto-increment and index types were misread. getNotnull() also returned the inverse of the truth.

The version number shows up. findVersion() looked for the hardcoded package name tcg/voyager, so any fork reported an empty version in the admin footer. It now reads the package's own name from its composer.json.

PHP 8.4 deprecations (implicit nullable parameters) and a stray debug file_put_contents to storage/logs/voyager_debug.log are gone.

Testing

composer install
vendor/bin/phpunit

135 tests run green on PHP 8.4 and 8.5 against Laravel 12 and 13. CI covers that matrix on every push and weekly.

PHPUnit marks every test "risky" because laravel/browser-kit-testing does not restore its error handlers. That is upstream and does not affect results.

Laravel 14 and PHP 8.6

Neither has been released yet, so the constraints (illuminate/support: ^12.0|^13.0|^14.0, php: ^8.4) are deliberately forward-looking and untested against them. When they ship, add them to the CI matrix in .github/workflows/tests.yml and cut a release.

Documentation

The upstream documentation still applies: https://voyager-docs.devdojo.com/

Credits

  • Tony Lea and The Control Group — original author of Voyager
  • kupidonkhv — the Laravel 12 fork this one is based on
  • Sinan Eldem — current maintainer

License

Voyager is open-sourced software licensed under the MIT license.