The version each project asks for, side by side

Short Leash installs PHP, Python, Node, Go and Ruby, and runs each site on the version it asks for in composer.json, .nvmrc, .python-version, .ruby-version or go.mod. Several versions live side by side, and Update all brings PHP, Node, Go and Ruby to their newest patch releases.

Three projects name their versions in their own files: storefront's .nvmrc asks for Node 22, ledger-api's .python-version for Python 3.12 and harbor-admin's .ruby-version for Ruby 3.4. Short Leash's Runtimes screen lists each version with the site that uses it. Three updates are waiting: PHP 8.4.23 to 8.4.26, Node 22.19.0 to 22.23.3 and Ruby 3.4.6 to 3.4.7. Update all installs them in turn: PHP is updating and the other two are waiting.

Read from the project, not from your shell

Each site runs on the version its project names. PHP follows require.php in composer.json when the default doesn't fit it, Node comes from .nvmrc or .node-version, Python from .python-version, Ruby from .ruby-version or the Gemfile, and Go from the go line in go.mod. Install versions on the Runtimes screen; PHP, Node, Go and Ruby are also downloaded the first time a site needs them, and Python comes through uv.

Pin a site to another version on its Site settings. The Runtimes screen shows which sites use each version.

  • PHP 8.0 to 8.5, and 8.6 as a preview
  • Python 3.10 to 3.14 through uv, Node 18, 20, 22, 24 and 26
  • Go 1.24 to 1.27 and Ruby 3.2 to 4.0
  • Bun and Deno: the one on your PATH, or the newest release
Short Leash's Runtimes screen with updates ready, and PHP versions with the default marked, an Xdebug switch on each and the sites that use themShort Leash's Runtimes screen with updates ready, and PHP versions with the default marked, an Xdebug switch on each and the sites that use them

Patch releases, in one go

Short Leash checks for newer patch releases a few minutes after it starts and once a day, and counts them on Machine in the rail. Update all installs them one after another, each download checked exactly as an install is.

PHP restarts on the new release. Node, Go and Ruby keep the old version until the new one is ready, and running sites pick it up when they next start. Moving up a minor version, like PHP 8.4 to 8.5, stays your choice.

leash runtime updatesPHP 8.4 8.4.23 → 8.4.26Node 22 22.19.0 → 22.23.3leash runtime update PHP 8.4Updating PHP 8.4…Updated PHP 8.4

Xdebug per PHP version, only when you ask

Turn Xdebug on for one PHP version with the switch on its row. Requests that ask for a debug session, through the Xdebug browser extension or ?XDEBUG_SESSION=1, go to a separate PHP with Xdebug loaded; every other request runs at full speed.

With PhpStorm you don't need the extension: while the project has breakpoints, saved with ⌘S or Ctrl+S, the site's requests start a debug session on their own. Turn that off per site under Site settings › Debugging.

Short Leash runs your code from where it lives, so breakpoints work without path mappings.

  • Connects to your editor on 127.0.0.1:9003
  • Optionally for Artisan, queue workers and tests Short Leash runs
  • Memory, upload size and time limit for every version, plus your own .ini files
# a breakpoint in an Artisan commandXDEBUG_SESSION=1leash php artisan orders:sync

From your terminal and your assistant

The leash command

leash use 8.5
leash isolate 3.12
leash runtime updates
leash runtime update PHP 8.4

Every command is in the CLI reference.

Tools your coding assistant can use

set_php_versioncheck_extensionssite_info

Connect Short Leash once with claude mcp add --scope user leash -- leash mcp; Settings › Coding assistants (MCP) has the setup for other assistants. Coding assistants

Questions

How do I run several PHP versions at once?

Install them on the Runtimes screen. Each version runs its own PHP-FPM pool, started on the first request, so one site can use PHP 8.2 while the rest use the default. Pin a site with leash isolate 8.2 --site legacy.

Does Short Leash read the PHP version from composer.json?

Yes. A site's PHP version comes from its Site settings; otherwise it's the default when require.php in composer.json allows it, then the newest installed version that does, then the default. The site's Overview says where its version comes from, and Needs a look says which version to install when none fits.

Does Short Leash check the PHP extensions my project needs?

Yes. A site's Overview lists, under Needs a look, the extensions its composer.json and composer.lock need that its PHP version doesn't have, with what to do about each, such as picking a version that has it or turning Xdebug on. Polyfills that provide an extension count as having it. Coding assistants get the same list from check_extensions.

Can I try PHP 8.6 before it's released?

Yes. Short Leash offers PHP 8.6 as a preview, the newest release candidate, marked Preview on the Runtimes screen. It's never the default and never picked from composer.json while a released version fits, so pin it to a site on its Site settings to use it. Xdebug isn't available for previews yet, and some extensions may be missing until 8.6 is released.

Which PHP extensions work on Windows?

PHP on Windows loads the official build's extensions, and Short Leash adds redis, apcu, igbinary, msgpack, mongodb, opentelemetry, grpc, sqlsrv and pdo_sqlsrv for PHP 8.0 to 8.5 (igbinary up to 8.4 for now, opentelemetry from 8.1), plus pcov for code coverage in the terminal. Extensions that need Unix, such as pcntl, posix and swoole, aren't on Windows, and neither are memcached and imagick.

Does Short Leash read .nvmrc?

Yes. A site's Node version comes from its Site settings, then .nvmrc or .node-version, then the default. In your terminal, leash npm, leash npx and leash node use the same version. Python reads .python-version, Ruby reads .ruby-version and the Gemfile, and Go reads go.mod.

How do I update PHP to the latest patch release?

Choose Check for updates on the Runtimes screen, then Update on one version or Update all. PHP restarts on the new release and keeps Xdebug. From a terminal, run leash runtime update PHP 8.4.

Can each PHP version have its own php.ini?

Yes. Files in php/conf.d in Short Leash's folder apply to every version, and files in php/8.4/conf.d apply to PHP 8.4 only. The version's own files load last, so they win. php.ini for 8.4 on the Runtimes screen opens that folder.

Does Xdebug slow down every request?

No. Requests that ask for a debug session go to a second PHP pool with Xdebug loaded, and so do a site's requests while PhpStorm has breakpoints in it; every other request runs at full speed.

Start free, try Pro for 14 days

Download Short Leash for Mac or Windows. Every Pro feature is on for your first 14 days, with no card and no account.