Lunar v2 is built as a monorepo: a single repository containing several Composer packages (
core, admin, filament, panel, stripe, paypal, and more) plus the shared test suite that exercises them.Prerequisites
- PHP 8.4 or higher
- A working Laravel application (Laravel 12 or 13)
- Composer
- Git
- Node.js 22+ (only needed for panel frontend work)
Setting Up the Monorepo
1. Create a packages directory
In the root of the Laravel application, create apackages directory to hold the monorepo source code.
packages to the .gitignore file so it is not committed to the application’s repository.
2. Clone the repository
Fork the lunarphp/lunar repository on GitHub, then clone the fork into thepackages directory on the 2.x branch.
packages/lunar/.
3. Configure Composer
Back in the Laravel application’scomposer.json, add a path repository and require the monorepo package.
lunarphp/lunarmono package is the monorepo root and includes the packages needed to run a store out of the box: the core engine and the Filament admin panel (via its lunarphp/filament bridge).
The
symlink option ensures that changes made in the packages/lunar directory are immediately reflected in the application without needing to run composer update after every edit.4. Install dependencies
Run Composer from the Laravel application’s root directory to install the local packages.Monorepo Structure
The monorepo contains the following packages underpackages/:
PHP tests for each package live under the top-level
tests/ directory, grouped by package name (tests/core, tests/admin, and so on).
Running Tests
Lunar uses Pest for its PHP test suite. Each package has its own Pest testsuite, defined inphpunit.xml, and CI runs them one at a time rather than as a single combined pass. Run tests from the monorepo root at packages/lunar/, matching CI:
core, admin, panel, filament, shipping, stripe, paypal, search, and upgrade. A demo-data testsuite also exists but is not part of the CI matrix. To run the full local sweep:
Panel Frontend
The Inertia + Vue panel (packages/panel) has its own dependency tree, separate from the monorepo’s root npm workspace, and needs its own install.