https://github.com/chenwei791129/launchpal
A modern GUI for managing macOS LaunchAgents
https://github.com/chenwei791129/launchpal
gui launchagent launchctl macos nuxt wails
Last synced: about 2 months ago
JSON representation
A modern GUI for managing macOS LaunchAgents
- Host: GitHub
- URL: https://github.com/chenwei791129/launchpal
- Owner: chenwei791129
- License: mit
- Created: 2026-01-26T17:42:49.000Z (5 months ago)
- Default Branch: main
- Last Pushed: 2026-03-25T17:27:05.000Z (3 months ago)
- Last Synced: 2026-03-26T18:20:25.063Z (3 months ago)
- Topics: gui, launchagent, launchctl, macos, nuxt, wails
- Language: Vue
- Homepage:
- Size: 1.43 MB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# LaunchPal
A modern GUI for managing macOS LaunchAgents.
## Features
- ๐ฏ Manage LaunchAgents with an intuitive interface
- ๐๏ธ View user-level and system-level services
- ๐ View service status in real-time
- โถ๏ธ Start/Stop user services with one click
- โก Run Now (Kickstart) โ start a service immediately with one click (`launchctl kickstart -k`)
- ๐ View service logs (stdout/stderr)
- ๐งน Clear stdout / stderr logs from the Logs tab (one-click in-place truncate; system daemons fall back to the privileged helper only when the file is not user-writable)
- โ Create and configure new services
- โฐ Schedule services with Calendar Interval or Fixed Interval
- ๐
Cron-style range (`9-17`) and enumeration (`1,3,5`) syntax with automatic expansion
- ๐ Configure environment variables for services
- โ๏ธ Edit existing service configurations
- ๐ Browse system services (read-only) with heuristic status detection (no elevation required); ambiguous matches are flagged with an info icon
- ๐ **Admin Mode** โ manage `/Library/LaunchDaemons` system services with a single authorization per session (no persistent root process; helper exits when LaunchPal does)
- ๐ Inspect plist files with syntax highlighting
- ๐ Reveal plist files in Finder with one click
- ๐พ Automatic backup before modifications
- ๐ Side-by-side diff preview before restoring a backup (binary plists are auto-converted to XML)
## Screenshots
### Main Interface
### System Services
### Service Logs
### Plist Inspector
## Installation
### Homebrew (Recommended)
```bash
brew install --cask chenwei791129/apps/launchpal
```
Or add the tap first:
```bash
brew tap chenwei791129/apps
brew install --cask launchpal
```
> **Note:** LaunchPal is not code-signed. The quarantine attribute is automatically removed during Homebrew installation so macOS Gatekeeper will not block the app.
### Download
Download the latest release from the [Releases](https://github.com/chenwei791129/launchpal/releases) page.
### IMPORTANT: Unsigned Application
LaunchPal is currently **not signed with an Apple Developer certificate**. macOS will block unsigned applications from running by default.
After downloading the `.dmg` file, open it and drag **LaunchPal.app** to the **Applications** folder. Then remove the quarantine attribute before running it:
```bash
xattr -dr com.apple.quarantine /Applications/launchpal.app
```
Alternatively, you can try right-clicking the app and selecting "Open" from the context menu, which may prompt you to allow the unsigned app to run.
### Building from Source
If you prefer to build from source:
```bash
# Clone the repository
git clone https://github.com/chenwei791129/launchpal.git
cd launchpal
# Install dependencies
make setup
# Build the application
make build
# The app will be in build/bin/launchpal.app
```
## Admin Mode
LaunchPal can manage system services under `/Library/LaunchDaemons` via an optional **Admin Mode**:
1. Open **Settings** โ **Admin Mode** โ **Enable Admin Mode**.
2. macOS prompts once for your password (or Touch ID) and launches a root-privileged helper process.
3. While Admin Mode is enabled, the **System Services** page lets you Start / Stop / Restart / Edit / Delete / Create daemons.
4. Click **Disable Admin Mode** (or quit LaunchPal) to stop the helper โ nothing persists on the system.
**Why session-scoped?** LaunchPal is unsigned and cannot register a persistent privileged helper. The session-scoped model trades "enter your password once per launch" for "no root daemon lingers on your machine after LaunchPal exits". The helper exits automatically if LaunchPal crashes or is force-quit (parent PID watchdog, 2-second response time).
**Scope of Admin Mode writes**: only `/Library/LaunchDaemons/`. `/System/Library/LaunchDaemons/` remains read-only under Admin Mode (SIP would reject writes anyway).
## Known Limitations
- User services (`~/Library/LaunchAgents`) can be managed without authorization.
- System services (`/Library/LaunchDaemons`) require Admin Mode; authorization is prompted **once per LaunchPal session** and not cached across sessions (by design โ no persistent root daemon).
- Apple system services (`/System/Library/LaunchDaemons`) are always read-only.
- Some system services may require Full Disk Access permission to view.
## License
MIT License - see [LICENSE](LICENSE) file for details.
## Star History