FAQ
Why no Docker?
Section titled “Why no Docker?”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.
Is it free? Is it open source?
Section titled “Is it free? Is it open source?”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.
What is different about the Linux build?
Section titled “What is different about the Linux build?”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.
curl -fsSL https://rexenv.rex.bd/install.sh | bashThat 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.
Can I migrate from Valet, Herd or Local?
Section titled “Can I migrate from Valet, Herd or Local?”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.
Does anything phone home?
Section titled “Does anything phone home?”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.
Does PostgreSQL still need macOS 26?
Section titled “Does PostgreSQL still need macOS 26?”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.
Where does everything live on disk?
Section titled “Where does everything live on disk?”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.