Skip to content

FAQ

Because on a Mac or a PC, Docker means a Linux VM — a literal one on macOS, WSL2 on Windows — and a VM means a filesystem boundary between your editor and your code. That boundary is where the latency comes from, where the file watchers stop firing, and where a large WordPress site goes from fast to tolerable.

rexenv runs the same software — nginx, PHP, MySQL — as native binaries, in the same filesystem your editor is already in. No VM to size, no daemon to keep running, nothing to docker compose up before you can work.

The trade is real and worth naming: you do not get “the exact same image as production”. If byte-identical parity with a Linux container is your requirement, use the container.

Yes, and yes. rexenv is licensed under the Apache License 2.0, and the source is at github.com/rexenv/rexenv — the same repository every release is published from and issues are filed on. It has been public since 30 September 2026; before that the code was private and the downloads came from the Homebrew tap.

Why does my machine say the app is from an unidentified developer?

Section titled “Why does my machine say the app is from an unidentified developer?”

Because it is, on every platform, and for one reason: rexenv is open source and earns nothing, so it buys no code-signing certificate.

On macOS the build is ad-hoc code-signed and not yet notarized by Apple, so Gatekeeper blocks the first double-click. Installing with Homebrew avoids the dialog entirely, because the cask removes the quarantine attribute for you.

On Windows the installer is unsigned, so SmartScreen shows “Windows protected your PC” and hides Run anyway behind More info. Every new release is a new file hash and goes through it again.

The one-command install meets neither dialog, on either platform. Both check a mark that the downloading program writes — the quarantine attribute, the Mark of the Web — and a browser writes it while curl and PowerShell’s Invoke-WebRequest do not. Nothing is switched off or bypassed; the file simply never looked downloaded-from-the-internet to begin with. Windows’ Smart App Control, where it is on, is the exception: it blocks unsigned apps whatever their source.

On Linux the app is not code-signed either, and nothing asks: the .deb installs through apt like any package you download yourself. rexenv’s apt repository is signed, with its own key — that tells apt the package came from rexenv’s repository, which is a different promise from an operating-system vendor vouching for the app.

What actually tells you the file is the one rexenv published is the checksum sidecar next to it. See rexenv won’t open.

What is different about the Windows build?

Section titled “What is different about the Windows build?”

Five components, and three mechanisms.

Not in it at all: Apache, FrankenPHP, Xdebug, Redis and MariaDB. Each is refused by name with the reason rather than offered and then failing — no Apache Lounge trust decision has been made, FrankenPHP is pending its own proof, Xdebug’s DLLs must match each PHP’s compiler exactly and none is pinned yet, Redis publishes no official Windows build, and MariaDB has no Windows pin. MySQL 8.4, MySQL 8.0 and all three PostgreSQL majors ship, so a site has a database either way.

Different mechanisms, same promises: an NRPT rule and a logon task instead of /etc/resolver and a LaunchAgent; your user’s Root store instead of the login keychain; a tray icon instead of a menu-bar icon, with left-click and right-click swapped round to match the platform. The edge still binds 80 and 443 — and on Windows it needs no elevation to do it.

arm64 is not supported. The official PHP builds for Windows are x86/x64 only and PostgreSQL’s portable build is x64 only, so there is nothing native to ship. The x64 build runs under emulation; that is not a configuration rexenv stands behind.

Every page on this site that differs carries a macOS / Windows / Linux switch, and each platform is written out rather than described as a variation of another.

Ubuntu 22.04 or newer, x86_64 or arm64 — a native build of every component for each, as a .deb or an AppImage, since the first Linux release on 27 September 2026.

Terminal window
curl -fsSL https://rexenv.rex.bd/install.sh | bash

That adds rexenv’s signed apt repository and installs the rexenv package from it, so its dependencies come with it and later versions also arrive with sudo apt upgrade.

Not in it: Apache, Xdebug, Redis and MariaDB, each refused with a message naming Linux. On macOS all four are Homebrew bottles, and Homebrew’s Linux bottles are x86_64-only and would need relinking rexenv has not written. FrankenPHP ships, which Windows does not have, and so do all seven PHP versions, MySQL 8.4 and 8.0 and PostgreSQL’s three majors.

Different mechanisms, same promises: a dummy network link, rexenv0, that only .rex names are routed to, instead of /etc/resolver; polkit’s password dialog instead of an admin prompt; the local CA in the system store and in your browsers’ own certificate databases, because Linux has no single store; systemd units for the root edge and for the DNS agent; a tray icon in the top bar whose menu opens on any click.

The codebase was structured for another OS from the start — every OS-specific operation sits behind a platform trait — which is what made the Windows build possible, and then the Linux one.

Will it fight the dev environment I already have?

Section titled “Will it fight the dev environment I already have?”

It tries hard not to.

  • Its ports are deliberately offset from the usual defaults. Mailpit sits on 11025 and 18025 rather than 1025 and 8025, MySQL on 13306 rather than 3306, so a standalone Mailpit, a MailHog, or another local environment’s copy never collides.
  • It never touches a Caddy, nginx, Apache, IIS or MySQL you installed yourself. It manages only the binaries it downloaded, and it identifies its own processes rather than assuming anything listening on a port is its own.
  • Ports 80 and 443 are the exception — those cannot be offset, because that is what a URL without a port number means. If something else holds them, rexenv names what is holding them instead of failing quietly.

Yes — scan, review, import sites, copy databases, and optionally rewrite the connection config, with a diff shown and a backup taken first. Every stage is reversible and the source environment stays strictly read-only throughout: rexenv reads your Valet, Herd or Local setup and never writes to it.

Two things differ for Local. Its sites’ .local domains are re-homed onto your default TLD as they come in, because rexenv refuses .local — shadowing it breaks Bonjour. And a Local site’s database is copied from Local’s own server, which runs only while that site is started in Local; rexenv never starts or stops Local’s servers for you.

That is a macOS screen. The Windows and Linux builds do not look for another tool’s sites yet, and say so rather than reporting “no sites found” about folders nobody searched.

What happens to my sites if I quit rexenv?

Section titled “What happens to my sites if I quit rexenv?”

They keep serving. Closing the app stops nothing — the services outlive it, and rexenv adopts them again when you reopen it. The DNS keeps answering too.

Tunnels are the deliberate exception: a public tunnel dies with the app, because a share you have forgotten about is a share you did not consent to.

The app downloads its components from their upstreams on first use, checksum-verified. Beyond that it does not report usage, and the local certificate authority it creates never leaves your machine.

This website uses Cloudflare Web Analytics, which is cookieless and collects no personal data — which is also why there is no cookie banner on it.

Why is there no dock icon, or taskbar window?

Section titled “Why is there no dock icon, or taskbar window?”

rexenv lives in the menu bar on macOS and in the tray on Windows and Linux. The crowned-R icon is its home; on macOS the menu carries Open rexenv, on Windows a left-click opens the window while a right-click opens the menu — the reverse of macOS, because that is what Windows users expect — and on Linux any click opens the menu, because an appindicator has no click of its own. Closing the window hides it rather than quitting. The reason is the control plane: rex and the AI-agent endpoint are remote controls for the running app, and their sockets die with it, so a close that quit used to take both down while your sites kept serving. Quit with Quit rexenv in the same menu. See Where rexenv lives once it is open.

Not any more. The builds pinned through 0.4.0 were compiled for macOS 26; the current pins are measured at macOS 15 on every binary in them. Now that rexenv runs on macOS 13 and 14, PostgreSQL is the one engine those Macs mostly go without: 14 gets 16.4.0 only, 13 gets none, and the app says which macOS it needs wherever you could choose it. See PostgreSQL.

Your sites in ~/rexenv/Sites — %USERPROFILE%\rexenv\Sites on Windows — unless you point the Sites folder elsewhere. Databases, downloaded components and settings in ~/Library/Application Support/dev.rexenv.rexenv/ on macOS, %LOCALAPPDATA%\rexenv\rexenv\data on Windows and ~/.local/share/rexenv/ on Linux. Linked sites are the exception: those stay wherever you keep them, and rexenv serves them in place. Where things live has every path, including the ones outside that folder.