Stacks & versions
Choose applications and versions for your project. Roof provides curated managed profiles and a generic environment for Custom roles.
Managed or Custom?
A project can have a backend, a frontend or both. none disables a role; at least one must remain active. Custom is an active role without a managed framework.
- Managed: Roof scaffolds the application when needed, installs dependencies and provides the documented local integration. You select from its shipped catalog.
- Custom: You install and maintain the application, dependencies, framework versions and application configuration. Roof supplies its generic local runtime, routing and available development services.
Choose backend and frontend
Use the interactive selection in roof init or pass type flags. All current managed backends are PHP-based.
Managed backends
- Symfony (symfony)
- Laravel (laravel)
- WordPress (wordpress)
- TYPO3 (typo3)
- Shopware 6 (shopware6)
Managed frontends
- React + Vite (react)
- Vue + Vite (vite-vue)
Choose PHP to match the backend version line. Roof validates the combination during initialization, stack changes and configuration loading. PHP 8.4 is the default for new projects. Older PHP lines may appear as legacy/EOL compatibility options; they are not recommendations for new projects.
React and Vue run with Vite on your machine. Their Node requirements can exceed the CLI minimum; build and up check the selected frontend requirement.
Understand versions
Inspect the catalog of your installed Roof version before selecting a profile. New upstream releases are not automatically added to the offered profiles.
roof versions list- Version line
- The profile line, such as Symfony 7.4 or React 19.3. Select it with --backend-version or --frontend-version.
- Default / Standard
- The preselected profile for a type. It is independent of the lifecycle label.
- Lifecycle
- recommended is a preferred profile, supported a curated alternative and legacy an older compatibility option. The separate upstream status is not a promise for your entire application.
- Verification
- metadata-reviewed, scaffold-tested and runtime-tested describe the available evidence. They do not guarantee every combination of operating system, architecture and application.
- Pin
- The specific curated scaffold, framework or generator version. A generator pin is not the framework version. Resolved dependencies remain recorded in the project lockfiles.
Create a project with explicit versions
This new project uses the currently offered Symfony 7.4 and React 19.3 lines with compatible PHP 8.4. Run the commands in the parent directory of the new project folder.
roof init my-project \
--backend symfony \
--backend-version 7.4 \
--frontend react \
--frontend-version 19.3 \
--php 8.4
cd my-project
roof build
roof upKeep composer.lock and package-lock.json in the project. A version line alone does not guarantee identical fresh installations over time.
Use Custom roles
Custom PHP uses a supported PHP runtime and a webroot relative to the backend directory. Custom Frontend runs your own development command.
roof init custom-php --backend custom --backend-webroot public --php 8.4roof init custom-frontend --frontend custom --frontend-dev-command '{"command":"npm","args":["run","dev"]}'These examples create separate new projects. Then add your application code and install its dependencies yourself. A Custom frontend start command must honor HOST=127.0.0.1 and the allocated PORT. Custom is not a guaranteed framework integration.
Notes & limits
Roof does not silently upgrade existing applications. stack set requires a stopped project and can change a role type or framework version only when the existing role directory is empty. It does not perform framework migrations. A PHP-only change is possible when compatible with the backend profile.
Next steps
Start your project with the projects guide or learn which settings to change with configuration commands. The product page explains the scope of the managed catalog.