# Duplicati

Duplicati is an open-source backup client that securely stores encrypted, incremental, compressed remote backups of local files on cloud storage services and remote file servers. Duplicati supports not only various online backup services like OneDrive, Amazon S3, Backblaze, Rackspace Cloud Files, Tahoe LAFS, and Google Drive, but also any servers that support SSH/SFTP, WebDAV, or FTP.
Duplicati uses standard components such as rdiff, zip, AESCrypt, and GnuPG. This allows users to recover backup files even if Duplicati is not available. Duplicati is free software, originally released under the terms of the GNU Lesser General Public License (LGPL), it has been under the MIT License since March 2024. This changeover took place as part of the launch of Duplicati, Inc. and the commercial use of the Duplicati base.

## Technology

Duplicati is written mostly in C# and implemented completely within the CLR, which enables it to be cross-platform. It runs well on 32-bit and 64-bit versions on Windows, macOS and Linux using either .NET Framework or Mono.
Duplicati has both a graphical user interface with a wizard-style interface and a command-line version for use in headless environments. Both interfaces use the same core and thus have the same set of features and capabilities. The command-line version is similar to the Duplicity interface.
Duplicati has some unique features that are usually only found in commercial systems, such as remote verification of backup files, disk snapshots, and backup of open files. The disk snapshots are performed with VSS on Windows and LVM on Linux.

## History

The original Duplicati project was started in June 2008 and intended to produce a graphical user interface for the Duplicity program. This included a port of the Duplicity code for use on Windows, but was dropped in September 2008, where work on a clean re-implementation began. This re-implementation includes all the sub-programs found in Duplicity, such as rdiff, ftp, etc. This initial version of Duplicati saw an initial release in June 2009.
In 2012, work on Duplicati 2 started, which is a complete rewrite. It includes a new storage engine that allows efficient, incremental, continuous backups. The new user interface is web-based, which makes it possible to install Duplicati 2 on headless systems like servers or a NAS. As it is also responsive, it can be easily used on mobile devices.
In 2024, Duplicati, Inc. was founded with the aim of commercialising Duplicati. The previous developer Kenneth Skovhede takes on the role of CTO as a full-time position. Open Core Ventures provides Duplicati, Inc. with $2M in funding for the expansion of the open source base and the development of enterprise-grade features. In May 2024, the first commercial product ‘Duplicati Portal’ was introduced, which is a centralised, cloud-based solution designed to monitor and manage backups across multiple devices and environments.

## Implementation

The Duplicati GUI and command-line interface both call a common component called Main, which serves as a binding point for all the operations supported. Currently the encryption, compression, and storage component are considered subcomponent and are loaded at runtime, making it possible for a third-party developer to inject a subcomponent into Duplicati without access to the source or any need to modify Duplicati itself. The license type is also flexible enough to allow redistribution of Duplicati with a closed-source storage provider. Duplicati is designed to be as independent of the provider as possible, which means that any storage medium that supports the common commands (GET, PUT, LIST, DELETE) can work with Duplicati.
The Duplicity model, on which Duplicati is based, relies heavily on components in the system, such as librdiff, TcFTP, and others. Since Duplicati is intended to be cross-platform, and it is unlikely that all those components are available on all platforms, Duplicati re-implements the components instead. Most notably, Duplicati features an rdiff and AESCrypt implementation that work on any system that supports a Common Language Runtime.

## Limitations of Duplicati 1

The GUI frontend in Duplicati 1.x is intended to be used on a single machine with a display attached. However, it is also possible to install Duplicati as a Windows service or Linux daemon, and set the Duplicati system tray from starting the Duplicati service. This limitation has been addressed in Duplicati 2, which has a web interface and can be used on headless systems.
Duplicati 1.x has extremely slow file listings, so browsing a file tree to do restores can take a long time.
Since Duplicati produces incremental backups, a corrupt or missing incremental volume can render all following incremental backups (up to the next full backup) useless. Duplicati 2 regularly tests the backup to detect corrupted files early.
Duplicati 1.x only stores the file modification date, not metadata like permissions and attributes. This has been addressed in Duplicati 2.