I recently stumbled upon this magical piece of software called Syncthing. It offers cross-platform file synchronization between devices in an intuitive and powerful way. But before jumping into its use-cases, and how we might configure it to synchronize REAPER installs, let’s discuss REAPER configurations in general and the potential drawbacks of out-of-the-box options for syncing them.
Long story short: for years I have attempted to find a clean way of synchronizing my REAPER configuration across computers without clunky workflows, arbitrary filepath limitations, and occasional heartbreak.
I may have just found the answer.
Syncthing
Syncthing is a continuous file synchronization program. It synchronizes files between two or more computers in real time, safely protected from prying eyes. Your data is your data alone and you deserve to choose where it is stored, whether it is shared with some third party, and how it's transmitted over the internet. - Syncthing.net
Where DropBox, Google Drive, etc route your data through servers to get from one computer to another, Syncthing skips the middleman and goes directly from point A to B. In addition to security and speed benefits, this flexibility and control allows you to selectively map files and folders from an arbitrary location on one computer to an unrelated location on another.
And did I mention that it’s fully cross-platform, open source, free, actively maintained/updated?
Recommended Viewing
If you’re new to Syncthing and interested in learning more, I recommend checking out this video before continuing with the rest of this post. I’ll be diving straight into some of the nitty gritty setup details, so having some familiarity with the tool’s UI/UX is key.
So how do I set it up with REAPER?
If you haven’t done so already, now is a good time to go ahead and install Syncthing. Check out the official Getting Started guide for details! If you’re on Windows, after installing Syncthing, I suggest installing syncthingtray to make tracking your changes more easily accessible from the taskbar. On macOS, jump straight to installing Syncthing for macOS, it feels like a seamless native application.
Well, first thing’s first: back up your REAPER config using the Export Configuration menu. Put that config in a safe, backed up location. While I don’t expect anything to go wrong, it’s always a good practice and I will not take responsibility if the computer gods strike down upon you with inexplicable wrath.
The following table shows the default installation paths for REAPER on all platforms. You will need to create two shared folders in Syncthing: one for your Application Path and one for your Resource Path. If you are using a portable install (on Windows), then you just need one shared folder mapped to wherever you placed the install.
Platform | Application Path | Resource Path (User Data) |
---|---|---|
Windows | C:\Program Files\REAPER (x64) | ~\AppData\Roaming\REAPER |
Mac | /Applications/REAPER.app/Contents | ~/Library/Application Support/REAPER |
Linux | ~/opt/REAPER | ~/.config/REAPER |
When adding a folder in Syncthing, you can use the tilde character (~) to easily reference your platform-specific user data folder. This shorthand notation comes from Unix-like operating systems, and I wish it was more prevalent throughout Windows (%APPDATA%
always seemed so… aggressive).
If you haven’t done so already, you will need to click Add a Remote Device to connect your separate computers to one another and start synchronizing. Then go to each synced folder’s settings and enable sharing with the newly set up device.
Setup Notes
-
REAPER.ini
reaper-fxtags.ini
reaper-midihw.ini
reaper-reginfo2.ini
reaper-vstplugins64.ini
reaper-recentfx.ini
reaper-wndpos.ini
MediaDB/*
MetadataCaches/*
Folder Settings
Ignore Patterns - REAPER uses
.ini
files to store many local changes, like recently selected audio device settings. Because these don’t necessarily translate from one computer to another, you may find yourself having to manually set them every time you switch computers. You can get around this by selectively excluding config files from synchronization by using ignore patterns. I don’t typically recommend it forREAPER.ini
as, in my opinion, the trade-off in missing out on other shared preferences is not worth it.File Versioning - I recommend setting up some basic versioning in the File Versioning tab for each folder. I personally use Staggered Versioning with the default settings, but you can do whatever you prefer.
Platform-Specific Quirks
Windows - You will need to enable full access to user permissions on the REAPER Application folder. You can do this through the Properties > Security menu.
Mac - Applications in Finder are actually just sneaky folders in disguise. You can verify this from Terminal by running:
cd /Applications/REAPER.app/Contents
followed byls
to list the files in your REAPER application directoryLinux - When installing REAPER with the provided script in interactive mode, you are presented the option of installing in
/opt
or~/opt
. I tend to prefer the latter home directory, but if you go with/opt
, then you’ll need to modify permissions on the folder recursively (chmod -R
) to allow user read/write/execute.
Potential Drawbacks
Bloat?! If you are synchronizing an installation on multiple platforms, you will naturally end up with cross-pollination of files that don’t necessarily need to be on one platform or the other. For example, your Mac doesn’t need to know about the Windows .exe for REAPER, but Syncthing will include it anyways by default. You can get around this by adding them to your Ignore Patterns on a per-platform basis.
Merge Conflicts?! If you have experience working in game or software development, then you have undoubtedly experienced your fair share of merge conflicts. Like any solution where multiple locations can modify the same files, merge conflicts are an inevitability. You may want to consider ignoring certain high-traffic .ini files like the ones listed above in Folder Settings - Ignore Patterns.
Relays?! Syncthing is a great solution for my needs, as I’m using it to synchronize my laptop(s) and my main desktop PC at home within the same network. However, if you are planning on syncing computers that are in different locations, you’ll need to look into setting up a relay.
I have to keep my computers online?! Well, yeah. Google’s servers never sleep (unless there happens to be an outage). But our “servers” in this case are just the two or more computers talking to one another, they must be awake and online in order to remain in sync. In some cases, you may be able to get by with infrequent synchronization, though don’t be surprised if you end up with more merge conflicts that way.
Done!
If you try this out, I’d love to hear your thoughts. Syncthing is quite powerful, and you may be able to use it for other audio-specific workflows like syncing plugin/VST folders across computers. It’s also just generally great for documents, pics, and quickly passing files around without emailing yourself.
Did I miss anything critical in the steps above? Are you liking it in your workflow? Is there a better synchronization solution I just haven’t heard of whatsoever? Let me know in the comments below! Thanks for reading :)