Will start migration v0.15.5 to v0.16.x, some questions

Your question

Hi all
I’m still using stalwart v0.15.5 which is running in a docker container.
first question:
As far I read correctly, all accounts must be a mailadress.
Must the “Fallback Administrator” and the “Master User” also have a domain name eg [email protected]?

Second question:
Is it valid when I create a separate folder /var/lib/stalwart16 and copy all data from /var/lib/stalwart15
run the migration script, stop stalwart v0.15.5 and start the v0.16 in recovery mode?

Additional
Which V0.16 Version should I use v.0.16.0 or the latest?

I started on a internal testsystem the migration

after starting in recovery mode=1 and admin.temppwd with stalwart v0.16.2 I was able to insert the export.json. ports are published as 28080 and 20443 instead 8080 and 443

But I cannot login to the webui, login screen is shown but the error “Invalid username or password. Please try again.” remain.

Does anyone have a Idea what to do?

Haven’t done a migration myself as I’m starting with v0.16.x, but I’ve seen some other posts here that imply later versions had better migration capabilities.

OK, thanks. I will rerun the testmigration with the latest version

unfortunaly the same result with v0.16.17

I will try the migration version by version until I find a valid version

I’m now a step further

To eliminate any behavior with docker running on a synology I have setup a notebook with debian 13 similar to the productive system

the migration succed for the export.json

But there are still no data in the mailboxes

what I have done

Old docker-compose points /opt/stalwart to /var/lib/stalwart/data

volumes:

  • “/var/lib/stalwart15:/opt/stalwart”

and under var/lib/stalwart15/data are 3 subfolders

data, etc and logs. Below data are no subfolder blobs

The folders and datas are copied to the new folder for stalwart16

I start then the recovery mode

sudo docker run -d --name stalwart-recovery
-e STALWART_RECOVERY_MODE=1
-e STALWART_RECOVERY_ADMIN=admin:somepwd
-p 8080:8080
-v /var/lib/stalwart16/etc:/etc/stalwart
-v /var/lib/stalwart16/data:/var/lib/stalwart
stalwartlabs/stalwart:v0.16.18

this is the result of the logtrace

2026-08-20T09:16:19Z WARN Server started in recovery mode (server.recovery-mode) details = “Port 8080 is open for troubleshooting and recovery.”, hostname = “adbe5ede0540”, version = “0.16.18”
2026-08-20T09:16:20Z INFO Application resource updated (resource.application-updated) url = “https://github.com/stalwartlabs/webui/releases/latest/download/webui.zip”, details = “Stalwart Web Interface”
2026-08-20T09:16:20Z INFO Network listener started (network.listen-start) listenerId = “http-recovery”, localIp = ::, localPort = 8080, tls = false

and I can import with stalwart-cli the export.json

In recoverymode I can now login into the webui and see all accounts, domains etc. and can create the new admin account.

But, the mailboxes are all still empty and the usage shows even after “Perform account maintenance operations” 0kb usage

What are I doing wrong?

Before I forget, the system is using the rockdb

I’m giving up to migrate that way and will use the other way via vandeday.

Here are my steps, if somebody have the same problems

I tested all below steps on a testsystem and will start the migration this weekend

  • create export.json and config.json with migrate_v016.py
  • close all clients
  • close port 25, no incoming mails will be lost
  • import all mailboxes via vandelay import jmap …
  • setup stalwart with the latest version, in my case v0.16.18 and set in STALWART_RECOVERY_MODE=1
  • Import the export.json and check the configuration
  • restart docker container without recovery_mode
  • export all mailboxes via vandelay export …

I wrote a script to run 3 tasks in parallel for im- and export the mailboxes to reduce downtime.

I hope this helps someone and saves them from tearing out the last of their hair.