- macOS 26.0 or later
- Download the latest release from GitHub Releases.
- Drag
SlayNode.appinto/Applications. - Launch it from Finder, Spotlight, or:
open /Applications/SlayNode.app
- Launch a local dev service such as:
npm run dev
- Open SlayNode.
- Confirm the service appears in the center list.
- Select it and verify that ports, actions, runtime/source, and workspace details show up in the main panel.
Optional additional checks:
- Start a Docker container and confirm it appears with
RestartandLogs. - Start a Homebrew Service and confirm it is grouped into the same local control surface.
- macOS 26.0 or later
- Xcode 26 or current Command Line Tools (
xcode-select --install)
git clone https://github.com/mastertyko/slaynode.git
cd slaynode
./script/build_and_run.sh# Run the repo's full local verification gate (matches CI/release preflight)
./script/full_verification.sh
# Run only the Swift test suite
swift test --disable-sandbox
# Build a release bundle
./build.sh release
# Run fast bundle metadata/plist preflight checks
./build.sh --verify-only
# Create CI-style local release artifact names
./release.sh 1.0.0 --build-number 150
# Build, launch, and verify the app process
./script/build_and_run.sh --verify
# Stream app logs
./script/build_and_run.sh --logsIf you only run one validation command before pushing or packaging, prefer
./script/full_verification.sh. It wraps the shell checks, static safety scan,
release-note regressions, debug-port samples, plist linting, whitespace check,
and Swift test suite in the same order the repo expects elsewhere.
chmod +x SlayNode.app/Contents/MacOS/SlayNodeMenuBar
codesign --force --sign - SlayNode.app- Make sure at least one supported local service is running:
- a development runtime such as Vite, Next.js, Bun, Deno, Python, Ruby, or Go
- a Docker container
- a Homebrew Service
- Use the in-app
Refreshaction. - Check Console.app for
SlayNodeMenuBarlog entries. - Validate that expected runtime commands are visible to
ps:ps -axo pid=,command= | rg '(node|npm|pnpm|yarn|bun|deno|python|ruby|go)' | head -20
- Validate that service ports are actually listening:
lsof -nP -iTCP -sTCP:LISTEN | rg '(3000|4173|5173|8000|8080|8787)'
- Run the built-in port detection samples to confirm parser behavior:
./debug-port-detection.sh --samples-only
- If
lsofis blocked by OS permissions, grant Terminal or your shell host app permissions in System Settings and retry.
- Trigger
Refreshin SlayNode and wait one polling interval. - Verify that the process is truly gone:
ps -p <PID_FROM_SLAYNODE> -o pid=,command=
- If stale rows remain, relaunch SlayNode from terminal and capture logs:
./script/build_and_run.sh --verify ./script/build_and_run.sh --logs
- Include the last refresh timestamp and affected PID in bug reports to simplify diagnosis.
xcode-select --install
sudo xcode-select --reset- Local builds intentionally disable Sparkle when the feed URL or EdDSA key is not configured.
./build.sh --verify-onlynow also fails fast if the Sparkle feed URL is nothttps://...or the ED key contains invalid characters, so release metadata problems surface before packaging.- Local
./release.shruns emit a sibling*-release-metadata.json, and GitHub releases publish a matchingrelease-metadata.jsonasset with the selected note source and commit provenance.
- SlayNode redacts known secret-bearing arguments before displaying commands in the UI.
- This includes common auth headers, cookies, URL credentials, connection strings, and query parameters such as
tokenoraccess_token. - Source commands still run exactly as launched by the system; only the presentation and local history copy are sanitized.
Use one of these approaches:
./script/build_and_run.sh --logs
./script/build_and_run.sh --telemetryOr open Console.app and filter on SlayNodeMenuBar.
- Quit SlayNode from the app menu or by closing the app normally.
- Remove
SlayNode.appfrom/Applications. - Optionally clear stored local preferences:
defaults delete se.slaynode.menubar
- README.md for the product overview
- docs/DEVELOPMENT.md for implementation details
- GitHub Issues for bug reports