🖥️
See, create and edit every launchd job on your Mac
Plus processes, logs and system load. Open source, as a desktop app or in your browser.
Website · Install · Features · Contributing · Sponsor
mac-dash is a launchd job manager and system dashboard for macOS:
- Create and edit LaunchAgents and LaunchDaemons: a form for every
launchd.plistkey, an XML expert mode, checks, templates, revisions - Watch the launchd folders: a history and a notification when any app adds, changes or removes a job, or when a job starts to fail
- Verify who runs on your Mac: code signatures, login items, background items, privileged helper tools
- Monitor CPU, memory and disk, explore processes, stream the unified log
- Extend with plugins
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
The screenshots use fictional data. bun run media regenerates them.
Available as both a native desktop app (Tauri) and a web server (Bun + Hono). Desktop app uses native macOS APIs — no HTTP server, no Node.js, minimal overhead.
The native macOS desktop app uses Tauri — no server needed, native APIs, minimal resource usage.
Homebrew:
brew install --cask talhaorak/tap/macdashManual Download:
Download the latest .dmg from GitHub Releases and drag to Applications.
✨ Benefits: Native performance, no server, menu bar integration, auto-update support
For the web-based version with plugin support:
Quick Start (npx):
npx macdashGlobal Install (npm):
npm install -g @talhaorak/mac-dash
macdashHomebrew:
brew install talhaorak/tap/macdash
macdashFrom Source:
git clone https://github.com/talhaorak/mac-dash.git
cd mac-dash
bun install
cd client && bun install && cd ..
bun run devRequirements: macOS + Bun runtime
Real-time CPU, memory, and disk monitoring with animated gauges, sparkline charts, and hardware info.
Browse all LaunchAgents and LaunchDaemons across user, global, and system directories, with the live state of both launchd domains. Run, stop, restart, enable, or disable a job.
Create and edit jobs like in Lingon:
- A form for every documented
launchd.plistkey: command, script, app or Shortcut to run, run at load, keep alive with conditions, intervals, calendar schedules, watch paths, environment, output files, user, resource limits. - Expert mode with the raw XML, syntax colours and parse errors with line numbers.
- Checks before you save: missing executables,
~in paths, keys that only apply to daemons, schedules launchd would ignore. - Jobs for you, for all users, or as root. Saving to
/Libraryasks for an administrator password. - Templates, duplicate, show in Finder, delete to the Trash, revisions with revert, notes and tags, a timeline of the next runs.
- Output tab for the job's stdout and stderr,
launchctl print, and an explanation of the last exit status. - A monitor that watches the five launchd folders all the time. It notifies you and keeps a history when any app adds, changes or removes a job, and when a job starts to fail.
- The verified code signature of every job's executable: Apple, Developer ID with team, ad-hoc or unsigned.
- Smart folders, a sortable list view, and a quick switcher (Cmd+K).
- Login items, the macOS background-items database, crontab, privileged helper tools, and the repeating wake and sleep schedule in the same place.
docs/lingon-parity.md lists every Lingon feature and its status.
View running processes sorted by CPU or memory. See detailed command arguments. Kill processes when needed.
Stream macOS unified logs in real-time via WebSocket. Filter by log level (error, warning, info, debug) or by process name.
Extend mac-dash with custom plugins that add new pages, API endpoints, and dashboard widgets.
plugins/
my-plugin/
manifest.json # Plugin metadata
server.ts # Backend API routes
client.tsx # React UI component
See plugins/README.md for the full plugin development guide.
# Start with default port (7227)
macdash
# Custom port
macdash --port 8080
# Or use environment variable
PORT=8080 macdashThen open http://localhost:7227 in your browser.
mac-dash can kill processes and install launchd jobs, and it has no login. The server therefore listens on 127.0.0.1 only and rejects requests from other web pages (Origin check) and from rebound DNS names (Host check).
| Variable | Effect |
|---|---|
HOST |
Listen address. Default 127.0.0.1. 0.0.0.0 exposes the API to your network: only do this behind an authenticating reverse proxy. |
MACDASH_ALLOWED_HOSTS |
Extra Host names to accept, comma separated. |
MACDASH_ALLOWED_ORIGINS |
Extra origins to accept, comma separated, e.g. https://dash.example.com. |
MACDASH_ROOT |
Folder that holds plugins/ and dist/client/ when they are not next to the binary. |
Install mac-dash as a LaunchAgent that starts on login:
./scripts/install-launchagent.sh| Layer | Technology |
|---|---|
| Runtime | Bun |
| Server | Hono |
| Frontend | React 19 |
| Styling | Tailwind CSS 4 |
| Bundler | Vite |
| Real-time | WebSocket |
| State | Zustand |
| Charts | Dependency-free SVG sparklines |
mac-dash/
server/ # Bun + Hono backend
core/ # System info, launchctl, process manager, log reader
routes/ # REST API endpoints
ws/ # WebSocket hub with topic-based subscriptions
plugins/ # Plugin registry
client/ # React + Vite + Tailwind frontend
src/
components/ # UI components (Gauge, MiniChart, GlowCard, etc.)
pages/ # Dashboard, Services, Processes, Logs, Plugins
hooks/ # Custom hooks (useWebSocket)
stores/ # Zustand state stores
lib/ # API client, utilities
plugins/ # Plugin directory
website/ # Landing page (GitHub Pages)
scripts/ # Helper scripts
We welcome contributions! Please see our Contributing Guide for details.
If you find mac-dash useful, consider supporting the project:
Talha Orak — Software Architect
- GitHub: @talhaorak
- Website: talhaorak.github.io/mac-dash
MIT © Talha Orak








