Your tools.
Your rules.

A local development environment for PHP, Node.js, Python, Go, Rust and .NET projects. Each project runs at its own address, such as shop.test. Desktop app and command‑line tool.

Runs on macOS, Windows and Linux.

Free and open source.

~ $ anvil park ~/Sites
Parked /Users/you/Sites
~ $ anvil apps
admin.test Django /Users/you/Sites/admin
api.test Go /Users/you/Sites/api
blog.test Next.js /Users/you/Sites/blog
shop.test Laravel /Users/you/Sites/shop/public

Easy to use

Anvil runs the commands your projects already use. No config file in your repo, no new syntax.

  • PHP 8.1–8.5
  • Node.js
  • Python
  • Go
  • Rust
  • .NET
  • Static
  • Docker Compose

An address per project

Park a folder and every project in it gets a .test address. HTTPS per project from a local CA.

https://shop.test
http://blog.test
http://api.test

Versions per project

Pin PHP or Node.js per project. php and node in your terminal follow the folder.

shop     PHP 8.4
legacy   PHP 8.2
~/Sites/legacy $ php -v  # 8.2

Dev processes

Your project's dev scripts run in the background, each with live output, restart and a crash alert.

● php artisan queue:listen
● npm run dev
● php artisan pail

Branches side by side

A Git worktree gets its own address, processes and database. Main keeps running.

shop.test                 main
shop--feature-login.test   feature/login

Readable logs

Laravel, Symfony and PHP-FPM logs as entries. Repeats fold; stack frames open in your editor.

ERROR  Undefined variable $order  ×3
  OrderController.php:38

AI agents

An MCP server, off by default. Agents start, stop and read logs and requests. Nothing irreversible.

$ claude mcp add anvil -- anvil mcp

A closer look

A worktree of shop in the sidebar, open at its own address

Worktrees

Each branch at its own address, with a copy of the database.

The Requests tab: an app's requests with status, duration and size

Requests

Every request an app served, with its headers.

The Mail tab: caught messages, one opened as HTML

Mail

Outgoing mail caught per app and shown in its Mail tab.

The Packages tab: tiles for the framework, updates and advisories, then the key packages and the package managers

Packages

Key versions, updates and advisories, with Install and Update.

An app's Overview with its public trycloudflare.com address

Tunnel

Share an app at a temporary public address.

Settings, Storage: each app's size and what can be deleted safely

Storage

What Anvil and each app take on disk, and what is safe to delete.

Services

Any number of each, side by side, on 127.0.0.1. Nothing runs until you add it.

MySQL

:3306

9.7 · 8.4 · 8.0

PostgreSQL

:5432

18 · 17 · 16 · 15 · 14

Redis

:6379

8.10 · 7.4 · 7.2

Mailpit

:1025

Catches outgoing mail

S3 storage

:7070

Versity S3 Gateway or SILO

Install

anvil php install 8.4
anvil setup   # then follow what it prints
anvil park ~/Sites
anvil start

Setup asks for permission once, for .test addresses and a local certificate. anvil uninstall reverts it.

Download · Getting started

Support Anvil

If Anvil is useful to you, you can support it on GitHub Sponsors.

Support Anvil on GitHub

Anvil is licensed under the GNU General Public License v3.0.

Made by ozdemir.be