TiddlyDesktopRS - a new TiddlyWiki Desktop (RS) experience - Alpha / Beta

Thanks for reporting @vilc - will be resolved soon!

This is a path resolution error specific to the portable version, I’ll investigate!

Thank you,
Simon

I can’t figure how to enable backups in the portable Windows edition. I have loaded a single file wiki (opens and saves no problem), I’ve changed the default unassigned backup path to the install folder, and I’ve changed the backup limit from null to 50, the backups are enabled, but I can’t see any backup files being created.

Btw, one interesting advantage of your TDRS over the NW TiddlyDesktop is that it seems to support zoom with ctrl + scroll. Simple thing, but quite annoying when it doesn’t work on the standard TD.

Hi @vilc , may be related to the same issue you mentioned above.

A fix is upcoming!

v0.5.2 is online with an exciting new feature

Sync can now be done through a so-called “Relay server”.
The server is located in Frankfurt, Germany, because that’s near to where I live, can however be set up to a server of your choice if latency is an issue. You can get the server code from me if you are interested.

How Sync works has changed a bit:

  • Now we create so-called “Rooms”
  • Rooms have a code and a password
  • You can create a Room on the landing page or join one using code and password
  • Sync always tries LAN first and if it’s not possible to sync through LAN it goes the Relay-server route
  • All data is End-to-End ChaCha-Poly1305 encrypted
  • The Relay server is “blind” to the data, it just passes through

Now, if you want to collaborate with your aunt from Ohio, you can do so easily! :cat2:

And @vilc - your reported issues should be solved, can you check?

Thank you all!
Simon

v0.5.3 follow-up release

  • now also for Room creation and joining no Internet connection needed anymore if both or all devices are in the same network and ports are available for traffic

I’d like to set up a testing wiki in a test Room. If anybody is interested to test collaboration on such a wiki, I’ll send the Room credentials in a pm.

Cheers,
Simon

This sounds incredible - I have two windows machines with me at the moment - a work machine that’s pretty locked down, and a personal one. I’m open to help test things - nearby in Zurich.

Hi @stobot ,

you probably cannot install the app on your work machine, even the portable install will be blocked I guess… but if you want to try it our on your personal one, let’s try!

Wait a little bit - like 10 minutes - for the next build. It comes with an updated collab plugin for Codemirror 6 and fixes backups (I accidentally broke them while refactoring).

Simon

Actually the portable one has always installed for me and it looks like it’s working now, but I’ll wait a bit for 0.5.4 :slight_smile:

Testing Windows portable v0.5.5:

  • creating a single file wiki now possible
  • changing the backup limit from null to default 20: gets reset back to null when opening the wiki. Other numbers including custom do not get reset to null when opening wiki
  • I’ve set the backup folder to install folder and set backup limit to 5, disabled and enabled backup again, but I still can’t see the backups being created anywhere

0.5.6 should fix the backups, it’s available within a few minutes.

@stobot I send you a pm with the room credentials…

The backups work now on the Windows portable, thanks!

2 Likes

Very nitpicky suggestion, launching the application in Windows always brings the window with this size and shape.

I’m guessing you have a huge monitor. For those working off of small laptops, there’s a lot of white space even though you have to scroll quite a bit to get to the new stuff at the bottom.

Few questions on some of the features mentioned here:
BurningTreeC/tiddlydesktop-rs: A Tauri App for TiddlyWiki5

“External Attachments” and “Native PDF Rendering” are both great features, but they don’t seem to work well together. The Native PDF rendering seems to work if you turn off the “External Attachments” but not otherwise.

Automatic Updates: Does this maybe not work with the portable version? I don’t think I’ve ever seen a toolbar linking to Github as described.

Note that given the rapid development pace especially, that you’d probably benefit from having the version number somewhere visible within the app - especially handy for troubleshooting purposes.

I’ll check, need to test on Windows a little bit more. I’m on Linux where it’s working well, but I want Windows to work the same way.

Automatic Updates … did I describe it like that :grin: ? The feature was planned, but it’s more of a button that links to the latest release on GitHub. I’ll check if it’s a Windows and / or portable-version issue.

Thank you @stobot !

1 Like

A little downtime of the Relay server at the moment. Maintenance work.

There’s an upcoming release building right now that will bring it back working!

1 Like

0.5.13 on Linux Manjaro

I guess because this is a major upgrade, the existing files and folders were gone. I dragged and dropped my test single file wiki. Everything about the same. Still can’t paste binary image data.

BUT, when I attempted to drag and drop, and then subsequently import, my test nodejs instance, it would not open. In the terminal I see:

[TiddlyDesktop] Linux: Pointer entered window 'main' (mode: Normal)
[TiddlyDesktop] Allocated port 8085 for wiki folder server
[TiddlyDesktop] Spawning wiki folder process: /home/mark/Apps/TiddlyDesktopRS/tiddlydesktop-rs-0.5.13-linux-x86_64/bin/tiddlydesktop-rs --wiki-folder /home/mark/temp/tdrs-test/tdrs-nodejs --port 8085
[TiddlyDesktop] Set TIDDLYWIKI_PLUGIN_PATH=/home/mark/Apps/TiddlyDesktopRS/tiddlydesktop-rs-0.5.13-linux-x86_64/bin/plugins
[TiddlyDesktop] Set TIDDLYWIKI_EDITION_PATH=/home/mark/Apps/TiddlyDesktopRS/tiddlydesktop-rs-0.5.13-linux-x86_64/bin/editions
[TiddlyDesktop] Wiki folder process spawned with PID: 3149804
[TiddlyDesktop] Wiki folder mode: "/home/mark/temp/tdrs-test/tdrs-nodejs", port: 8085
Found system Node.js v20.20.0 in PATH
[TiddlyDesktop] Error: TiddlyWiki not found in resources
[TiddlyDesktop] Wiki folder process 3149804 exited

It’s the same nodejs directory from the last time I ran it. Just to be sure, I ran my last 0.3 version and the folder loads fine.

So it seems like something in this version is breaking nodejs.

Thanks!

Hi @Mark_S

I changed how the “portable” install handles the appdata directory. Now everything is contained in your “install directory” with the downside that, if you delete the folder, you delete the app state (connected wikis, joined rooms…).
I don’t know if it’s wanted to have everything in one place or not.

About the nodeJS instance, it finds your nodeJS installation in your PATH but doesn’t find the tiddlywiki.js in the resources bundled with the app. I’ll fix that.

Glad to hear portable is now truly portable, that’s definitely my preference. Portable should (to me) be able to run off of a usb stick and leave no trace.

There are some files that can be preserved during “update” to a newer “portable” install on Linux (Windows portable install does that automatically through the installer).

The files are basically everything within bin/* except the tiddlydesktop-rs executable itself and the portable marker file.

Or the most practical approach: copy the new executable from the new tar.gz over the old one and leave everything else untouched.

TiddlyDesktop-RS Sync Infrastructure & Security

Sync Infrastructure

How Devices Find Each Other

LAN Discovery: Every device broadcasts a small UDP beacon on port 45699 every 2 seconds. The beacon contains the device’s name, ID, WebSocket port, and hashed room codes. When a peer’s beacon matches one of your rooms, a direct WebSocket connection is opened.

Relay: For devices not on the same network, both connect to wss://relay.tiddlydesktop-rs.com:8443 (TLS) and join the same room. The relay server forwards encrypted messages between them — it can’t read any of the content.

How Data Syncs

  1. On connect: Devices exchange a WikiManifest listing which wikis they have. Then they do a full sync — each side sends its known vector clocks, and the other responds with any tiddlers the peer is missing.

  2. Live edits: When you edit a tiddler, a TiddlerChanged message (JSON + vector clock) is sent to all connected peers immediately.

  3. Attachments: Large files are split into 1MB chunks and sent over a low-priority channel, so tiddler changes always take precedence and never get blocked by a large file transfer. Yes, attachments are synced, too, but only from the “attachments” directory beneath your wiki.html or tiddlywiki.info. Arbitrary filesystem paths cannot be synced.

  4. Deletions: Tracked via tombstones (title + clock + timestamp) that persist for 30 days, preventing deleted tiddlers from being resurrected by a stale peer.

Conflict Resolution

Every tiddler has a vector clock — a map of {device_id: counter} that tracks which device made each change. When a remote change arrives:

  • Fast-forward: Remote clock is strictly newer → apply it
  • Local newer: Local clock is strictly newer → ignore remote
  • Concurrent (neither dominates): Both edited independently → apply the remote version as “winner” (last-write-wins), but save the local version in $:/TiddlyDesktopRS/Conflicts/{title} so nothing is lost

Collaborative Editing

Real-time collaborative editing uses Yjs CRDT updates. Devices signal when they start/stop editing a tiddler, and Yjs updates + awareness states are forwarded to all peers.


Security

Encryption

All sync traffic (LAN and relay) is encrypted with ChaCha20-Poly1305 (the same AEAD cipher used in WireGuard and TLS 1.3). Key derivation chain:

  1. Group key: HKDF-SHA256(salt=room_code, ikm=password) — deterministic, so all room members derive the same key from the shared password
  2. Session key: HKDF-SHA256(salt=group_key, ikm=random_nonce) — unique per connection, so compromising one session doesn’t expose others
  3. Per-message nonce: 8-byte counter incremented for every message — prevents nonce reuse

Peer Authentication

  • LAN: After discovering a peer via UDP, the connecting device sends a RoomAuthInit with a room token (HMAC-SHA256 proof derived from the group key). The server validates it before starting the encrypted session. No valid token = connection rejected.
  • Relay: Same room token sent in the join message, plus TLS protects the connection to the relay server.

Discovery Privacy

UDP beacons broadcast HMAC-SHA256 hashes of room codes (truncated to 8 bytes), not the codes themselves. A passive LAN observer sees opaque hashes and can’t learn which rooms you’re in.

IPC Security (Desktop)

Wiki windows run as separate OS processes and connect to the main app via TCP on localhost:45678. Each app launch generates a 32-byte random token passed to child processes via environment variable. Processes must present this token to register — unauthenticated messages are silently dropped. Max 100 concurrent connections, 30-second handshake timeout to prevent slow-loris attacks.

Password Storage

Room passwords are encrypted at rest using a device key derived from the machine’s hardware fingerprint (e.g., /etc/machine-id on Linux, MachineGuid on Windows) + a random salt, via HKDF-SHA256. The device key is never stored — it’s re-derived at runtime. Even if someone copies your config files to another machine, the passwords can’t be decrypted.

Data Integrity

Attachments include a SHA-256 hash. After all chunks are reassembled, the hash is recomputed and verified. Mismatch = transfer rejected. Path validation rejects absolute paths, external URLs, and directory traversal attempts.


That said, theory sounds good, but it was working on Linux and Android only.
I hope that with the new release it starts working on Windows and macOS, too.

Best wishes to all,
Simon

2 Likes