Release: 2.3.0.0 (Stable) 2026-04-14

2.3.0.0_stable_2026-04-14

About this release

This is the next stable release for Duplicati 2.3, building on the 2.2 release with new features and bug fixes.

A big thanks to the supportive Duplicati user base who continues to contribute with fixes, issue reports and feature requests.

If you have already been using the beta release, this release is the same as v2.2.1.0, but includes a bugfix and two library updates.

Database Schema Update

Note: This update changes the Server database schema to version 11. The database tool can perform downgrades if needed.

Multiple Backup Destinations

This version adds support for configuring multiple destinations for a single backup job.
This allows you to backup to multiple locations simultaneously, such as a local drive and a cloud storage provider.
With multiple destinations, you can now configure a complete 3-2-1 backup strategy in a single job.
After each completed backup, Duplicati will ensure that data is available on all destinations.

A 3-2-1 backup strategy is where you have 3 copies of your data, 2 of which are on different media, and 1 of which is offsite/immutable.

Remote Sources

Remote sources are now easier to use with UI support and a prominent button on the source page.
This version also adds support for using Box, Dropbox, OneDrive, and Google Drive as remote sources.

Windows Folder Status Indicator

Thanks to @AndyBodnar, this version adds a Windows shell extension that shows the backup status of folders with icon overlays.
The feature is disabled by default but can be enabled with the option --enable-folder-status-service on either Server or TrayIcon.
Once enabled, run the RegisterFolderStatusExtension.ps1 script to register the extension and see backup status in Windows Explorer.

Google Workspace Backup

This version adds support for backing up Google Workspace, including Gmail, Google Drive, Contacts, Calendar, and Chat.
This is a proprietary module (source available) that requires a license to use in production.
Without a license, testing is possible with up to 5 users.

To prevent proprietary modules from loading, set the environment variable DUPLICATI_DISABLE_PROPRIETARY_MODULES=1 or delete files named Duplicati.Proprietary.* from your installation.

Office 365 Backup

This version adds support for backing up Office 365 tenants, including mailboxes, calendars, contacts, OneDrive, Planner, Tasks, Teams, Sites, and more.
This is a proprietary module (source available) that requires a license to use in production.
Without a license, testing is possible with up to 5 users + 5 sites + 5 groups.

Full Disk Backup

This version adds simple support for backup and restore of entire disks, including the MBR/GPT partition table.
In this initial version, only Windows is supported, and the backup accesses the disk directly (no VSS).
Support for Linux and macOS, as well as VSS support for Windows, is planned for future releases.

Like the Office 365 / Google Workspace features, this is a proprietary module (source available).
Full disk backup requires administrative privileges to access the disk directly.
Full disk restore requires administrative privileges and requires that the disk is unmounted and not write-protected.

Remote File Locking

This release adds support for remote locking of files on supported storage providers (S3, Azure Blob Storage, Backblaze B2, iDrive e2, Google Cloud Storage).
Locking protects backup files from being deleted or overwritten during a configurable retention period.

To use the feature, set the advanced option --remote-file-lock-duration (e.g., 30D for 30 days).
Each backend supports governance (lock can be removed in admin console) or compliance (lock cannot be removed) modes.

Templating Engine for Reporting

Thanks to @AndyBodnar, it is now possible to use a Handlebars template to format the report output, which is especially useful for crafting custom email reports.

Synology Native Package

The Synology native package has been re-developed to support Synology DSM 7.2 and above.
The package installs as any other Synology package and uses integrated DSM authentication.

Soft Delete Support

A new option --soft-delete-prefix enables the soft-delete feature.
When enabled, files are renamed/moved instead of being deleted, allowing lifecycle management rules to handle actual deletion after a retention period.

Platform Updates

  • .NET 10: The application now runs on .NET 10 for improved performance
  • SQLite: Updated to use Microsoft.Data.Sqlite for better performance and async query support
  • VSS Provider: Default VSS provider on Windows is now Vanara (AlphaVSS is no longer maintained)

Database Encryption Changes

This release adds a “default secret provider” for the current OS:

  • Windows: Windows Credential Manager
  • macOS: Keychain
  • Linux: libSecret (Gnome Keyring), or commandline pass if available

If no secret provider is configured, and a default secret provider is available, the database will be encrypted with a random password stored in the default secret provider.
To opt-out, use --disable-db-encryption when starting the Server/TrayIcon.

If database encryption is already configured, or no default secret provider is available, nothing will change.

Simplified S3 Provider Configuration

The S3 provider configuration has been simplified by providing fewer options and only showing relevant endpoints.
A whitelist of public S3 providers is included, and hostnames are shown in backup reports if in the whitelist.

New Languages

Added support for Hungarian, Czech, and Polish languages. Thanks to all translators!

Quality of Life Improvements

  • The commandline-inside-the-UI feature now saves its state when navigating back
  • Added “Edit as text” option for source paths and filters
  • Linux AppImage builds are now available
  • Auto VSS on Windows when user has Administrator privileges (SeBackupPrivilege)
  • SSH-Agent support for SSH backend
  • Support for macOS Photos backup with --photos-handling option
  • New UI is more small-screen friendly

Notable Bugfixes

  • Fixed issue with invariant formatting causing crashes during backup
  • Fixed dry-run to strictly not touch data
  • Fixed --changed-files option to not introduce extra dangling file entries
  • Fixed purge operation size calculation and added --reduced-purge-statistics option
  • Fixed index file corruption issue where index files could become incomplete over time
  • Fixed restore flow to reduce temporary space usage (configurable with --restore-volume-cache-hint)

After the latest update to version 2.3.0.0_stable_2026-04-14, in a Windows 11, when I try to edit a job, the Backup destination and Source data sections appear without the current data.


He’s having trouble installing on Windows servers!
The service isn’t installing and the server is freezing.
And the TrayIcon in the browser keeps showing “Connecting…” non-stop, whether it’s a clean install or an upgrade.

I can’t run Version 2.3.0.0 on a new machine with no previous installations.

The tray icon is working, but the browser shows “connecting…”

I stopped the service and ran the following command from the command prompt: C:\Program Files\Duplicati 2>Duplicati.Server.exe

WINDOWS 11

Result below:

Servidor foi iniciado e está ouvindo em localhost, porta 8200
Use the following link to sign in: http://localhost:8200/signin.html?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0eXAiOiJTaWduaW5Ub2tlbiIsInNpZCI6InNlcnZlci1jbGkiLCJuYmYiOjE3NzY1MTUwODYsImV4cCI6MTc3NjUxNTM4NiwiaXNzIjoiaHR0cHM6Ly9kdXBsaWNhdGkiLCJhdWQiOiJodHRwczovL2R1cGxpY2F0aSJ9.f4oMMJVKw0dDGrTZQoTmJywrd5MFGarJa3IK44-6PS8
fail: Duplicati.WebserverCore.DuplicatiWebserver[0]
Unhandled exception
System.FormatException: Input string was not in a correct format. Failure to parse near offset 183. Unexpected closing brace without a corresponding opening brace.
at System.String.FormatHelper(IFormatProvider provider, String format, ReadOnlySpan1 args) at System.String.Format(IFormatProvider provider, String format, Object[] args) at NGettext.Catalog.GetString(String text, Object[] args) at Duplicati.Library.Localization.MoLocalizationService.Localize(String message, Object[] args) at Duplicati.Library.Localization.Short.LC.L(String message, Object[] args) at Duplicati.Library.Backend.Strings.MicrosoftGroup.Description(String mssadescription, String mssalink, String msopdescription, String msoplink) at Duplicati.Library.Backend.MicrosoftGraphBackend.get_Description() at Duplicati.Server.Serializable.ServerSettings.DynamicModule..ctor(IBackend backend) at Duplicati.Server.Serializable.ServerSettings.<>c.<get_BackendModules>b__4_0(IBackend n) at System.Linq.Enumerable.ArraySelectIterator2.ToArray()
at Duplicati.Server.Serializable.ServerSettings.get_BackendModules()
at Duplicati.WebserverCore.Services.SystemInfoProvider.CreateStaticSystemInformation()
at Duplicati.WebserverCore.Services.SystemInfoProvider.GetSystemInfo(CultureInfo browserlanguage)
at lambda_method287(Closure, EndpointFilterInvocationContext)
at Duplicati.WebserverCore.Middlewares.HostnameFilter.InvokeAsync(EndpointFilterInvocationContext context, EndpointFilterDelegate next)
at Duplicati.WebserverCore.Middlewares.LanguageFilter.InvokeAsync(EndpointFilterInvocationContext context, EndpointFilterDelegate next)
at Microsoft.AspNetCore.Http.RequestDelegateFactory.g__ExecuteAwaited|130_0(ValueTask1 valueTask, HttpContext httpContext, JsonTypeInfo1 jsonTypeInfo)
at Duplicati.WebserverCore.Middlewares.WebsocketExtensions.<>c__DisplayClass0_0.<b__0>d.MoveNext()
— End of stack trace from previous location —
at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddlewareImpl.g__Awaited|10_0(ExceptionHandlerMiddlewareImpl middleware, HttpContext context, Task task)

My installation is having the same problem. As a temporary alternative, access it via the old interface http://127.0.0.1:8200/ngax/index.html; at least you’ll be able to see and launch the jobs, but even editing doesn’t work correctly.

Same problem here, using “Ubuntu 24.04.4 LTS”. The new interface doenst work, but the scheduled backups running and old interface works too.

I’m on Ubuntu 22.04.5 LTS and aren’t able to upgrade from 2.2.0.3 > 2.3.0.0
When running “sudo dpkg -i duplicati-2.3.0.0_stable_2026-04-14-linux-x64-gui.deb” I answer no to replace “Configuration file ‘/etc/default/duplicati’” and then I get this: “Processing triggers for mailcap (3.70+nmu1ubuntu1) …” and then it returns to the prompt.
dpkg.log show this:
2026-04-22 06:12:11 startup archives install
2026-04-22 06:12:11 upgrade duplicati:amd64 2.3.0.0 2.3.0.0
2026-04-22 06:12:11 status half-configured duplicati:amd64 2.3.0.0
2026-04-22 06:12:11 status unpacked duplicati:amd64 2.3.0.0
2026-04-22 06:12:11 status half-installed duplicati:amd64 2.3.0.0
2026-04-22 06:12:12 status triggers-pending mailcap:all 3.70+nmu1ubuntu1
2026-04-22 06:12:12 status unpacked duplicati:amd64 2.3.0.0
2026-04-22 06:12:12 configure duplicati:amd64 2.3.0.0 2.3.0.0
2026-04-22 06:12:12 status half-configured duplicati:amd64 2.3.0.0
2026-04-22 06:12:12 status installed duplicati:amd64 2.3.0.0
2026-04-22 06:12:12 trigproc mailcap:all 3.70+nmu1ubuntu1
2026-04-22 06:12:12 status half-configured mailcap:all 3.70+nmu1ubuntu1
2026-04-22 06:12:12 status installed mailcap:all 3.70+nmu1ubuntu1

Debian GNU/Linux 13.4, upgrade went without event. :expressionless_face:

Although, I am now (since upgrade) receiving the following warning: “2026-04-21 02:01:29 -04 - [Warning-Duplicati.Library.Main.Operation.FilelistProcessor-BackendQuotaNear]: Backend quota is close to being exceeded: Using 1.288 TiB of 55.610 GiB (34.621 GiB available)” while Disks is reporting: 4.0 TB — 2.5 TB free (37.0% full).

I set: --disable backend quota=true as a temporary fix.

Reporting for what?

Is this by any chance the size of /, with your backup going to a mounted drive?

Incorrect Free Space Warnings is a theory (needs devs) that quota reads root.

@JRR @Luiz_Arina @Roberto_Rinaldi @caiofs This is caused by a faulty pt-BR translation string and only shows up if the browser requests that locale.

We will release a patched build (2.3.0.1) soon.

I see no errors. Is the new package not installed?
Can you try removing the old package first?

Is this new in 2.3.0.0 ? What version were you using before?

While awaiting confirmation, please see my post above on new quota warning.

Sorry, after a reboot it actually is upgraded and works.

You nailed it! I now clearly understand the warning (in 2.3.0.0 and sill present in 2.3.0.1) is reporting the space of the / of the system (and not my destination drive) and your follow up link ( Incorrect Free Space Warnings - #18 by ts678 ) explains the issue exactly. THX! :smiling_face_with_sunglasses: :smiling_face_with_sunglasses: :smiling_face_with_sunglasses:

Just wanted to thank the developers for this release. With this upgrade my backups run much quicker (I have two backups, one was ~1h45mins, now it’s ~1h20min and the other was ~40mins, now it’s ~25mins).

No issues to report :slight_smile:

Kenkendk

I’m not using the pt-br translation; it’s in the default en-us version.

So it’s not the translation that’s causing the crash.

Thanks for the new release!

Could you please clarify:

Do I need to set this environment variable if I do not want to purchase a production license? Or is there a separate agreement for the proprietary modules that I need to accept even if I do not actively use them?

I do not plan to use the proprietary features but from the description it is not clear for me whether I can just continue to use the installation as-is or am (legally) required to set the environment variable?

Ok, it looked similar enough that I assumed it was the same issue.
Do you have any log messages? (Windows event log, crashlog.txt, or similar)

Can you try to run Duplicati from a commandline:

C:\Program Files\Duplicati 2\Duplicati.GUI.TrayIcon.exe

This should log any errors to the console so we have some idea of what is going on.

There is no requirement to set the environment variable. But since this is mixing open-source and source-available code, some prefer the option for pure open-source, and the environment variable provides a simple way to get that. Other solutions would ship a “Community Edition” without the extra functionality, but we chose to have a single “Everything” version that you can then strip a bit to get pure open-source.

If you do not use the Office 365 or Google Workspace features, the only overhead is that they are loaded in some lists, along with all the other modules that you probably do not use either.

If you do use the modules without a license, that is fine, as long as it is not a production setup (i.e., you are testing the feature).

Thank you for the fast reply and great that you provide users with the option to rely solely on open-source modules! Is there a way to set the environment variable also as command-line argument for the tray icon? It seems not to work like with other environment variables that can be used as option by removing “DUPLICATI” and converting underscores to hyphens:

Apr 29, 2026 5:23 PM: Unknown option supplied: disable-proprietary-modules

Apr 29, 2026 5:23 PM: Unknown option supplied: enable-folder-status-service

The enable-folder-status-service option also seems to be not recognized even after running the PowerShell script (let me know if I should re-post in a separate thread), not sure what I am doing wrong:

set “DUPLICATI_DISABLE_PROPRIETARY_MODULES=1” && “C:\Program Files\Duplicati 2\Duplicati.GUI.TrayIcon.exe” --secret-provider=wincred:// --settings-encryption-key=$duplicati-server --enable-folder-status-service

The options that are DUPLICATI__ prefixed are only passed to the Duplicati server, and not general commandline options.

There is no commandline option to disable the modules as it needs to be done for the whole process. The logic is that you either set this variable for the machine or don’t. We do not consider having one instance with the modules and another instance without the modules loaded as a common use-case.

Depending on your Windows version, there are different ways to set an environment variable for the whole machine:

Once the environment variable is set, it will apply to all new processes, so simply reboot or restart Duplicati and it will use the variables.