Skip to content

BenchBar 0.4.0

Choose a tag to compare

@github-actions github-actions released this 26 Sep 07:29
· 80 commits to main since this release
6943224

Frappe v16 is a first class profile, and more than one bench runs on the
same Mac: each with its own ports, sites, settings and scheduler choice,
side by side in the menu bar. Verified on a real Mac with a v15 and a v16
bench running at once (docs/DECISIONS.md, "the v16 bench on a real Mac").

Added

  • Frappe v16, supported. The v16-lts profile (Python 3.14, Node 24)
    installs and runs end to end. pkgconf and mariadb-connector-c are
    system dependencies of every profile and on PKG_CONFIG_PATH (v16
    pins mysqlclient, which builds against them); a CI job runs the v16
    profile under mocks.
  • One MariaDB for every bench. A bench uses the MariaDB server
    already running on 3306 when the profile accepts its version (v16
    accepts 10.6 to 11.8), so a v16 bench next to a v15 bench shares
    mariadb@10.11 instead of installing mariadb@11.8.
  • Several benches side by side. Every bench keeps its own profile,
    site, autostart, scheduler, honcho and ports in
    .benchbar/benches/<name>-<hash>.env; settings from before 0.4 still
    count for the default bench and move there on the next service,
    adopt or install. A bench without a stored profile gets it from its
    frappe version. A second bench no longer becomes the default by being
    set up; --make-default does that.
  • Port blocks. A new bench that clashes with an established one moves
    to the next free block (web 8000 + n, socketio 9000 + n, Redis
    11000 + n and 13000 + n), written with bench set-config -g and
    bench setup redis as part of the plan; --port-offset N picks one.
    The default bench never moves on its own.
  • Sites. benchbar site list, site add NAME (with the Keychain
    MariaDB password, the hosts line, and apps from apps/),
    site default NAME and site hosts.
  • The scheduler, opt in per bench: benchbar service --with-schedule
    and --without-schedule; repair keeps the choice.
  • Doctor checks from the community threads, each with its fix:
    full_disk_access, toolchain_node, toolchain_yarn,
    toolchain_pkgconfig (the tools as the bench's launchd PATH sees them,
    so nvm's node shows up as missing), mariadb_version (the profile's
    range), honcho_setuptools (with a repair that touches only honcho's
    venv), fork_safety, orphans (stale processes on the bench's ports)
    and scheduler.
  • BenchBar.app with several benches: a bench list with state, uptime
    and Start, Stop and Restart per row; the runner shows the worst state
    across all benches, with an "n of m up" count; the selected bench lists
    its sites with Open buttons, the default marked, and the site hosts
    fix when a hosts line is missing; a scheduler switch per bench in
    Settings.
  • JSON (still schema_version: 1): sites[] in list and status,
    scheduler in status, redis_socketio in ports.
  • bench itself is installed with uv tool install frappe-bench when uv
    is on PATH; pipx stays the fallback and existing pipx installs are left
    alone. Doctor names the owner.

Changed

  • Benches never touch each other's processes. down, status and
    the runner match honcho and socketio by their working folder: both run
    with the same relative command line in every bench, and before 0.4
    starting or stopping one bench also stopped the other's. The runner
    template is v3; run benchbar repair on every bench once.
  • The shell block's PATH lines follow the default bench's profile, so a
    v16 bench never changes the Python and Node of your shell; phase 00
    writes the block only when there is none.
  • The doctor check wkhtmltopdf is now pdf_engine: wkhtmltopdf on
    every profile (still v16's default engine) and, on v16, the Chromium
    used by Print Formats set to chrome, with bench setup-chrome as
    the fix.
  • bench init runs with --no-backups: a dev bench needs no backup
    cron, and the crontab write is what fails without Full Disk Access.
  • Site setup runs the bench's own Redis while it creates the site and
    installs apps (frappe v16 needs it; a new bench has none running yet),
    and stops only what it started.
  • v16 sites are created with --mariadb-user-host-login-scope=%; v16
    calls --no-mariadb-socket deprecated.
  • The port clash check also reports a bench that is only configured with
    the same ports, with the --port-offset that fixes it.
  • ROADMAP.md: 0.5 is one bigger release (repair from the app, a log
    viewer, benchbar mcp, app installs from any GitHub repo, team
    profiles, a team lockfile and pulling a production site); the public
    launch moves to 0.6.

Fixed

  • doctor --json with a failing check printed a [FAIL] Last command failed line after the JSON, so the app could not read the report.
  • The Python formula check read brew leaves, which hides a formula
    other formulae depend on (python@3.14 under pipx and uv); it now reads
    "installed on request".
  • A run that ended on verify warnings no longer adds a misleading
    [FAIL] Last command failed line naming a command that succeeded.

This build is not signed with an Apple Developer ID (ad hoc signature). macOS shows "Apple could not verify" on first open of the DMG: use System Settings > Privacy & Security > Open Anyway, or install with the one liner, which downloads with curl and opens without that prompt:

curl -fsSL https://raw.githubusercontent.com/askysh/benchbar/main/install.sh | bash

Checksums are in SHA256SUMS.