Subsecond file sync with German precision.
Autobahn gives you two-way sync between machines faster than you can type. In this demo, I'm saving the left file after each key stroke. Even though the file lives in a tree of 100K files syncing a barrage of other edits, these changes propagate instantly.
To get started, make sure your machines are accessible over SSH. Then install the the CLI or desktop app.
✨ Want to support Autobahn? Want to use Autobahn free of AGPLv3?
Simply donate to the Justice-in-Education Initiative.
These people bought books for people who need a second chance. Thank you!
$50 of $10,000 on the road to MIT. See all donors, or become one.
rsync only syncs one way, and its slow in a loop.--dangerously on your local files but you should do it somewhere else.Unhinged solution: sync everything in realtime with a "benchmaxxed" tool so editing local files is practically the same as editing remote ones.
Install the CLI by hand or by telling an LLM to read INSTALL.md:
curl -fsSL https://github.com/fny/autobahn/releases/latest/download/install.sh | sh
Afterwards, you need to set up your configuration. By default, the configuration is written to ~/.autobahn/config.toml. You can edit it by hand or use the desktop app.
Each group connects one root, the primary, to one or more destinations, the replicas. Sync can be one-way or bidirectional (see Sync Modes below). For full configuration details, see Configuration.
# ~/.autobahn/config.toml
[defaults]
mode = "two-way-conflict" # sync modes explained below
ignores = ["file:Essential.gitignore"] # you can include ignores by file
# or written explicitly
# this one is from ~/.autobahn/ignores/
[groups.work]
primary = "~/Workspace"
replicas = [ # sync targets
"dev@build.audi.de:/home/dev/workspace", # - fully specified
"laptop.bmw.de", # - inherits the primary path
]
ignores = ["target", "node_modules"] # appended to the defaults'
[groups.backup]
mode = "one-way-primary" # the disk is made identical
primary = "~/Workspace"
replicas = ["/Volumes/Backup/Workspace"] # - local paths work too
Finally, run autobahn install to install the login service. See the Commands page for more details about the CLI.
Make sure you have your SSH configuration set up so you can connect to your remote machines!
Autobahn ships with a desktop app and menu bar item that are about as well tested as a macOS point release.
On Linux, extract the archive and run ./autobahn-app. You need a graphical session (Wayland or X11), a Vulkan driver, and the packages listed in the archive's APT_REQUIREMENTS.txt.
To learn more, see the application's documentation.
Make sure you have your SSH configuration set up so you can connect to your remote machines!
Autobahn has several sync modes with different resolution strategies.
Start with two-way-conflict for editing on both sides. It propagates changes in either direction and reports competing edits for you to resolve.
| Mode | Behavior |
|---|---|
two-way-conflict | Bidirectional sync with conflict reports |
two-way-primary | Favors the primary in conflicts, with deletion safeguards |
two-way-primary-strict | Favors the primary, including its deletions |
one-way-conflict | Reports changes on the replica that prevent a safe copy |
one-way-primary (alias: mirror) | Makes the replica match the primary |
p2p-*-dangerously-experimental | Lets a replica lead while the primary is offline |
For mode details, see Modes and Conflict Resolution.
Read P2P before P2P use.
[!CAUTION] If your primary is empty and you sync in
mirrormode, you will erase your replicas.
All other sync modes are not destructive on a first pass. To learn more, see First Sync.
Autobahn began as an effort to reduce the memory use of Mutagen, which offers similar sync features, and then I got carried away.
| Measurement | Autobahn | mutagen | Ratio |
|---|---|---|---|
| Small-file edit, Chromium, 1 editor, p50 | 23.8 ms | 6,232.2 ms | 261.9× |
| Small-file edit, 50k subset, 10 editors, p50 | 13.4 ms | 1,809.8 ms | 135.1× |
| Peak controller memory, Chromium, 1 editor | 479 MiB | 2,081 MiB | 4.3× |
| Idle controller CPU, Chromium | 0.1% of a core | 49.9% | >300× |
| First sync, Chromium | 228.1 s | 454.8 s | 2.0× |
See Benchmarks for details.
Autobahn guarantees data integrity as much as possible. Programs holding files open, network mounts, and mucking with metadata can cause problems. Autobahn will break some programs (e.g. git) not due to correctness but rather due to syncing machine-specific files. You can use ignores to prevent these issues, and there are clever ways to keep things like git in sync.
I have been running this on my own fleet every day: 20 sessions across five hosts. One of them is a 13 GB, 215,000-file tree. Autobahn has also undergone a battery of tests and benchmarks including a 24-hour soak test.
Autobahn prevents data loss through strict operational invariants:
See Safety for guarantees and the related invariants in Correctness.
In addition to the standard CLI, several user interfaces are available:
autobahn mi).on_alert).on_alert = "~/.autobahn/on-alert.sh" # written for you by `autobahn init`
None of this has undergone nearly the same level of testing as autobahn itself, so consider it experimental.
With great vibe coding comes great responsibility. As such, I have scanned every line in this repo, run extensive soak testing, used Autobahn myself for weeks, had guardrail-free models run security scans, and put it through thousands of benchmark runs. While all of the documentation was drafted by LLMs, I've rewritten much of it. Please forgive any lingering Claudeisms.
x86_64, aarch64) and macOS (Intel and Apple Silicon). The desktop apps are Apple Silicon only.Autobahn is dual licensed: AGPL-3.0-or-later OR LicenseRef-Commercial.
Subsecond file sync with German precision.
Autobahn gives you two-way sync between machines faster than you can type. In this demo, I'm saving the left file after each key stroke. Even though the file lives in a tree of 100K files syncing a barrage of other edits, these changes propagate instantly.
To get started, make sure your machines are accessible over SSH. Then install the the CLI or desktop app.
✨ Want to support Autobahn? Want to use Autobahn free of AGPLv3?
Simply donate to the Justice-in-Education Initiative.
These people bought books for people who need a second chance. Thank you!
$50 of $10,000 on the road to MIT. See all donors, or become one.
rsync only syncs one way, and its slow in a loop.--dangerously on your local files but you should do it somewhere else.Unhinged solution: sync everything in realtime with a "benchmaxxed" tool so editing local files is practically the same as editing remote ones.
Install the CLI by hand or by telling an LLM to read INSTALL.md:
curl -fsSL https://github.com/fny/autobahn/releases/latest/download/install.sh | sh
Afterwards, you need to set up your configuration. By default, the configuration is written to ~/.autobahn/config.toml. You can edit it by hand or use the desktop app.
Each group connects one root, the primary, to one or more destinations, the replicas. Sync can be one-way or bidirectional (see Sync Modes below). For full configuration details, see Configuration.
# ~/.autobahn/config.toml
[defaults]
mode = "two-way-conflict" # sync modes explained below
ignores = ["file:Essential.gitignore"] # you can include ignores by file
# or written explicitly
# this one is from ~/.autobahn/ignores/
[groups.work]
primary = "~/Workspace"
replicas = [ # sync targets
"dev@build.audi.de:/home/dev/workspace", # - fully specified
"laptop.bmw.de", # - inherits the primary path
]
ignores = ["target", "node_modules"] # appended to the defaults'
[groups.backup]
mode = "one-way-primary" # the disk is made identical
primary = "~/Workspace"
replicas = ["/Volumes/Backup/Workspace"] # - local paths work too
Finally, run autobahn install to install the login service. See the Commands page for more details about the CLI.
Make sure you have your SSH configuration set up so you can connect to your remote machines!
Autobahn ships with a desktop app and menu bar item that are about as well tested as a macOS point release.
On Linux, extract the archive and run ./autobahn-app. You need a graphical session (Wayland or X11), a Vulkan driver, and the packages listed in the archive's APT_REQUIREMENTS.txt.
To learn more, see the application's documentation.
Make sure you have your SSH configuration set up so you can connect to your remote machines!
Autobahn has several sync modes with different resolution strategies.
Start with two-way-conflict for editing on both sides. It propagates changes in either direction and reports competing edits for you to resolve.
| Mode | Behavior |
|---|---|
two-way-conflict | Bidirectional sync with conflict reports |
two-way-primary | Favors the primary in conflicts, with deletion safeguards |
two-way-primary-strict | Favors the primary, including its deletions |
one-way-conflict | Reports changes on the replica that prevent a safe copy |
one-way-primary (alias: mirror) | Makes the replica match the primary |
p2p-*-dangerously-experimental | Lets a replica lead while the primary is offline |
For mode details, see Modes and Conflict Resolution.
Read P2P before P2P use.
[!CAUTION] If your primary is empty and you sync in
mirrormode, you will erase your replicas.
All other sync modes are not destructive on a first pass. To learn more, see First Sync.
Autobahn began as an effort to reduce the memory use of Mutagen, which offers similar sync features, and then I got carried away.
| Measurement | Autobahn | mutagen | Ratio |
|---|---|---|---|
| Small-file edit, Chromium, 1 editor, p50 | 23.8 ms | 6,232.2 ms | 261.9× |
| Small-file edit, 50k subset, 10 editors, p50 | 13.4 ms | 1,809.8 ms | 135.1× |
| Peak controller memory, Chromium, 1 editor | 479 MiB | 2,081 MiB | 4.3× |
| Idle controller CPU, Chromium | 0.1% of a core | 49.9% | >300× |
| First sync, Chromium | 228.1 s | 454.8 s | 2.0× |
See Benchmarks for details.
Autobahn guarantees data integrity as much as possible. Programs holding files open, network mounts, and mucking with metadata can cause problems. Autobahn will break some programs (e.g. git) not due to correctness but rather due to syncing machine-specific files. You can use ignores to prevent these issues, and there are clever ways to keep things like git in sync.
I have been running this on my own fleet every day: 20 sessions across five hosts. One of them is a 13 GB, 215,000-file tree. Autobahn has also undergone a battery of tests and benchmarks including a 24-hour soak test.
Autobahn prevents data loss through strict operational invariants:
See Safety for guarantees and the related invariants in Correctness.
In addition to the standard CLI, several user interfaces are available:
autobahn mi).on_alert).on_alert = "~/.autobahn/on-alert.sh" # written for you by `autobahn init`
None of this has undergone nearly the same level of testing as autobahn itself, so consider it experimental.
With great vibe coding comes great responsibility. As such, I have scanned every line in this repo, run extensive soak testing, used Autobahn myself for weeks, had guardrail-free models run security scans, and put it through thousands of benchmark runs. While all of the documentation was drafted by LLMs, I've rewritten much of it. Please forgive any lingering Claudeisms.
x86_64, aarch64) and macOS (Intel and Apple Silicon). The desktop apps are Apple Silicon only.Autobahn is dual licensed: AGPL-3.0-or-later OR LicenseRef-Commercial.