---
url: /getting-started/installation.md
---
# Installation

A new site starts from the [Evolve starter](https://github.com/racerfish/evolve-starter): a Laravel 12 skeleton with `racerfish/evolve` installed, the panel wired, and the theme ready to publish. Everything below runs once per project.

::: tip Step by step
The recipe [Launch a new client site](/recipes/launch-a-client-site) takes these steps through to the deployed site and the switch to live.
:::

## 1. Create the project

```sh
composer create-project racerfish/evolve-starter --ask --repository '{"type": "vcs", "url": "https://github.com/racerfish/evolve-starter"}' --remove-vcs
```

Composer asks for the folder name and installs the dependencies. The starter's install wizard (`php artisan evolve:install`) writes the `.env`, including one `EVOLVE_MODULE_<KEY>` switch per module (since 2.21); `cd` into the folder afterwards.

## 2. Database

```sh
php artisan migrate
php artisan evolve:seed
```

`evolve:seed` seeds the default language, the roles, a home page and the default forms. The panel is at `/evolve`; the first user is created through the panel's registration or with an invitation, see [Roles](/getting-started/roles).

## 3. Modules

Decide which modules the site uses in `config/evolve.php` under `modules`, or with `EVOLVE_MODULE_<KEY>` in the `.env`. Every module and what it adds is on [Modules](/modules/). Run `php artisan migrate` again after enabling a module for the first time.

## 4. Blueprints

Without published blueprint classes no block renders. Publish them from the core and from every module whose blocks the site uses:

```sh
php artisan vendor:publish --tag=evolve.blueprints
php artisan vendor:publish --tag=blog.blueprints --tag=company.blueprints --tag=event.blueprints --tag=scout24.blueprints
php artisan vendor:publish --tag=locator.components --tag=shopify.components --tag=scout24.components
```

The published classes in `app/Blueprints` are the project's to edit, see [Blueprints](/data-modeling/blueprints).

## 5. Theme

The starter ships without a `theme/` directory. Publish the default theme from the package, install its dependencies and build:

```sh
php artisan theme:publish
yarn theme:install
yarn theme:build      # or yarn theme:dev for the dev server with hot reload
```

Theme development is covered in [Frontend](/frontend/).

## 6. Keys and settings

The `.env` holds only what has to live in the environment: `APP_URL` (the real domain, the page cache and the sitemap depend on it), the database, the mail transport, the posture, API secrets and module switches. The starter's `.env.example`  is grouped and commented along these lines and carries no site settings.

Everything the site shows is set in the panel under Settings and stored in the database: site name and branding (General), company identity (Company), sender name and addresses (Mail), tracking ids and consent (Tracking), verification codes (SEO). Walk these tabs once after the first login; the "inherit from .env" options exist for sites whose `.env` predates the [settings store](/panel/settings-store). [Environment Variables](/getting-started/environment-variables) is the reference for the `.env`, [Integrations](/integrations/) the per-service checklist for the secrets.

## 7. Environments and deployment

Declare the live and staging environments in `config/evolve.php` under `deployment`, then `php artisan evolve:env:setup staging` bootstraps the server side and `php artisan deploy staging` ships the first release. See [Environments](/getting-started/environments) and [Deployment](/getting-started/deployment).

## Update channel

The `racerfish/evolve` constraint in `composer.json` decides which releases a project receives. Production projects keep `^2.0` and get stable releases only. A test site can ride release candidates of the next line with `^2.17@RC` (naming the unreleased line; a wider `^2.0@RC` keeps resolving to the newest stable because of `prefer-stable`), and a single feature branch can be validated with an inline alias such as `dev-feature/some-feature as 2.99.x-dev`. `RELEASING.md` in evolve-cms explains how releases and candidates are cut.

::: tip Working on Evolve itself?
See [Workbench](/internals/workbench) to boot the package's own demo installation, no host application required.
:::
