Tura Notes
Sync across machines, on your own server
The application works on one machine with no server at all — that is the normal case. When you want the same notes on the laptop and the desktop, Tura syncs through a server that is yours: no account here, no cloud of ours, nobody in the middle.
The server keeps the notes the way the application does: .md files in ordinary directories, on a machine you control. Nothing becomes a proprietary format by being synchronized.
There is no end-to-end encryption
The server reads its own notes. Anyone with access to its filesystem has your notes, and so does anyone who takes the machine. That is a stated boundary of the project rather than a gap to route around — do not put notes on a server you would not trust with the notes.
And sync is not a backup. It copies your mistakes to the other machine promptly and correctly. Back the server data tree up separately, with the server stopped.
What goes on the server
You need a Linux machine that is on when you want to sync, a DNS name pointing at it, and TCP 80 and 443 reachable. With docker compose it is three commands, and the certificate is obtained for you.
git clone https://github.com/samirhvbr/tura-notes.git
cd tura-notes
export NOTES_DOMAIN=notes.example.com
docker compose -f server/compose.yml up -d --build
What remains is creating the workspace, creating one credential per device, and carrying the credential file to that device by a means you trust. It is a bearer secret: whoever reads it is the device.
Pair the application
Close your workspace, open the Device sync strip at the top of the window and fill in the server address, the workspace, the credential file and the mode. The mode is the part to get right, because it states what the two sides already hold.
| Mode | When to pick it |
|---|---|
| Send local folder to empty inbox | The first device. Your notes go up, and that workspace inbox on the server has to be empty. |
| Receive into empty local folder | A second device with nothing to keep. Point it at an empty folder. |
| Reconcile existing folders | Both sides already have notes. You get a preview of what would be sent, received, linked as already identical or flagged as a conflict — and nothing happens until you confirm. |
Transfer moves revisions; writing the received files into your folder is a separate, explicit step, with the workspace closed. Nothing arrives underneath you while you type, which is why the two are separate.
One credential per device
Two devices sharing one credential cannot be told apart, so revoking the one you lost cuts off the one you kept. Lost a device? Revoke its credential — it takes effect at once, with no restart, and the others carry on.
Back up the whole tree
With the server stopped, and the entire data tree — not just the notes directory and not just a database file. Always restore into a new directory and check it before switching over.
A server that already has a site
If 80 and 443 already belong to another site, Tura runs on loopback behind the nginx, Apache or Caddy that is already there. The guide carries the systemd unit and all three templates.
The full walkthrough — including what to do when it does not work — is in docs/SELF-HOSTING.md, in the repository.
What changed
The most recent releases, taken from the project's own changelog.
-
v1.1.0 current
- The app looks for its own updates — shortly after startup, every six hours, or when you ask. A version you are not ready for can be dismissed, and installing is an explicit act that waits for the workspace to close before it restarts anything.
- The update feeds are signed, one per format (macOS, AppImage, .deb and .rpm), and a payload whose signature does not match is refused. Arch packages stay with pacman, which is the right updater on that system.
-
v1.0.3
- Linux installers come out of the same local pipeline as the macOS one: .deb and AppImage by default, .rpm when asked for, with the dependencies checked before anything compiles.
- Publishing reads the hash back from the server and compares it. A truncated upload leaves a file that exists and that the page links happily — it has to fail here, not in your browser.
-
v1.0.1
- The macOS build is signed with a Developer ID and notarised by Apple, with the ticket stapled into the image, so a downloaded .dmg opens offline with no warning.
- Publishing refuses an unsigned or unstapled image outright. The rule is enforced by the tool now instead of remembered by whoever runs it.
-
v1.0.0
- The Tura Notes identity: the ribbon-T logo, icons for each platform and a welcome screen that carries them.
- The application identifier, the executable and the data paths are unchanged, so an existing install keeps its notes and its settings across the rename.
-
v0.20.27
- Import the text of a PDF as Markdown: the extraction opens in an editable preview and only an explicit save writes a note. The PDF itself and its images stay outside the workspace.
Download for Linux · x64
$ chmod +x TuraNotes_1.11.21_amd64.AppImage && ./TuraNotes_1.11.21_amd64.AppImage