Skip to content

Public beta — free forever, no account required Download now →

Documentation

Run your local dev stack from one control room.

A practical field guide for installing EnvKit, starting local services, routing projects through trusted .test HTTPS, and keeping the stack predictable on Windows and macOS.

Windows & macOS20+ servicesFree · no signupAI / MCP ready

Overview

EnvKit is a desktop app that runs your whole local web-development stack from one tray / menu-bar app, with trusted .test HTTPS and PATH sync. It is a free Laragon / XAMPP / Herd alternative for Windows and macOS.

  • Web servers: nginx, Apache, Caddy or FrankenPHP.
  • PHP 7.4 to 8.5, several versions side by side.
  • Databases: MySQL, MariaDB, PostgreSQL, MongoDB. Cache and search: Redis, Valkey, Memcached, Meilisearch, Typesense.
  • S3-compatible storage (MinIO, RustFS, SILO), Mercure, and Mailpit for mail.
  • Runtimes: Node.js, Bun, Deno, Go and Python.

The Dashboard is the home screen. It shows how many services are running, your sites grouped by the runtime that serves them (PHP, Node.js…) with the web server in front, other runtimes found on the machine, and a services table where you start or stop each one and see its port.

  • Build Laravel, WordPress, CodeIgniter, Bedrock, plain PHP and Node/React/Next.js sites locally with one-click services.
  • Trusted local SSL for every site via an auto-installed certificate authority.
  • Drive the whole stack from an AI assistant through a built-in MCP server.
  • Free to use (proprietary), with silent auto-update.

Install & first run

Download the latest installer for Windows or macOS from GitHub Releases, run it, then launch EnvKit from the Start menu, tray, or menu bar. There is no account, licence key, or payment step between download and local services.

On first launch a short onboarding wizard asks your source — Load from Laragon (a guided detect → import flow, including databases) or Start fresh (pick your stack and install the runtimes it needs).

First run
First launch
├─ Load from Laragon   detect → import sites + databases
└─ Start fresh         pick your stack, install runtimes

Auto-update            checks GitHub, installs silently
Upgrade                data, certs & settings migrated

When an update is ready, EnvKit shows its release notes (what's new and what was fixed) before it installs.

Install from the terminal

Prefer a one-liner? Each script asks GitHub Releases for the latest version, downloads the right installer and runs it. Re-running upgrades in place; sites, databases and settings are kept.

macOS — Apple Silicon
curl -fsSL https://envkit.net/install.sh | sh

The script copies EnvKit.app to /Applications, clears the Gatekeeper quarantine flag so there is no first-launch warning, and opens the app. It asks for your password only if /Applications is not writable.

Windows — PowerShell
irm https://envkit.net/install.ps1 | iex

Runs the same installer as the download button in silent mode. Windows shows one UAC prompt because EnvKit installs per-machine. Read either script before running it: install.sh · install.ps1.

Start services

The Services page lists every service in a side list grouped by category (web servers, PHP, databases, cache and search, runtimes…) with its live state, next to an overview grid. One search box filters both, and you can filter by status and category. Each card shows the version, the port and Start / Stop or Install.

Opening a service gives a header with its status, version, ports and folder, Start / Stop / Restart, its log, and Settings / Versions tabs. Installing another version of a database or storage service keeps the active one running until you switch.

Add your first site

On the Sites page, add a project you already have (Add existing project), clone one from Git, or open the New project menu:

  • New Laravel project: a fresh Laravel app via Composer.
  • New WordPress site, New CodeIgniter site (CodeIgniter 4 with .env and database ready) and New Bedrock site (Roots Bedrock).
  • From blueprint…: a new site from a saved project (see Backup & blueprints).
  • New Node project with a dev server, or an Empty project with a starter index.php.
  • Reverse proxy: point a .test host at a local port (Docker, Go, Rust…).

Sites can be grouped, starred, filtered by technology and searched. Each card shows the framework, PHP version, folder, the memory and CPU of its background processes, and Start dev. EnvKit can also watch your projects folder and add every folder you drop in (Settings → Startup → Auto-register projects folder).

Site mapping
Project folder
E:\Sites\acme-app

Local host
https://acme-app.test

Dev server
http://localhost:5173

Trusted HTTPS

EnvKit creates a local certificate authority and issues certificates for your *.test hosts. Your browser gets real HTTPS locally, so secure cookies, OAuth callbacks, and WebSocket hot reload behave like they do in production.

Settings → HTTPS (*.test) shows whether the EnvKit certificate authority is trusted, with a Trust SSL certificate button if it isn't.

The site page

Opening a site shows a header card (URL, framework, git branch, Open in editor, Terminal, Show in Finder / Explorer, Share online, Open site) and the site’s own side menu: Overview · Run: Scripts, Workers & processes, Scheduled tasks · Develop: Env, Tinker, Debug, Logs, AI · Settings: Configuration, Rewrites, Git, Backups.

Overview has the Site card (stack, a PHP version picker, the URL and folders with copy and open) next to an At a glance list that opens each page.

Scripts

Install dependencies and run package.json scripts inside EnvKit with live output, or open them in a terminal. They use the site’s Node version.

Tinker and Env

Tinker runs code with php artisan tinker --execute on the site’s PHP version. Each run is independent and the value of the last line is dumped. Env edits .env (and the other env files in the picker) with copy and revert.

Workers & processes

For Laravel sites, EnvKit runs the Scheduler (php artisan schedule:work) and queue workers it supervises, each with its own connection, queue, tries, timeout and process count, plus restart and a log. Processes are long-running commands EnvKit keeps alive with the site, for example php artisan reverb:start, php artisan pulse:check or npm run dev.

  • Live reload reloads the open tab when you save PHP, templates, CSS, JS or images. vendor/, node_modules/ and storage/ are ignored, and it can also reload on database changes.
  • Laravel Octane: install it and pick the server from the same page.

Scheduled tasks & Cron

The Cron page holds scheduled commands that run with your stack’s PATH. Start from a one-click template (Laravel scheduler every minute, restart queue workers every hour, nightly database backup at 02:00) or write your own; the form previews the next runs. Each job has Run now, its output and its log.

A job can be linked to a site. Linked jobs are skipped while the site is disabled or asleep, and the site page’s Scheduled tasks tab lists them. For Laravel’s schedule:run, use the site’s Scheduler instead.

Domains & configuration

The Configuration tab enables or disables the site and sets its primary domain, aliases, document root, a framework override, and its own PHP version (isolating a site runs a dedicated PHP process for it). Aliases are comma-separated; a wildcard such as *.app.test matches every subdomain, which suits multi-tenant apps. Wildcards resolve on their own on the .localhost TLD; other TLDs use the wildcard resolver in Settings → Local DNS.

  • Production domain & HTTPS: set a real domain as the primary domain and a free Let’s Encrypt certificate option appears.
  • Danger zone removes the site. The dialog also offers to delete its folder and drop its database.

Rewrites, Force HTTPS & proxy routes

The Rewrites tab picks a rewrite template (for example Laravel / PHP front controller), adds extra nginx directives to the site’s server {} block (an invalid directive fails the reload and points you to the file), or switches to Custom config so you manage the vhost yourself.

  • Force HTTPS redirects http:// to https:// with a 301. The default comes from Settings → Startup → Force HTTPS for all sites, and each site can follow it or override it.
  • Proxy routes send paths under the site’s hostname to other local ports before the site answers. The longest matching path wins. Routes keep the original Host and carry WebSockets and X-Forwarded-* headers, and they also apply while the site is shared. Works on nginx, Apache and Caddy.
Proxy routes
https://shop.test/users/42   →  http://127.0.0.1:4001/users/42
https://shop.test/orders     →  http://127.0.0.1:4002/orders
https://shop.test/           →  the site itself

Strip prefix on /users:      /users/42  →  :4001/42

Git, branches & worktrees

The Git tab has a branch picker with your local branches and the remote branches you haven’t checked out (checking one out tracks the remote), fetch, pull, push, commit with an AI-suggested message, and recent commits. Branches whose upstream was deleted on the remote are marked gone and can be cleaned up in one step: unmerged branches are kept and nothing changes on the remote.

Branch as subdomain checks a branch out as a git worktree in .worktrees/ inside the project and serves it as its own site, for example https://feature-checkout.shop.test. For Laravel and Bedrock projects the branch can share the parent’s database, get a copy of it, or start with an empty one; EnvKit creates a database named after the branch and sets it in the branch’s .env only. The Debug window and dumps are scoped per branch.

Backups & sleeping sites

The Backups tab saves one archive with the site’s files and a dump of its database (when one is detected) to a folder you choose. node_modules, vendor, .git and storage/logs are skipped. Each database also has its own snapshots on the Databases page.

A site can be put to sleep: its background processes pause and visitors see a wake page. Wake starts them again (from the CLI: envkit sleep <site> and envkit wake <site>). The Dashboard suggests sleeping sites that use memory but haven’t been opened for a while (Settings → Performance); nothing sleeps on its own.

Web server

EnvKit supports four web servers: nginx, Apache, Caddy and FrankenPHP. Install the ones you want from Services, then pick the active one in Settings → Web server; switching stops one server and starts the other. PHP is served over FastCGI, so your sites behave the same whichever server is in front.

  • nginx, Apache, Caddy or FrankenPHP, chosen globally.
  • Every site is served behind trusted .test HTTPS.
  • Node / React / Next.js dev servers are proxied with hot reload intact.

The same page sets the default site for http://127.0.0.1 / https://localhost and the local TLD (test by default). Changing the TLD regenerates hosts entries, certificates and vhosts.

PHP versions & Xdebug

Install multiple PHP versions (7.4 through 8.5) and assign a default per site, so a legacy app and a modern Laravel app can run at the same time. Xdebug is available on-demand per version.

PHP per site
Installed PHP
7.4   8.1   8.2   8.3   8.5   (NTS x64)

Per-site default
acme-app.test      → PHP 8.3
legacy-shop.test   → PHP 7.4

Xdebug             on-demand, per version

The PHP service page edits common php.ini values (memory limit, upload and post size, max execution time, display errors, error reporting, timezone) and the extensions of each version.

A site's PHP version also applies in your own terminal. Inside a site folder, php, composer and php artisan run that site's version in cmd, PowerShell, Cmder, Git Bash or Terminal; anywhere else they use the default (since 0.33.0-beta.46). On older versions, use the Terminal button on the site page or prefix the command with envkit. Versioned commands such as php83 always run that exact version.

Site PHP from any terminal
cd legacy-shop
php -v                    → PHP 7.4 (the site's version)
composer update           → Composer on PHP 7.4
php artisan migrate       → Artisan on PHP 7.4
php83 -v                  → always PHP 8.3

cd ~
php -v                    → default PHP

Xdebug on demand and PIE

In Tools → Composer, Xdebug on-demand loads Xdebug only into a second PHP that serves requests carrying the Xdebug trigger, so normal requests stay fast. Trigger it with a browser Xdebug extension or ?XDEBUG_TRIGGER=1. PIE, the PHP extension installer that replaces PECL, installs from the same page.

Databases

MySQL or MariaDB cover common PHP apps; PostgreSQL, Redis and MongoDB are available when your stack needs them. phpMyAdmin ships for MySQL/MariaDB, and EnvKit includes web admin UIs for PostgreSQL (pgAdmin) and MongoDB (mongo-express) too.

The Databases page has an Overview of your servers (version, port, number of databases, Open phpMyAdmin / pgAdmin) with Create a database, and a page per engine (MySQL / MariaDB, PostgreSQL, MongoDB, Redis) that lists databases with snapshots, users and Open in a desktop client.

Prefer a desktop client to the web UIs? On the Databases page each running engine has an Open in… button that launches HeidiSQL or TablePlus already connected to your local server — no host/port/password to type. EnvKit can install HeidiSQL for you (it's open source); TablePlus opens its official download, then EnvKit detects it.

Each database service page has a Connection card (host, port, user, password) with Copy .env. Installing another MySQL / MariaDB or PostgreSQL version keeps the active one running until you switch, and each version keeps its own data folder. pgvector can be installed into EnvKit’s PostgreSQL.

Mail (Mailpit)

Use Mailpit for local password resets, notifications and test sends. It runs an SMTP server plus a web inbox, so mail your app sends is caught locally and never leaves your machine.

The Mailpit page is a native inbox: search, unread and attachment marks, HTML / Text / Headers views, delete and mark all read. New mail raises a desktop notification (click it to open the message, or mute it with the bell), and the sidebar shows the unread count.

Node dev sites

React, Next.js and other Node dev servers can be linked as local sites too. EnvKit keeps the project URL stable while the framework dev server handles hot reload behind it.

Node site mapping
Next.js project
E:\Sites\acme-dashboard

EnvKit route
https://acme-dashboard.test

Dev server target
http://localhost:5173

Laravel Reverb

EnvKit is designed for Laravel apps that need more than PHP-FPM. Run Reverb beside Redis, queue workers, your database, and the trusted local web server so realtime features can be tested without exposing a public tunnel. One-click install, supervise, and proxy per site.

Realtime stack
Laravel app
https://acme-app.test

Realtime server
php artisan reverb:start
ws://127.0.0.1:8080

Companion services
php-fpm    :9000
redis      :6379
queue      worker

Reverb runs as one of the site's processes; see Workers & processes.

Bundled services

EnvKit mirrors the binaries it installs on the releases repo (the index is lib/services.json), so setups don’t depend on upstream downloads. Services → Refresh versions checks for newer ones.

Beyond the web, PHP and database stack: Meilisearch and Typesense give Laravel Scout a local search engine, MinIO, RustFS and SILO serve apps that talk to S3, and Mercure is a real-time hub.

ServiceVersions offered
nginx1.26.2 · 1.27 · 1.28 (Windows)
Apache2.4.68 (Windows)
Caddy2.11.4
FrankenPHP1.13.0
PHP7.4 · 8.0 (Windows) · 8.1 · 8.2 · 8.3 · 8.4 · 8.5.7
MySQL8.0 · 8.4 LTS (Windows also 5.7 · 9.x)
MariaDB10.11 · 11.8 (Windows also 11.4 · 12 · 13)
PostgreSQL13 – 18 (with pgvector)
MongoDB7.0 (Windows also 5.0 · 6.0 · 8.0)
Redis7.4 (Windows also 5.0 · 8.8)
Valkey9.1.2 (macOS)
Memcached1.6
Meilisearchlatest
Typesense30.2 (macOS)
MinIO · RustFS · SILOS3-compatible storage (RustFS 1.0.3)
Mercure1.1.2
Mailpit1.21 · 1.30 (Windows)
Node.js22 · 26.2 (Windows also 20 · 24)
Bun · Deno · Go1.4.2 · 2.9.6 · 1.27.1
Python3.11 – 3.14 (Windows; macOS uses the system Python)
Admin UIsphpMyAdmin 5.2 · Adminer · pgAdmin · mongo-express

Logs

The Logs page lists every log grouped by service (nginx, Caddy, FrankenPHP, PHP per version, PostgreSQL, Redis…) plus your site logs, with file sizes. Entries are parsed into level, time and message, with level filter chips and counts, search across the whole file, Live / Paused, newest first, expandable stack traces, paging, clear and delete.

Each site’s Logs tab shows App logs, PHP-FPM, Server and a Combined view. You can add your own log files or patterns, relative to the site root, such as var/log/*.log or logs/app-*.log.

Dumps & the Debug window

Turn capture on in the Dumps page and dump() / dd() output from your PHP sites streams in instead of landing on the page, grouped by request (method, path, site, time) with file:line, Live / Paused and search.

Per site, the Debug window also captures SQL queries (with N+1 and slow-query flags), mail, rendered views, events, queued jobs, cache and outgoing HTTP, scoped per site and per git branch. A one-time Set up rich capture adds the EnvKit collector to the project.

Diagnose & self-heal

When a service won't start, run Diagnose. EnvKit finds port conflicts, stale PIDs and bad configs, then offers to repair them — so you fix the one service that needs attention instead of restarting the whole stack.

From a terminal, envkit doctor checks the whole stack: services, ports 80/443, HTTPS trust, PATH and the data folder. Add a site name, or . inside a project, to also check its .env, APP_KEY, dependencies, PHP version and extensions, and database. Each problem prints the fix. It only reads; --json gives machine output, and the exit code is 1 when a check fails.

envkit doctor shop
$ envkit doctor shop
envkit doctor: site shop (EnvKit is running)
  ok    service.nginx      Nginx is running (shop needs it).
  ok    service.php-fpm    PHP is running (shop needs it).
  ok    service.mysql      MySQL is running.
  ok    ports.web          Web ports 80/443 are free or held by EnvKit.
  ok    ssl.ca             The EnvKit local CA is trusted, so .test HTTPS is green.
  warn  path.sync          11 of 11 EnvKit tool folders are not on your PATH.
                           fix: envkit apply (re-syncs PATH; or Tools → Environment in the app), then open a new terminal
  ok    site.app_key       APP_KEY is set.
  ok    site.node_modules  Node dependencies are installed.
  ok    site.php           Runs PHP 8.5.7 (default), matches composer.json php ^8.3.
  ok    site.http          https://shop.test/ answers HTTP 200.

19 ok, 1 warning, 0 failed

Import from Laragon

If your current workflow lives in Laragon, start by importing existing projects instead of rebuilding every host by hand. EnvKit detects project folders, provisions hosts, carries over enabled PHP extension context, and can transfer databases (including MySQL → MariaDB).

Migration snapshot
Laragon source
C:\laragon\www

Imported into EnvKit
sites          detected
hosts          provisioned
databases      MySQL → MariaDB transfer
php extensions matched

The Laragon and XAMPP imports are Windows only. On a Mac, Tools → Import from Laravel Herd links Herd’s (Valet) sites, pins the isolated PHP versions EnvKit already has and lists the missing ones to install. Herd databases are not imported.

Import from XAMPP

On Windows, EnvKit can take over an XAMPP setup. Pick XAMPP under Move from another tool on the first-run screen, or open the import later from Tools. EnvKit looks for an xampp folder on every drive, or you choose the folder yourself.

  • Every project folder in htdocs becomes a site with trusted HTTPS, served from where it is. Virtual hosts in httpd-vhosts.conf keep their hostnames and aliases where they are valid.
  • The extensions XAMPP's php.ini loads are turned on, and a matching PHP and MySQL are installed if EnvKit has none yet.
  • Your databases are dumped from XAMPP's own MariaDB (opened read-only) and imported into EnvKit's MySQL. Untick the database option to import sites only.
What the import maps
XAMPP source (Windows)
C:\xampp            or X:\xampp on any drive

Imported into EnvKit
htdocs\<project>     → https://<project>.test
httpd-vhosts.conf    → custom hostnames + aliases
php\php.ini          → extensions turned on
mysql\data           → databases copied (read-only)

Skipped
dashboard  img  webalizer  xampp  (XAMPP's own pages)

Project config (envkit.json)

Commit an envkit.jsonto the project root and everyone who adds the project gets the same PHP version, extensions, hostnames, databases, workers and processes. The site page shows a Project config section that lists each item as matching, to change, or blocked (with the reason), and nothing is applied until you click Apply changes. Export envkit.json on the same section writes the site's current setup to the file.

envkit.json
{
  "schema": 3,
  "name": "shop",
  "php": {
    "version": "8.4",
    "extensions": ["intl", "pdo_pgsql"],
    "ini": { "memory_limit": "512M", "max_execution_time": 120 }
  },
  "node": "22",
  "domain": "shop.test",
  "aliases": ["*.shop.test"],
  "databases": [
    { "engine": "mysql", "name": "shop" },
    { "engine": "postgres", "name": "shop_analytics" }
  ],
  "scheduler": true,
  "queue_workers": [
    { "label": "emails", "queue": "emails", "tries": 3, "processes": 2 }
  ],
  "processes": [
    { "label": "vite", "command": "npm run dev", "restart": "on-failure" }
  ],
  "tasks": {
    "setup": {
      "description": "Install and migrate",
      "commands": ["composer install", "php artisan migrate --seed", "npm ci"]
    }
  },
  "hooks": { "post-setup": ["setup"] }
}
KeyWhat it sets
schema1, 2 or 3, required. 2 when "php" is an object with extensions or ini; 3 for tasks and hooks.
nameInformational, 1–64 characters.
php"8.4" (newest installed 8.4.x wins) or "8.4.12". With schema 2, an object: { version, extensions, ini }.
php.extensionsExtensions the project needs, e.g. ["intl", "pdo_pgsql"].
php.iniphp.ini values; true / false are written as On / Off.
nodeChecked only (is it installed?). EnvKit takes the Node version from .nvmrc.
web_server"nginx", "apache", "caddy" or "frankenphp". Affects every site, so it has its own button.
domainPrimary hostname, e.g. "shop.test".
aliasesExtra hostnames; one leading "*." label is allowed.
databases[{ engine: "mysql" | "postgres" | "mongodb", name }] to create.
schedulertrue runs Laravel’s scheduler for the site (Laravel only).
queue_workersLaravel queue workers, matched by label: connection, queue, tries, timeout, sleep, memory, maxJobs, processes (1–10), extraArgs.
processesLong-running commands, matched by label: command, cwd (inside the project), restart ("always", "on-failure", "never"), env.
tasksNamed tasks: a command, a list of commands, or { description, commands, cwd, timeout }. Run only when you ask.
hooks{ "post-setup": [task names] }: tasks to suggest after Apply. Nothing runs on its own.
  • The file adds and updates. Aliases are merged, and workers and processes are matched by label. A worker, process or alias that EnvKit created from the file and the file later drops is offered for removal, never removed by default; anything you added by hand is never removed.
  • PHP extensions and php.ini values belong to a PHP version, so they reach every site on that version. When other sites share it, the plan names them and those changes get their own Apply shared PHP changes button. Keys EnvKit manages itself (extension_dir, auto_prepend_file, error_log, session.save_path, xdebug.* and a few others) are shown as blocked and never written.
  • web_server switches the whole stack, so it is applied only from its own Switch web server button.
  • Unknown keys are errors, so a typo is reported instead of ignored. A file with a newer schema asks for a newer EnvKit; schema 2 needs 0.33.0-beta.43 or later.
  • Export writes process environment variables by name with empty values, never the values, and never the web server. Review the file before you commit it.

For one developer's overrides, put an envkit.local.json next to it and keep it out of git (EnvKit never creates it). It uses the same keys, schema is optional, and its values win: single values are replaced, aliases, extensions and databases are added, workers and processes are merged by label, and php.ini is merged key by key. Items it decided are marked local in the plan.

envkit.local.json
{
  "php": { "ini": { "memory_limit": "1G" } },
  "aliases": ["shop-ana.test"]
}

Tasks

Schema 3 adds tasks and hooks. A task is a command, a list of commands, or an object with a description, commands, cwd and timeout. hooks.post-setup only suggests tasks after Apply. Tasks run when you ask: Run on the site page (it shows the exact commands first), envkit task <name> (without a name it lists them, and it asks y/N), or the MCP tool run_project_task. They run in the site folder with the site’s PHP and Node first on PATH and stop at the first failure.

PATH sync

Sync EnvKit's php, mysql and nginx to your user or system (Machine) PATH. Stale entries are pruned, and competing stacks (Laragon / XAMPP / WAMP / MAMP / Herd) are auto-removed so nothing shadows EnvKit's binaries.

PATH options
Sync target
( ) User PATH
(•) System (Machine) PATH

Pruned
stale EnvKit entries
competing stacks (Laragon / XAMPP / WAMP / MAMP / Herd)

Result
php / mysql / nginx → EnvKit, nothing shadowing

Tools → Environment (PATH) lists every folder with a toggle (nginx, PHP launchers such as php82 / php83, MySQL, PostgreSQL, Redis, Node.js, Go, Bun, Python, Mailpit…), with Select all / Select none and an option to write to the system PATH instead of the user PATH.

Sharing

Share online serves a local site publicly at <name>.envkit.net through a Cloudflare tunnel that EnvKit sets up, with no account or configuration. The subdomain is reserved to your installation (up to 5), so the same link works next time; Tools → Sharing lists them and Release frees one.

Share on LAN (Sites page) is for other devices on your Wi-Fi or LAN: it shows this computer’s LAN address and the hosts-file lines to copy onto those devices, which also need to trust EnvKit’s local certificate.

Configuration backup & blueprints

Tools → Configuration backup exports your stack (installed services, sites, cron jobs and settings) to one file and imports it on another machine. It is the stack definition, not your project files or secrets.

Settings → Blueprints saves a zip of a tuned project (theme, plugins, config) so new sites can start from it in one step: New project → From blueprint…

AI: bots and MCP

The AI page has three bots that work on a site through an agent you already use (Claude Code, Codex or OpenCode):

  • Detective finds N+1 and slow queries by running your site, then fixes them.
  • Doctor works out why a site is broken and gets it serving again.
  • Packer writes a Docker setup from your real stack; testing it in Docker is up to you.

EnvKit runs checks before and after, in a separate copy of the project, and Recent runs shows the outcome, for example “Verified — the error is fixed”. Each site’s AI tab runs the bots for that site and shows the Laravel Boost guideline card.

MCP: let AI apps control EnvKit

EnvKit ships an MCP server so AI assistants — Claude Code / Desktop, Codex, Cursor, Windsurf, VS Code, Zed, OpenCode, Gemini CLI, and PhpStorm / JetBrains IDEs (via Junie) — can operate your local stack: add/remove sites, manage databases, start, stop, or diagnose services, run doctor_site, and read the Debug window and caught mail (list_mail, read_mail, including the links in a sign-up or password-reset email).

Clients that support MCP prompts also get debug_site: give it a site name and it hands your agent the site's setup, service status, recent errors, Debug window events and mail, and asks it to find the cause. Laravel sites that use Boost can add EnvKit to their guidelines from the site's AI tab (or envkit boost), so agents know EnvKit serves the site.

Enable MCP
AI → Connect
1. Turn on "Allow AI apps to control EnvKit"
2. Connect my AI apps     registers EnvKit with every AI app it finds
3. Restart that app so it picks EnvKit up

Endpoint
http://127.0.0.1:<port>/mcp   (bearer token, local-only)
Assistant examples
Ask your assistant
"start redis"
"diagnose why mysql will not start, then repair it"
"list my Laravel sites"
"add this project as a .test site"
"create a MySQL database for acme-app"
"sign up a test user and open the verification email"

Tools & installers

Tools holds Composer (with PIE and Xdebug on-demand), Git & GitHub CLI, Global CLI tools, Sharing, Configuration backup, Environment (PATH) and the importers. Windows adds Cmder and the Laragon / XAMPP importers. Node versions are managed from the Node.js service (nvm on Windows), which also has a package managers panel.

Global CLI tools installs the Laravel installer and the Statamic CLI globally through Composer, with update, remove and Check for updates. Their commands (laravel new, statamic new) are on PATH.

Included tooling
Developer tools
Composer · PIE · Xdebug on-demand
Git · GitHub CLI (gh)
Global CLI tools    laravel new · statamic new

Your setup
Sharing · Configuration backup · Environment (PATH)

Move to EnvKit
Laravel Herd (macOS) · Laragon · XAMPP (Windows)

Command line

The envkit command is on PATH after PATH sync. Service commands are handed to the running app when it is open, so the app and the CLI never fight over a service. envkit --help lists everything.

envkit
envkit status                     sites and service status
envkit start [services…]          start services (stop works the same way)
envkit services                   bundled services, versions, install status
envkit install <svc> <ver>        install a version (activate / update / uninstall too)
envkit sites                      list registered projects
envkit sites-link <path>          register an existing folder
envkit sites-new <name>           create a new Laravel project
envkit sites-remove <name>        remove a project from EnvKit (files on disk are kept)
envkit php | composer | artisan   run with the site's PHP (from the folder you're in)
envkit doctor [site|.]            read-only health check, --json, exit 1 on failure
envkit task [name]                run a task from envkit.json
envkit sleep <site> / wake <site> pause or resume a site's background processes
envkit boost [site]               add EnvKit to a Laravel site's Boost guidelines
envkit apply                      re-render configs, certificates, hosts and PATH
envkit init                       create config and data folders
envkit catalog-refresh            fetch the latest service versions
envkit logs list                  list log sources
envkit logs tail <id>             print the last lines of a log
envkit logs search <query> <ids…> search whole log files

Settings

A short tour of Settings:

  • General: language and about.
  • Paths: the data directory (it can be moved), the config file, projects folder, logs and hosts file.
  • Startup: start minimized, keep running in the tray, auto-start services, launch at login, auto-restart PHP, a php_error.log per project, Force HTTPS for all sites, auto-register the projects folder, production mode for Node sites and your editor. On macOS (since 0.33.0-beta.52), “Show the Dock icon when the window is closed”: turn it off and EnvKit lives in the menu bar.
  • Performance: Lite mode (static visuals, lower memory; on by default), free memory while in the tray, the glass window, and when to suggest sleeping sites.
  • Local DNS: the wildcard resolver for *.test subdomains, a conflict check and Flush DNS cache.
  • Services: turn services off so Start all and autostart skip them. Ports: every service port, saved and restarted in one go. Web server: see Web server above.
Startup: tray, autostart, Force HTTPS for all sites and the macOS Dock icon option.
Performance: Lite mode, memory and sleep suggestions.
Local DNS: the wildcard resolver for .test subdomains.
Ports: every service port in one place.

Languages & translations

EnvKit ships in English, Arabic, German, Persian (Farsi), Spanish (Mexico) and Bahasa Indonesia, and switches instantly from the language picker in the title bar or Settings → Language. Right-to-left languages (Arabic, Farsi) flip the whole layout automatically.

You can add or fix a language without waiting for a release. On first run EnvKit publishes a locales folder in its data directory with a README and a _template.json containing the complete, current key list. Copy it to <code>.json (e.g. fr.json), set the language name and direction, translate the values, and restart — your language appears in the picker. A file with a built-in code (e.g. de.json) overrides that translation, so you can correct wording too.

Add a language
%ProgramData%\envkit\locales\
  _README.md        how-to
  _template.json    full English key list
  fr.json           <- drop your language here

fr.json
{
  "_meta": { "label": "Français", "dir": "ltr" },
  "translation": {
    "nav": { "dashboard": "Tableau de bord", ... }
  }
}

Troubleshooting

When something does not respond, start with the service state and port ownership. Most local stack issues are either a stopped service, a busy port, or a browser holding old certificate state.

First checks
Port check
nginx      :443   running
mysql      :3306  running
mailpit    :8025  running

If a port is busy:
1. Stop the conflicting app (or run Diagnose)
2. Restart the EnvKit service
3. Re-open the .test host

Settings → Paths → Open error log opens app.log, where EnvKit records crashes and errors. Attach it to a bug report.

Support

Found a bug or have a feature request? Open an issue on GitHub and include your OS version, EnvKit version, and steps to reproduce.

docs