╭─ INTRO ─╮

Local dev for the JS / TS ecosystem, done right.

└────────────╯

One macOS app supervises every dev server, assigns a stable port, gives it a real .test domain with HTTPS your browser trusts, and runs the right Node version. Postgres, Valkey, Mailpit on tap. The CLI and the GUI share one daemon so state never drifts.

Download · macOS

Public beta — actively developed.

Two illustrations of Corral. Top: a macOS menu bar popover listing four projects (compliancr and deployoops running on .test domains; slackoff and yeetboard stopped) plus global shortcuts to create new projects or quit. Bottom: a terminal showing "corral ls --running" output mirroring the same project list, marked synced — the menu bar and CLI share one daemon.

// DETECTS & LAUNCHES
Cloudflare · Next.js · Nuxt · Remix · Astro · SvelteKit · Gatsby · Angular · Vite · Node.js
// VIEW
same product, two surfaces

Mockup of the Corral macOS app showing a project named compliancr.test in Running state. The sidebar lists six projects, two services, the Node runtime, and Logs/Settings. The main panel shows worker type, compatibility date, dependency status, a tunnel notice, and bindings grouped into Storage (D1, R2, KV), Compute (Durable Object, Workflow), Intelligence (Vectorize), and Async & security (Queue, Secrets, Service).

─────────────────────────────────────── § 01  THE STATUS QUO ───────────────────────────────────────

What Corral replaces.

Most local JS/TS setups are stitched together from localhost ports, Node managers, proxy configs, and terminal tabs. Corral collapses that pile into one native workflow.

// SURFACE
WITHOUT CORRAL
+ WITH CORRAL
Starting projects
Multiple commands, multiple terminals
+ One app or CLI control surface
Local URLs
Memorize localhost ports manually
+ Named .test domains with HTTPS
Node versions
Manage separately with nvm or fnm
+ Resolved per project, automatically
Multiple projects
Fragmented state, port drift, stale tabs
+ Centralized status, shared lifecycle
Dev services
Docker or Homebrew for DBs, search, mail
+ One-click install, managed lifecycle
Cloudflare depth
Wrangler plus a pile of separate tools
+ Process management + binding inspection
──────────────────────────────────────── § 02  THE DEV LOOP ────────────────────────────────────────

Register. Route. Run. Share.

▸ 01 / register

Drag a folder, or `corral project add ./my-app`. Framework auto-detected. Icon and color inferred. Dev command picked from package.json.

▸ 02 / route

Stable port. Stable URL: https://my-app.test. Real HTTPS. dnsmasq + Caddy under the hood, supervised by Corral.

▸ 03 / run

One supervisor per dev server. Crash detection, auto-restart, graceful shutdown. Logs flow into one searchable pipeline.

▸ 04 / share

corral share my-app — public *.trycloudflare.com URL. Free. No account. Auto-stops when the project stops.

───────────────────────────────────────── § 03  FRAMEWORKS ─────────────────────────────────────────

If it has a dev script, Corral runs it.

name                    config signature              detected runner          default port
─────────────────────   ──────────────────────────   ─────────────────────   ────────────
★ Cloudflare Workers      wrangler.toml | .json         wrangler dev            :8787
  Next.js                 next.config.* + app/          next dev                :3000
  Nuxt                    nuxt.config.*                 nuxt dev                :3000
  Remix                   remix.config.* / vite         remix vite:dev          :3000
  Astro                   astro.config.*                astro dev               :4321
  SvelteKit               svelte.config.*               vite dev                :5173
  Gatsby                  gatsby-config.*               gatsby develop          :8000
  Angular                 angular.json                  ng serve                :4200
  Vite                    vite.config.*                 vite                    :5173
  Generic Node            package.json scripts.dev      npm run dev             :—

★ first-class — deepest local environment
Cloudflare Workers :8787
config wrangler.toml | .json
runner wrangler dev
Next.js :3000
config next.config.* + app/
runner next dev
Nuxt :3000
config nuxt.config.*
runner nuxt dev
Remix :3000
config remix.config.* / vite
runner remix vite:dev
Astro :4321
config astro.config.*
runner astro dev
SvelteKit :5173
config svelte.config.*
runner vite dev
Gatsby :8000
config gatsby-config.*
runner gatsby develop
Angular :4200
config angular.json
runner ng serve
Vite :5173
config vite.config.*
runner vite
Generic Node :—
config package.json scripts.dev
runner npm run dev

★ first-class — deepest local environment

────────────────────────────── § 04  CLOUDFLARE WORKERS, FIRST-CLASS ───────────────────────────────

The deepest local Workers environment outside Cloudflare itself.

  • Pinned, vendored Wrangler. No global install conflict.
  • Reads TOML, JSON, JSONC configs (comments + trailing commas).
  • Detects Worker / Pages / Durable Object project type.
  • Parses all 13 binding types.
  • 6 binding types have local data inspectors (Pro).
  • Named environments with per-environment overrides.
  • Auto-derived stacks: workers that call each other group into one runnable environment, kept in sync (Pro).
// 13 binding types · ◉ inspectable on disk
D1
KV
R2
Durable Objects
Secrets Store
Workflows
Hyperdrive
Queues
Service Bindings
AI
Vectorize
Analytics Engine
Vars & Secrets
───────────────────────────────────────── § 05  AI-NATIVE ──────────────────────────────────────────

One MCP server. Every agent.

Corral speaks the Model Context Protocol. Point your AI coding tool at one server and it sees what you see — registered projects, live .test URLs, service connection strings, and logs — over a typed protocol it already knows. No copy-pasting state out of the terminal, and the agent can start, stop, or restart things itself.

▸ Claude Code
~/.claude.json
▸ Cursor
~/.cursor/mcp.json
▸ VS Code
Code/User/mcp.json
▸ Codex
~/.codex/config.toml
▸ Continue
~/.continue/config.yaml
▸ Zed
~/.config/zed/settings.json
▸ Windsurf
windsurf/mcp_config.json
$ corral mcp install // configures every detected client — free, built into the CLI
─────────────────────────────────── § 06  LOCAL SERVICES   ◆ PRO ───────────────────────────────────

Postgres. Valkey. Mailpit. No Docker.

Native binaries supervised by Corral. Each binds to 127.0.0.1 only. Each has its own data directory. Each ships an env-vars block ready to paste into .env.

PostgreSQL
Multi-version, side-by-side
DATABASE_URL=…
MariaDB
MySQL-wire compatible
DATABASE_URL=…
Valkey
Redis-compatible cache, queue, session
REDIS_URL=…
Mailpit
SMTP trap with a web inbox
SMTP_HOST=…
MinIO
S3-compatible object storage
S3_ENDPOINT=…
OpenSearch
Distributed search & analytics
OPENSEARCH_URL=…
Meilisearch
Fast search API, built-in dashboard
MEILI_URL=…
Typesense
Single-binary search engine
TYPESENSE_URL=…
────────────────────────────────────────── § 07  PRICING ───────────────────────────────────────────

Two tiers. The free one is real.

free $0
// the whole macOS app, no nag screens, no time limits
────────────────────────────────────
  • [+] project management & detection
  • [+] dev-loop control (start/stop/restart)
  • [+] custom local domains + HTTPS
  • [+] node version management + shims
  • [+] tunnel sharing (Cloudflare Quick Tunnels)
  • [+] full CLI
  • [+] AI tooling via MCP (Claude Code, Cursor, VS Code, …)
pro $49 /yr
// tied to the user, billed once a year via Paddle
────────────────────────────────────
  • // everything in free, plus
  • [◆] local services: postgres, mariadb, valkey, mailpit, minio, opensearch, meilisearch, typesense
  • [◆] cloudflare data inspectors: d1, kv, r2, durable objects, secrets store, workflows
  • [◆] browser & network capture — console, errors, fetch/XHR/WebSocket + every .test/localhost request, searchable & persistent
  • [◆] system shims — node/npm/npx in your PATH everywhere
  • [◆] smart command execution — corral exec, npm, npx with the right node per project
  • [◆] universal package manager — one command across npm, yarn, pnpm, bun
  • [◆] project stacks — compose projects + services, start/stop/restart together (Cloudflare Workers auto-grouped)
upgrade →
──────────────────────────────────────────── § 08  FAQ ─────────────────────────────────────────────

Things worth knowing before you install.

$ corral faq cloudflare Is Corral only for Cloudflare projects? +

No. Corral started with first-class Cloudflare support, and that path is still the deepest — local D1, KV, R2, Durable Objects, Workflows, and Secrets inspection — but it now detects and runs Next.js, Nuxt, Remix, Astro, SvelteKit, Gatsby, Angular, Vite, and plain Node projects too. Cloudflare is the lighthouse, not the limit.

$ corral faq domains Why .test domains instead of localhost ports? +

Stable names beat shifting numbers. Once a project is registered it lives at a memorable URL like storefront.test, with HTTPS, even after restarts and reboots. No more "wait, was the API on 3001 or 3002?" — and cookies, OAuth callbacks, and CORS rules all behave like they would in production.

$ corral faq sudo Does it require admin / sudo permissions? +

Some setup does. Routing *.test through dnsmasq and binding ports 80/443 for HTTPS need privileged operations on macOS. Corral handles that through a small signed helper the first time you set up routing — you never have to wire it manually or run the app as root.

$ corral faq cli Can I install just the CLI, without the app? +

No, and that's deliberate. The privileged helper that makes .test routing and HTTPS work can only be registered by a macOS app bundle (via SMAppService), so a CLI-only install would have no way to set it up. The installer always installs both — the corral CLI ships inside the app and is symlinked onto your PATH. Once setup is done you can live entirely in the terminal; the app doesn't need to stay open.

$ corral faq sync Can I use the app and CLI at the same time? +

Yes — that's the point. Both surfaces talk to the same background daemon, so process state, project status, and infrastructure status are always in sync. Start something in the menu bar, inspect it in the main window, tail logs in the terminal — they're all looking at the same source of truth.

$ corral faq nvm Does Corral manage Node.js for me? +

Yes. It can install Node versions on demand and pick the right one per project from .node-version, .nvmrc, or an explicit override in project settings. Optional shell shims will resolve the right Node automatically when you cd into a project, so you can replace nvm or fnm if you want.

$ corral faq docker Do I still need Docker for databases and services? +

For the services Corral supports — Postgres, MariaDB, Valkey/Redis, Mailpit, MinIO, OpenSearch, Meilisearch, Typesense — no. They run as native, supervised binaries with one-click install. If you depend on a service Corral doesn't cover, keep using Docker for that one; the two coexist fine.

$ corral faq mcp Does Corral work with my AI coding assistant? +

Yes. Corral ships an MCP (Model Context Protocol) server built into the CLI, so agents in Claude Code, Cursor, VS Code, Codex, Continue, Zed, or Windsurf can see your projects, dev URLs, service connection strings, and logs — and start, stop, or restart things — over a typed protocol they already speak. Run corral mcp install to wire up every detected client. It's free, on every tier.

$ corral faq pricing How does pricing work? +

There's a free tier that covers the whole dev loop — projects, .test domains, HTTPS, Node management, CLI — with no nags or time limits. Pro is $49/year, billed once via Paddle, tied to your user account. Pro adds local services and the Cloudflare data inspectors. No monthly plan, no team seats.

$ corral faq cancel How do I cancel? Can I get a refund? +

Cancel anytime through Paddle's customer portal — the link is in your purchase receipt email. Cancelling stops the next renewal; the current term stays active until it ends. For refunds within 14 days of purchase, email [email protected] with your order number — no questions asked.

$ corral faq linux Linux support? +

Planned, no date. The core daemon is Rust and already portable; the macOS-specific work is the menu bar, the helper tool, and the AppKit UI. We'll ship Linux when we can do it well, not as a checkbox.

$ corral faq oss Is it open source? +

No — Corral is a closed-source commercial product. There's no public repository.

╭───────────────────────────────────╮
│                                   │
│   stop fighting your dev setup    │
│                                   │
╰───────────────────────────────────╯
Corral v0.10.2 · ~41 MB · macOS 26+ · Apple Silicon
Public beta — actively developed.