Keep the plain files. Lose the .sync-conflict copies.

kutl syncs ordinary folders the way you already work — plain files on disk, no account required to run it, every component open source. What's different is what happens when two devices touch the same text file at once: the edits merge into one file instead of one of them being renamed to a .sync-conflict copy.

Syncthing renames the losing side of a concurrent edit to <filename>.sync-conflict-<date>-<time>-<modifiedBy>.<ext>, and that copy then propagates to every device like any other file. The Syncthing maintainer has explained the project's position on CRDTs directly: "I don't think they really bring us anything we don't already have," and "Files that can be edited simultaneously on multiple devices don't become 'conflict free' no matter how we wrap them." kutl takes the opposite bet — it merges the text itself.

What stays the same: plain files, open source, self-hosted

Your documents are ordinary files in an ordinary folder. The kutl daemon watches the directory and syncs changes; any editor, script, or tool that reads and writes files is a participant. Nothing lives in a proprietary store.

The relay — the server that coordinates sync between participants — is open source and self-hostable. Run it on your own infrastructure as a single binary or a Docker image. The engine, daemon, and CLI are open source too; the licenses are listed in the public repository.

What's different: concurrent text edits merge

When two people type in the same text file, the edits merge — nothing is overwritten and there is no conflict file to reconcile by hand. Edits made offline merge with edits made online during the same window when you reconnect.

The merge is order-independent: every device computes the same result regardless of the order changes arrive, a property exercised by property-based testing rather than hand-picked examples. The same outcome holds whether you run your own relay or use the hosted one.

Relay-coordinated, not peer-to-peer

Be clear on the model: kutl is coordinated by a relay, not a pure peer-to-peer mesh. That relay is self-hostable, so your data still need not pass through anyone else's server, but there is a coordinating process — it is not the device-to-device design Syncthing uses.

In exchange, joining is a link or a space name rather than a device-ID exchange, and a returning client receives exactly the operations it missed instead of re-scanning. Transport to a remote relay runs over TLS (wss://).

Editors, scripts, and AI agents share one folder

Because every participant is just something that reads and writes files, an AI agent editing a markdown file on a server and you editing the same file on your laptop land as a merge, not a collision. Humans use the CLI or in-document syntax; agents call the same operations through MCP tools.

This is the case Syncthing's conflict-rename model can't smooth over — two writers on one text file — and it's the case kutl is built around.

Where your current tool still fits better

  • If you want pure peer-to-peer sync with no coordinating server at all, Syncthing remains the right tool. kutl always involves a relay, even when you host it yourself.
  • kutl has no native mobile app. The mobile and tablet answer is the kutlhub web editor in a browser, not a background client on the phone.
  • kutl does not promise "no conflict files, ever." Concurrent text edits merge, but when two distinct files end up claiming one name, kutl keeps both — the losing side becomes a stable notes.kutl-conflict-<id>.md copy beside it. And an edit-vs-delete race while both devices are online has a consistent winner across all devices, but which side wins is not fixed.

FAQ

Is there an open-source Syncthing alternative that merges text edits instead of making sync-conflict files?

kutl is open source and syncs plain files on disk like Syncthing, but concurrent edits to a text file merge into one file. There are no .sync-conflict copies for simultaneous text edits; name collisions between two distinct files are preserved as a separate copy instead of being discarded.

Does kutl use CRDTs?

Yes. kutl represents text documents as CRDTs, so concurrent edits converge to the same result on every device regardless of arrival order. The CRDT model extends to the whole space — document registration, renames, and deletes — not just file contents.

Is kutl peer-to-peer like Syncthing?

No. kutl is coordinated by a relay, which you can self-host. Your data does not have to leave your own infrastructure, but there is always a coordinating server, unlike Syncthing's device-to-device design.

How do I sync notes to my phone now that Syncthing's Android app is discontinued?

kutl has no native mobile client. The supported phone and tablet path is the kutlhub web editor, which runs in any browser. If a background mobile sync client is a hard requirement, kutl is not a replacement for that piece.

Can I invite someone with a link instead of exchanging device IDs?

Yes. People join a kutl space by name or invite rather than by exchanging device IDs. Syncthing's own documentation describes device-ID exchange as "a user experience problem."

Can an AI agent and a person edit the same files without conflicts?

Yes, for text contents. An agent and a human editing the same text file produce a merge, not a conflict copy. File-level outcomes — names, locations, deletes — follow kutl's documented conflict rules.