╭─ 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

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.
// 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  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=…
────────────────────────────────────────── § 06  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
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
  • [◆] 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
upgrade →
──────────────────────────────────────────── § 07  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 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 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 contact@corral.sh 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    │
│                                   │
╰───────────────────────────────────╯
~31 MB · macOS 26+ · Apple Silicon & Intel