Skip to content

Runlet 0.2.1

Choose a tag to compare

@filipac filipac released this 03 Oct 11:22
· 1014 commits to main since this release
56fa015

Runlet 0.2.1 fixes a crash when installing the command-line tool from Settings, stops the "No PHP" banner from flashing at launch, and comes with a reworked README. Website: https://filipac.github.io/runlet/

Fixes

  • Install Command-Line Tool no longer crashes when opened from Settings ▸ General. The window used to resize itself from inside AppKit's layout pass whenever its content height changed, which could loop AppKit's constraint updates into a crash. It now follows its content on the next run-loop turn, and Settings opens it after its own click has finished. The crash couldn't be reproduced on the development Mac; if it still happens for you, please open an issue with the crash report from Console ▸ Crash Reports. Workaround: ln -s /Applications/Runlet.app/Contents/Helpers/runlet ~/.local/bin/runlet.
  • No more "No PHP" banner flash at launch on Macs that have PHP. The banner, the sandbox status, Settings ▸ PHP, and the project PHP picker wait for the first PHP scan instead of briefly showing "no PHP". A run started during that scan waits for it instead of failing with "No PHP executable was found".
  • README: it now says what Runlet is, why to use it, and how to install it, in the first screen.

Install

Download Runlet-0.2.1.dmg (drag Runlet to Applications) or Runlet-0.2.1.zip. Requires macOS 26 or later, on Apple silicon or Intel.

Runlet is an early release and is not notarized yet (ad-hoc signed), so macOS blocks the first launch. Open Runlet once, then go to System Settings ▸ Privacy & Security and click Open Anyway next to the message about Runlet. Or remove the download quarantine in Terminal:

/usr/bin/xattr -dr com.apple.quarantine /Applications/Runlet.app

Updating from 0.2.0: replace the app in Applications. Your snippets, history, and targets stay where they are.

Checksums (SHA-256)

95ba01f05adc16b94768de29065c3b9c73ac8134ec740fa27cd33e96d449a241  Runlet-0.2.1.dmg
0b1dd503c554e0ed77f781872ce76b5725c102546e5c5d2546e28233e944352e  Runlet-0.2.1.zip

Notes

  • Early preview. Package tests passed in each pull request; for this build the packaged self-test passed (6 of 6 checks). The UI test suite was not re-run.
  • Free and open source under the MIT License.
Full changelog for 0.2.1

2026-10-03 — Install Command-Line Tool no longer crashes from Settings (#92)

  • Runlet 0.2.0 could crash when Settings ▸ General ▸ Command-Line Tool ▸ Install… opened the
    Command-Line Tool window. The window followed its content through the hosting controller's
    preferred size, so AppKit resized it from inside its own layout pass whenever the content's
    height changed (the shell's PATH arriving, a hint wrapping onto another line, the result of
    Install or Remove Link). That is the pattern behind AppKit's "Update Constraints" loop
    exception. The window is now sized by hand: the content reports its natural size and the
    window follows it after the layout pass, keeping its top edge. Settings opens the window
    after its click is handled rather than during it.
  • The crash didn't reproduce on macOS 27 (Debug, optimized arm64, and optimized x86_64 under
    Rosetta, from Settings and the menu, with folders that are missing, read-only, a file, or
    hold a dangling link). The reporting Mac's crash report will confirm the cause.
  • scripts/check-cli-window.sh <Debug Runlet.app> [runs] opens the window from Settings and
    from the menu command with scratch data (and a preselected scratch folder), and fails if
    Runlet doesn't survive. New CommandLineInstall tests cover a folder this user can't write,
    missing folders, a file where the folder should be, dangling links, and odd PATH values; no
    trap was found in those paths or in the administrator-password step.

2026-10-03 — README: positioning and clarity (#95)

  • readme.md now leads with what Runlet is and why to use it: a native macOS PHP scratchpad
    for running code inside real projects ("Run PHP anywhere. Inspect everything. Experiment
    insanely fast."), a screenshot, the download, and four short workflows, followed by who it's
    for and how it compares with Tinker, temporary routes or scripts, dd(), and IDE scratch
    files.
  • New sections for magic comments, running inside real applications, the run inspector, targets
    and the production guard, benchmarks and Profile Run, and AI clients over MCP (approvals and
    safeguards). A grouped feature overview (Execute, Inspect, Measure, Iterate, Automate) and the
    supported environments replace the flat feature list; development, documentation, and
    license details move lower and are kept.
  • Installation spells out the requirements (macOS 26 or later, one universal app), that
    releases are ad-hoc signed and not notarized, the Gatekeeper steps and why removing the
    quarantine flag works, checksums, updating, and that there is no Homebrew cask.
  • Three new screenshots in website/assets/shots (light and dark, 1200 and 2400 px): magic
    comments in the Laravel sandbox, a Profile Run flame graph on Runlet's own PHP, and the MCP
    approval sheet for a production SSH target. They were taken from a Debug build with its own
    bundle identifier, hidden, with scratch data, a fake Docker CLI, and the fake ssh fixture; the
    approval was declined, so nothing connected anywhere.

2026-10-03 — No-PHP banner no longer flashes at launch (#91)

  • On a Mac with PHP, the "No PHP was found on this Mac… Download PHP" banner no longer shows
    for a moment at launch. Runlet now waits for its first PHP scan to finish before it offers
    its own PHP; after the scan the banner appears only if no usable PHP was found, as before.
  • The sandbox stays "Preparing sandbox…" until that first scan finishes, so it can't briefly
    choose Docker or report no PHP. A run started meanwhile, in the sandbox or in a local project
    without its own PHP, waits for the scan instead of failing with "No PHP".
  • Settings ▸ PHP shows "Scanning…" rather than "No PHP installations were found", and the
    project PHP picker shows "checking…" rather than "none found", until the first scan finishes.
  • Debug builds: RUNLET_DEBUG_DISCOVERY_DELAY=<seconds> delays the first scan, to check what
    launch shows meanwhile; the state debug step reports the scan and the banner offer.