$

All cats, no catch. Free and open source.

scroll ↓ the cat has nine lives

catzoid — zsh

$ catzoid --apps

devcatzLocal dev environmentreleased

dbcatzDatabase clientreleased

dialcatzAPI clientreleased

docatzContainer enginereleased

$

The family

Four cats. One developer workflow.

Each app stands on its own and gets better next to the others. All free, all open source, all AI-connected through one shared setting.

Nine lives

What one cat can do.

Everything in the family, counted the way a cat counts.

  1. life 1/9

    Sites with HTTPS

    https://<name>.localhost with a trusted local CA — or your own TLD.

  2. life 2/9

    Every runtime

    PHP 5.6 – 8.x, Python, Node.js, Bun, Go and Rust, any version per site.

  3. life 3/9

    Databases

    MySQL, MariaDB, PostgreSQL, Redis, Valkey, MongoDB, Elasticsearch, SQLite — run them, then browse them.

  4. life 4/9

    Storage, search, realtime

    S3 buckets, six search engines, five WebSocket servers, locally.

  5. life 5/9

    Mail and gateways

    A mail catcher, WhatsApp, SMS, push and Telegram servers for OTP flows.

  6. life 6/9

    Git, Monitoring, Docker

    Pull requests, resource charts and a deploy-ready Dockerfile per site.

  7. life 7/9

    Share a site

    Cloudflare tunnels, Expose or ngrok with a request inspector and replay.

  8. life 8/9

    Production, safely

    Production and Read-only modes, structure changes checked before they run.

  9. life 9/9

    One AI connection

    Set the provider once; every Catzoid app asks with your context and acts on the answer.

> are you a vibe coder?

AI-connected

Then this family speaks your language.

You describe, the cats do. Every Catzoid app shares one AI connection and knows your actual setup — sites, ports, logs, schema — so plain words become real actions. It explains what it is about to do and asks first, so you never need to know what migrate means to run it.

  • Asks before every action

    Nothing runs on its own. You see the step, you confirm it.

  • Structure, never your data

    Tables, columns, logs — not rows, unless you say so per connection.

  • Keys stay in your Keychain

    Encrypted by macOS, never in a settings file.

  • Off until you want it

    Every app is complete without AI. Turn it on when you like, with your own key.

catzoid — ask ⌘K

my laravel site just shows a white screen

DevCatz

PHP 8.3 on this site is missing the intl extension — the log says so at line 1. Install it and reload the site?

Install intlChange PHP versionOpen the log

which customers paid twice last month?

DBCatz

Here is the query, built from your payments and customers tables. It is in the editor and will not run until you press Run.

SELECT c.email, COUNT(*) FROM payments p JOIN customers c … HAVING COUNT(*) > 1

RunExplainOnly structure was sent

sign in, then show me the paid orders

DialCatz

Two requests on the Local environment: sign in for a fresh token, then the paid orders with it. Nothing is sent until you press Send.

POST {{baseUrl}}/login → GET {{baseUrl}}/orders?status=paid

Add bothSet {{token}}Names only were sent

restart everything in the shop project

DoCatz

Three steps on the shop project: restart web, api and db. Nothing runs until you press Run.

RunReview the steps

> ask anything about your setup…

One connection ·Claude (default)OpenAIGeminiDeepSeekZ.aiMistralxAIGroqOpenRouterOllamaany OpenAI-compatible server

And the other way round · the MCP with the cats insidesoon

MCatzP. em-catz-pee

Already living in Claude, Cursor or another assistant? One MCP server lets it reach every cat you have installed — start a site in DevCatz, peek at a table in DBCatz, fire a request in DialCatz, restart a container in DoCatz — from the chat you are already in. 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

Better together

Four cats. One cat.

They know each other. Set one up and the others notice — no config, no copy-paste, deep links everywhere.

  1. DevCatz hands its databases to DBCatzListed as “DevCatz services” with live status; Open in DBCatz in one click.
  2. Sites become DialCatz environmentsEach site’s URL and .env names; routes from Laravel or the OpenAPI document the site serves.
  3. DialCatz asks DBCatz to checkCheck in DBCatz opens the table the call just touched — at the row, when the URL or the answer has its id.
  4. DevCatz runs its containers on DoCatzThe Docker tab tests on DoCatz’s engine, and both share one domain: https://web.shop.docatz.localhost.
  5. DoCatz projects become DialCatz environmentsEach service’s https name, and the routes as requests — Open in DialCatz from the project.
  6. DoCatz databases in DBCatzEvery database container on 127.0.0.1:<port>, listed in DBCatz as “DoCatz services” by themselves, signed in.
  7. One setting for all of themTheme and AI provider set once; deep links devcatz://, dbcatz://, dialcatz://, docatz://.

Backed by the community

Every sponsor is a star in the cat.

Catzoid is free and open source — no paid tier, no catch. Sponsors keep the cats fed: the servers, the signing certificates, and the next app in the family. Light a star and your face joins the constellation.

0 stars litmonthly or one-timethrough GitHub Sponsors

Light a star — sponsora can of tuna a month goes a long way

Ready when you are

Take one home.

macOS 13+ on Apple silicon and Intel, and Windows 10+ — every cat, today. No account, no licence key, no catch.

Apple siliconIntel MacWindows 10+

Mac builds signed & notarized · Windows unsigned for now · Code signing policy

Also from the same catMrCatz DataTableserver-side DataTables for Laravel, ported to JavaScript; a Go version is planned.