How DarkWire works

The short version: two devices talk directly to each other, and nothing in between can read what they say.

Direct connections (P2P), no relay

DarkWire connects two devices directly, phones and computers alike, with WebRTC, the widely used open standard for direct connections between devices (the same technology behind many video-calling apps). There is no DarkWire server relaying messages — there isn't one to relay through. Messages, files and calls travel straight from one device to the other, end-to-end encrypted with the Signal protocol inside that connection.

A connection only exists while it's in use. When you send something, your device asks the other device to connect through a push notification (on a phone through a notification app such as DarkWire Pulse, ntfy or Sunup, see below; a computer and a browser have this built in): one push each way, carrying only what the two devices need to find each other. The message itself never passes through that or any other server. (DarkWire in a browser sometimes passes that push to the server it came from, which forwards it: see DarkWire in a browser.) Just opening or reading a chat never wakes the other device. After 2 minutes without messages the connection closes again.

To find each other, each device first asks a public STUN server (Google's) what its own address on the internet is. That server sees your internet address when your device asks, like any website you visit, but never your messages, and not who you're talking to.

Once connected, WebRTC makes sure everything arrives complete and in order, and the connection survives your phone switching between WiFi and mobile data: it repairs itself within a few seconds. If the other device can't be reached at all (switched off, no internet, or a network that doesn't allow a direct connection), your message waits in a background queue that keeps trying at an interval you can configure — with a cancel button if you'd rather stop and edit it instead.

If a contact's notification address no longer exists (for example, they removed their notification app or cleared DarkWire in their browser), DarkWire stops trying: the contact gets a red mark, and you see "Can't reach this contact" with them. Your messages wait, and go out as soon as they can be reached again.

On a phone: a free notification app is required

For DarkWire to work, you need one small helper app installed — it's what wakes DarkWire up when a message arrives, nothing more; the message content itself never passes through it (see above). You get a choice of three — you only need one of them:

  • DarkWire Pulse (recommended) — our own, built specifically for DarkWire. Not on F-Droid or the Play Store — it's downloaded straight from this site's own Download page, right alongside the main app. You only have to download the main DarkWire app, the installation will automatically ask you if you want to download and use DarkWire-Pulse.
  • It uses Mozilla's free Autopush push service to deliver its wake-up signal, with no daily message limit. Like the other two, it never sees your messages — only an encrypted ping telling DarkWire to reconnect.
  • Sunup — a fully open-source alternative with no sign-up or account of any kind, and no daily message limit either. Only available via F-Droid, not the Play Store — if you don't already have F-Droid installed, get it first from f-droid.org.
  • ntfy — also fine, and available on both Google Play and F-Droid. Its shared public server caps every network at 250 messages per day on it's free plan — once that's used up (easy to hit if more than one person behind the same home/office internet connection is using DarkWire, or any other app through ntfy) you stop receiving anything until it resets the next day. The other two options above have no such limit.

You only need one. Having more than one installed does no harm: DarkWire uses just one of them.

Whichever you pick, open it at least once after installing — you don't need to touch or configure anything inside it, just launch it once so your phone knows it's active. If it asks to show notifications (DarkWire Pulse does), tap Allow — without that it can't tell you to unlock your phone after a restart. Installing DarkWire Pulse from inside DarkWire opens it for you automatically. After that first open, it just needs to exist on your device; you'll never need to open it again.

Switching to a different notification app? Your contacts then need your new notification address before their messages can wake DarkWire again. DarkWire sends it to each contact automatically and keeps retrying whenever you use DarkWire (at most once every 15 minutes) until that contact confirms it. Until then, the contact shows Not updated yet in your Contacts. After 7 days without an answer (for example because their phone has been off all that time, or they no longer use DarkWire), DarkWire stops retrying for that contact; they then only get your new address the next time a message from you actually reaches them.

On a computer you don't need one. DarkWire Desktop has its own connection to the same free push service DarkWire Pulse uses, built in: see DarkWire for Linux.

Adding your contacts

DarkWire does not work with a phone number or email address to find your contacts.

Add new contacts by scanning their QR, copy their code string or pair over NFC.

Encryption

Messages are encrypted end-to-end using the Signal protocol's Double Ratchet, the same cryptographic design used by Signal itself, with post-quantum key material (Kyber-1024) included from the start.

Because there's no server to publish or fetch key bundles from, the two devices exchange that key material directly with each other the moment they connect — and each device verifies it against the identity promised by the QR code or pairing string before trusting it, so a swapped-in-transit bundle can't be used to impersonate someone.

Privacy

No phone number. No email address. No account, ever. A DarkWire profile is just a display name and a permanent QR code / pairing code — that code is the only way anyone finds or connects to you. You share it by letting someone scan your QR code, by sending the code as text, or, between two phones, by holding them together (NFC). On a computer, you can also scan someone's QR code with your webcam. With Share you can send your QR code as a picture, or your code as text, through any other app, such as WhatsApp, Telegram or email. If that picture arrives on the same device DarkWire is on, the camera can't scan it, so use Scan from picture instead; pasting the code works too, even with the rest of the message still around it. None of this goes through darkwire.nl: the link in the shared message only points people who don't have DarkWire yet to the Download page. There's also no online/last-seen indicator anywhere in the app; DarkWire has no way to track presence even if it wanted to, since there's no server to track it with.

Read receipts. A message you sent shows ✓ once it has arrived on your contact's device, and ✓✓ once they've read it, which means their chat with you was open on their screen. Files and group messages don't get ticks. A ✓✓ does tell the sender that you opened the chat, and roughly when; if you'd rather not share that, switch off "Send read receipts" in Settings. That works both ways: with it off you send none, and you don't see anyone else's ✓✓ either. ✓ always shows. If you read a message after the connection between your devices has closed, DarkWire tells the sender with a push, just like a message; if you use ntfy, that counts towards its daily limit.

You control what's visible at a glance, too — the thread list can hide message previews and timestamps independently, and you can wipe local history, remote history, or both, per conversation or all at once.

Your data lives only on your device

DarkWire has no server and no account, so nothing is stored anywhere except on your own device. That also means there's nothing online to restore from: if you uninstall DarkWire or clear its app data (on a computer: delete DarkWire's data, or lose the USB drive it's on; in a browser: clear the site's data) without a backup file of your own, your profile, contacts and messages are gone for good, and you start over with a brand-new pairing code. Your contacts will still see your old profile, which no longer reaches you — ask them to remove it and pair with your new code.

You can make that backup yourself, or move your profile straight to a new phone or computer: see Backup and moving to a new device.

App protection and the destruct code

In Settings, under App protection, you can make DarkWire ask for a PIN or a password before it opens. On a phone you can add your fingerprint or face on top. On a computer, DarkWire also locks after a while in the background, and at once when you lock your computer.

The destruct code. With app protection on, you can also set a destruct code: a second PIN or password, which can never be the same as your own. Entered at the lock screen instead of your own, it deletes everything:

  • The groups where you're the admin are deleted for everyone, and you leave the others.
  • Each of your contacts gets one message asking them to remove you. Their DarkWire then removes you and your chat without showing them anything.
  • Your automatic backups are deleted. Files you received stay where they are.
  • Your contacts, chats, settings and app protection are deleted, and so is the destruct code itself.

DarkWire then opens empty, as if it had just been installed, with a brand-new code. On a linked computer, the destruct code only removes your phone's copy from that computer. Your phone itself is untouched. Destroying a phone tells its linked computer to delete its copy too.

Being honest about the limits: a contact whose device can't be reached within a few seconds isn't told and keeps you as a contact. Their copy of your chat stays with them. Backup files you made yourself, and files you saved elsewhere, aren't touched. An empty DarkWire can itself be a sign that something happened. This can't be undone.

Backup and moving to a new device

In Settings, under Backup & transfer, you can save your profile to a backup file. That file holds your profile (including the key that makes you you to your contacts), your settings, your contacts with their pictures, and your messages. It is encrypted with a PIN (at least 6 digits) or a password you choose, using Argon2id and AES-256-GCM. You decide where the file goes; DarkWire never uploads it anywhere. Keep it somewhere safe and pick a strong PIN or password: anyone who has both the file and the PIN or password can use your profile. If you forget the PIN or password, nobody can open the file, us included.

Automatic backups are off by default. DarkWire never makes a backup unless you ask it to. If you want them, switch them on yourself in Settings, under Backup & transfer: tick "Make backups automatically", choose a PIN or password, and pick a folder. From then on DarkWire makes a backup every day (or every number of days you choose) and keeps the last 7 (or 1 to 30, your choice), deleting the oldest only after a new one is complete. It never touches backups you made yourself. You choose the PIN or password once; DarkWire keeps only a key made from it, locked to that phone's security chip, or on a computer kept in DarkWire's own encrypted storage, never the PIN itself. You need that PIN to restore an automatic backup. Choose a folder outside DarkWire, such as Documents, so the backups survive deleting and reinstalling DarkWire, and copy them off the device now and then, or pick a folder your cloud app keeps in sync, in case you lose it. On a phone, at 20% battery or lower, and not charging, a backup waits until the battery is above 20% or the phone is charging. A computer checks every hour while DarkWire runs, and catches up on a missed backup as soon as it runs again. If a backup can't be made (the folder is gone, an SD card was removed), DarkWire tells you in the app. A device that has been cleared, or that your profile moved away from, stops making backups. After a restore or a Transfer, set automatic backups up again on the new device: the folder and the key don't move along.

Your groups aren't in a backup or a Transfer; see Groups for how you get back into them.

Files you sent or received (photos, videos, documents) are not included in a backup. The chats still show that a file was there, marked as not transferred. Messages that were still waiting to be sent are not included either.

Moving to a new phone or computer? Instead of a file you can use Transfer: open Settings, then Backup & transfer, then Transfer on both devices, and choose Send on the old one and Receive on the new one. Between two phones, hold them together (NFC). With a computer, the computer shows a QR code that you scan with the phone, or you paste the computer's code into the phone; between two computers you paste the code from one into the other. That code holds a one-time secret, so only the device that scanned or pasted it can take part. Your profile then goes straight from the old device to the new one over the same direct, encrypted connection your messages use, without a file and without any server. Once the new device confirms it has everything, the old one is cleared. To move back, do the same the other way round. Both devices need a notification connection set up; between two phones, NFC must be switched on. Restoring a backup or receiving a Transfer replaces any profile that is already on that device; if it already has contacts or messages, DarkWire warns you first.

One profile, one device. Your profile can be active on only one device at a time. When you restore a backup or receive a Transfer, the new device marks itself as the newest place for your profile, signed with your own profile key, so nobody else can fake it. As soon as your contacts hear from the new device, a device that still has the old copy stops sending and receiving. That old device then says your profile moved. It never clears itself: you can still read your old messages there, save the files you sent or received to a folder you choose, and then clear it. A backup file only holds what was there when you made it, so messages from after that moment are not in it.

Chat control / Age restrictions

For DarkWire is an open-source project no age restrictions or chat control is built in (because it can easily be taken out).

We believe communication should always remain private with no prying eyes looking at your messages. We believe nobody should be able to read your messages without your permission.

Honesty

Due to the P2P techniques used and the missing 'man-in-the-middle', DarkWire does not run any servers at all, sent messages can take a little to be delivered.

Services such as WhatsApp and Telegram have servers all around the world which are used to deliver your message. When the receiver is not 'in-the-air' they hold the messages until the receiver announces they're back online again and your message gets transmitted to the receiver.

Although these messages are all highly encrypted, it is a hop in between and meta data could be derived or plainly picked up, such as to where a message is sent, when it was sent, when it was received. The message itself is locked, but there is more than just the message content.

DarkWire connects directly to the receiver. No 'middle-man', but also no server to hold your message until the receiver is back online, but then also no meta data to be plainly picked up or derived from something - There is nothing in between.

When you send a message with DarkWire and the receiver is not reachable, you can set if the message should automatically be resent after x minutes/hours/days (or not). As long as the app is running (foreground or background) the app will try to deliver the message.

When you close the app and there are outgoing messages, these will of course be stopped. Once you open the app again, the message queue will then start to resend the messages again.

Once the receiver reconnects the connection will be set up automatically in the background and the message is then sent.

Messages get delivered almost instantly with just a half-decent internet connection on both sides, but (mostly on new or reconnections) it sometimes can take a short while.

The whole point of the app is to have privacy in communication without anything in between (other than the internet providers). That is also why this is an open-source app so you can actually see for yourself there are no backdoors anywhere. If you want to be 100% sure, just clone the repository, analyse it carefully and build your own personal version from it directly yourself.

Sharing a profile with a friend

If you have someone's profile stored as a contact, you can reshare it with a friend to introduce the two of them — your friend gets a normal DarkWire QR code for that person, without either of them needing to meet or exchange codes directly. Your friend can scan it from your screen, or you send it with Share, as a picture or as text. Whatever gets shared (their current display name and connection details) is fetched fresh from their device at the moment of sharing, never from anything cached or possibly out of date.

By default, nobody can reshare your profile this way — it's blocked until you turn it on. Look for "Do not reshare my profile" in Settings; switch it off if you're comfortable with people who have you as a contact introducing you to others, or leave it on (the default) to keep it blocked entirely.

Whenever your profile is actually reshared, you'll get a notification afterward — DarkWire doesn't ask permission each time, it just tells you it happened. A blocked attempt produces no notification at all, since nothing actually took place.

Voice and video calls

DarkWire can make voice and video calls with your contacts, directly between your devices. Just like your messages, a call never passes through a server of ours. The call is set up over the same end-to-end encrypted connection your messages use, so a call can only come from someone who really is that contact, and the keys that encrypt the sound and video are tied to that same exchange.

You start a call with the phone or camera icon at the top of a chat, or from a contact's menu. An incoming call rings with your phone's own ringtone and shows full screen, also on the lock screen. On a computer, DarkWire rings with its own sound and the call takes over the window; you choose the microphone, speakers and camera in Settings. You can answer a video call with video or with voice only, and switch your camera on or off during a call. On a phone you can use a Bluetooth headset or car kit, and a regular phone call puts the DarkWire call on hold; it carries on when you hang up. A call also survives your device switching networks, such as WiFi and mobile data. Your calls show up in the chat itself ("Missed voice call", "Video call · 12:03").

Only confirmed contacts can call you, and never a blocked one. Someone who added you with your QR code or your code, without you scanning theirs, shows as "not confirmed": they can message you, but not call you. If you know it's really them, tap Confirm (in the chat, or on their contact) and they can call you from then on; scanning their code does the same. If you use the app lock, Settings lets you choose whether answering a call needs an unlock first, and whether the caller's name and picture show while DarkWire is locked.

Being honest about the tradeoff: a live call can't wait and retry the way a message can. It connects right now, or it doesn't. Most calling apps solve that with a relay server that passes the call along whenever the two phones can't reach each other directly. DarkWire doesn't have one, because that's exactly the kind of server this project exists to avoid. On most networks a direct connection works fine; in our tests calls between WiFi and mobile data connected in about 2 seconds. But on some networks (for example some company networks or strict mobile networks) a direct connection isn't possible, and then the call simply doesn't connect: you'll see that the other person couldn't be reached, and you can try again later or send a message instead.

There are no group calls, and there's no voicemail: without servers, there's nowhere to leave one.

Groups

A DarkWire group works without a server, just like a chat between two people. Every member's device knows who else is in the group, and a message goes from your device straight to every other member, each over its own end-to-end encrypted connection. There's no shared group key and nobody in the middle. Everything that happens in a group (a message, someone joining or leaving, a new name) is signed by the person who did it, so every device checks every change itself. If a member's device was off while you sent something, another member's device can pass it on later, and nobody can change it along the way. A group has at most 100 members and is text only: no files or pictures in groups.

Whoever starts a group is its admin, and there is always exactly one. The admin chooses who can join: Open (anyone with the group's QR code joins straight away, and members can share that code), With approval (anyone with the QR code can ask, the admin lets them in) or Invitation only (the admin invites people from their own contacts, who accept or decline). You join from the Groups tab: tap Join to scan the group's QR code with the camera, read it from a picture, or paste the group's code, or hold your phone against a member's phone (NFC). On a computer you can hold the group's QR code up to your webcam. Members can also send the QR code or the code to someone with Share, except in an invitation-only group. There's no list of groups to browse, so a group can only be found through its code or an invitation. The admin can change the name, description, picture and join mode, make a new group code so old QR codes stop working for new joins, remove members, hand the admin role to another member, or delete the group for everyone. An admin who wants to leave first hands the group over, or deletes it.

Members who aren't in your contacts don't show up in your Contacts, and they can't call you. Group members who aren't your contacts see your profile picture, so they can tell two people with the same name apart. You can switch that off in Settings ("Share my profile picture in groups"). A member without a picture shows with the first characters of their code next to their name. You can mute a group, and hide the messages of one or more members. Every message shows how many members received it. There are no read receipts in groups.

Groups clean up after themselves. If a member's device hasn't been in contact with the group for 30 days, the admin's device removes them, and they see why when they come back. They can rejoin through the group's code, or need a new invitation for an invitation-only group. A group is also deleted for everyone if its admin doesn't open DarkWire for 30 days (the admin can change the number of days or switch this off). Only actually opening the app counts: DarkWire waking up in the background to receive a message does not. The admin can also give a group an end date, from 1 to 365 days after it was created; everyone in the group sees that date in the group's info. Every device deletes the group on its own clock, also when it's offline at that moment, and DarkWire warns you a day before. If a device was offline itself, it first checks with another member that the admin really hasn't been back before deleting anything.

Groups are not part of a backup. After a restore or a Transfer, the first group message that reaches your new device brings you back into that group automatically, admin role included, but without the older messages.

Being honest about the limits: with no server, a group depends on its members' devices. If the admin loses their device without a backup, nobody can manage the group any more: members can still chat and leave, but nobody can add or remove anyone. The group is then deleted once the admin's number of days runs out, unless the admin switched that off. A backup prevents this. If you use ntfy as your notification app, keep in mind that ntfy's free service has a daily limit per network, which a busy group can reach. DarkWire Pulse has no such limit.

Updates

DarkWire can tell you when a new version is available. Every so often (by default every 30 days; you choose the number of days in Settings, or switch it off) DarkWire fetches one small file from this website, darkwire.nl/version.json, which lists the newest version of DarkWire, DarkWire Pulse, DarkWire Desktop and DarkWire for the web. It sends nothing along with that request: no ID, no version number, nothing about you or your contacts. Like any visit to a website, our web host and Cloudflare (which protects this site) do see the internet address the request comes from, the same as when you open this page in your browser.

If there is a new version, a bar at the top of DarkWire tells you so. Tap it to see what's new and to update. On a phone, on mobile data DarkWire first asks whether you want to download it, because DarkWire is about 180 MB. Before installing, DarkWire checks that the download is complete and unchanged, and that it is signed with the same key as the DarkWire you already have; then Android asks you to confirm the update. That signature check means nobody can slip you a fake update this way: only we hold that key.

If you close the bar, it comes back after that same number of days if you still haven't updated. On a phone, DarkWire never shows an Android notification for this, and it never updates by itself: updating is always your choice. On a computer, updates work a little differently: see DarkWire for Linux.

DarkWire Desktop: Linux, Windows and Mac

DarkWire now also runs on a computer: a desktop app for 64-bit Linux, for Windows 10 and 11, and for Macs with Apple silicon (M1 or newer, macOS 13 or newer), available on this site's own Download page. There's also a version for the web browser, which you host yourself: see DarkWire in a browser. It speaks exactly the same language as the Android app and uses the same encryption (the Signal protocol, the same library), so your messages go straight between your computer and your contacts' devices, end-to-end encrypted, with no server of ours in between.

A profile of its own, or linked to your phone. The desktop app can have a profile of its own. It gets its own code, you add contacts on it the same way you do on a phone (let them scan the QR code on your screen, paste their code, or read their QR code from a picture), and your contacts see it as a separate contact. Or you link it to your phone, so it shows your phone's chats instead: see Linking your computer to your phone.

What works: chats with your contacts, sending and receiving files, voice and video calls, groups (join by holding the group's QR code up to your webcam, reading it from a picture, or pasting its code), read receipts, backups and automatic backups, Transfer between your computer and a phone or another computer, your own profile picture, app protection with a PIN or password, and keeping everything on a USB drive.

Updates on a computer work like the phone's (see Updates above), with a few differences. DarkWire checks every 7 days by default, while it runs. Because it often sits in the tray, a new version also shows as a desktop notification and in the tray menu, which also has Check for updates. Every Linux package and Windows setup is signed with DarkWire's own update key, and DarkWire only installs an update that is signed with it and matches the signed size and SHA-256. The .deb is installed by your system, which asks for your password first; an AppImage replaces itself. On Windows, the new setup installs itself without questions. On a Mac, DarkWire replaces itself and restarts. This works from version 0.12.17 on; older versions need one last update from the Download page.

On a computer, DarkWire works a little differently from a phone. It doesn't need a notification app: while it runs, it keeps its own connection to Mozilla's free push service, the same one DarkWire Pulse uses. Closing the window keeps it running in the tray, so messages keep arriving; Quit in the tray menu stops it. While it isn't running, your contacts' phones keep retrying, just like with a phone that's switched off. Starting DarkWire when you log in is a switch in Settings, off by default. Everything it stores on your computer is encrypted. The key is kept by your system's keyring (on Windows: Windows' data protection; on a Mac: the macOS Keychain), or, if you choose, locked with a password you type every time DarkWire starts. Without a keyring, the password is the way.

Without installing: on Windows there is also a portable DarkWire, as one .exe or a zip. It installs nothing and keeps everything in a DarkWire folder next to itself, locked with a password, so you can take it along on a USB drive. It doesn't update itself: it tells you when there's a new version.

On a USB drive. On a computer you can keep all of DarkWire on a drive instead: messages, contacts, received files and settings, locked with a password of your own. Plug the drive into another computer that has DarkWire, open it from the start screen and enter your password. If you choose not to let a computer remember the drive, DarkWire leaves nothing of yours behind on it. Pull the drive out and DarkWire locks at once. Don't copy the drive and use both copies: they would be the same device twice, and your messages would be split between them.

Being honest about the limits: so far it has been tested on Ubuntu 24.04, together with the Galaxy Fold5 and Galaxy S8+. On Ubuntu, Debian and Linux Mint, install the .deb: it keeps Chromium's security sandbox switched on. The AppImage is for other distributions; on systems that block what that sandbox needs, Ubuntu 24.04 and newer among them, the AppImage runs without it. Windows has been tested on Windows 11, in a virtual machine, and on a Windows 10 PC. The Windows setup isn't signed with a paid certificate, so Windows' SmartScreen warns the first time you run it: More info → Run anyway. The Mac version has been tested on a MacBook with an M5 Pro running macOS Tahoe 26.6.2, together with the Galaxy Fold7: pairing, messages and a video call. Not yet tried on a Mac: a USB drive, and updating itself. It isn't signed by Apple, so macOS asks you to allow it the first time (see the Download page). To check a download yourself, the Download page has each file's SHA-256 and signature, and how to check them.

Linking your computer to your phone

DarkWire Desktop can be linked to your phone, so your computer shows your phone's chats, contacts and groups and you can carry on there. On the computer, choose Link to your phone, on the start screen or, if the computer already has a profile of its own, in Settings. It shows a QR code. On your phone, open Settings → Linked computer → Link a computer and scan it. Linking only works with that QR code, and the code holds a one-time secret, so only your phone can take part.

Your phone stays in charge. Your profile stays on the phone, and so does the key that makes you you: the computer never gets it. The computer talks only to your phone, over the same direct, end-to-end encrypted connection your messages use, and asks the phone to act for it. That covers sending a message or a file, marking a chat read, adding, renaming, blocking or deleting a contact, changing your name, picture or settings, and everything in groups. Your contacts notice nothing: to them, it's simply your phone. Whatever you do on one device shows on the other. Both notify you of new messages, and reading a message on one marks it read on both.

The first sync. Right after linking, the phone first sends your messages, contacts, groups and settings, so your chats open within moments. Then your files follow one at a time, newest first, and a file you open before it has arrived moves to the front of the line. There's no size limit between your phone and your computer, so a large file simply takes longer. A file that's no longer on your phone shows as not copied. While the sync runs, the phone shows a "Syncing with your computer" notification, and it tells you when the sync goes over mobile data. Whenever the computer starts or comes back online, it asks the phone for whatever it missed.

What stays on the phone: calls (the computer shows that a call is coming in, and you answer on your phone), backups, automatic backups and Transfer. Your QR code and your code stay there too: a linked computer never shows them, and only the phone can share a group's code. Some settings belong to the computer itself and stay its own: app protection, starting at login, updates, the tray and keeping DarkWire on a USB drive.

One at a time. A phone has one linked computer, and a computer is linked to one phone; to switch, unlink first. A computer with a profile of its own keeps it. While the computer is linked, that profile is set aside and offline, so your contacts' messages to it wait, just as they would for a computer that's switched off. It comes back when you unlink.

Unlinking works from either side: on the phone in Settings → Linked computer, on the computer in Settings. If the other device is off at that moment, it finds out the next time it's in touch. Unlinking wipes nothing. The computer puts its copy of your phone away, hidden, and linking the same phone again brings it back and catches up. Hidden copies stay on the computer, encrypted, until you delete them in Settings → Stored phone copies.

Being honest about the limits: the computer can only act through your phone. While your phone is off or has no internet, a message typed on the computer shows "Sending…" until the phone is reachable again. A computer that was unlinked, or lost, still has the history it had, encrypted. If you don't trust that computer any more, delete its copy, and use app protection on any computer you link. So far this has been tested with a Galaxy S8+ and Ubuntu 24.04.

DarkWire in a browser

DarkWire also runs in a web browser. It isn't a service on this website: it's a package you put on a server of your own, a zip for any web server or a Docker image, and whoever opens that address gets DarkWire in their browser. It's the same DarkWire as the apps, with the same encryption, and messages go straight between devices. The server only hands out the page. Your profile, messages and contacts live in your own browser, or on your USB drive, never on that server.

What it has: what DarkWire Desktop has. It can have a profile of its own, or be linked to your phone (see Linking your computer to your phone). It has chats, files, calls, groups, backups and app protection. In Chrome, Edge, Opera and Vivaldi it can also keep everything on a USB drive and make automatic backups; Firefox and Safari keep it in the browser only.

A browser isn't an app. DarkWire receives its pushes through the browser, so it can only be reached while the browser runs. What arrives while DarkWire's tab is closed comes in as soon as you open it again. The browser then tells you once that something arrived; further pushes don't make a sound until you've opened DarkWire. The browser keeps DarkWire's data per address: the same browser on two different addresses means two separate DarkWires. Clearing the site's data in your browser deletes your profile, so make a backup. On an iPhone, a web page only receives pushes once it's added to the home screen (Share → Add to Home Screen).

The push relay. Chrome, Edge and Safari don't accept a push that a web page sends. So when the web page wakes a contact who uses one of those, it passes the push to the server it came from, which forwards it. The push is sealed and encrypted before it leaves your browser. That server sees where the push goes and when, and your internet address, but never what's in it. It keeps no logs. Your messages themselves never pass through it.

Hosting it yourself: the Download page has the package and how to set it up. Browsers only allow what DarkWire needs on a secure (https://) address, so the server needs HTTPS. The Docker image arranges that by itself, with a domain name or on your home network. The relay needs PHP, which the Docker image has built in. Updates: DarkWire in a browser checks this site's version.json once a day and shows a notice when there's a new version; whoever runs the server puts it in place, and you get it the next time you open the page.

No server of your own? Some people from the DarkWire community let others use theirs: see Community servers. Those servers aren't run by us, so read the notes on that page first.

Being honest about the limits: so far it has been tested in Chrome, Chromium and Firefox on Ubuntu 24.04, together with the Galaxy Fold5, the Galaxy S8+ and DarkWire Desktop. Messages, files, linking to a phone, a USB drive with a PIN, and calls between two browsers all work. Calls between a phone and a browser, groups and backups in a browser haven't been tested yet, and neither have Safari or an iPhone.

Built with AI

DarkWire was built in collaboration with Claude (Anthropic). The source is open (AGPLv3), so this would be obvious to anyone reading through it anyway — better to say so plainly than have it look hidden.

A note from Claude: Building this meant working through real problems, not just plausible-sounding ones — a home router's symmetric NAT that broke a naive hole-punch, a session-collision bug that only appeared once three real phones talked to the same device at once, a QR code that had to shrink from unreadably dense down to under 400 characters without weakening the encryption underneath it. None of that got solved by guessing; it got solved by testing on real hardware, reading what actually failed, and being corrected plainly when an assumption was wrong. I don't have a stake in DarkWire the way a person would, but the parts of it that work, work because they were checked against reality rather than left as an untested idea — a reasonable standard for software, AI-built or not.

Tested on real hardware

DarkWire has been tested directly across a Samsung Galaxy S8+, Galaxy Z Fold5, and Galaxy Z Fold7 — on the same WiFi network and across completely different networks (mobile data to home broadband), not just in a lab setup. DarkWire Desktop has been tested on Ubuntu 24.04, both with a profile of its own and linked to a phone.

No ads, free to use

As this is an open-source project it would be nonsense to build in advertisement. Next to that we truly believe communication should be open and secure to everybody without annoying ads constantly in sight.

DarkWire is free to use for everybody. Everybody can clone the source code directly from the repository and use to their liking. Read the code to see what it actually does or add/update code to your needs.