⚠️ First 2.0 release ⚠️
This is the first release of the new 2.0 series. Expect some rough edges and keep a sense of adventure! 🙏
Major 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.
-
The logging format has changed to use structured log entries (a message plus several key-value pairs). Additionally, we can now control the log level per package, and a new log level WARNING has been inserted between INFO and ERROR (which was previously known as WARNING...). The INFO level has become more verbose, indicating the sync actions taken by Syncthing. A new command line flag
--log-level
sets the default log level for all packages, and theSTTRACE
environment variable and GUI has been updated to set log levels per package. The--verbose
and--logflags
command line options have been removed and will be ignored if given. -
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-interval
command 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.
-home
must be given as--home
. Some options have been renamed, others have become subcommands. All serve options are now also accepted as environment variables. Seesyncthing --help
andsyncthing serve --help
for 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
orghcr.io/syncthing/syncthing:2.0.0
({docker,ghcr}.io/syncthing/syncthing:2
to 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
- fix(gui): show revert buttons only when folder is idle (fixes [#10191]) by @tomasz1986 in https://github.com/syncthing/syncthing/pull/10212
- fix(gui): fix identicon generation by @aionescu in https://github.com/syncthing/syncthing/pull/10228
- fix(model): properly set folder state "syncing" when copying data by @calmh in https://github.com/syncthing/syncthing/pull/10227
- fix(slogutil): quote values with parentheses in them by @calmh in https://github.com/syncthing/syncthing/pull/10229
- fix(test): remove lib/logger from testmocks target by @rasa in https://github.com/syncthing/syncthing/pull/10231
- fix: correct logging of our ID after startup & generate by @calmh in https://github.com/syncthing/syncthing/pull/10234
Features
- feat: add
syncthing debug database-statistics
command 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
- feat(ignore): add .stignore escaping on Windows by @rasa in https://github.com/syncthing/syncthing/pull/10205
- feat: switch logging framework by @calmh in https://github.com/syncthing/syncthing/pull/10220
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
- refactor(beacon, osutil, upnp, netutil): only use anet on Android by @marbens-arch in https://github.com/syncthing/syncthing/pull/10211
- chore(gui): fix "Shut Down" spelling in Actions by @tomasz1986 in https://github.com/syncthing/syncthing/pull/10213
- chore(gui): update fancytree from 2.38.0 to 2.38.5 (ref [#10051], ref [#10155]) by @tomasz1986 in https://github.com/syncthing/syncthing/pull/10214
- chore(config): remove fallback STUN servers that are CNAMEs to stun.counterpath.com by @marbens-arch in https://github.com/syncthing/syncthing/pull/10219
- chore(scanner): reduce memory pressure by using pools inside hasher by @danog in https://github.com/syncthing/syncthing/pull/10222
- chore(fs): slightly reduce memory usage of IsParent by @danog in https://github.com/syncthing/syncthing/pull/10223
- refactor(scanner): use recommended pattern for slice pool by @danog in https://github.com/syncthing/syncthing/pull/10225
- chore(slogutil): ensure quoting of empty and confusing log values by @calmh in https://github.com/syncthing/syncthing/pull/10236
- chore: remove GUI "debugging" toggle, debug HTTP metrics by @calmh in https://github.com/syncthing/syncthing/pull/10235
- chore(gui): remove redundant "authenticated" conditions from Actions menu (#10235) by @tomasz1986 in https://github.com/syncthing/syncthing/pull/10237
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
- @danog made their first contribution in https://github.com/syncthing/syncthing/pull/10222
Full Changelog: https://github.com/syncthing/syncthing/compare/v1.29.7...v2.0.0