Duplicacy Web Edition 0.2.10 Beta is now available



This will be fixed in 0.2.8.

You can select the root node (which reads revision xxxx) and the entire directory will be restored.


I’ll fix this in 0.2.8.

You can enter {{status}} in the subject which will be replaced by the job status (either success or error). This is a feature to be documented.

3,4, and 5 will be considered after the first official release.


Minor UI layout bug. To reproduce - change the width of the window slowly. (macOS/Safari)



I’m running 0.2.7 Beta and I can’t see the “Storage” page anymore and getting this error:

019/01/01 19:01:49 GET /storage
2019/01/01 19:01:49 An error has occurred: runtime error: index out of range
2019/01/01 19:01:49 goroutine 129 [running]:
runtime/debug.Stack(0xcc59a1, 0x19, 0xc4203f6c58)
/usr/local/go/src/runtime/debug/stack.go:24 +0xa7
/Users/chgang/zincbox/go/src/github.com/gilbertchen/duplicacy-web/dwe/dwe_utils.go:26 +0x94
panic(0xbab6e0, 0x11cc620)
/usr/local/go/src/runtime/panic.go:502 +0x229
main.storagesHandler(0xe09820, 0xc4202ced20, 0xc420603000)
/Users/chgang/zincbox/go/src/github.com/gilbertchen/duplicacy-web/dwe/dwe_storage.go:459 +0x3016
net/http.HandlerFunc.ServeHTTP(0xd7ce90, 0xe09820, 0xc4202ced20, 0xc420603000)
/usr/local/go/src/net/http/server.go:1947 +0x44
net/http.(*ServeMux).ServeHTTP(0x11e01c0, 0xe09820, 0xc4202ced20, 0xc420603000)
/usr/local/go/src/net/http/server.go:2340 +0x130
main.logHTTPRequest.func1(0xe09820, 0xc4202ced20, 0xc420603000)
/Users/chgang/zincbox/go/src/github.com/gilbertchen/duplicacy-web/dwe/dwe_main.go:542 +0x1c6
net/http.HandlerFunc.ServeHTTP(0xc42040e3e0, 0xe09820, 0xc4202ced20, 0xc420603000)
/usr/local/go/src/net/http/server.go:1947 +0x44
net/http.serverHandler.ServeHTTP(0xc4201f52b0, 0xe09820, 0xc4202ced20, 0xc420603000)
/usr/local/go/src/net/http/server.go:2697 +0xbc
net/http.(*conn).serve(0xc4200ae6e0, 0xe0a1e0, 0xc42055c040)
/usr/local/go/src/net/http/server.go:1830 +0x651
created by net/http.(*Server).Serve
/usr/local/go/src/net/http/server.go:2798 +0x27b

Not sure when to look for fix this problem. All other pages work fine except for the “Storage” page and all other functions are fine like backups etc etc…

Thanks Alot

Cheers pdaemon



Also I was thinking there should be an option on how long to keep log files in the GUI instead of running a cronjob to clean them up on Linux…this is how many log files there are currently in the logs dir:

root@earth:~/.duplicacy-web/logs# ls -altr | wc -l
root@earth:~/.duplicacy-web/logs# du -hs
1.9G .

Also, is there a way change the directory the software is running from to somewhere like:
/usr/local or /opt for example instead of /root/.duplicacy?


Cheers pdaemon


Okay, so what is your recommendation for migrating to the web ui from CLI? Is there any workaround or do we have to manually add each repository and configure it anew? Where does Duplicacy Web store the config?


I just uploaded 0.2.8 that fixes this bug.


There are a few issues I’ve run across in 0.2.7 which still appear to be present in 0.2.8 (posted while I was writing this up).

  1. The time validation for schedules appears to be insufficient, allowing for apparently invalid times to be entered. Take for example this daily schedule meant to run at “02:00 am” every day (without the space between “0” and “am” it works as desired)

  1. All of the dropdown controls jump a bit after clicking on them to select an entry. It looks like there’s a default style being applied before the intended styling eventually gets applied – which results in a jerky appearance.

  2. The restore page file listing allows the rows to scroll under and overlap with the column headers (shown below). The Revision # row also scrolls over the header row (not pictured).


Hi gchen,

Thanks very much for fixing this bug so quickly.
I’ll check out the new version.

Cheers pdaemon


I want to add an existing B2 bucket, but I get empty Storage page after I add the bucket.

2019/01/02 01:19:58 Running /home/myname/.duplicacy-web/bin/duplicacy_linux_x64_2.1.2 [-log -d info -repository /home/myname/.duplicacy-web/repositories/localhost/all b2://my-backup-bucket]
2019/01/02 01:19:58 Set current working directory to /home/myname/.duplicacy-web/repositories/localhost/all
2019/01/02 01:19:58 DEBUG PASSWORD_ENV_VAR Reading the environment variable DUPLICACY_B2_ID
2019/01/02 01:19:58 DEBUG PASSWORD_ENV_VAR Reading the environment variable DUPLICACY_B2_KEY
2019/01/02 01:20:03 INFO STORAGE_ENCRYPTED The storage is encrypted with a password
2019/01/02 01:20:03 INFO STORAGE_SNAPSHOT ubuntu-backup
2019/01/02 01:20:13 POST /lookup_storage
2019/01/02 01:20:13 POST /lookup_storage
2019/01/02 01:20:14 POST /lookup_storage
2019/01/02 01:20:14 POST /lookup_storage
2019/01/02 01:20:14 POST /lookup_storage
2019/01/02 01:20:14 POST /lookup_storage
2019/01/02 01:20:14 POST /lookup_storage
2019/01/02 01:20:15 POST /lookup_storage
2019/01/02 01:20:15 POST /lookup_storage
2019/01/02 01:20:15 POST /lookup_storage
2019/01/02 01:20:15 POST /lookup_storage
2019/01/02 01:20:15 POST /lookup_storage
2019/01/02 01:20:15 POST /lookup_storage
2019/01/02 01:20:25 POST /add_storage
2019/01/02 01:20:25 Running /home/myname/.duplicacy-web/bin/duplicacy_linux_x64_2.1.2 [-log -d init -e -storage-name ubuntu-backup duplicacy-web b2://my-backup-bucket]
2019/01/02 01:20:25 Set current working directory to /home/myname/.duplicacy-web/repositories/localhost/all
2019/01/02 01:20:25 DEBUG PASSWORD_ENV_VAR Reading the environment variable DUPLICACY_UBUNTU-BACKUP_B2_ID
2019/01/02 01:20:25 DEBUG PASSWORD_ENV_VAR Reading the environment variable DUPLICACY_UBUNTU-BACKUP_B2_KEY
2019/01/02 01:20:27 DEBUG PASSWORD_ENV_VAR Reading the environment variable DUPLICACY_UBUNTU-BACKUP_B2_ID
2019/01/02 01:20:27 DEBUG PASSWORD_ENV_VAR Reading the environment variable DUPLICACY_UBUNTU-BACKUP_B2_KEY
2019/01/02 01:20:27 DEBUG PASSWORD_ENV_VAR Reading the environment variable DUPLICACY_UBUNTU-BACKUP_PASSWORD
2019/01/02 01:20:30 TRACE CONFIG_ITERATIONS Using 16384 iterations for key derivation
2019/01/02 01:20:30 DEBUG BACKBLAZE_CALL URL request 'HEAD https://f001.backblazeb2.com/file/my-backup-bucket/nesting' returned status code 404
2019/01/02 01:20:30 DEBUG BACKBLAZE_LIST b2_download_file_by_name did not return headers
2019/01/02 01:20:30 DEBUG STORAGE_NESTING Chunk read levels: [1], write level: 1
2019/01/02 01:20:30 INFO STORAGE_CONFIGURED The storage 'b2://my-backup-bucket' has already been initialized
2019/01/02 01:20:30 INFO CONFIG_INFO Compression level: 100
2019/01/02 01:20:30 INFO CONFIG_INFO Average chunk size: 4194304
2019/01/02 01:20:30 INFO CONFIG_INFO Maximum chunk size: 16777216
2019/01/02 01:20:30 INFO CONFIG_INFO Minimum chunk size: 1048576
2019/01/02 01:20:30 INFO CONFIG_INFO Chunk seed: 6475706c6963616379
2019/01/02 01:20:30 INFO REPOSITORY_INIT /home/myname/.duplicacy-web/repositories/localhost/all will be backed up to b2://my-backup-bucket with id duplicacy-web
2019/01/02 01:20:32 GET /storage
2019/01/02 01:20:32 Failed to read the stat file for storage 'ubuntu-backup': open /home/myname/.duplicacy-web/stats/storages/ubuntu-backup.stats: no such file or directory
2019/01/02 01:20:32 An error has occurred: runtime error: index out of range
2019/01/02 01:20:32 goroutine 63 [running]:
runtime/debug.Stack(0xcc59a1, 0x19, 0xc42016cc58)
	/usr/local/go/src/runtime/debug/stack.go:24 +0xa7
	/Users/chgang/zincbox/go/src/github.com/gilbertchen/duplicacy-web/dwe/dwe_utils.go:26 +0x94
panic(0xbab6e0, 0x11cc620)
	/usr/local/go/src/runtime/panic.go:502 +0x229
main.storagesHandler(0xe09820, 0xc420343ce0, 0xc420137200)
	/Users/chgang/zincbox/go/src/github.com/gilbertchen/duplicacy-web/dwe/dwe_storage.go:460 +0x300f
net/http.HandlerFunc.ServeHTTP(0xd7ce90, 0xe09820, 0xc420343ce0, 0xc420137200)
	/usr/local/go/src/net/http/server.go:1947 +0x44
net/http.(*ServeMux).ServeHTTP(0x11e01c0, 0xe09820, 0xc420343ce0, 0xc420137200)
	/usr/local/go/src/net/http/server.go:2340 +0x130
main.logHTTPRequest.func1(0xe09820, 0xc420343ce0, 0xc420137200)
	/Users/chgang/zincbox/go/src/github.com/gilbertchen/duplicacy-web/dwe/dwe_main.go:542 +0x1c6
net/http.HandlerFunc.ServeHTTP(0xc4201e6220, 0xe09820, 0xc420343ce0, 0xc420137200)
	/usr/local/go/src/net/http/server.go:1947 +0x44
net/http.serverHandler.ServeHTTP(0xc420401930, 0xe09820, 0xc420343ce0, 0xc420137200)
	/usr/local/go/src/net/http/server.go:2697 +0xbc
net/http.(*conn).serve(0xc420098d20, 0xe0a1e0, 0xc4203ca440)
	/usr/local/go/src/net/http/server.go:1830 +0x651
created by net/http.(*Server).Serve
	/usr/local/go/src/net/http/server.go:2798 +0x27b

~/.duplicacy-web/stats/storages is empty.


This was caused by the same bug found by @pdaemon and has been fixed in 0.2.8.


Thanks @gchen, I confirm it fixed the issue.

Small other bug/question, If I open a revision it does not list all files in the backup:


Is it possible to create the Windows startup service with the Start Menu shortcut instead of the executable? With each new version, the older web version still exists in the install directory and if you have it set to auto start, the older version is used instead of the newer one.


I have a request for the scheduler. I defined some maintenance task that are launched every week or every month at a specific hour. The issue is that, if my PC isn’t running at the specific date, time where the task should be launched, then the task is never lauched. I think that if a shedule task has been passed (without execution of the task), it should be launched ASAP, when the scheduler is launched. This should be at least, an option for a task.


Thanks for the quick response to address these issues.

I can confirm that 0.2.8 does seem to fix the “Listing Session expired” error with SFTP.

Are you saying that the only restore options 1 have is :-

  1. Restore the whole repository
  2. files in the root directory of the repository

Because that is all I am able to do. Web GUI seems to suggest I should be able to at least pick 1 file or 1 sub directory to restore, but that does not seem to work (unless it is 1 file in the root directory). I am hoping I am missing something simple, because if restore functionality is limited to that, it is a bit cumbersome.


I am not sure if this fix has not created another bug. I went to test this, but when I click test, the whole web GUI seems to hang up. It is like it is working doing the test, and the dialogue box is still up, but nothing happens. When I get sick of waiting and try and press the “test” or “save” button, nothing happens. Pressing cancel will make the dialogue box disappear, but the whole Web GUI seems to have hung up and I can’t make it do anything. eg If I press the Dashboard, I just get the icon circling. If I see if anything saved when I pressed the save button, nothing has saved. From a quick investigation, only way to restore things is to close down Duplicacy and restart it. But if I repeat this, I have the same issue, so it seems to be reproducible.

Now a few things to not about this :-

  1. I am trying to do email without authentication, and have left Username and password blank. In truth, I am not sure if I need to authenticate or not (I think not from this address). But this might help you reproduce.

  2. I have tried with authentication and filled out username/password, and this does appear to avoid the issue, so the bug seems to be if you try with no authentication.

However, if I try with authentication I get a “Failed to send the email: dial tcp connectex: An attempt was made to access a socket in a way forbidden by its access permissions.”

Am I missing something?

Thanks heaps.


{{status}} works a treat and solves the problem completely. Sure, it would be nice to summaries the actual contents of the backup job more nicely and enable summarisation of multiple jobs in the fullness of time no doubt when that bubbles to the top priority, and can totally understand why that might be lower down the priority list.

Item 4, is not something you can do anything by definition as you can’t do anything if your process accidently or unexpectedly crashes. But I listed in there as reference for other people in case they wanted to use the gmail rule functionality, and also highlight the importance of being able to list jobs as success or failure.

Thanks for the hard work.


I have one actual functional issue this time.

  1. If I run the executable as a service on linux as root (defaults to creating and using /.duplicacy-web/), then any interaction with the web UI that uses the executable fails since the path to the executable is missing a leading /.
Failed to check the storage at /tmp: fork/exec .duplicacy-web/bin/duplicacy_linux_x64_2.1.2: no such file or directory

edit: if I specify User=root in the service file, then it writes to /root/.duplicacy-web/ instead and everything works as expected. I guess it just doesn’t like /.duplicacy-web/ to be in the root path.

  1. Storage > Storage Configuration > S3: “Endpiont” is misspelled.



This is my systemd unit file:

cat /lib/systemd/system/duplicacy.service 
Description=Duplicacy Backup Service

ExecStart=/usr/local/duplicacy/duplicacy_web &


In my setup /usr/local/duplicacy/duplicacy_web is a symlink to the version of duplicacy executable I prefer…

It would be good if the the directory for duplicacy for executable + config under linux could be /usr/local/duplicacy or /opt/duplicacy instead of /root/.duplicacy web.

root@earth:/usr/local/duplicacy# ls -altr
total 132668
-rwxr-xr-x  1 root root  22428329 Nov  5 12:16 duplicacy_web_linux_x64_0.1.0
drwxrwsr-x 13 root staff     4096 Dec  5 06:13 ..
-rwxr-xr-x  1 root staff 22735834 Dec 14 10:15 duplicacy_web_linux_x64_0.2
-rwxr-xr-x  1 root staff 22735834 Dec 17 10:31 duplicacy_web_linux_x64_0.2.1
-rwxr-xr-x  1 root staff 22646476 Dec 22 10:06 duplicacy_web_linux_x64_0.2.5
-rwxr-xr-x  1 root staff 22646476 Dec 25 00:40 duplicacy_web_linux_x64_0.2.7
-rwxr-xr-x  1 root staff 22646476 Jan  2 04:17 duplicacy_web_linux_x64_0.2.8
lrwxrwxrwx  1 root staff       29 Jan  2 07:12 duplicacy_web -> duplicacy_web_linux_x64_0.2.8
drwxr-sr-x  2 root staff     4096 Jan  2 07:12 .

root@earth:/usr/local/duplicacy# systemctl status duplicacy.service 
● duplicacy.service - Duplicacy Backup Service
   Loaded: loaded (/lib/systemd/system/duplicacy.service; disabled; vendor prese
   Active: active (running) since Wed 2019-01-02 07:13:07 AWST; 3 days ago
 Main PID: 20691 (duplicacy_web)
   CGroup: /system.slice/duplicacy.service
           ├─18328 /root/.duplicacy-web/bin/duplicacy_linux_x64_2.1.2 -log check
           ├─18329 /root/.duplicacy-web/bin/duplicacy_linux_x64_2.1.2 -log check
           └─20691 /usr/local/duplicacy/duplicacy_web &

Cheers pdaemon


@adriankoooo are you able to scroll down to see the rest of the list?