# What Is /Library/LaunchDaemons on Mac?

> /Library/LaunchDaemons holds launchd jobs that run as root from startup, often paired with a privileged helper. Remove one only after its app is gone.

- Updated: 2026-10-10
- URL: https://fresh.ist/library/system-launch-daemons/

**TL;DR:** /Library/LaunchDaemons contains launchd property lists for background services that start when the Mac boots and run as root, with no user logged in. Third-party apps use them for privileged helpers, VPN and network tools, virtualization and updaters. A daemon left behind by an uninstalled app can be unloaded and removed, but only with administrator rights.

## Definition

- Full path: `/Library/LaunchDaemons`
- Scope: system (shared, owned by macOS/root)
- Freshist checks this folder when uninstalling an app. When you uninstall an app, Freshist only considers items directly inside this folder whose name matches the app's bundle ID. They're never pre-selected, and because the folder is owned by macOS (root), selected items are deleted permanently by Freshist's signed helper rather than moved to the Trash.

## Daemons in short

A **launch daemon** is a background job that **launchd** starts at boot, or on demand, and runs as root. Daemons have no access to a user's screen and keep running when nobody is logged in. Apple's own daemons live in `/System/Library/LaunchDaemons`, which is protected by macOS. Third-party daemons are installed in `/Library/LaunchDaemons`, one property list per job.

Typical third-party uses:

- Privileged helpers that perform tasks needing root on behalf of an app, such as changing network settings or managing disks.
- Network tools like VPN clients and firewalls.
- Virtualization and container tools that set up virtual networking.
- Updaters that install new versions without asking for a password each time.

The plist names the `Label`, the `Program` or `ProgramArguments` to run, and conditions such as `RunAtLoad` or `KeepAlive`. Apps adopting Apple's newer `SMAppService` API keep the daemon's plist inside the app bundle instead of here, which ties the daemon's life to the app.

## What happens when the app is gone

| Situation | Effect |
|---|---|
| Plist and program both left behind | The service may keep running as root at every boot |
| Plist left, program deleted | launchd tries to start a missing file and logs errors |
| Program left, plist deleted | Nothing starts it; the file is inert |

If both files are still there, clean them up: a leftover root service for software you've removed is unnecessary, and it may stop getting security updates.

## Inspecting it read-only

```
ls -la /Library/LaunchDaemons
plutil -p /Library/LaunchDaemons/com.example.helper.plist
sudo launchctl print system/com.example.helper
```

The `print` command shows whether launchd has the job loaded, its state and the program path. `sudo sfltool dumpbtm` lists the background items macOS knows about and which app each belongs to. In System Settings, the same items show up under **General → Login Items & Extensions → Allow in the Background**.

## Removing a leftover daemon

1. Try the vendor's uninstaller first. Daemons often come with kernel or system extensions, network configurations or helpers that a manual removal misses.
2. Or switch it off under **Allow in the Background** if you just want it to stop.
3. Remove it by hand only when the app is already deleted:

```
sudo launchctl bootout system /Library/LaunchDaemons/com.example.helper.plist
sudo rm /Library/LaunchDaemons/com.example.helper.plist
```

Then check [/Library/PrivilegedHelperTools](/library/system-privileged-helper-tools/) for a program with the same name, and [/Library/Application Support](/library/system-application-support/) for its support files. Restart when you're done.

Leave anything you can't identify. Some daemons belong to drivers, backup tools or device management configured by your organization, and removing them can break features or violate policy.

## How this relates to Freshist

The facts box above shows how Freshist treats this folder during an uninstall. Because it only matches plists named after the app's bundle ID, a daemon with a vendor-specific label (for example `com.example.vmnetd` for an app whose ID is `com.example.app`) needs to be checked by hand.

For the per-session counterpart, see [/Library/LaunchAgents](/library/system-launch-agents/). Our article on [login items and background apps](/blog/login-items-background-apps-mac/) covers the System Settings side.

## Sources

- [Creating Launch Daemons and Agents](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html) (Apple Daemons and Services Programming Guide)
- [SMAppService](https://developer.apple.com/documentation/servicemanagement/smappservice) (Apple Developer Documentation)
- [Open items automatically when you log in on Mac](https://support.apple.com/guide/mac-help/open-items-automatically-when-you-log-in-mh15189/mac) (Apple Support)
- `man launchd.plist` and `man launchctl` in Terminal

## Frequently asked questions

### Is it dangerous to have third-party launch daemons?

Not by itself. Many legitimate apps need one. Because daemons run as root, it's worth knowing what each one is, and removing those whose apps you no longer use.

### I removed a daemon's plist but the process is still running. Why?

Deleting the file doesn't stop a job launchd has already loaded. Unload it with launchctl bootout, or restart the Mac.

### Why does the same name appear in LaunchDaemons and PrivilegedHelperTools?

Apps that install a privileged helper usually put the helper program in /Library/PrivilegedHelperTools and the plist that launches it in /Library/LaunchDaemons, under the same label. Remove both together.

---

Canonical page: https://fresh.ist/library/system-launch-daemons/
Official site: https://fresh.ist/ (fresh.ist only)
Generated: 2026-10-10
