Local dev environment

Your whole local stack, herded by one cat.

Finally, someone herds the cats.

A local development environment manager, free and open source, from one menu bar app. DevCatz runs your sites on https://*.localhost with the runtimes, databases, object storage, search engines, WebSocket servers, mail, tunnels, gateways and Docker they need — and explains what breaks in plain words. No subscription, no Pro tier, no catch.

running · https://catz-shop.localhost · Laravel · PHP 8.4 · MySQL 8.4 · 2 ms

macOS 13+Apple silicon + IntelWindows soonFree, open sourceAI-connected ✦
  • PHP
  • Node.js
  • Bun
  • Python
  • Go
  • Laravel
  • Next.js
  • Nuxt
  • Django
  • FastAPI
  • Astro
  • SvelteKit
  • NestJS
  • Gin
  • WordPress
  • Symfony
  • Flask
  • Vite + React
  • Vite + Vue
  • Express
  • CodeIgniter

In the app

This is DevCatz.

Real screens from the app — no stuffed cats, no mock-ups.

A Laravel site running in DevCatz, shared on a public URL
01 · RunEvery site on its own https:// name.Laravel, Next.js, FastAPI, Go, Astro — each gets a trusted https://<name>.localhost, its runtime version and a live preview.
DevCatz explaining an error in a site’s logs with AI
02 · FixAn error, explained in plain words.Explain with AI reads the log lines, says what happened and why, and offers the fix as one click — no stack-trace reading needed.
Database services in DevCatz with Open in DBCatz
03 · StoreDatabases with a start button.MySQL, PostgreSQL, Redis, MongoDB and more, any version side by side — linked to the sites that use them, one click from DBCatz.
A sign-in code caught by the DevCatz mail catcher
04 · CatchEvery email your app sends, caught — like a mouse.OTP codes, receipts and password resets land in a local inbox instead of a real one — HTML, text, headers and a mobile view.
A site shared on a public URL with its live requests
05 · ShareShow a client. Catch a webhook.Put a site on a public URL with a QR code for a phone, watch every request come in, and replay a webhook after a code change.
Ask DevCatz turning a plain request into steps
06 · AskSay it. The cat does it.Plain words become steps you run one by one: start sites, turn on services, open a database in DBCatz. Nothing runs until you press Run.

Detected stacks

A cat knows every framework by its scent.

Drop a folder in and DevCatz sniffs out what it is — PHP → Python → Node.js / Bun → Go; a Laravel app with a package.json is still Laravel. Monorepos: every app found, Go modules inside a JS monorepo too. Each framework comes with its own logo and tasks.

Also recognised

LaravelCodeIgniter 3 / 4Yii 2SymfonyCakePHPWordPress + BedrockDrupalJoomlaSlimplain PHPDjangoFastAPIFlaskLitestarSanicFalconaiohttpStarletteQuartBlackSheepTornadoPyramidBottleNuxtNext.jsSvelteKitAstroTanStack StartVite + VueVite + ReactNestJSExpressFastifyHonoKoaGinEchoFiberChiGorilla muxBeegoIrisBuffaloHertzKratosgo-zeroGoFrhttprouternet/http

> my site just shows a white screen

AI, where DevCatz has the context

Say it in plain words. The cat does the rest.

You describe, the cat does. DevCatz knows your sites, ports, runtimes and logs, so a sentence becomes real actions — and a red error becomes a sentence you understand, with the fix as a button.

  • Asks before every action

    Nothing runs on its own. Every step is a button you press.

  • Only the context, never your code

    Site names, ports, status and the lines you picked — .env values and secrets are scrubbed first.

  • Keys stay in your Keychain

    Encrypted by macOS, never in a settings file.

  • Set the provider once

    Claude by default; one setting shared by every Catzoid app.

Ask DevCatz turning a plain request into steps
✦ Ask · Say it. The cat does it.
DevCatz explaining an error in a site’s logs with AI
✦ Fix · An error, explained in plain words.

Explain & fix errors

A crashed site or error lines in Logs

The answer explains what went wrong and offers one-click DevCatz actions: install the missing extension, pick another port, run migrate, switch the Node version, install dependencies.

Ask DevCatz (⌘K)

“start shop and its database”, “give shop its own Redis index”

Plain words mapped to DevCatz actions — always shown and confirmed before anything runs.

Commit message and PR description

From the staged diff, in the repository’s own style

Diffs are only sent when you press the button.

Helpers in every tab

Docker build failures · Dockerfile edits from plain words · .env explanations · search query syntax · webhook payloads → a handler for your framework

Each helper is a switch of its own; all off when AI is off.

Preview what is sent

Every request, before it goes out

.env values, tokens and passwords are scrubbed, home paths become ~. Suggestions are buttons you click, never commands that run by themselves.

Off until you turn it on · one connection, shared with every Catzoid app ·Claude (default)OpenAIGeminiDeepSeekZ.aiMistralxAIGroqOpenRouterOllamaany OpenAI-compatible server

The MCP with the cats insidesoon

MCatzP. em-catz-pee

One MCP server for the whole Catzoid family. Your AI assistant — Claude, Cursor or any other that speaks MCP — will be able to start and stop a site, read its logs, write the .env lines it needs in DevCatz, and reach the other cats you have installed through the same connection. One connection, every cat — and you hold the keys: only what you allow, nothing runs without you seeing it.

Works with ClaudeGeminiGPTGLM— any app that speaks MCP.

Meet MCatzP

Every site

Every site gets a collar: HTTPS, a clean name, your own TLD.

Add a folder and DevCatz serves it on its own name. No Docker files to write, no ports to remember, no browser warnings — cats hate warnings.

HTTPS on every site

Local CA trusted in the Keychain · certificate per host, made on demand · ports 80 / 443

Cookies, service workers, OAuth callbacks and camera / clipboard APIs behave exactly like production — because the site is really on https://.

.localhost by default, any TLD you like

<name>.localhost works with zero DNS setup · change it to .test or any single label in Settings

Switching the TLD renames your sites, installs a tiny DNS resolver for it, keeps custom domains and shows which .env values (APP_URL, CORS_ORIGIN, NUXT_PUBLIC_*) still point at the old one. .local and real public TLDs are refused so nothing breaks.

Runtimes, per site

PHP 5.6 – 8.x (PHP-FPM, php.ini form, PECL: Xdebug, PCOV, MongoDB, Redis…) · Python via uv · Node.js · Bun · Go

Every version is downloaded and checksum-verified; set a default and override it per site. Composer, Laravel queue worker + scheduler, Celery worker / beat are one toggle away.

Import and clone

Import sites + PHP versions from Laravel Herd · clone a site straight from Git

Moving from Herd takes a minute, not an afternoon.

App-wide services

A whole litter of services, one click each.

Each rail section installs, runs and manages real servers on your Mac — any number of instances, any version, with logs. No Docker or Homebrew juggling.

Database

MySQL · MariaDB · PostgreSQL · Redis · Valkey · MongoDB · Elasticsearch · SQLite

Instances with their own version, port, socket and autostart. Finds servers from DBngin, Herd, Docker, Homebrew and Postgres.app too. A Redis DB index per site, with clash warnings.

Object Storage

RustFS · MinIO · SeaweedFS — public / private buckets, https://s3.<tld> + console

Test uploads and S3 code locally with a file browser and drag-and-drop, without an AWS bill or an internet connection.

WebSocket

Sockudo (Pusher protocol) · Centrifugo · Mercure · NATS · Laravel Reverb — per site or shared

Live inspector, a test client for private / presence auth and a publish box: realtime features are testable before they ship.

Search Engine

Meilisearch · Typesense · OpenSearch · Manticore · ZincSearch · Sonic

Indexes, import / export, API keys and a playground that searches as you type with filters and facets. Meilisearch tasks and backups included.

Mail

Local SMTP catcher · inbox at https://mail.<tld> · HTML + mobile preview and checks

No test mail ever reaches a real inbox. Forward a single mail to a real address when you need to see it on a phone.

Expose

Cloudflare Quick Tunnels · your own Cloudflare domain · Expose · ngrok

Share a site with a client, test a webhook (Stripe, Midtrans…) or open it on your phone — with basic auth, expiry, a QR code and a request inspector with replay.

Gateways

WhatsApp (GOWA, WAHA) · email servers (Stalwart, Postal) · push (ntfy, Gotify) · SMS (Jasmin + catcher) · Telegram Bot API server

OTP and notification flows run end to end on your Mac, with inspectors and webhooks to your sites — no paid provider while you develop.

Git

GitHub · GitLab · Gitea / Forgejo · Bitbucket (+ self-hosted) · SSH keys

Clone as a site, commit, branch, stash, tag, rebase with a conflict walkthrough, and open pull requests with their checks — without leaving the app.

Monitoring

CPU, memory, disk I/O, network per site, service and Docker container · 1 h – 24 h charts

See which site eats the CPU, which ports are open, and get a macOS notification when something crosses a limit.

Menu bar app

Status and controls for every site and service

Start, stop and open things without switching windows.

Per site

Every site gets its own toys: the tabs its stack needs.

Tabs appear when a project uses the feature — a site with an S3 library gets Storage, a site with Socket.IO gets WebSocket.

Overview

Framework with logo · apps · ports · runtimes it needs · start / stop / restart

Everything about the site on one screen; when it crashes, Explain with AI reads the failing lines.

Env

The site’s .env files

Edit, compare with .env.example, let AI explain odd keys.

Database

DB from .env (Laravel, Django, Prisma, WordPress…) · artisan migrate / seed, Django, Alembic, spark, Yii, Doctrine, CakePHP, WP-CLI, Drush, Knex, Drizzle, Sequelize

Link a DevCatz instance (starts with the site), copy ready .env lines or write them with a preview, run migrations as buttons, Open in DBCatz.

Storage

Flysystem · AWS SDKs · boto3 / django-storages · MinIO clients

A bucket and the .env lines for it, in one step.

API

OpenAPI files in the project · the document each running app serves · Laravel’s route list

Finds where the site’s API is described — and adds Scramble (Laravel) or @nestjs/swagger (NestJS) when there is none. Open in DialCatz turns it into requests.

WebSocket

Socket.IO · ws · Echo / pusher-js · Reverb · Channels · gorilla

Live connection test, Laravel broadcasting checks and a test broadcast.

Search Engine

Scout · Meilisearch / Typesense / OpenSearch / Manticore clients · InstantSearch

Engine status, a search-only key in .env, Scout import / flush.

Git

Changes · commits · branches · worktrees

Commit messages and PR descriptions written from the diff, in your repo’s style. Each worktree runs as its own site on <branch>.<site>.localhost, side by side.

Mail

Laravel · Django · Flask · Nodemailer · Go

Mailer .env, send a test mail, the site’s last mails.

Gateways

WhatsApp and the other gateways the .env points at

Wire a gateway to the site with Write to .env.

Docker

OrbStack · Docker Desktop · Colima · Rancher Desktop · Podman · Finch — targets: local test, Dokploy, Coolify

Generates Dockerfile, docker-compose.yml and .dockerignore from the detected stack (preview / diff, never overwrites silently), then Build & Up with logs. From local to deploy-ready in one click.

Logs

Dev server and task output · Laravel log viewer

Errors where you can read them, with Ask AI on the failing lines.

Settings

Domain · runtime version · ports

Per-site overrides without touching global settings.

Better together

Four cats, one territory: what DevCatz runs, the others already know.

DevCatz hands its services to DBCatz, the companion database client. They show up as “DevCatz services” with live status; Open in DBCatz from any site, Open in DevCatz from any connection. If DBCatz is missing, DevCatz offers to download and install it. DialCatz turns every site into an environment, and DoCatz will run its containers.

devcatzdbcatzOne file is the whole contract.DevCatz writes the services it runs; DBCatz follows the file and lists them. Nothing talks to anything.
devcatzdialcatzSites become DialCatz environments.Each site’s URL and .env names; routes from Laravel or the OpenAPI document the site serves.
devcatzdocatzDevCatz runs its containers on DoCatz.soonDatabase containers show up in DBCatz, HTTP services in DialCatz.

Open in DBCatz

DBCatz

From the Database rail or a site’s Database tab straight into the right database — DevCatz installs DBCatz first when it is missing.

Live status

DBCatz

When DevCatz stops a service its DBCatz tab shows Disconnected with a Reconnect button.

Every site is a DialCatz environment

DialCatz · baseUrl = the site’s https://*.localhost · .env variable names, values stay on your Mac

Pick the site in DialCatz and start calling it — no ports or hosts to copy; web and api apps of a monorepo each get theirs.

Open in DialCatz

DialCatz · Laravel route list · the OpenAPI document the site ships or serves

From a site’s API tab straight to its requests, split into api and web folders, on the right environment. DevCatz installs DialCatz first when it is missing.

Containers on DoCatzsoon

DoCatz · docker context

The Docker tab picks DoCatz as the engine when it is installed — Build & Up, logs and Monitor included.

One family, one viewsoon

DoCatz · DBCatz · DialCatz

Database containers show up in DBCatz, HTTP services become DialCatz environments, like DevCatz services today.

Ready for adoption

Take DevCatz home.

macOS 13+ on Apple silicon and Intel; Windows is on the way. No account, no licence key — all cats, no catch.

Apple siliconIntel MacWindows · soon

Also in the family: DBCatz · DialCatz · DoCatz