It's Monday morning. The client's ERP talks to SQL Server, your side project runs on PostgreSQL, and the password-reset email you were testing just landed in a real customer's inbox. On Windows, a morning like that used to mean three installers, a hunt for driver DLLs, and an awkward apology.
Rezure 3.1 is built for that Monday. Since our docs last caught up, Rezure has picked up two new databases, a mail catcher, Node.js version switching, a dedicated PHP extensions page, and a set of fixes that keep PHP standing under real traffic. Here's the full tour.
Already on Rezure 3? Open Changelog in the sidebar and press Update. New to Rezure? Grab the installer from the download page.
Two new databases, no installers to babysit
PostgreSQL, right next to MariaDB
PostgreSQL 18, 17 and 16 now install from inside Rezure with a click. They're portable builds: no setup wizard, no admin prompt, nothing written into Windows. Don't need it anymore? Delete the folder and it's gone.
Best of all, you no longer have to choose. PostgreSQL runs as its own service on port 5432 while MariaDB keeps running beside it, so a Postgres app and a MySQL app can be open in two browser tabs at the same time.
- Laravel connects out of the box. Rezure creates a
rootrole, soDB_CONNECTION=pgsqlworks with Laravel's default username and no password. - Your data stays safe across upgrades. Each major version gets its own data directory, so installing 18 never touches the databases you made on 16.
- It's local only. Like every database in Rezure, PostgreSQL listens on
127.0.0.1and nowhere else.
One tip: PostgreSQL refuses to run from an elevated process. If you opened Rezure with "Run as administrator", open it normally instead. Rezure tells you this up front rather than leaving you with a service that silently won't start.
SQL Server, without the driver scavenger hunt
If you've ever connected PHP to SQL Server on Windows, you know the ritual: find the sqlsrv DLL that matches your exact PHP version, install Microsoft's ODBC driver, and pray the two agree. It's common work in corporate, government, banking and ERP projects, and it has always been the worst part of the setup.
Rezure now handles the whole chain:
- The PHP drivers (
sqlsrvandpdo_sqlsrv), matched to each PHP version you have installed. No admin rights needed. - Microsoft ODBC Driver 18, which those drivers depend on. Rezure downloads Microsoft's official installer and runs it once you've accepted the license yourself. Windows asks for admin rights one time.
- SQL Server LocalDB, if you want a SQL Server on your own laptop. It runs as a regular user process, so starting and stopping it never triggers a UAC prompt.
SQL Server connections, local or remote, also show up on the Databases page. In the spirit of honesty: the ODBC driver and LocalDB are Microsoft installers, so they appear in Windows' app list and stay put if you ever uninstall Rezure.
Your test emails stop escaping
Every developer has a story about the test email that reached a real person. Rezure now ships an answer: Mailpit, a local mail catcher that swallows every message your app sends and shows it in a clean web inbox.
Install it from its card on the Services page, press Start, and point your project at it:
MAIL_MAILER=smtpMAIL_HOST=127.0.0.1MAIL_PORT=1025
That's it. Your emails now land at http://127.0.0.1:8025, one click away through the Open button on the Mailpit card. Messages survive a restart, and Mailpit accepts any username and password, so you don't even have to remove your real provider's credentials from .env.
The project Requirements check keeps an eye on your mail settings too. It catches the two mistakes everyone makes at least once: Laravel's default MAIL_PORT=2525, and MAIL_HOST=mailpit copied from a Docker Sail setup, which means nothing outside Docker.
Node.js, pinned per project
An old frontend that only builds on an older Node, and a new one that wants the latest. Sound familiar? Node.js now has its own row on the Switch page, offering the newest release of every LTS line plus the newest Current release, with the bundled npm version shown next to each.
Set a global version for everyday work, then pin a different one on any project from its project card. Open a terminal from that card and node, npm and npx are exactly the version you pinned. Nothing else on your machine changes.
One button installs everything
The Install version button on the Switch page used to be PHP-only. Now it's the front door for every runtime: PHP, Nginx, MariaDB, PostgreSQL, Mailpit, SQL Server LocalDB, Composer and Node.js. Pick the runtime, pick the version, done.
Version lists come straight from each project's own release feed where one exists (php.net, MariaDB, getcomposer.org, nodejs.org), and every portable download is checked against its SHA-256 checksum before it's unpacked. The dropdown on each row now does one job only: switching between versions you already have.
PHP extensions with a switch, not a text editor
Hunting through php.ini for the right extension= line is over. The new PHP Extensions page, right under Switch in the sidebar, lists around forty extensions per PHP version, grouped by category and searchable: bcmath, gmp, sodium, exif, sockets, ldap, opcache and more. Flip a switch and you're done.
- Each PHP version keeps its own choices. Turning on
gmpfor 8.3 leaves 7.4 alone. - No silent failures. Extensions missing from a particular PHP build are clearly marked not in this build.
- Sensible defaults.
opcachestarts off, because a stale cache can hide the very change you're trying to test. - A nudge when it matters. If PHP is running when you flip a switch, Rezure reminds you to restart it.
Need redis? It doesn't ship with PHP, so the project's Requirements check offers an Install button that fetches a verified build for your PHP version.
The 502s are gone
This one started with a user's log file. Nearly one in twenty requests ended in 502 Bad Gateway, with no pattern anyone could see. We dug in, traced every cause, and fixed them all:
- PHP quit after 500 requests. A built-in
php-cgidefault was quietly retiring the process mid-session. That limit is gone. - One slow request held up the rest. On Windows a
php-cgiprocess serves one request at a time, so a single slow page made everything behind it wait. Each PHP version now runs a small pool of workers. - A crashed PHP stayed down. Now Rezure restarts it automatically, waiting a little longer after each crash. If PHP crashes five times in five minutes, Rezure stops retrying so you can read the log instead of watching a loop.
- Uploads hit a wall at 1 MB. Uploads up to 64 MB and scripts up to 300 seconds now work out of the box, with no more "413 Request Entity Too Large".
And as a bonus, HTTPS calls from PHP just work. Rezure ships an up-to-date CA certificate bundle and wires it into php.ini, and the Requirements check now tests a real HTTPS call from your project's PHP. No more cURL error 60 when your app calls an external API.
A Services page that's actually yours
More services means a longer list, and not everyone needs all of them. The new Manage services button lets you remove the cards you never use: MySQL people can hide SQL Server, SQL Server people can hide MariaDB. Removing a card only hides it. Binaries, data and connections stay exactly where they are, and you can bring the card back any time. Start all and Stop all follow your list.
Make it look like yours
You stare at your tools all day, so they might as well look good. The new Appearance page offers fourteen themes in three collections, Default, Girls and Mens: from the classic coral Rezure and three frosted-glass looks to Lavender Dream, Matcha, Carbon, Forest and a green-on-black Terminal. Fine-tune brightness, color intensity, glass opacity and UI size, or turn down the motion. Light and dark mode sit on a button in the title bar.
And yes, if you want a pink bow on your sidebar, you can have one. Decorations lets you stick stickers anywhere in the window. Two dozen come built in, and Browse pulls new ones from our catalog.
Your AI assistant finally knows where PHP lives
Claude Code, Codex, Cursor and friends learned about Laragon from their training data, but they've never heard of Rezure. On a machine with both, ask an agent to run your tests and it might go looking for PHP in all the wrong places.
So Rezure now writes an AGENTS.md into its home folder, plus a CLAUDE.md that points to it. It's a live snapshot of your setup: the active PHP version, your database, and every project with its URL, folder and the PHP version that actually serves it. A longer companion guide covers ports, folders, the php.ini layers and a few house rules, such as "don't start or kill Rezure's processes yourself". Rezure keeps these files current as your setup changes, and projects inside www pick them up automatically.
Updates in one click, and signed
When a new version is out, a small red dot appears on Changelog in the sidebar. Open it, press Update, and Rezure downloads the installer, shows you the progress, and hands over. That's the whole process.
Every update is cryptographically signed, and Rezure checks that signature against a key built into the app before running anything. We tested it the hard way: an installer with a single bit changed is rejected.
Fixed in 3.1.1: ports that stay free
When a port Rezure needs is already taken, the service card offers to stop whatever is holding it. With Nginx or MySQL 8 that didn't always stick: the process being stopped was only a worker, and its parent immediately started a new one on the same port. Rezure now stops the parent, so a freed port stays free.
What's coming next
Next on the list: Xdebug as a first-class extension, supervised queue workers for your projects, a project health dashboard, and Redis as a service. Over the coming weeks we'll also give each feature in this post its own step-by-step guide.
Something broken, or missing a tool you use every day? Tell us through the Feedback page in the app. We read every single report.
