Syncthing
Open source continuous file synchronization
Alternative to: dropbox, google drive, onedrive, resilio sync
v2.0.0-rc.23
2025-07-06Major changes in 2.0
-
Database backend switched from LevelDB to SQLite. There is a migration on first launch which can be lengthy for larger setups. The new database is easier to understand and maintain and, hopefully, less buggy.
-
Deleted items are no longer kept forever in the database, instead they are forgotten after six months. If your use case require deletes to take effect after more than a six month delay, set the
--db-delete-retention-intervalcommand line option or corresponding environment variable to zero, or a longer time interval of your choosing. -
Modernised command line options parsing. Old single-dash long options are no longer supported, e.g.
-homemust be given as--home. Some options have been renamed, others have become subcommands. All serve options are now also accepted as environment variables. Seesyncthing --helpandsyncthing serve --helpfor details. -
Rolling hash detection of shifted data is no longer supported as this effectively never helped. Instead, scanning and syncing is faster and more efficient without it.
-
A “default folder” is no longer created on first startup.
-
Multiple connections are now used by default between v2 devices. The new default value is to use three connections: one for index metadata and two for data exchange.
-
The following platforms unfortunately no longer get prebuilt binaries for download at syncthing.net and on GitHub, due to complexities related to cross compilation with SQLite:
- dragonfly/amd64
- illumos/amd64 and solaris/amd64
- linux/ppc64
- netbsd/*
- openbsd/386 and openbsd/arm
- windows/arm
-
The handling of conflict resolution involving deleted files has changed. A delete can now be the winning outcome of conflict resolution, resulting in the deleted file being moved to a conflict copy.
This release is also available as:
-
APT repository: https://apt.syncthing.net/
-
Docker image:
docker.io/syncthing/syncthing:2.0.0-rc.23orghcr.io/syncthing/syncthing:2.0.0-rc.23({docker,ghcr}.io/syncthing/syncthing:2to follow just the major version)
What’s Changed
Fixes
- fix(db): handle large numbers of blocks in update by @calmh in https://github.com/syncthing/syncthing/pull/10025
- fix(syncthing): make directory flags global for all commands by @calmh in https://github.com/syncthing/syncthing/pull/10028
- fix(sqlite): apply options by @pixelspark in https://github.com/syncthing/syncthing/pull/10049
- fix(db): version vector serialisation :( by @calmh in https://github.com/syncthing/syncthing/pull/10050
- fix(model): loop-break regression while block copying in puller by @imsodin in https://github.com/syncthing/syncthing/pull/10069
- fix(model): close fd immediately in copier by @imsodin in https://github.com/syncthing/syncthing/pull/10079
- fix(model): use same folder first in copier by @imsodin in https://github.com/syncthing/syncthing/pull/10093
- fix(model): correct bufferpool handling; simplify by @calmh in https://github.com/syncthing/syncthing/pull/10113
- fix(protocol): avoid deadlock with concurrent connection start and close by @calmh in https://github.com/syncthing/syncthing/pull/10140
- fix(syncthing): avoid writing panic log to nil fd by @ardevd in https://github.com/syncthing/syncthing/pull/10154
- fix(fs): check for unsupported error on modern Windows (fixes #10164) by @rasa in https://github.com/syncthing/syncthing/pull/10165
- fix(gui): don’t show dial errors for paused devices (fixes #10166) by @marbens-arch in https://github.com/syncthing/syncthing/pull/10167
- fix: track invalid files in LocalFlags to fix global count by @imsodin in https://github.com/syncthing/syncthing/pull/10170
- fix(watchaggregator): properly handle sub-second watch durations (fixes #9927) by @imsodin in https://github.com/syncthing/syncthing/pull/10179
- fix(db): remove invalid member from FileMetadata by @imsodin in https://github.com/syncthing/syncthing/pull/10180
- fix(model): avoid flashing “Sync Waiting” unnecessarily by @calmh in https://github.com/syncthing/syncthing/pull/10181
- fix(protocol): slightly loosen/correct ownership comparison criteria (fixes #9879) by @yparitcher in https://github.com/syncthing/syncthing/pull/10176
- fix(model): don’t clobber local flags when receiving index by @calmh in https://github.com/syncthing/syncthing/pull/10190
- fix(beacon, osutil, upnp): fix local discovery send and intf detection on Android by @Catfriend1 in https://github.com/syncthing/syncthing/pull/10196
- fix(pmp, netutil): workaround native code denied to discover gateway ipv4 addr on Android 14+ by @Catfriend1 in https://github.com/syncthing/syncthing/pull/10204
- fix: allow deleted files to win conflict resolution by @calmh in https://github.com/syncthing/syncthing/pull/10207
Features
- feat: add
syncthing debug database-statisticscommand by @calmh in https://github.com/syncthing/syncthing/pull/10117 - feat(config): enable multiple connections by default by @calmh in https://github.com/syncthing/syncthing/pull/10151
- feat(config): expose folder and device info as metrics (fixes #9519) by @calmh in https://github.com/syncthing/syncthing/pull/10148
- feat: use Ed25519 keys for sync connections by @calmh in https://github.com/syncthing/syncthing/pull/10162
- feat(gui): add option to limit bandwidth in LAN to Settings (ref #10046) by @tomasz1986 in https://github.com/syncthing/syncthing/pull/10182
- feat(connections, nat): add UDP portmapping/pinhole for QUIC (fixes #7403) by @marbens-arch in https://github.com/syncthing/syncthing/pull/10171
- feat: add debug commands for folder counts and files by @calmh in https://github.com/syncthing/syncthing/pull/10206
Other
- chore: remove abandoned next-gen-gui experiment by @calmh in https://github.com/syncthing/syncthing/pull/10004
- chore: remove weak hashing which does not pull its weight by @calmh in https://github.com/syncthing/syncthing/pull/10005
- chore: switch database engine to sqlite (fixes #9954) by @calmh in https://github.com/syncthing/syncthing/pull/9965
- chore: harmonise command line flags by @calmh in https://github.com/syncthing/syncthing/pull/10007
- chore(db): increase journal limit to 64MiB by @bt90 in https://github.com/syncthing/syncthing/pull/10022
- chore: forget deleted files older than six months (fixes #6284) by @calmh in https://github.com/syncthing/syncthing/pull/10023
- chore(db): use shorter read transactions and periodic checkpoint for smaller WAL by @calmh in https://github.com/syncthing/syncthing/pull/10027
- chore: configurable delete retention interval by @calmh in https://github.com/syncthing/syncthing/pull/10030
- chore(db): fix debug logging by @bt90 in https://github.com/syncthing/syncthing/pull/10033
- chore(db): buffer pulled files for smaller WAL by @calmh in https://github.com/syncthing/syncthing/pull/10036
- chore(db): use one SQLite database per folder by @calmh in https://github.com/syncthing/syncthing/pull/10042
- chore(model): delay starting a pull while there are incoming index updates by @calmh in https://github.com/syncthing/syncthing/pull/10041
- chore(syncthing): remove “default” folder concept by @calmh in https://github.com/syncthing/syncthing/pull/10068
- chore(syncthing): ensure migrated database is closed before exiting by @xjtdy888 in https://github.com/syncthing/syncthing/pull/10076
- chore(db, model): simplify per hash DB lookup in copier by @imsodin in https://github.com/syncthing/syncthing/pull/10080
- chore(model): refactor copier for more flatness by @imsodin in https://github.com/syncthing/syncthing/pull/10094
- build: upgrade setup-zig action by @calmh in https://github.com/syncthing/syncthing/pull/10134
- build: properly propagate build tags to Debian build by @calmh in https://github.com/syncthing/syncthing/pull/10144
- chore(protocol): don’t start connection routines a second time by @imsodin in https://github.com/syncthing/syncthing/pull/10146
- chore(protocol): only allow enc. password changes on cluster config by @imsodin in https://github.com/syncthing/syncthing/pull/10145
- chore: various linter fixes by @calmh in https://github.com/syncthing/syncthing/pull/10157
- build: streamline gathering of facts, checkouts by @calmh in https://github.com/syncthing/syncthing/pull/10158
- build: build both Debian armel and armhf (though they are the same for us) by @calmh in https://github.com/syncthing/syncthing/pull/10159
- build: explicitly trigger build after pushing release tag by @calmh in https://github.com/syncthing/syncthing/pull/10160
- chore(syncthing): ensure response body is closed in upgrade request by @ardevd in https://github.com/syncthing/syncthing/pull/10169
- refactor(syncthing): use named constant for SIGHUP by @ardevd in https://github.com/syncthing/syncthing/pull/10168
- chore(model): remove redundant removal of internal fields in indexsender by @imsodin in https://github.com/syncthing/syncthing/pull/10173
- chore: add migration for remote invalid local flag by @imsodin in https://github.com/syncthing/syncthing/pull/10174
- chore(config): increase max concurrent writes default by @imsodin in https://github.com/syncthing/syncthing/pull/10200
- chore(gui): added spacing between folder name and error message by @ardevd in https://github.com/syncthing/syncthing/pull/10201
- build: unset build ID in generated binaries by @Catfriend1 in https://github.com/syncthing/syncthing/pull/10203
- chore(protocol): minor cleanup of ClusterConfig messages; remove DisableTempIndexes option by @calmh in https://github.com/syncthing/syncthing/pull/10202
New Contributors
- @ardevd made their first contribution in https://github.com/syncthing/syncthing/pull/10154
- @yparitcher made their first contribution in https://github.com/syncthing/syncthing/pull/10176
Full Changelog: https://github.com/syncthing/syncthing/compare/v1.29.7…v2.0.0-rc.23