
See every dev server running on your Mac, organized by project rather than by port. Kill, restart, open, or start servers without leaving Raycast, and keep a live count in your menu bar. Starting a project whose node_modules is gone installs its dependencies first, so a cleaned-up or freshly cloned project still starts in one step.
node_moduleshttp.server, Flask, Django, uvicorn, FastAPI, gunicorn, MkDocs), Ruby (Rails, Puma, Jekyll, WEBrick), PHP (php -S, Laravel), Deno, go run, cargo run, dotnet run, Hugo, Caddy, and any script an interpreter runs from a project folder⌃X), a whole project (⌃⇧X), or everything (⌃⌥X); bulk kills ask first⌘⇧R) with the right package manager, detected from the lockfile (npm, pnpm, yarn, bun); a project without a package.json is restarted with the command it was running⌘E), or terminal (⌘T); copy the URL, network URL for phone testing (⌘⌥C), or port (⌘⌥P)⌘L), live-tailed while open⌘N) and the same selection waits at the top as Selected in Finder until you press ↵dev, start, develop, then monorepo names like dev:webnode_modules gets one prompt, then an install with its own package manager (at the workspace root in monorepos) and the server start, in one step. Tick "Do not show this again" to make it automatic. The picker tags such projects Not installedshopify theme dev (with automatic port fallback when 9292 is taken), app roots with shopify app dev, and Hydrogen storefronts through their normal scriptsshopify theme dev --store <your-store> once in a terminal so the CLI remembers your store; a background spawn can't answer its login promptportless run need the portless proxy already running, since a background spawn has no TTY for its sudo prompt. Run portless service install once and the proxy starts at boot, so starts keep working after a rebootPick your terminal and editor apps once (shared by all commands), set the dashboard refresh interval and row accessories, choose whether new servers auto-open in the browser, and choose the menu bar count and how its Start section is ordered.
List and manage running dev servers
Start a dev server from a Finder selection, a recent project, or any folder you pick
See running dev servers in the menu bar; kill, restart, open, or start one from the dropdown
node_modules folder is missing (cleaned up to free space, a fresh clone, a new worktree), starting it used to fail after 15 seconds with "Didn't start". It now asks once, "Install dependencies first?", installs with the project's own package manager (npm, pnpm, yarn or bun, read from its lockfile, at the workspace root for monorepos), then starts the server. The row reads "Installing dependencies, then starting…" meanwhile. Tick "Do not show this again" and future installs simply happen. The Start picker tags such projects "Not installed" so it's no surprise.ps, lsof and git call now has a time limit, so one slow network folder or repository can't keep the dashboard or the menu bar loading forever.node_modules (plus Bun and the Shopify CLI), so a python -m http.server an agent started for you, a Flask or Django app, rails s, php -S, go run, cargo run or a deno run server was invisible however plainly it was listening. Detection now recognises Python (http.server, Flask, Django, uvicorn, FastAPI, gunicorn, MkDocs, Streamlit), Ruby (Rails, Puma, Rack, Jekyll, WEBrick), PHP (php -S, Laravel, Symfony), Deno, go run / cargo run / dotnet run binaries, Hugo, Zola, Caddy, and any script that Node, Python, Ruby or PHP is running out of a project folder. Rows carry the tool tag (http.server, Rails, Go) and, where it adds something, a runtime badge (Python, Ruby, PHP, Deno), the way Bun already had one. What it deliberately still ignores: daemons, language servers, and anything working out of an app's own folder (~/.codex, ~/.cursor, ~/.vscode, ~/Library, system prefixes) or, for bare scripts, the filesystem root, so the list stays a list of dev servers rather than everything that listens. That last rule applies to every kind of server: Codex's visualization servers, which used to surface as projects named after a UUID, no longer appear.go run and cargo run that is the launcher's command, not the temporary binary. Node and Bun projects keep restarting through their package.json script as before. A server whose command line cannot be run again (Puma and gunicorn overwrite theirs with a status line) is refused up front with a message saying so, instead of being killed and left down. Kill, Copy URL, Open in Browser and the rest already worked on anything listed.--reload, gunicorn and clustered Puma bind the port in a parent and hand the socket to children; only the parent is listed, and killing or restarting it takes the workers with it, so nothing is left holding the port.python -m http.server in Documents, a Rails app) is listed while it runs but does not appear later under Start.next-server, which has neither next dev nor a node_modules path in its command line, so it was being filtered out.line, polyline, and polygon elements, so Copy Port and Open in Terminal had no icon at all, the trash was missing its lid, and the Restart arrows lost their heads. All glyphs are now built from paths, which render fully.workerd), instead of anything that looked abandoned. A server this extension starts is handed to the system the moment the command unloads, so a legitimate server looked exactly like a leftover.⌘N used to ignore your selection, so acting on it meant going back to root search. The picker now offers it at the top under Selected in Finder, naming what it would start, and ↵ starts it.51759, and restarting one made copies. The workerd helpers those projects run were being taken for dev servers in their own right. They are now recognised as helpers however they were started, and killing or restarting a project clears them out, including leftovers that ignored Kill and held their ports until you rebooted. The cleanup only ever touches orphaned workerd processes, so a tool of your own running from the project folder is never caught in the sweep.portless run need the proxy already running: a background spawn has no TTY for portless's sudo prompt, so portless exits before the framework ever boots. The toast used to report only the generic "not detected after 15s", which reads as an extension bug rather than a machine-setup problem. It now says Portless proxy isn't running and offers a Copy Fix Command action for portless service install, which starts the proxy at boot so starts keep working after a reboot.Novera (9292) · flagship-rebuild. The dim per-project section header is gone (the project name reads clearly in the row instead), and the port makes several servers of the same project on the same branch easy to tell apart.mask-icon, prefers colored raster icons (apple-touch-icon, PNG, ICO), and ignores currentColor-only SVGs, so it lands on the real icon. Because the menu bar can't render SVGs in color, it uses a separate raster variant pulled from the page or from conventional paths (/favicon.ico, /apple-touch-icon.png). SVG-favicon sites still show a real icon there, falling back to a tinted dot only when no raster exists anywhere.<pkg>-<os>-<arch> convention: workerd, esbuild, rollup, swc, sass-embedded, …) are never the tool you chose. Detection recognizes that shape and climbs the process tree to label the helper with its parent's tool. When no ancestor resolves, it strips the platform suffix (workerd, not workerd-darwin-arm64). Helpers on OS-assigned ephemeral ports under an already-listed server (e.g. the workerd instances the Cloudflare Vite plugin runs under vite dev) are hidden; helpers on deliberately configured ports (workerd on 8787 under wrangler dev, a Hydrogen storefront under shopify app dev) stay visible, since those are the URLs you actually open.node_modules/.bin/../vite/bin/vite.js or node_modules/.bin/../.pnpm/vite@<version>_<peers>/node_modules/vite/bin/vite.js now resolves to its real package name: tool detection normalizes the script path and reads the package directory adjacent to the last node_modules segment, instead of pattern-matching the command text. Scoped packages (@scope/pkg) and pnpm's encoded scoped store entries (@scope+pkg@version) resolve correctly too.svelte.config.*) now applies on every launch layout, not just the plain node_modules/.bin/vite form.shopify theme dev has no next-free-port fallback: when its fixed default port 9292 is taken (say, by the main checkout while you start a git worktree of the same theme), the CLI just dies with EADDRINUSE (Shopify/cli#5554). Starting a theme now probes the default port first and, when it's taken, exports SHOPIFY_FLAG_PORT with the next free one. Because it's an environment variable, the fix reaches the CLI through any wrapping. A bare theme root started as shopify theme dev and a dev script that nests it under concurrently both come up on their own port. A --port written explicitly into your own script still wins.shopify theme dev, shopify app dev, and shopify hydrogen dev, so they appear in the dashboard even when the process is outside node_modules. Shopify-specific tool tags: Shopify Theme, Shopify App, and Hydrogen.package.json at all. A folder containing layout/theme.liquid (or shopify.theme.toml) resolves as a theme root and starts with shopify theme dev; a folder with shopify.app.toml and no dev script falls back to shopify app dev. Restart on a detected theme server works through the same path. Scaffolded Shopify apps and Hydrogen storefronts already start via their dev scripts, so all three project types are now coherent across detect → start → restart.shopify theme dev --store <store> once in a terminal and the extension starts it cleanly from then on. The captured startup log shows the prompt if this happens.~/.zshrc) on every refresh. The portless binary and login PATH are resolved once, persisted in Raycast's cache, and the binary is executed directly from then on: roughly 1s → 100ms per poll on a typical nvm setup, and the dominant cost of every refresh cycle.lsof query and the tool-detection regexes entirely. Guarded against PID reuse via process start time.HEAD file's mtime (which changes on every checkout, per worktree), replacing a git rev-parse spawn per project per poll with a single stat.⌘E): a new shared Editor App preference (VS Code, Cursor, Zed, …) adds an Open in Editor action to dashboard rows and recent-project rows. Hidden until the preference is set.⌘⌥C): when a server is bound beyond loopback and your Mac has a LAN address, copy http://<lan-ip>:<port> for testing on a phone or another machine. Only offered when the server is actually reachable that way.⌘⌥P): copy just the port number, for env files and config.Adds a Start Dev Server command for spinning up dev servers without leaving Raycast. Works from a Finder selection, from a list of recently-seen projects, or from a native folder picker.
package.json, detects the package manager (npm / pnpm / yarn / bun), picks the right script, and spawns it with the same PATH-aware login-shell pattern used by Restart. The dashboard opens immediately and shows a "Starting…" toast that transitions to "X is running" the moment the server binds a port.↵ from a fresh dashboard to land in the picker). Each running-server row's action panel also carries Start Dev Server (⌘N), so spinning up another project never requires bouncing back to root search.package.json dependencies. Cached favicons appear inline once the dashboard has seen the project running, so even stopped projects keep their real icon. Per-row actions: Start, Open in Terminal (⌘T), Show in Finder (⌘⇧F), Copy Path (⌘C), Remove from Recents (⌃X).⌘L) for inspecting output on demand.dev → start → develop first, then scans script values for known dev-server tools (Vite, Next, Astro, Nuxt, Webpack, Parcel, Gatsby, Remix, Turbo, Bun watch/hot, nodemon, tsx watch, ts-node-dev, serve, http-server, live-server). Monorepo conventions like dev:web and start:dev resolve out of the box.X is already running. Restart? for a single target, All 3 already running. Restart them? when every selected folder is running, or 2 of 3 already running. Restart these, then start the other one? for the mixed case. No more N-alert cascades for N-folder selections.already running. Restart?. Now, unless you're actually in Finder, the command goes straight to the recents picker, where you can start whatever project you meant.↵ acts on the server you just launched rather than re-opening whatever was previously selected. Restart (⌘⇧R) likewise re-focuses the replacement once it binds.launchContext, which lets the user land on the dashboard immediately and watch the spawn happen there, rather than waiting on a blank loading view for a pre-spawn fetchServers call.idle → pending → confirming → spawning → done. The "Starting…" toast lives on the dashboard so it's visible the whole time the user is waiting, and transitions to a green "running" state the moment every expected cwd appears in the polling loop.canonicalCwd (a realpathSync wrapper) so symlinked project paths compare equal between Finder selections, the recents store, and lsof's view of running processes.startDevServer(cwd) and killServer(pid) so the new command and the existing restart flow share one spawn path. Restart is now killServer + startDevServer.tool-display.ts so the framework tag styling stays consistent across the dashboard and the picker.⌘T opens once, and both commands honor it.Surfaces custom local domains from portless, and tightens the action panel, shortcuts, and preferences to align with Raycast conventions.
myapp.localhost) as the row title instead of localhost:PORT. The localhost:PORT pill stays visible alongside it, since the raw loopback target is still useful for env files, OAuth allowlists, CORS rules, and anything that doesn't trust the local CA.https://myapp.localhost.localhost:PORT pill once a named domain is in place.⌘D to ⌃X. ⌘D is officially "Duplicate" in Raycast's keyboard conventions; ⌃X is "Remove". Kill All for Project and Kill All Servers shift to ⌃⇧X and ⌃⌥X to stay in the same family.⌘⇧C, mirroring ⌘C for Copy URL.⌘↵ second-action shortcut never auto-fires Kill. It falls through to Open Localhost URL when a custom domain is present, or to Restart otherwise. Both are safe.3x faster, windows port preparation, support for git branches & worktrees, search by project and branch.
Detects more dev-server tools, renders favicons reliably across frameworks, and handles project paths that contain spaces.
node_modules/, not just those launched via node_modules/.bin/. Surfaces tools like serve and http-server that were previously missed.Dashboard for every running dev server, grouped by project.
node_modules/ (Vite, Next.js, Astro, SvelteKit, Nuxt, Webpack, Parcel, Gatsby, Remix, Turbo, esbuild) plus the Bun runtime.