Project reference
Installation
For the complete application walkthrough, start with the Inlay user guide. This page is the shorter installation and deployment reference.
Complete React or Vue panel
Start from any Laravel 12 or 13 application, including a brand-new application from
laravel new:
composer require inlayphp/inlay:"^0.3"
php artisan inlay:install --panelsThe installer detects a plain Laravel application and scaffolds the missing
Inertia 3 React or Vue entrypoint, root Blade view, HandleInertiaRequests
middleware, and Vite/renderer dependencies. It then creates an
application-owned panel provider, User CRUD, panel authentication and account
settings, renderer page wrappers, npm dependencies, and Tailwind source
discovery. Media is disabled by default; add --media to register the Media
Manager, publish its migrations, and generate its renderer page. Existing
starter-kit dependencies and entrypoints are preserved. The original Laravel
resources/js/app.js entrypoint is kept in Vite's inputs when present so the
default welcome route remains valid. Select the Vue preset with
--renderer=vue; React is the default.
It prints the remaining commands for the package manager detected from the
application's lockfile. A typical pnpm installation finishes with:
php artisan migrate
php artisan inlay:make-user
pnpm run build
php artisan inlay:doctor --productionOpen /admin after the doctor reports Inlay is ready.
For a Vue starter or a plain Laravel application using Vue:
php artisan inlay:install --panels --renderer=vue
php artisan migrate
php artisan inlay:make-user
pnpm run build
php artisan inlay:doctor --productionTailwind CSS 4
Inlay renderers ship utility markup rather than a second compiled stylesheet.
The consuming application therefore compiles one consistent theme and can
override shared tokens once. The installer adds this rule to
resources/css/app.css:
@source '../../node_modules/@inlayphp/*/src/**/*.{ts,tsx,vue}';The path is relative to resources/css/app.css. Keep the rule even when the
application is developed inside a monorepo: production and CI normally install
the renderers under node_modules without sibling package source directories.
Installation diagnostics
Run the lightweight checks before building:
php artisan inlay:doctorAfter Vite builds the production manifest and stylesheet, require compiled CSS verification:
php artisan inlay:doctor --productionThe production check fails when the manifest, stylesheet, or representative Inlay form utilities are missing. This prevents a deployment from succeeding with functional JavaScript but unstyled Forms, Tables, or panel controls.
Safe reruns and custom installations
inlay:install is safe to rerun after a package-manager or deployment failure.
Existing application-owned panel providers, Resources, validation classes, and
page wrappers are preserved. Missing supporting files are restored. Pass
--force only to regenerate those files intentionally.
Useful presets include:
php artisan inlay:install --panels --media
php artisan inlay:install --panels --without-users
php artisan inlay:install --panels --no-frontend
php artisan inlay:install --renderer=noneMedia is disabled by default. --without-media remains accepted as a legacy
alias for scripts that used the previous default.
Use --no-npm when CI or a container build installs frontend dependencies in a
separate phase. The installer still updates package.json, writes page wrappers,
and configures Tailwind.
Standalone Forms and Tables
Applications that do not need a panel can install only their PHP builders and official renderer packages:
composer require inlayphp/forms inlayphp/tables inlayphp/actions inlayphp/validation
pnpm add @inlayphp/forms-react @inlayphp/tables-react @inlayphp/actions-reactAdd the same universal Tailwind source rule, build the application, and use
Form or Table directly on ordinary Inertia pages. Panel registration is not
required.
Laravel Cloud and other clean deployments
Commit composer.lock and the frontend lockfile. The deployment must install
both ecosystems before building Vite assets:
composer install --no-interaction --prefer-dist --optimize-autoloader
pnpm install --frozen-lockfile
pnpm run build
php artisan migrate --force
php artisan inlay:doctor --productionUse the equivalent npm, Yarn, or Bun commands when that lockfile is committed.
Do not rely on sibling monorepo paths in @source; Cloud checks out the
standalone repository and installs published packages under node_modules.
For Media Manager uploads, configure INLAY_MEDIA_DISK for persistent or
object storage in production. An ephemeral application filesystem is suitable
for build artifacts but not durable user uploads.
The public Inlay demo is the clean-consumer reference: it has no Composer path repositories or local npm links, and its CI asserts that the production stylesheet contains Inlay utilities.