Synclet
A folder on your phone, kept in step with your NAS or your cloud — on a schedule, over whatever address that machine has today.
Every sync app assumes your server has one address. Yours does not: it is
192.168.1.10 at home, a hostname from outside, and something else entirely over the
tunnel. Synclet treats that as normal.
What it syncs
- Your own hardwareSFTP, SCP, FTP and FTPS, WebDAV — Nextcloud and ownCloud included — and SMB shares. Free, because these are the reason the app exists.
- The usual cloudsGoogle Drive, OneDrive, Dropbox, Box, MEGA, pCloud, and anything speaking S3 — Backblaze B2, Cloudflare R2, Wasabi, MinIO, Storj.
- Somewhere else on the phoneAn SD card, a USB-OTG drive, another folder. A local destination is a remote like any other.
- In either direction, or bothUpload, download, or a real two-way sync that remembers the last run and can tell a new file from a deleted one.
One remote, several addresses
A remote in Synclet is a machine, not an address. It carries a list of rules, and the first one that matches the network you are on right now is the one that gets used:
| When | Use |
|---|---|
| On the home Wi-Fi | 192.168.1.10:22 — straight over the LAN, full speed |
| On any other Wi-Fi | nas.example.net:2222 |
| On mobile data | nas.tailnet-1234.ts.net, through the tunnel |
One set of credentials, one remote folder, three ways in. And a rule does not have to name a Wi-Fi network to work: by default Synclet simply tries the LAN address and sees whether it answers, which costs one round trip, needs no location permission, and is right more often than a network name is.
If nothing matches — you are in a café and the server is at home — the run is postponed, not failed. It happens when you get back.
It can bring up Tailscale for you
A remote that only exists inside your tailnet can be marked as needing it, and Synclet will ask Tailscale to connect before the transfer and wait for the address to answer.
Honest about the limits. This uses the automation hook Tailscale ships for Tasker and friends, not an official API: it can change, so Synclet checks it is there and hides the option when it is not. Tailscale has to be installed, signed in, and to have been connected by hand at least once — Android will not show the VPN consent dialog to an app running in the background. And since Android runs one VPN at a time, connecting the tailnet disconnects whatever else was up. Synclet says all of this before you switch it on, and never raises a tunnel for a job that did not ask for one.
Schedules that tell you the truth
Android has firm opinions about background work, and most sync apps let you configure a cadence the system will quietly ignore. Synclet has two schedulers and names which one a job is on:
- Deferred — the default. No permanent notification, gentle on the battery, and the interval floor is 15 minutes because that is the platform’s floor, not ours. While the phone is in deep sleep the run waits for the next maintenance window, so the app says “about every hour” rather than pretending to a stopwatch.
- Precise — for at 03:00 exactly, and for intervals shorter than 15 minutes. It costs an alarms-and-reminders permission you grant by hand and, below 15 minutes, a visible notification while it is running. Even then, once the phone is asleep Android will not wake an app more than about once every nine minutes — and the screen where you pick the interval says so.
Or skip clocks entirely: sync when the folder changes, when you join a particular Wi-Fi network, when the charger goes in, from a Quick Settings tile, or from Tasker through the app’s own intent.
Not losing your files is a feature
- A new job never deletes anything on its first run. It shows you what a mirroring run would remove, and waits.
- A run that would delete an implausible share of the target stops and asks. An unmounted drive and a wrong path look exactly like “the user deleted everything”; the difference matters far too much to guess.
- When both sides changed, both sides are kept by default, one of them renamed — never a silent overwrite. Every other policy can lose an edit, so none of them is the default.
- Uploads land under a temporary name and are renamed on success, so a half-written file never appears as the real one.
- Deletions are always listed by name, before and after.
Privacy
Your files go from your phone to the remotes you configured, and nowhere else. There is no account, no server belonging to us, and nothing in the middle.
Credentials and OAuth tokens are held in the Android Keystore, never in a log and never in a crash report. SSH host keys are pinned the first time and a change stops the transfer instead of shrugging. The optional location permission exists for one reason — matching a rule to a named Wi-Fi network — the app works without it, and the network name never leaves the device. The full text is on the Privacy Policy page.
Get it
Synclet requires Android 8.0 or later. This is an early release: SFTP and WebDAV, one direction at a time, and nothing is ever deleted on either side — mirroring and two-way sync arrive with the safeguards they need, not before. What it does today it does honestly; what it does not do yet is listed in the app under Info.
Add this repository in F-Droid, or as a source in Obtainium, which reads the same repository:
https://releases.android.apps.gpm.name/repo
On a phone that already has F-Droid, this link adds it in one tap, fingerprint included. Otherwise check it against:
C983 7356 6EEC 235E CEFB 7D29 A582 6367 4D80 B432 8699 2BCB 7ACB 3AA4 3CA3 C41E
Updates then arrive on their own, verified against the repository signature.
- Changelog — what changed in each release
- Source code
- Privacy Policy · Terms of Service