Thanks
DarkWire stands on the shoulders of a lot of people who share their work with the world, most of them for free. Without them, DarkWire would have been a hundred times harder to build, if it could have been built at all. Thank you, all of you.
Here is everything DarkWire uses directly: what it does for DarkWire, who makes it, and its license. Each of these builds on many more projects of its own, and our thanks go to those too.
Encryption and security
-
libsignal
by Signal
The Signal protocol: the end-to-end encryption of every message, with post-quantum keys. Used as-is on Android, and compiled to WebAssembly for the desktop and web versions.
-
Tink
by Google
Keeps DarkWire's own keys locked to the phone's security chip, and encrypts the wake-up pushes.
-
Bouncy Castle
by Legion of the Bouncy Castle
Argon2id, which turns a backup's PIN or password into its key on Android.
-
RustCrypto argon2
by RustCrypto
The same Argon2id for backups in the desktop and web versions.
-
noble-ciphers and noble-hashes
by Paul Miller
AES-GCM, scrypt and HKDF: the password lock on a USB drive and the keys of the stored data in the desktop and web versions.
-
rand and getrandom
by The Rust Random project
Good random numbers for the encryption, in the browser too.
-
apksig
by The Android Open Source Project
Checks that an update really comes from DarkWire before the app installs it.
Storing your data
-
SQLCipher
by Zetetic
The encrypted database that holds your messages and contacts on Android.
-
SQLite3 Multiple Ciphers
by Ulrich Telle
The encrypted database of the desktop and web versions, one and the same file format in both.
-
better-sqlite3-multiple-ciphers
by Mahesh Bandara Wijerathna
Connects the desktop app to that encrypted database.
-
SQLite
by D. Richard Hipp and the SQLite team
The database engine underneath all of the above.
Calls
-
WebRTC
by The WebRTC project
Messages, files and calls straight between two devices, through home routers and mobile networks. Built into the browsers and the desktop app.
-
WebRTC for Android
by Stream
WebRTC, ready to use in an Android app.
QR codes
-
ZXing
by The ZXing authors
Makes and reads the QR codes you pair with.
-
ZXing Android Embedded
by JourneyApps
The camera scanner for QR codes on Android.
-
zxing-wasm
by Ze-Zheng Wu
Reads QR codes from a webcam or a picture in the desktop and web versions.
Notifications
-
UnifiedPush
by The UnifiedPush project
The open standard that wakes DarkWire when something arrives, without Google: the connector in DarkWire, and the distributor libraries in DarkWire Pulse.
-
Ktor
by JetBrains
DarkWire Pulse's connection to the push service.
The apps themselves
-
Kotlin, kotlinx.coroutines and kotlinx.serialization
by JetBrains
The language the Android apps are written in, and its libraries for background work and data.
-
Android Jetpack
by Google
Compose and Material 3 for every screen, plus Room, DataStore, WorkManager, Navigation, Lifecycle, Biometric, and Core-Telecom, which makes DarkWire a real calling app (Bluetooth and car audio, answering from the lock screen).
-
Hilt and Dagger
by Google
Wires the Android app's parts together.
-
AboutLibraries
by Mike Penz
Collects every library in the Android apps with its license, and shows them under Open-source licenses.
-
Compose Cropper
by Smart Tool Factory
Cropping your profile picture.
-
Java library desugaring
by Google
Newer Java features on older Android versions, down to Android 9.
-
Electron
by The Electron project
Turns DarkWire into a desktop app for Linux and Windows.
-
React
by Meta and the React community
Every screen of the desktop and web versions.
DarkWire for the web on your own server
-
FrankenPHP
by Kévin Dunglas and contributors
The web server in the Docker image: serves the page and runs the push relay.
-
Caddy
by The Caddy project
Inside FrankenPHP: HTTPS with a certificate that arranges itself.
-
PHP
by The PHP Group
Runs the push relay, in the Docker image or on your own web server.
Tools we build and test with
-
Claude and Claude Code
by Anthropic
Built DarkWire together with Tijn: the design discussions, the code of every app, the tests on real phones and computers, and this page.
-
Gradle, the Android Gradle Plugin and KSP
by Gradle, Google
Build the Android apps.
-
Node.js
by The OpenJS Foundation
Runs the desktop app's background and all the build scripts.
-
TypeScript
by Microsoft
The language the desktop and web versions are written in.
-
Vite
by Evan You and the Vite team
Builds the desktop and web versions.
-
electron-builder
by The electron-builder team
Packages the desktop app: .deb, AppImage and the Windows setup.
-
Wine
by The Wine project
Lets us build the Windows setup on Linux.
-
Rust and wasm-bindgen
by The Rust project
Compile libsignal to WebAssembly for the desktop and web versions.
-
cargo-about
by Embark Studios
Lists every Rust crate in our WebAssembly with its license, for Open-source licenses in the desktop and web versions.
-
Docker
by Docker
Builds the Docker image of DarkWire for the web.
-
Vitest, Playwright, JUnit and JSON-java
by The Vitest team, Microsoft, the JUnit team, Douglas Crockford
Test that the apps understand each other, and that the desktop and web versions work in a real browser.
Services DarkWire relies on
-
ntfy
by Philipp C. Heckel
A free notification app and service that can wake DarkWire on Android.
-
Sunup
by The UnifiedPush project
Another free notification app for DarkWire on Android, using Mozilla's push service.
-
Mozilla's push service
by Mozilla
Carries the wake-up pushes for DarkWire Pulse, Sunup, the desktop app and Firefox.
-
The browsers' push services
by Google, Apple, Microsoft
Carry the wake-up pushes for DarkWire in Chrome, Safari and Edge.
-
Google's STUN servers
by Google
Tell a device its own internet address, so two devices can find each other directly.