Repository navigation
Headless server: e2ee/verification succeeds but WhatsApp account never loads into app-level index (accounts=0, chats list empty) #29
Copy link
Copy link
Open
Description
Environment
beeper-server(headless, no Electron/GUI) running under systemd on Linux, driven entirely via thebeeperCLI (beeper status,beeper accounts,beeper chats list,beeper verify, etc.)- Server build 4.3.23 (latest at time of investigation)
- One Matrix/Beeper account with one WhatsApp Cloud-linked account bridged through it
Symptom
After getting E2EE fully initialized and the device verified, the WhatsApp account never transitions out of "unloaded" in the app-level indexer, so chats list / messages return nothing even though the underlying Matrix sync is clearly healthy and growing.
Timeline / diagnostics
- Initial blocker:
e2ee.initializedstuckfalsefor weeks despiteverified: trueand all 5 E2EE secrets present (masterKey, selfSigningKey, userSigningKey, megolmBackupKey, recoveryKey). Root cause turned out to be a corrupt local crypto store. Fix: stop the server, back up the profile dir,rm -rfthe profile,beeper install server, restart, re-auth via email code.e2ee.initializedthen correctly flips totrueon the fresh profile. - Re-verification gotcha: after the wipe, SAS/emoji verification had to be redone against a new device id, and the verification prompt did not reliably surface on the paired phone/desktop. Root cause appears to have been a stale duplicate "Beeper Server (Linux)" device entry left over from the wiped profile, still marked
verified. Logging out all devices from Beeper Desktop → Settings → Devices (which also force-logs-out the server) cleared it. After re-login +beeper verify -t server(note:beeper verify sas409s with "not available in the current app state" — the bareverifycommand is what worked), the emoji-verification prompt finally appeared, was confirmed, and the server reachedverified: true, secrets5/5,firstSyncDone: true, stateready. - Remaining bug: even with the account fully verified and Matrix sync clearly healthy (
index.dbthread count growing steadily across days, e.g. ~1146 → 1522 → 1540+, withmx_room_state/mx_room_messagespopulated in the raw account DB), the WhatsApp account itself never loads into the indexer:
index.db.accounts = 0(permanently, checked repeatedly over multiple days)index.db.messages = 0- Server log repeats:
[syncEventsToAccount] queued N events for unloaded account whatsapp beeper chats list→ "No chats matched"beeper bridgesreports the WhatsApp bridge asconnectedbeeper accountslists the WhatsApp account as present- So "connected" / "present" per
bridges/accountsdoes not mean usable — the only reliable signal we found ischats listactually returning rows, which it never does.
- Restarting the server while in this state is counterproductive: it drops the state from
readyback toinitializingand does not recover even after 20+ minutes of soaking — reproduced twice, on separate days.
Ask
- Is there a known issue where a bridged account's Matrix-side sync completes but the account is never loaded into the app-level SQLite index (
index.db.accounts)? - Is there a CLI/API way to force a reload of one specific account into the index without a full profile wipe?
- Happy to pull more
beeper status --jsonoutput / server logs if that helps narrow it down.
This was raised with Beeper support by email first; they asked us to open an issue here with the technical detail, hence this report.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels
Activity
linear-code commentedon Aug 18, 2026
LABS-112
batuhan commentedon Sep 25, 2026
Two separate things here:
accounts=0, "queued N events for unloaded account whatsapp"): Beeper Server never initialized bridge accounts because Desktop does that from its UI. Fixed in Server 4.3.121+ (stable is 4.3.152); the queued events replay once the account initializes. Runbeeper update --serverand let us know if WhatsApp chats show up.beeper verify sasreturning 409: a CLI bug. It sent the placeholder IDactiveinstead of the real verification ID. Fixed in Fix verify subcommands 409ing without --id #36.This action is being done autonomously.