Everything in Runlet
Every feature of Runlet on one page, grouped by what you're doing, with links to the pages that cover them. New to Runlet? Start with the Quickstart.
Execute
- Targets: the Laravel sandbox, local projects (PHP 7.4 or later), Docker containers and Compose services, and SSH servers, with or without a container on the server.
- PHP per project or as the default, from Herd, Homebrew, your
PATH, or Runlet's own PHP 8.5.8. See Installation. - Run, Run Selection, and Stop: output as it runs, or all at once when it ends, and an output pane that can stay hidden until a run or hide on Esc.
- Quick Run: a floating panel for a line of PHP, on the sandbox or another target but never a production one. Open it from any app with a global shortcut (off by default), press ⌘R, and read the result; Open in Tab moves the code into a tab.
- Sandbox auto-run: turn it on for a sandbox tab, and it runs 800 ms after you stop typing. It's off by default, shows an AUTO badge, and never works on local, Docker, or SSH targets.
- Notifications for long runs: a run that takes 10 seconds or more (you choose) and ends while you're in another app posts a notification with its status, duration, tab, and target, never code or output. Click it to get back to the tab.
- Dry Run: a PHP tab's runs happen in database transactions that Runlet always rolls back, and then say what was rolled back. Statements that would commit the transaction on MySQL and MariaDB (schema changes) are refused before they run, and Runlet warns about what a transaction can't undo.
- Production asks first: a target marked as production shows what will run, and where, before every run. See Production hosts.
Inspect
- Output as Structured, Plain, or Raw; tables for rows and collections; and string viewers for JSON, long text, images, and HTML.
dump()anddd()through your project's VarDumper, or Runlet's own when there is none; exceptions with their snippet line and source; and\Runlet\notice(),warning(), anderror()cards that never fail the run. Everything a snippet can use is in the Snippet API.- The run inspector: SQL queries with timings, bindings, N+1 hints, and Explain; mail previews and mail interception; logs; HTTP requests with credentials redacted and
Http::fake()responses marked; jobs, queued or run; optional events; and sections a project driver adds. - The log viewer (⌘L): Laravel, Symfony, WordPress, and driver logs, parsed and followed as they're written, with level and search filters, the lines the last run wrote, and stack frames that open in your editor. In containers and over SSH, it follows a log only when you click Follow.
- Export values as JSON, PHP, or Markdown, tables as CSV, and the whole output to a file.
- Explain or Fix… on an error card asks Anthropic or OpenAI, with your own API key, why a run failed. You see exactly what's sent first, and a proposed fix changes your tab only when you click Apply Fix.
Measure
- Run timings: bootstrap, execute, and total time, peak memory, and query time.
- Timings in the editor with the
/*?.*/magic comment. - Benchmarks with
Runlet\bench(), and a card for Laravel'sBenchmark::dd(). - Profile Run (⌥⌘R) with a native flame graph, through the Excimer extension. Runlet's own PHP includes it.
Iterate
- Magic comments:
//?,/*?*/,/*?->…*/, and/*?.*/. - Completion that knows your project, with hover, signature help, and diagnostics, plus code navigation: Go to Definition (F12, ⌘-click) with a read-only peek into vendor code, Find References (⇧F12), code actions such as importing a class (⌥Return), inlay hints, and folding.
- Format Code (⌥⇧⌘F) with the bundled Mago formatter: no PHP needed, PER, PSR-12, or Laravel style, magic comments kept in place, and an optional Format before run.
- Move and duplicate lines (⌥↑ / ⌥↓, and with ⇧) in every kind of tab, one undo step per press, with a folded block moving as one line.
- History (per project or all), personal snippets with descriptions, and project snippets your team commits in
.runlet/snippets, with inputs for runbooks. - Promote a snippet: Save as Artisan Command… or Save as Test… (Pest or PHPUnit) writes the tab's code into the project as a class or test to review, without running it.
- Open Anything (⌘P) for targets, snippets, recent files, and run history, and the command palette (⇧⌘P). Every shortcut can be changed. Type
dark,light, orautoin Open Anything to switch the appearance. See Keyboard Shortcuts. - Tabs: horizontal or vertical, pinned tabs, several windows, and workspace files. Tabs opened from files follow changes on disk.
- The Commands pane: Artisan or console commands, Composer scripts, your own host commands, Open REPL (the target's Tinker, PsySH, or
php -a), and Tests (all, one file, or--filter, withphp artisan test, Pest, or PHPUnit), in a terminal that uses your login shell. - Databases: SQL tabs on your application's connection or one you save, with a Connection Manager, and Redis and MongoDB tabs.
Automate
- The
runletcommand:runlet .opens the current folder,runlet file.phpopens a file, and-t <target>picks a target. - AI clients:
runlet mcplets Claude Code, Cursor, and other MCP clients ask to run PHP, and Runlet runs it only when you approve. - Project drivers in
.runlet/for applications Runlet doesn't detect.