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 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 migratedWhen 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.
curl -fsSL https://envkit.net/install.sh | shThe 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.
irm https://envkit.net/install.ps1 | iexRuns 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).
Project folder
E:\Sites\acme-app
Local host
https://acme-app.test
Dev server
http://localhost:5173Trusted 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.
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/42Git, 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.
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 versionThe 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.
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 PHPXdebug 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.
Next.js project
E:\Sites\acme-dashboard
EnvKit route
https://acme-dashboard.test
Dev server target
http://localhost:5173Laravel 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.
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 workerReverb 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.
| Service | Versions offered |
|---|---|
| nginx | 1.26.2 · 1.27 · 1.28 (Windows) |
| Apache | 2.4.68 (Windows) |
| Caddy | 2.11.4 |
| FrankenPHP | 1.13.0 |
| PHP | 7.4 · 8.0 (Windows) · 8.1 · 8.2 · 8.3 · 8.4 · 8.5.7 |
| MySQL | 8.0 · 8.4 LTS (Windows also 5.7 · 9.x) |
| MariaDB | 10.11 · 11.8 (Windows also 11.4 · 12 · 13) |
| PostgreSQL | 13 – 18 (with pgvector) |
| MongoDB | 7.0 (Windows also 5.0 · 6.0 · 8.0) |
| Redis | 7.4 (Windows also 5.0 · 8.8) |
| Valkey | 9.1.2 (macOS) |
| Memcached | 1.6 |
| Meilisearch | latest |
| Typesense | 30.2 (macOS) |
| MinIO · RustFS · SILO | S3-compatible storage (RustFS 1.0.3) |
| Mercure | 1.1.2 |
| Mailpit | 1.21 · 1.30 (Windows) |
| Node.js | 22 · 26.2 (Windows also 20 · 24) |
| Bun · Deno · Go | 1.4.2 · 2.9.6 · 1.27.1 |
| Python | 3.11 – 3.14 (Windows; macOS uses the system Python) |
| Admin UIs | phpMyAdmin 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: 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 failedImport 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).
Laragon source
C:\laragon\www
Imported into EnvKit
sites detected
hosts provisioned
databases MySQL → MariaDB transfer
php extensions matchedThe 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.
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.
{
"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"] }
}| Key | What it sets |
|---|---|
| schema | 1, 2 or 3, required. 2 when "php" is an object with extensions or ini; 3 for tasks and hooks. |
| name | Informational, 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.extensions | Extensions the project needs, e.g. ["intl", "pdo_pgsql"]. |
| php.ini | php.ini values; true / false are written as On / Off. |
| node | Checked 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. |
| domain | Primary hostname, e.g. "shop.test". |
| aliases | Extra hostnames; one leading "*." label is allowed. |
| databases | [{ engine: "mysql" | "postgres" | "mongodb", name }] to create. |
| scheduler | true runs Laravel’s scheduler for the site (Laravel only). |
| queue_workers | Laravel queue workers, matched by label: connection, queue, tries, timeout, sleep, memory, maxJobs, processes (1–10), extraArgs. |
| processes | Long-running commands, matched by label: command, cwd (inside the project), restart ("always", "on-failure", "never"), env. |
| tasks | Named 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.
{
"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.
Sync target
( ) User PATH
(•) System (Machine) PATH
Pruned
stale EnvKit entries
competing stacks (Laragon / XAMPP / WAMP / MAMP / Herd)
Result
php / mysql / nginx → EnvKit, nothing shadowingTools → 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.
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.
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)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.
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 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 filesSettings
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.
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.
%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.
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 hostSettings → 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.
- Issues: Env-Kit/envkit-releases
- Releases & changelog: latest release