Skip to content

Pinned versions

Nothing here is “latest”. Every binary is pinned to an exact version and locked to a checksum, fetched on demand from its own upstream and prepared for macOS before it runs.

This is the same table the home page shows — one component, one data file, so the marketing claim and this reference cannot drift apart.

PHP

Seven versions. Switch a site between them in one click — no rebuild of docroot, certificate or database.

PHP8.5.8 · 8.4.23 · 8.3.31 · 8.2.31 · 8.1.34Per-site switch, per-version php.ini editorXdebug 3.5.3
PHP 8.08.0.30Past its php.net security-end date, and the app badges it as suchEOL · no Xdebug
PHP 7.47.4.33rexenv's own reproducible build — static-php.dev publishes no 7.4EOL · no Xdebug

Web servers

One shared Nginx serves every site by default. Override per site when a project needs something else.

Nginx1.30.3Shared, one server block per siteDefault
FrankenPHP1.12.4Per-site override; embeds its own PHP
Apache httpd2.4.68Per-site override with working .htaccess
Caddy2.11.4The edge — TLS termination on :80 and :443

Databases

Chosen per site at create time. Each engine keeps a separate data directory per version series, so switching is never an in-place upgrade.

MySQL8.4.6 · 8.0.44:13306
MariaDB12.3.2 · 11.4.1211.4 is the LTS series:13307
PostgreSQL18.4.0 · 17.10.0 · 16.14.0macOS 26+:15432
Redis8.8.0:16379

Tools

Bundled, pinned, and checksum-locked like everything else.

WP-CLI2.12.0Powers the WordPress manager and `rex wp`
Composer2.10.2Always run through the site's own PHP
Adminer5.4.2Deep-linked into the site's database
Mailpit1.30.3Catches every outgoing mail:11025 / 18025
cloudflared2026.6.1Quick tunnels, outbound-only
Xdebug3.5.3PHP 8.1–8.5 only; your IDE listens on 9003

Ports are offset from the usual defaults on purpose, so rexenv never collides with a server you already run.

A local environment that silently moves under you is not reproducible, and “it broke and I changed nothing” is usually a version that changed itself. Pinning means:

  • The stack you had last month is the stack you have today.
  • A version bump is a rexenv release with a changelog, not a background download.
  • Every artefact is verified against a recorded SHA before it is allowed to run, so a compromised or truncated download fails loudly rather than executing.

PHP is per site and one click, in the app or with rex site php <domain> 8.3.

Databases keep a separate data directory per version series, so moving between them is never an in-place upgrade — the old series’ data is still there if you switch back. rex db versions --set <engine> <version> does it from a terminal.