Unison Changelog

What's new in Unison 2.53.4

Feb 20, 2024
  • Improved and simplified makefiles. Please review your build scripts for changed build goals, input variables and build artifact names. See INSTALL.md for details.
  • opam build uses the makefile build system.
  • Various fixes in Windows and Cygwin builds.
  • Preferences "force", "prefer" and related "partial" preferences now work slightly differently with values "newer" and "older". Previously, if mtimes in both replicas were equal then always the second root propagated to the first root (possibly reverting user changes). It is now made explicit that "newer" and "older" only work when mtimes are different.
  • Cleanups in documentation.
  • Bugfixes, minor improvements, cleanups.

New in Unison 2.53.3 (Apr 28, 2023)

  • On Linux, allow syncing the xattrs where POSIX draft ACLS are stored, which enables syncing the ACL info. (Note that this does not enable syncing ACLs with the -acl switch, and does not enable syncing ACLs between other systems and Linux. See the manual.)
  • Improved ETA calculation and sync speed display in text UI.
  • Fix CI Windows builds (again).
  • Drop unmaintained "make install" target.
  • Bugfixes, minor improvements, cleanups.

New in Unison 2.53.2 (Mar 21, 2023)

  • This release is identical to 2.53.1, except that the included version string is correct.

New in Unison 2.53.1 (Mar 21, 2023)

  • Repeat mode is more fault tolerant, recovering after temporary
  • errors.
  • Preferences "force", "prefer" and related no longer require
  • specifying the full root.
  • Improve stopping of update propagation.
  • Enable VT input escape codes in Windows.
  • Respect user-provided CFLAGS, CPPFLAGS, LDFLAGS, LDLIBS.
  • Add build instructions in INSTALL.md (and drop from manual).
  • Add graceful stop in repeat mode - SIGUSR2.
  • Add watch+seconds to 'repeat' preference.

New in Unison 2.53.0 (Mar 21, 2023)

  • OCaml >= 4.08 is required to build unison.
  • unison can be built with (unreleased) OCaml 5.
  • Change GUI to use GTK3 (via lablgtk3) instead of GTK2 (via lablgtk2)
  • Add support for syncing extended attributes.
  • Add support for syncing ACLs.
  • On Windows, add the ability to build unison as a hybrid application (GUI application attached to a text console) by defining UI_WINOS=hybrid (see src/Makefile). Add this to CI. (Doing this for non-Windows is unnecessary as all applications, both GUI and non-GUI, are always executed with a connection to stdout/stderr. GUI-only applications (ie, no stdout/stderr) is a Windows-only concept.)
  • Notable bugfixes:
  • Merge results are stored in archive more accurately.
  • Windows \? paths now work correctly (including \?Volume{GUID} paths).
  • CI changes:
  • The macOS binaries are properly signed.
  • Add workaround for bugs in the github CI Windows builds, one of which resulted in the 2.52.1 GUI version failing, in the Windows CI build artifacts. (This does not affect platforms other than Windows, and may not affect other Windows builds.)
  • Changes that should not affect behavior:
  • Clean up a variety of unmaintained and unused bits, mainly build-related.
  • OCaml's Unix library is now extensively used also on Windows. This allowed removal of large amount of Windows-specific OCaml and mainly C code.

New in Unison 2.52.1 (Mar 21, 2023)

  • Deprecate ocaml < 4.08: 2.53.0 will require 4.08 or higher
  • Add man page
  • Remove rsh:// URI scheme (ssh:// of course remains).
  • Significant bugfixes and minor improvements
  • Deprecate "backups" preference (see manual for alternatives)
  • Deprecate "stream" and "halfduplex" preferences

New in Unison 2.52.0 (Mar 21, 2023)

  • The major changes are a new wire protocol, a new archive format, and feature negotiation. In particular, once two machines have been upgraded to 2.52.0 or later, it is possible to use unison compiled with different ocaml versions within a machine (mtaintaining the ability to read archives) and across machines.
  • While this release is expected to work seamlessly with existing archives and with 2.51.[0-5] peers, backups are always in order. Once this release has been run on a root, the upgraded archives will no longer be readable by stable 2.51 releases.
  • The 2.52 series, expected to be brief in time, is very likely the last group of releases to support old ocaml. All users are strongly encouraged to being making plans to migrate all systems on which they use unison to 2.52.

New in Unison 2.51.5 (Mar 21, 2023)

  • Restore OCaml compat to before 4.02
  • dune/opam improvements/fixes
  • Improve GTK UI by using GtkTreeView
  • Add support for syncing symlinks on Windows (NTFS)
  • Improve ssh support on Windows (hide Windows console in GUI mode)
  • Many bugfixes and minor improvements

New in Unison 2.51.4 (Mar 21, 2023)

  • OCaml 4.12 support
  • fsmonitor improvements and Solaris support
  • Color support in text UI, with a new preference, disabled by NO_COLOR.
  • Interactive profile selection in text UI, enabled by a new preference.
  • Working files are stored in the unison directory (typically /.unison) rather than $HOME.
  • Build cleanups, CI improvements, housekeeping
  • Many bugfixes and minor improvements

New in Unison 2.51.2 (Mar 19, 2018)

  • Repository transplanted from SVN to Git and moved to GitHub (https://github.com/bcpierce00/unison).
  • Add a new preference, 'atomic', for specifying directories that should be treated atomically: if there are changes within such a directory in both replicase, the whole directory is marked as a conflict instead of propagating any of the changes.
  • OSX / macOS:
  • Ported to 10.13, High Sierra, and Apple's new APFS (earlier versions of Unison break because of new behavior of AppleDouble files)
  • Replaced Growl with OS X native notification center.
  • Miscellaneous::
  • The OCaml compiler version is now included in the "connection header -- the string that's printed when connecting to a remote server -- to facilitate debugging version mismatch issues.
  • Compatible with OCaml 4.06.
  • Added a DockerFile for the convenience of Docker users.
  • Many small bugfixes and UI improvements.

New in Unison 2.48.6 (Feb 16, 2015)

  • Incorporated a patch from Christopher Zimmermann to replace the Uprintf module (which doesn't work with OCaml 4.02, causing Unison to crash) with equivalent functionality from the standard library.
  • Incorporated a refresh of the OSX GUI, contributed by Alan Shutko.
  • Added a maxsizethreshold option, which prevents the transfer of files larger than the size specified (in Kb).
  • Added a "copyonconflict" preference, to make a copy of files that would otherwise be overwritten or deleted in case of conflicting changes. (This makes it possible to automatically resolve conflicts in a fairly safe way when synchronizing continuously, in combination with the "repeat = watch" and "prefer = newer" preferences.
  • File system monitoring:
  • The file watcher now fails when unable to watch a directory, rather than silently ignoring the issue.
  • File system monitoring: more robust communication with the helper program (in socket mode, the unison server will still work properly despite unexpected unison client disconnections).
  • A bytecode version of unison-fsmonitor is now produced by "make NATIVE=false"
  • Improved search for unison-fsmonitor
  • Detect when the helper process exits.
  • More robust file watching helper programs for Windows and Linux. They communicate with Unison through pipes (Unison redirects stdin and stdout), using a race-free protocol.
  • Retries paths with failures using an exponential backoff algorithm.
  • The information returned by the file watchers are used independently for each replica; thus, when only one replica has changes, Unison will only rescan this replica.
  • When available, used by the graphical UIs to speed up rescanning (can be disabled by setting the new watch preference to
  • Small fix to the way fsmonitor.py gets invoked when using the file watching functionality, suggested by Josh Berdine. Unison will now look for fsmonitor.py in the same directory where the Unison executable itself lives.
  • Minor:
  • Fixed a bug in export procedure that was messing up documentation strings.
  • Incorporated a patch from Irányossy Knoblauch Artúr to make temp file names fit within 143 characters (to make eCryptFS happy).
  • Added a string to the Conflict direction to document the reason of the conflict.
  • Log conflicts and problems in the text UI even if nothing is propagated.
  • Use hash function from OCaml 3.x for comparing archives, even when compiled with OCaml 4.x.
  • Do not restart Unison in case of uncaught exception when the repeat preference is set. This seems safer. And it does not work, for instance, in case of lost connection.
  • Fix Unix.readlink invalid argument error under Windows
  • Fix a crash when the output of the diff program is too large.
  • Fixed Makefile for cross-compiling towards Windows (updated to MinGW-w64)

New in Unison 2.32.52 (Nov 13, 2009)

  • Improvement to the code for resuming directory transfers: (1) make sure file information (permissions, ...) has been properly set when using a previously transferred temp file (2) make sure previously transferred directories are writable (other changes made in the developer version of Unison require a protocol change)
  • Got rid of the 16MiB marshalling limit by marshalling to a bigarray
  • Ignore one hour differences for deciding whether a file may have been updated. This avoids slow update detection after daylight saving time changes under Windows. This makes it slightly more likely to miss an update, but that should be safe enough.
  • Improved Unison icon under Windows
  • Case sensitivity information put in the archive (in a backward compatible way) and checked when the archive is loaded
  • Uses improved emulation of "select" call provided by Ocaml 3.11 under Windows (the GUI does not freeze as much during synchronization)
  • Upgraded to GPL version 3 and added copyright notice to documentation files.
  • Unison can sometimes fail to transfer a file, giving the unhelpful message "Destination updated during synchronization" even though the file has not been changed. This can be caused by programs that change either the file's contents *or* the file's extended attributes without changing its modification time. I'm not sure what is the best fix for this – it is not Unison's fault, but it makes Unison's behavior puzzling – but at least Unison can be more helpful about suggesting a workaround (running once with 'fastcheck' set to false). The failure message has been changed to give this advice.
  • Text UI:
  • During update detection, display status by updating a single line rather than generating a new line of output every so often. That should be less confusing.
  • In repeat mode, don't save the archives when there is no update. Indeed, in this mode, we should minimize the amount of work performed and it is unlikely that the archives have changed much.
  • Bug fixes:
  • Fixed quotation of paths and names when writing to a preference file
  • Fixed bug resulting in slow performances when transferring a file using our rsync implementation from a 64-bit architecture to a 32-bit architecture.
  • Fixed bug in Lwt_unix.run which could make it fail with a Not_found exception (see [Not_found raised in tryCopyMovedFile] errors)
  • Properly deals with non-conformant AppleDouble files produced by Mac OS X.
  • Fixed bug that results in Unison missing ressource fork changes
  • Applied a patch from Karl M to make the GTK2 version build with OCaml 3.11 on Windows.
  • Added some extra debugging code to remote.ml to give more informative error messages when people encounter the longstanding "assert failed during file transfer" bug.
  • Applied patch from Antoine Reilles for NetBSD compilation
  • Resizing the update window vertically no longer moves the status label.