Security

Start with the limit

A security page is only worth reading if it opens with what it cannot do.

The limit

No end-to-end encryption

Messages travel over HTTPS and are stored in a form the server can read. Whoever administers that server is technically able to read them.

If your threat model includes the person running the server, use Signal. If it is the advertising economy you want out of, read on.

Accounts

Sign-in

Hashed, not stored

A password is kept as a one-way hash and cannot be recovered from it.

Codes expire

Single-use, time-limited, five attempts, then void.

One identity

A username and an email each belong to one account, held by a constraint in the database.

Clean expiry

A dead session returns you to sign-in, not to a half-authenticated screen.

Updates

The update path is the attack surface

An app that installs its own updates is only as safe as the channel delivering them.

ONE RELEASE, FOUR GATES SIGNED PUBLISHED VERIFIED INSTALLED One release key Timestamped request Fingerprint match Or deleted
Every gate must passA mismatch is discarded, not installed

Signed with one key

Android refuses an update signed with any other, so a substituted file cannot install over your copy.

Verified on arrival

Checked against the published fingerprint. A mismatch is deleted.

Publishing is signed

Carries a timestamp, so a captured publish cannot be replayed.

Our own files only

The server refuses to advertise an update hosted anywhere else.

Infrastructure

Where it runs

One server in Germany, behind automatically renewed certificates. The database is not exposed to the internet.

This site loads nothing it did not ship — no CDN, no font service, no analytics host — and says so in a policy the browser enforces.

Reporting

Found something

buildsevaa@gmail.com, with enough to reproduce it. No bounty — this is independent work — but reports are read, and fixes appear in the release notes.