Skeleton Yii2 application with Inertia.js + React 19 integration
Server-driven SPA with Tailwind CSS v4, shadcn/ui, dark mode, Cloudflare Turnstile, and Codeception tests
Use the "Use this template" button on GitHub to create your own repository from this template.
# create a new Yii2 application using the Inertia.js + React 19 template
composer create-project --prefer-dist yii2-extensions/app-inertia-react:^0.1@dev app-react
# navigate to the application directory
cd app-react
# run database migrations
./yii migrate/up
# build production assets (one-shot; for live editing see the HMR workflow below)
npm run build
# start the development server
./yii servenpm run build produces production assets once and exits. To edit .jsx
files and see changes in the browser without rebuilding, run two processes
side by side:
# Terminal 1 — Vite dev server (HMR for .jsx and Tailwind CSS)
npm run dev
# Terminal 2 — Yii2 in dev mode
YII_ENV=dev ./yii serveHow the pieces connect:
public/index.phpreads theYII_ENVenvironment variable. When it equalsdev,inertiaReact.devModeevaluates totrueinconfig/web.php, and the root view emits<script>tags pointing athttp://localhost:5173instead of the built manifest.- React Fast Refresh is wired automatically through
\yii\inertia\react\Bootstrap::reactRefreshPreambleProvider(). Edits to.jsxfiles and CSS update in place without a full page reload. - Before deploying, stop the Vite dev server, run
npm run build, unsetYII_ENV(or set it toprod), and servepublic/. Production mode reads hashed assets frompublic/build/via the Vite manifest.
For CORS guidance on non-localhost setups (Docker, tunnels, reverse proxies), troubleshooting, and the full production-switch procedure, see the adapter's Development Notes.
docker compose up -d