What BunnyStack is
BunnyStack runs a complete PHP web stack on your Windows machine, and every project gets its own https://<name>.test address. It is a portable alternative to Laragon, with one app window to manage everything.
| Component | What it does | Default port |
|---|---|---|
| Caddy | Web server; serves every .test site over HTTPS | 80, 443 |
| PHP (5.6 to 8.5) | Several versions side by side; each project picks one | internal |
| MariaDB | Database server (user root) | 3306 |
| Mailpit | Catches every email your sites send | 8025 |
| Redis | In-memory cache (optional) | 6379 |
Optional extras, all installed from the Tools page: phpMyAdmin, Cloudflare Tunnel (for sharing a site publicly), Node.js, Python, Cmder, WP-CLI and Composer.
Getting started
BunnyStack ships as a zip. Extract it to a folder of your choice (for example D:\BunnyStack) and run bunnystack.exe from there. That folder becomes BunnyStack's home, and everything it downloads or creates stays inside it.
- Launch BunnyStack. If a required component is missing, it opens on the Tools page with the message "Install Caddy, MariaDB and a PHP version to get started".
- Install anything missing. Click Install next to Caddy, MariaDB or a PHP version if they aren't marked Installed. Add Mailpit, phpMyAdmin and the others if you want them.
- Trust the local certificate. Go to Settings > General > HTTPS and click Install next to Local certificate authority, so browsers trust every
.testsite. - Start the stack. Click Start at the left end of the dock. It reads Running once everything is up.
- Approve the hosts file update. When Windows shows "Hosts file update needed", click it and accept the admin prompt, so your
.testnames resolve.
You land on the Overview page, which shows the state of the whole stack at a glance:

- Services: click a row or its switch to start or stop Caddy, MariaDB, Mailpit or Redis. Each row shows its version and ports.
- PHP · in use by projects: each PHP version your projects use, with a start/stop switch. The bug icon toggles Xdebug and the gear opens that version's settings.
- Recent projects: the last five sites, with buttons to open the folder or the site in your browser. New project is at the bottom.
- Doctor checks and repairs the setup. Sync regenerates the web server config, certificate and hosts file, then restarts what changed.
| Folder | Contents |
|---|---|
www/ | Your projects, one folder each |
bin/ | Downloaded runtimes (Caddy, PHP, MariaDB and so on) |
config/ | BunnyStack's settings and generated server config |
data/ | Database files, caught mail, Redis data |
logs/ | Log files for every service |
ssl/ | The local certificate authority and site certificate |
The dock
The floating dock at the bottom of the window is how you move around. Start, Overview, Settings and Quit are always there; the rest can be rearranged in Settings > Dock.

| Dock item | What it does |
|---|---|
| Start / Running | Starts or stops the whole stack |
| Overview | The dashboard shown above |
| Projects | List, create and edit your sites |
| Apps | A group: Mailpit, Logs, Share and Updates |
| Databases | Import, export and drop MariaDB databases |
| Tools | Install components and manage PHP versions |
| phpMyAdmin ↗ | Opens phpMyAdmin in its own window, already logged in |
| Root ↗ | Opens your www folder in Explorer |
| Terminal ↗ | Opens Cmder (or a normal terminal) with PHP, Composer and WP-CLI on the path |
| Settings | App preferences |
| Quit | Closes BunnyStack |
Items marked ↗ open a separate window. The Updates item shows an amber badge when updates are available, and Share shows a green count of live tunnels.
Closing the window: if services are running, BunnyStack asks what to do. Yes quits and stops everything; No hides the window to the system tray and keeps your sites running. Reopen it from the tray icon (Open).
Projects (your sites)
Each project is a folder in www/ served at https://<name>.test, with its own PHP version. Open Projects from the dock to see them all.

Use Filter projects (or press /) and the All / WordPress / Laravel / Plain switch to narrow the list. The icons on each row, left to right:
- Plug (WordPress only): turn plugins on and off without logging in to WordPress.
- ↗ open the site in your browser, folder open it in Explorer, pencil edit it.
- Undo arrow (Restore defaults): the project's PHP version, preset, extra hostnames and WordPress rules go back to their defaults. Its files in
www/and its database are left untouched. The same button is on the edit page.
Removing a project for good: delete its folder in www/ first, then click Restore defaults. With the folder gone, BunnyStack has nothing to re-detect, so the project disappears from the list.
Create a project
- Click New project (on Projects or Overview).
- Enter a Name. Root (
www/<name>) and Host (<name>.test) fill in automatically. - Pick a PHP version and a Preset: Plain, WordPress or Laravel.
- Optionally add Extra hostnames (type one and press Enter). They get a hosts-file entry and a certificate on the next Sync.
- Click Create project. BunnyStack syncs automatically, and the site is live over HTTPS.

Install WordPress or Laravel in one step
With the WordPress or Laravel preset, turn on Install it now. BunnyStack downloads the chosen version, creates the database and, for WordPress, sets up the admin user (default admin / admin). The install keeps running if you leave the page; a toast tells you when it's done.

WordPress rules add server-level extras per site:
- wp-rocket: serve WP Rocket's cached pages directly.
- imagify-webp: serve
.webpimages to browsers that support them. - Uploads proxy: enter your production URL, and any image missing locally is fetched from the live site, so you don't need to copy
wp-content/uploads. Add an htpasswd user and password if production is password-protected.
Already have a site? Copy its folder into www/ and click Sync. BunnyStack detects new folders and adds them as projects ("Added new project(s): …").
Tools, PHP versions and Xdebug
The Tools page installs everything BunnyStack can run, and manages the PHP versions your projects use.

- Components: click Install next to any tool. Caddy and MariaDB are required; the rest are optional. Installing Cloudflare Tunnel adds Share to the dock.
- PHP versions: each tile shows how many projects use that version. Versions no project uses are hidden from Overview and don't start with the stack.
- Add a PHP version: pick a branch in the drop-down and click Install. It always fetches the newest patch release. For an end-of-life version, extract it from windows.php.net into
bin/php/X.Y.Z/. - Check for updates jumps to the Updates page and checks everything.
Per-version settings
Click a PHP tile (or the gear on Overview) to change settings for that version only:
- php.ini: memory limit, upload size, execution time and other common values. Empty fields use the defaults from Settings > PHP. Edit php.ini directly opens the raw file (Ctrl+S saves).
- Modules: tick the extensions you need, such as
intl,gdorzip. - Click Save to restart that PHP version with the new settings.
Debugging with Xdebug

- Open the PHP version your project uses and switch on Xdebug. The first time, BunnyStack downloads the matching build.
- Choose the Modes you need (Step debugging is the default).
- Set Start debugging to On every request, or On trigger to debug only requests carrying
XDEBUG_TRIGGER. - Point your IDE at the IDE port (default
9003) and click Save.
The quickest route is the bug icon next to a PHP version on Overview. Only one PHP version can have Xdebug on at a time.
Databases
MariaDB listens on localhost:3306 with user root. The Databases page covers everyday import and export; phpMyAdmin ↗ at the top right opens the full admin tool, already logged in.

Import a dump
- Drag a
.sql,.sql.gzor.sql.zipfile onto the Import a dump box, or click Choose file. - Check the Database name (it's guessed from the file name). The database is created if it doesn't exist.
- Click Import (or press Enter). A progress toast shows how far along it is. There is no upload-size limit.
Export: click Export on a row, choose .sql, .sql.gz or .sql.zip, then pick where to save it.
Drop: the red trash icon deletes a database after you confirm. This can't be undone, so export first if you might need it.
If MariaDB is stopped, the page says so and offers to start the stack.
Mail, sharing and logs
Mail (Mailpit)
Mailpit catches every email your local sites send, so nothing reaches real inboxes. Open it from Apps > Mailpit. A Windows notification ("New email") appears for each message; click it to open the message.
WordPress sites are covered automatically: BunnyStack routes their mail to Mailpit, or to logs/emails/ if Mailpit is off. Turn this off in Settings > WordPress. To let one site send real mail, add define( 'BUNNYSTACK_MAIL_PASSTHROUGH', true ); to its wp-config.php.
With Cloudflare Tunnel installed, Apps > Share lists your projects. Pick one to open a temporary public URL, which is copied to your clipboard, so a client or phone can see the site. Live tunnels show Copy and Disconnect buttons; Disconnect all closes every tunnel.
Logs
Apps > Logs shows the last 1,000 lines from each service. Pick a source (caddy, mariadb, php-8.3 and so on) at the top, search, or filter to warnings and errors. Scrolling up pauses the live view; click Following to resume.

Settings, updates and shortcuts
Every setting saves the moment you change it; there is no Save button.

| Tab | What you set there |
|---|---|
| General | Whether Mailpit and Redis start with the stack; automatic update checks at startup; beta releases; install or remove the local HTTPS certificate authority |
| PHP | Default PHP version for new projects; number of PHP workers (a recommended value is shown); default php.ini values for all versions |
| Dock | Reorder, hide or group dock items |
| WordPress | Catch WordPress email in Mailpit |
| About | Version number and the full changelog |
Customize the dock
Drag rows to reorder them, or drop one onto the lower half of a group row to nest it. The eye icon moves an item to Hidden. New group creates your own popover group, and Reset to default undoes everything. Right-click the dock to jump straight here.

Updates
Open Apps > Updates and click Check again. BunnyStack checks each tool's own release feed, plus itself. Nothing downloads until you click Update (or Update all). When BunnyStack itself updates, it verifies the download's signature, then asks you to quit and reopen to finish.
Keyboard shortcuts
| Keys | Action |
|---|---|
| Ctrl+1 … Ctrl+9 | Jump to dock items in order, starting at Overview (hover an item to see its number) |
| / | Focus the search box on Projects, Logs or Plugins |
| Esc | Close a popover, menu or confirmation dialog |
| ← / → | Switch Settings tabs |
| Space or Enter | Start or stop the focused service row on Overview |
| Enter or comma | Add an extra hostname; Backspace removes the last one |
| Ctrl+S | Save when editing php.ini directly |
Troubleshooting
When something looks wrong, click Doctor first. It checks the whole setup, rebuilds the config, certificate and hosts file, and restarts services. Any failed check appears on the Tools page with an Install button where one helps.
| Problem | Fix |
|---|---|
name.test doesn't load ("site can't be reached") | Click Sync, then approve the "Hosts file update needed" notification and the admin prompt |
| Browser shows a certificate warning | Settings > General > HTTPS: install the local certificate authority, then restart the browser |
A new folder in www/ isn't listed | Click Sync on Projects or Overview |
| An extra hostname doesn't resolve | Click Sync; aliases are written to the hosts file only on Sync |
| A service won't start | Open Apps > Logs, choose that service, and filter to ERROR. Another program may already be using its port (80, 443, 3306) |
| Emails never arrive | They're meant to: open Apps > Mailpit to read them |
| Xdebug doesn't stop at breakpoints | Check that Xdebug is on for the PHP version the project uses, and that your IDE listens on port 9003 |
| Closed the window but sites still run | BunnyStack is in the system tray. Right-click its icon and choose Quit to stop everything |
Where are my files? Projects live in www/ inside the BunnyStack folder, and database files in data/. Restoring a project's defaults never touches either.
