Mail, calendar, drive, contacts. Plain files, a Postgres database, sync built to be caught lying, and upgrades you do not have to schedule an evening for.
If you are reading this page, you already have a list. Here it is.
This is the one that actually ends relationships with sync software, because a client that lies about completion is worse than no client at all.
Joinery’s desktop client is developed against a continuous soak rig that exists specifically to catch that failure: the process is killed mid-write, over and over, at unpredictable moments, while a no-loss oracle checks afterwards that every byte either arrived or is still queued — never silently dropped, never reported complete when it is not. That is a mechanism you can go and read, not an adjective.
The honest label: the desktop client is still pre-release. Keep a backup, and tell us what breaks.
Upgrading Joinery is one command. Schema changes apply themselves. There is no maintenance-mode ritual, no app-compatibility matrix to check first, and no folklore about which version you must pass through on the way. Our own servers ride the same upgrade path, constantly, which is the only reason to believe any of this.
If you would rather not even do that, Server Manager turns it into a button.
Joinery does four things properly and treats the rest as extras that stay out of the way. There is no app store to curate, no ecosystem of half-maintained plugins to break your upgrade, and no dashboard of widgets nobody uses.
Mail is the flagship — a real mail server with a real deliverability answer, which is a thing your current setup does not have at all.
Joinery’s interface is server-rendered HTML with vanilla CSS and vanilla JavaScript. There is no framework in the marketing site and none in the apps: no multi-megabyte bundle to parse before you can read your mail. It is deliberately boring, and it stays responsive on a cheap VPS.
Files are ordinary files in an ordinary directory. Everything else is in PostgreSQL. Backup is rsync and a pg_dump; restore is the reverse; leaving is copying a folder. You can point psql at it and look. No content-addressed blob store, nothing that requires the application to be running before you can see what you own.
| Nextcloud | Joinery | |
|---|---|---|
| Scope | Very broad, plus an app ecosystem | Mail, calendar, drive, contacts — done properly |
| Mail server included | No | Yes, with the deliverability problem solved |
| File storage | Real files | Real files |
| Database | MySQL or Postgres | PostgreSQL |
| Front end | Large JavaScript bundle | Server-rendered, no framework |
| Upgrades | App compatibility to check | One command; schema self-applies |
| Sync client maturity | Mature, with known trust complaints | Pre-release, soak-tested against silent loss |
| CalDAV / CardDAV / WebDAV | Yes | Not yet |
| Minimum hardware | Varies with apps installed | 2 GB VPS is the stated minimum |
| Licence | AGPL | PolyForm Noncommercial, plus paid business licences |
You are going to find this out anyway. Better now.
It is — PHP and PostgreSQL, with no framework in the front end. The stack matters less than what it produces: server-rendered pages, no multi-megabyte bundle, and a database you can query with tools you already have. PHP has a reputation earned by a generation of bad code, not by the runtime; the interesting question is whether the thing is fast and readable, and you can check both yourself.
rsync the data directory, pg_dump the database. That is the whole thing, and it restores onto a fresh box without ceremony. Server Manager will schedule it to your own S3-compatible bucket with a write-only key, so a compromised server cannot delete its own backup history.
Files: copy them in, they are files on both sides. Contacts and calendars: export as vCard and .ics and import. There is no one-click Nextcloud importer, and building one is not currently on the list.
No. No telemetry, no licence check, no usage reporting. It runs air-gapped. The only outbound connections are ones you configure: your mail provider, your backup bucket, updates when you ask for them.
Precisely, and only where we can say so precisely. Files at the Private protection level are end-to-end encrypted with keys you hold, and stay encrypted through sync — the server stores ciphertext it cannot read. Everything else is stored unencrypted on your own disk, readable by anyone with access to that machine, which on your own server is you. Losing your keys and your recovery key means the Private files are gone; nobody can recover them, including us.
One command, a stock Ubuntu server with 2 GB of RAM, and about an hour. Free, permanently, for personal use.