Threema Web is a web client for Threema, a privacy-focussed end-to-end encrypted mobile messenger hosted and developed in Switzerland. With Threema Web, you can use Threema on your Desktop without compromising security.
For more information, see the Threema Cryptography Whitepaper.
Bug Reports and Feature Requests
If you find a bug in Threema Web or want to request a new feature, feel free to open an issue on GitHub. Please make sure that your bug report or feature request hasn't already been filed by using the search function.
Express your personal opinion regarding priority by reacting with
We may occasionally deploy experimental branches on
https://web-beta.threema.ch which you are
encouraged to test. If you encounter problems, please
open an issue and
include the experiment's version number (e.g.
If you want to help translating Threema Web to your language, please check out
The protocol used to communicate between the Threema app and Threema Web is documented here.
Install development dependencies:
Run the dev server:
npm run devserver
Then open the URL in your browser:
(Note that this setup should not be used in production. To run Threema Web on a server, please follow the instructions at docs/self_hosting.md.)
To run unit tests:
npm run build:unittests firefox tests/testsuite.html
To run UI tests:
npm run test:ui <browser>
npm run test:ui firefox npm run test:ui chrome
You can also filter the test cases:
npm run test:ui firefox emoji
To run linting checks:
npm run lint
You can also install a pre-push hook to do the linting:
echo -e '#!/bin/sh\nnpm run lint' > .git/hooks/pre-push chmod +x .git/hooks/pre-push
The configuration of Threema Web can be tweaked in
SELF_HOSTED: Set this to
trueif this instance of Threema Web isn't being hosted on
PREV_PROTOCOL_LAST_VERSION: When the Threema Web protocol version changes, this can be set to the last version of Threema Web that supported the previous protocol version. If set to something different than
null, a message will be shown to the user if reconnecting fails.
SALTYRTC_HOST: Set this to the hostname of the SaltyRTC server that you want to use. If set to
null, the hostname will be constructed based on the
SALTYRTC_PORT: The port of the SaltyRTC server to be used.
SALTYRTC_SERVER_KEY: The public permanent key of the SaltyRTC server. Set this value to
nullif your server does not provide a public permanent key, or if you don't want to verify it.
ICE_SERVERS: Configuration object for the WebRTC STUN and ICE servers.
PUSH_URL: The server URL used to deliver push notifications to the app.
For instructions on how to host your own version of Threema Web, please refer to docs/self_hosting.md.
Contributions to Threema Web are welcome! Please open a pull request with your proposed changes.
Every Threema Web release will be tagged. The git tags are cryptographically signed using the following PGP key:
pub rsa4096 2016-09-06 [SC] [expires: 2026-09-04] E7AD D991 4E26 0E8B 35DF B506 65FD E935 573A CDA6 uid Threema Signing Key <firstname.lastname@example.org>
The public key can be found on Keybase.
If you discover a security issue in the Threema Web, please follow responsible disclosure and report it directly to Threema instead of opening an issue on Github. You can find the security e-mail as well as the PGP public key at https://threema.ch/en/contact.
Threema Web license:
Threema Web. Copyright © 2016-2019 Threema GmbH (https://threema.ch/). This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
For third party library licenses, see