A remote-access tool hands someone else your computer. Everything below exists to make sure that only happens when you meant it to.
Read this first, before anything technical.
If somebody phoned, emailed or messaged you and asked you to install this app and read them a number — stop. That is the shape of almost every remote-access fraud there has ever been. No bank, no courier, no tax office, no "Microsoft technician" and no cryptocurrency exchange will ever ask for remote access to your computer. Whoever is on the other end will be able to do everything you can do, including open your online banking while you watch and while it looks like nothing is happening.
Close the app. Hang up. Call the organisation back on a number you looked up yourself.
Your DuoDesk-ID is an address, not a key. Someone who has it can make your computer ask you a question, and nothing else. Every incoming request produces a dialog that:
Set a password and the machine can answer when nobody is sitting at it. This is the one setting that genuinely opens a door, so it is worth understanding how it is handled.
scrypt(password, salt) — never the password itself. A caller proves they know it by returning HMAC(scrypt(password, salt), nonce|sessionId) for a nonce that exists only for that one session. Recording the connection on the network gains an eavesdropper nothing, and replaying it later gains them nothing either. Our server relays that exchange and so does see the proof; turning one back into your password means guessing, at a full scrypt per guess, which is why the length below matters.A standard TOTP secret you add to any authenticator app. When it is on, the password alone is not enough: the six-digit code is checked on your own machine, with one step of clock drift allowed either way, and a wrong code counts as a failed attempt.
Under Security → Who may connect, a machine can be switched from "anyone who knows my ID, and I decide each time" to only these IDs. On that setting an unknown ID is refused before anything appears on your screen — nothing pops up, nothing rings, there is nothing to misclick. There is a block list for the reverse case.
Permissions are granted per session and enforced on the machine being controlled, not requested politely by the machine doing the controlling. A viewer that sends a keystroke it was not granted has that keystroke dropped on arrival. You can revoke any of them mid-session from the Sessions list, and the change takes effect immediately:
The rendezvous server introduces two machines and then forwards opaque blobs between them. It stores which ID belongs to which public key, a line per session saying which two IDs talked and for how long, and a ban list. It never sees your screen, your keystrokes, your clipboard, your files, your file names or your password — the first ones because the media and data path is end-to-end encrypted between the peers, and the password because it is checked on your own computer before anything is sent.
What a machine says about itself when it checks in. Alongside its ID and public key, a copy reports the name you gave it — the computer's own name unless you changed it — the operating system it runs on (Windows, macOS, Linux), the version of DuoDesk it is running, and, from 0.7.48, that operating system's version number (12.7.4, 10.0.22631) so we know how many machines a release that needs a newer system would leave behind. The server also derives a two-letter country from the address the connection arrives on and keeps only those two letters — the address itself is used to answer the connection and is never stored. No advertising ID, no browsing of any kind.
From 0.7.56 a machine also reports what it is, so that your own list of computers at duodesk.io/me can tell them apart: processor, memory, how big the disk is and how much is free, the kernel version, the maker, the model, how long it has been switched on, whether its antivirus, firewall and disk encryption are on, and the serial number — which is a hardware identifier, and the reason this is a switch rather than a consequence of installing DuoDesk. It is on by default and it is Settings → List this computer's specification on your account page; turn it off and the machine says so, and what is already stored is deleted rather than left to go stale.
It says nothing about you. No user name, no account you are logged in as, no file, no folder, no network share, and no list of the programs on the machine. It is a description of a piece of hardware, readable by the account the machine is linked to and by an admin of a team it is shared into — the same people who can read its log, because a serial number is what a purchase order and an insurance claim are keyed by.
Waking a sleeping computer, and the one identifier that is involved. If you turn on Tell computers you connect from how to wake this one, this machine hands its network hardware addresses to the computer being connected from — and to nobody else. They travel inside the same end-to-end encrypted session as everything else, the server never sees them, and they are stored in that person's own address book on their own machine. What it buys is a Wake button that switches this computer on again when it has gone to sleep, from the same network. The setting is off-able and lives beside the blanking one; turning it off stops this machine handing the addresses out again, and a computer that already has them keeps them until it removes this one from its list. Nothing about any of this reaches duodesk.io: the sentence above about no hardware identifier is about the server, and it stays true.
Files go the way the picture goes. A transfer rides the same encrypted peer connection, straight between the two computers. It is never uploaded to the server, and there is no copy of it anywhere but the two machines. When both ends sit behind a NAT that refuses direct traffic, the relay forwards the same encrypted packets — it cannot read them, and cannot tell a file from a frame of video.
Uninstalling asks why, and you can decline to answer. The uninstaller asks what went wrong and what to remove. If you leave the Send my answers box ticked, that answer is sent once — before anything is deleted — and it is: the reasons you ticked, up to 200 characters of free text if you typed any, this computer's public DuoDesk-ID, the operating system and processor type, the app version, how it was installed, how many days it had been installed, and which of your own files you asked it to remove. No name, no email, no computer name, no account — there is none to have. The address the report arrives from is used to rate-limit and is not stored with it. Untick the box and nothing leaves the machine; either way, a report that fails to send is dropped in silence and never holds up the uninstall.
Plans, codes and paying. A plan belongs to your account, not to a computer, which is why it follows you onto every machine you sign into. The server keeps which tier that account is on, where it came from — a code you redeemed, a payment, or something we granted by hand — when it started and when it runs out, and a line per code you have redeemed saying which code, on which machine, for how much. Card payments are handled by Stripe, on a page Stripe hosts: your card number, your name and your billing address are given to them and never reach our server. What the server keeps of a payment — Stripe's customer and subscription ids, the plan and its periods, the amount and the currency — is listed on the privacy page. A code redeemed at 100% off needs no payment provider at all and involves nobody outside this server.
A policy nobody enforces is a sentence, not a policy, so each of these is a line of code on the server rather than an intention. An hourly sweep does the deleting; the window is ninety days.
Two honest footnotes. The database is backed up once a day and the backups are kept a fortnight, so a row deleted today can survive in a copy for up to fourteen days before it is gone everywhere. And none of this is about your screen, your keystrokes, your clipboard or your files: those never reach the server at all, so there is no retention window to quote — there is nothing to keep.
Your own session log is a separate thing entirely. It lives on your machine, in the app, under Sessions, and is never sent anywhere.
On macOS, DuoDesk cannot show your screen without Screen Recording and cannot be controlled without Accessibility, both granted by hand in System Settings → Privacy & Security. The app says so on its front page when either is missing, and a caller trying to connect to a machine that cannot capture is refused with that exact reason rather than left staring at a black rectangle. On Wayland, capture goes through the desktop portal and may ask each time.
The honest summary. DuoDesk's transport is as strong as a video call's and its defaults are cautious, but no amount of cryptography helps against a person who is talked into pressing Accept. The accept dialog, the stranger warning and the allow list exist for that reason, and they are the parts worth actually using.
Found a security problem in DuoDesk? Say so before you say it anywhere else — the app and this site are maintained by one person and a real bug will be fixed rather than argued with. The address is on the contact section, and the machine-readable copy of this paragraph is at /.well-known/security.txt.