Skip to content

Create from a git repository

Available for Laravel, blank PHP and WordPress sites. Give rexenv a repository URL and it clones it, provisions the site around it, and runs the setup a fresh checkout needs.

For a Laravel project, three commands, named on the dialog above the Create button before you press it:

Terminal window
composer install
php artisan key:generate
php artisan migrate

vendor/ is gitignored in essentially every PHP project, so a checkout without it does not run. Offering to skip the step would be offering to create a site that 500s on the first request — an option whose only outcome is a broken site is a trap, not a choice.

The PHP version and its extensions are checked before Composer runs

Section titled “The PHP version and its extensions are checked before Composer runs”

A repository says which PHP it needs in its composer.json, and Composer refuses to install on a PHP outside that range — deep in its output, after the clone. rexenv reads the requirement from the cloned composer.json first and stops with the fix in the sentence:

this repository’s composer.json requires PHP >=8.4.1, and this site runs PHP 8.3 — composer install would refuse it. Nothing was installed; switch the site’s PHP version to 8.4 or 8.5 (Site → Settings) and Retry.

Where no PHP version rexenv ships can satisfy it, the sentence says that instead. A constraint rexenv cannot read never blocks a create — Composer still has the last word, and its own refusal now names the wanted and the running version too.

The same check reads every PHP extension the root composer.json and the locked packages in composer.lock require — against the site’s real php -m — and names the first one missing instead of letting the create fail deep inside Composer’s own output:

this repository needs the PHP extension imagick (required by spatie/image), and PHP 8.4 as rexenv ships it does not load it — composer install would refuse it. Nothing was installed; the project cannot run on this site’s PHP as it is.

There is no warning before you press Create. The requirement lives in a file, and the file is not on this machine until the repository is cloned. Pick the PHP version the project needs in the dialog if you know it; if you do not, the refusal tells you and Retry finishes the site.

Cloning uses your own ssh keys, the same ones your terminal uses. rexenv does not ask for a token, does not store credentials, and does not proxy the clone through anything.

Public repos work over https or as owner/repo.

A repository holds a WordPress project’s code and never its database, and the database is what makes a WordPress site a site. So the dialog says, in amber, above the admin fields and before Create:

Your code comes from the repository; the database is new and empty. WordPress is installed into it with the admin account below — none of your posts, options or users come along. Import a dump from the site’s Database tab afterwards if you want them.

“Clone my site” and “clone my site’s code” are different promises, and only the second is on offer. For the first, link the folder and import its database, or use the Valet, Herd or Local migration if it lives in one of those.

Bedrock is recognised by its config/application.php: WordPress core is installed by Composer into web/wp, so the core download is skipped — “this layout installs WordPress core through Composer” — the repository’s own web/wp-config.php stub is left alone, and .env is created from the repository’s .env.example and wired to this site’s database and URL, with a literal WP_SITEURL=${WP_HOME}/wp and eight fresh salts. Plugins land in web/app/plugins.

Separate feature, same idea, scoped to an existing WordPress site: repo add clones a plugin or theme into wp-content, with branch switching, PR refs, dependency checks and dev watchers. See the CLI reference.