Fresh install on arch linux not able to login / interact

Issue Description

# pacman -Qi stalwart
Name            : stalwart
Version         : 0.16.8-1
Description     : Stalwart mail and collaboration server
Architecture    : x86_64
URL             : https://stalw.art
Licenses        : AGPL-3.0-only
Groups          : None
Provides        : None
Depends On      : glibc  rocksdb  stalwart-webadmin  libgcc  libgcc_s.so=1-64  libstdc++  libstdc++.so=6-64
Optional Deps   : stalwart-cli: management CLI [installed]
Required By     : None
Optional For    : None
Conflicts With  : None
Replaces        : None
Installed Size  : 81.43 MiB
Packager        : George Rawlinson <[email protected]>
Build Date      : Sun 07 Jun 2026 11:45:40 PM UTC
Install Date    : Thu 11 Jun 2026 02:32:44 AM UTC
Install Reason  : Explicitly installed
Install Script  : Yes
Validated By    : Signature

# head -n100 *
==> config.env <==
# Environment variables for the Stalwart service.
# Uncomment and edit an entry to override its default.

# Override the hostname used in HTTP responses
#STALWART_HOSTNAME=mail.example.com

# Override the HTTPS port used in HTTPS responses
#STALWART_HTTPS_PORT=8080

# Enable bootstrap / recovery mode on startup. Accepted: 1, true. Default: false.
#STALWART_RECOVERY_MODE=true

# Log level while in recovery mode. Default: info.
#STALWART_RECOVERY_MODE_LOG_LEVEL=debug

# HTTP port used in recovery mode. Default: 8080.
#STALWART_RECOVERY_MODE_PORT=9090

# Fixed administrator credentials — format: username:password
# Default: a temporary random password is generated and printed to the logs.
#STALWART_RECOVERY_ADMIN=admin:changeme

# Cluster role assigned to this node. Must match a role name defined in the
# cluster registry. Leave unset for a standalone (non-clustered) deployment.
#STALWART_ROLE=primary

# Push-notification shard this node is responsible for, when running in a
# cluster.
#STALWART_PUSH_SHARD=1

==> config.json <==
{
  "@type": "Sqlite",
  "path": "/var/lib/stalwart/stalwart.sqlite3"
}
# journalctl --unit stalwart -I 
Jun 11 02:38:43 chargeitservices.com systemd[1]: Started Stalwart Mail Server.

I tried uncommenting STALWART_RECOVERY_ADMIN and following the information in the docs Linux / MacOS | Stalwart

There was no bootstrap information. The username/password I set does not appear to work on localhost:8080. I’m out of ideas and could use some help.

Expected Behavior

Some kind of diagnostic information in the journal.

Actual Behavior

Completely inaccessible with no diagnostic information.

Reproduction Steps

Frest install of 0.16.8-1 on arch.

Stalwart Version

v0.16.x

Installation Method

Binary (Linux)

Database Backend

SQLite

Blob Storage

MySQL

Search Engine

Internal

Directory Backend

SQL

I have reviewed the documentation and FAQ and confirm that my issue is NOT addressed there.

on

I have searched this support forum (open and closed topics) and confirm this is not a duplicate.

on

I understand that topics in this category are triaged by a bot first but a human reply will follow up. If I’d prefer a human-only reply, I’ll add the no-ai tag to my topic.

on

The key issue here is that bootstrap mode only triggers when config.json is absent. In your case, the Arch package has already created a config.json (the file you showed pointing at /var/lib/stalwart/stalwart.sqlite3), so Stalwart skips bootstrap entirely and tries to start normally – which is why you see no bootstrap credentials in the journal, and the STALWART_RECOVERY_ADMIN env var has no effect in that scenario (it only applies during bootstrap or recovery mode, not a normal start).

Here’s what’s happening and how to fix it:

  1. Your config.json exists (/etc/stalwart/config.json or similar), so Stalwart starts in normal mode, not bootstrap mode. No temporary admin credentials are generated or printed.

  2. To access the setup wizard, you need to use recovery mode instead. Edit /etc/stalwart/config.env, uncomment and set:

    STALWART_RECOVERY_MODE=true
    STALWART_RECOVERY_ADMIN=admin:yourpassword
    

    Then restart the service (sudo systemctl restart stalwart). This will start Stalwart in recovery mode on port 8080, and you can log in at http://localhost:8080/admin with the credentials you set.

  3. Why is the journal nearly empty? In recovery/bootstrap mode the server logs more; in normal mode with a working config it may simply start quietly. Using the STALWART_RECOVERY_MODE_LOG_LEVEL=debug env var alongside recovery mode will give you more diagnostic output if needed.

  4. Once you’ve completed setup through the WebUI wizard, remove or re-comment STALWART_RECOVERY_MODE=true from the env file and restart so the server runs normally.

Relevant docs:

This is an automated reply from the Stalwart Help Bot. Other community members may follow up if this answer is incomplete or wrong.

Okay. I tried the bot’s instructions and it didn’t help but it did finally make me realize the issue I was having was because another service was listening on 8080 on my machine, also asking for a username/password, which successfully stumped me.

Sorry for the noise.