Auto-start Syncthing on macOS Boot with launchd
How to configure Syncthing to run silently in the background on every macOS login using a native launchd plist — no terminal required after setup.
By default, Syncthing on macOS requires you to open a terminal and type syncthing each time you reboot. This guide sets it up as a native macOS background service using launchd, so it starts automatically on every login with no manual intervention.
Prerequisites
- Syncthing installed via Homebrew (
brew install syncthing) - Terminal access
Step 1 — Find your Syncthing binary path
1
which syncthing
Note the output. On Apple Silicon Macs (M1/M2/M3) this will typically be:
1
/opt/homebrew/bin/syncthing
On Intel Macs it is usually:
1
/usr/local/bin/syncthing
Step 2 — Create the LaunchAgents directory
This directory may not exist by default:
1
mkdir -p ~/Library/LaunchAgents
Step 3 — Create the plist file
1
nano ~/Library/LaunchAgents/com.syncthing.syncthing.plist
Paste the following content, making sure the binary path matches your output from Step 1:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.syncthing.syncthing</string>
<key>ProgramArguments</key>
<array>
<string>/opt/homebrew/bin/syncthing</string>
<string>serve</string>
<string>--no-browser</string>
<string>--no-restart</string>
</array>
<key>KeepAlive</key>
<true/>
<key>RunAtLoad</key>
<true/>
<key>StandardOutPath</key>
<string>/tmp/syncthing.log</string>
<key>StandardErrorPath</key>
<string>/tmp/syncthing.err</string>
</dict>
</plist>
Save with Ctrl+O, Enter, then exit with Ctrl+X.
If you are on an Intel Mac, replace
/opt/homebrew/bin/syncthingwith/usr/local/bin/syncthing.
Step 4 — Load the service
No reboot required — load it immediately:
1
launchctl load ~/Library/LaunchAgents/com.syncthing.syncthing.plist
Step 5 — Verify it is running
1
pgrep -x syncthing && echo "running"
You should see one or two PIDs followed by running. Two PIDs is normal — Syncthing spawns a child process.
You can also open the Syncthing web UI to confirm:
1
http://127.0.0.1:8384
How it works
| Key | Purpose |
|---|---|
RunAtLoad |
Starts the service immediately when the plist is loaded |
KeepAlive |
Automatically restarts Syncthing if it crashes |
--no-browser |
Prevents Syncthing from opening a browser tab on launch |
--no-restart |
Lets launchd handle restarts rather than Syncthing’s own watchdog |
Managing the service
Stop and disable:
1
launchctl unload ~/Library/LaunchAgents/com.syncthing.syncthing.plist
View logs:
1
2
tail -f /tmp/syncthing.log
tail -f /tmp/syncthing.err
Restart:
1
2
launchctl unload ~/Library/LaunchAgents/com.syncthing.syncthing.plist
launchctl load ~/Library/LaunchAgents/com.syncthing.syncthing.plist
Syncthing will now start silently in the background on every login, accessible at http://127.0.0.1:8384.