Appearance
Projects
A project in Corral is any JavaScript/TypeScript application you've registered for local development. Corral detects the framework, assigns a local subdomain, and manages the dev server lifecycle.
Registering a Project
CLI:
sh
corral project add ./my-workermacOS App: Click the + button in the toolbar and select a folder, or drag a project folder onto the main window. Either way, the project is registered and automatically selected in the sidebar.
Corral will:
- Detect the framework (see below)
- Read the project name from
wrangler.toml/package.json - Generate a URL-safe subdomain from the project name (e.g.,
my-worker) - Assign a unique ID for internal tracking
- Detect the git remote URL if the directory is a git repository (GitHub, GitLab, Bitbucket, or any self-hosted host)
If the subdomain would collide with an existing project, Corral appends a suffix (my-worker-2, my-worker-3, etc.).
Framework Detection
Corral detects your project's framework automatically using a priority-based chain:
| Priority | Framework | Detected By |
|---|---|---|
| 1 | Cloudflare Worker | wrangler.toml, wrangler.json, or wrangler.jsonc |
| 2 | Next.js | next in package.json dependencies |
| 3 | Nuxt | nuxt in package.json dependencies |
| 4 | Remix | @remix-run/dev in package.json dependencies |
| 5 | Astro | astro in package.json dependencies |
| 6 | SvelteKit | @sveltejs/kit in package.json dependencies |
| 7 | Gatsby | gatsby in package.json dependencies |
| 8 | Angular | @angular/core in dependencies + angular.json file |
| 9 | Vite | vite in package.json dependencies |
| 10 | Generic Node.js | Any package.json with a dev or start script |
The first match wins. A project with both wrangler.toml and vite in its dependencies will be detected as Cloudflare.
Visual Identity
When a project is registered, Corral also tries to discover its icon and brand color so the catalog has a recognizable visual identity:
- Icon — searched in this order: web manifest icons (
public/manifest.webmanifest,public/manifest.json,static/equivalents), Next.js conventions (app/icon.*,app/apple-icon.*,app/favicon.ico), and generic favicons (public/favicon.{svg,png,ico},public/logo.{svg,png}, and the same paths understatic/). - Brand color — parsed from the manifest's
theme_colorfield (hex,rgb()/rgba(),hsl(), or any named CSS color).
Inferred icons are copied into Corral's data directory at registration so the catalog never depends on the original file remaining in place. SVG icons are rasterized to a 512×512 PNG alongside the original for crisp rendering at any size.
If nothing is found, the project renders with an initials avatar — one or two letters on a deterministic palette color hashed from the project name.
You can override either in the macOS app under Settings → Appearance.
Scanning for Projects
If you keep your projects in a common parent directory, scan it to find them all at once:
sh
corral project scan ~/codeThis lists every immediate subdirectory that contains a recognized project. You can then register them individually.
What Gets Parsed (Cloudflare Projects)
For Cloudflare projects, Corral reads the wrangler configuration in detail. This includes:
Project identity:
name,main,compatibility_date,compatibility_flags- Project type detection: Worker (has
main), Pages (haspages_build_output_dir), Durable Object (has DO bindings)
Bindings:
- D1 Databases, KV Namespaces, R2 Buckets, Durable Objects, Workflows
- Queues (producers and consumers), Service Bindings
- AI, Vectorize, Hyperdrive, Analytics Engine, Secrets Store
Additional configuration:
- Cron triggers, build commands, dev server settings
- Observability, CPU limits, routes, environment variables
Environments:
- Named environments defined under
[environments]are detected and available for selection - When you select an environment, its overrides are merged with the top-level configuration
Per-Project Settings
Each project has settings you can customize:
| Setting | Description | Default |
|---|---|---|
node-version | Node.js version override | Resolved via version chain |
subdomain | Custom subdomain for domain routing | Auto-generated from project name |
environment | Wrangler environment to use | None (uses top-level config) |
auto-start | Start automatically with corral up | false |
dev-command | Custom dev command override (e.g., npm run dev) | Auto-detected |
package-manager | Preferred package manager (npm, yarn, pnpm, bun) | Auto-detected from lockfile |
| Custom icon | Image displayed in the catalog (set in the macOS app) | Auto-inferred or initials avatar |
| Custom color | Brand color used behind the icon (set in the macOS app) | theme_color from manifest, else palette hash |
Set them via the CLI:
sh
# Pin a Node.js version for this project
corral project set my-worker node-version 22
# Use a custom subdomain
corral project set my-worker subdomain api
# Select a wrangler environment
corral project set my-worker environment staging
# Start automatically with infrastructure
corral project set my-worker auto-start trueUse none to clear an optional setting:
sh
corral project set my-worker node-version noneOr configure them in the macOS app under the project's Settings tab. The icon and color overrides are configured exclusively through the macOS app's Appearance section — they are not exposed via corral project set.
Refreshing Configuration
If you edit your wrangler.toml, tell Corral to re-read it:
sh
corral project refresh my-workerThis updates the parsed configuration without removing or re-registering the project. Your project settings (subdomain, Node version, etc.) are preserved.
Removing a Project
sh
corral project remove my-workerThis unregisters the project from Corral. It does not delete any files in your project directory.
Viewing Project Details
sh
corral project info my-workerShows the project's ID, path, type, compatibility date, subdomain, git repository URL, current branch, settings, and detected bindings. Git information is only shown for projects with a detected git remote.
Project Resolution
Whenever a command takes a <project> argument, you can use:
- The project's name (exact or substring match)
- The project's UUID
If a substring matches multiple projects, Corral will ask you to be more specific.