ZeroMem user guide
How to install ZeroMem on Windows and Android, set it up and use it. Buttons and menus are named as the app shows them in English. 中文版:零憶使用手冊
Three things to keep in mind: a forgotten passphrase cannot be recovered, a message to someone offline is not delivered, and chats are not kept after you lock or close the app.
Install
Windows (Windows 10 or later, 64-bit)
- In the download section, choose Download for Windows. You get a zip file.
- Right-click the zip, choose Extract All and open the folder. Nothing is installed and nothing goes into the registry; keep the whole folder, since the program needs the files next to it.
- Run zeromem.exe.
- The program is not signed yet, so Windows SmartScreen may say “Windows protected your PC”. Choose More info, then Run anyway.
Android (Android 10 or later)
- Open the download section on the phone and tap Download for Android.
- Open the downloaded APK. When Android asks, allow your browser to install apps, go back and tap Install.
- Some phones check the app first: Google Play Protect, or a “pure mode” or security scan on many phones sold in mainland China. Choose to go on installing; the wording depends on the brand.
- ZeroMem asks for the microphone at your first call and for the camera the first time you scan a code.
Optional: to be sure the file was not altered, compare its SHA-256 with the one shown in the download section (on Windows, PowerShell's Get-FileHash shows it).
Coming from an older version
Older versions can no longer connect: they say “This version can't connect any more. Please update the app.” or stay offline. Install the current version as above. Your identity, contacts and Circles come with you; chats never do.
ZeroMem v19 or v20
- Windows: close ZeroMem, unzip the new version and run its zeromem.exe. It opens your identity with your usual passphrase. You can then delete the old folder.
- Android: install the new APK over the app. Your identity stays.
Unwritten or 零界 (the app's name up to v18)
- Windows: close the old app, then start ZeroMem. At its first start it copies your identity from the old app by itself; unlock it with your usual passphrase. The old app's files are left as they were.
- Android: the old app and ZeroMem are two separate apps on the phone, so the identity is moved by hand:
- In the old app, unlock, open Settings, choose Export identity (for changing device), enter your passphrase and save the file.
- Install ZeroMem.
- On ZeroMem's first screen, tap Already have an identity? Import from another device, choose the file, enter the same passphrase and tap Import.
- Once your contacts are there, uninstall the old app.
A contact who still uses an old version cannot chat with you until they update.
First start
The first start shows the screen where you create your identity. You do this once; on another device you import the identity instead (see Moving to a new device).
- Type a passphrase of at least 8 characters and type it again under Enter it again. The eye shows what you typed.
- Username (how others find you): 3 to 20 lowercase letters, digits or underscores. If it is taken, choose another.
- Licence key: the key you received from us or from your organisation's administrator. One licence is for one person.
- Tap Create identity.
Leave Server settings as they are: the addresses are filled in. The language is chosen at the bottom of the screen (Follow system, English, 繁體中文) and at the top of Settings.
Your passphrase cannot be recovered: nobody, including us, can reset it. Choose one you will remember, or write it down and keep it somewhere safe.
Every later start asks for the passphrase. After five wrong passphrases the identity on this device is destroyed; below the field the app shows how many attempts are left.
Changing your username or licence key later
- Username: Settings → Identity → Username. Type the name you want and tap the tick next to it (Change username). If you have no username yet, this is where you choose one.
- New licence key: Settings → Server. Replace what is in Licence key with the new key and tap Save and reconnect; leave the two addresses as they are. Your username moves to the new licence by itself. If it cannot, the chat list says “Your username @name no longer points to you. Choose one again in Settings.”
Device binding
ZeroMem binds the identity file to the device's security chip, or to the system key store where there is no chip, so a copy of the file cannot be opened on another device. This happens by itself: Settings → Protection and unlock → This device shows it.
Optional: a security key
A FIDO2 security key adds a second lock: the identity file then opens only with your passphrase plus the key. The key must support hmac-secret, for example a YubiKey 5 with firmware 5.7 or later, or a Nitrokey 3. Windows needs Windows 11 or a recent Windows 10; a phone needs NFC or a USB-C port.
- Settings → Protection and unlock → Add security key → Start, then enter your passphrase.
- Plug the key into the computer, or hold it against the back of the phone or plug it into its USB-C port. Enter the key's PIN (you are asked to set one if it has none) and touch the key, twice in all.
- Add a spare key the same way with Add spare key (up to four keys), and export a backup (see Moving to a new device). The backup needs only the passphrase: it is the way back if the keys are lost.
The key replaces the device binding: with a key and the passphrase, the identity opens on other devices too. To unlock, type the passphrase, tap Unlock, then present the key, enter its PIN and touch it. Remove security key lock goes back to the device binding.
Contacts
Add a contact
- Open the menu at the top left (on a phone, the pencil button too) and choose Add contact.
- Type their username in Their username or identity code. On a phone you can instead tap Scan QR code and scan the code on their My identity code page: a code scanned in person makes the contact verified at once. A code they sent you can be pasted; it starts with ZM2-.
- Add a Nickname (optional) if you like and tap Add. Finding a username can take a few minutes (“This can take a few minutes.”): wait, or tap Cancel.
- Your request goes out within a few minutes. They see it under New contact requests at the top of their chat list, usually within about ten minutes if they are online; if not, it waits for them up to 7 days. You can chat once they accept.
You can add about 16 people a day. Your own username and code are under My identity code in the menu; usually it is enough to tell people your username.
Requests
Tap New contact requests. For each request: Accept adds them, Ignore drops it, the block button (Block: never receive requests from this person again) blocks them, and the shield button (Check safety code) lets you compare safety codes before you answer. Names in requests are what each person calls themselves; “Not the name in your contacts” warns you of a request using a contact's name. Ignoring or blocking does not notify them.
Later, a contact's Contact info has Block and delete and Delete contact. To unblock someone: Settings → Block list → Remove.
Verify a contact in person
The safety code is a QR code and a 60-digit number that you and your contact each work out; they should be identical.
- In the chat, tap the contact's name at the top to open Contact info. The QR code and the 60 digits under Not verified are the safety code.
- On a phone, tap Scan their code and scan the code on their screen. Otherwise compare the 60 digits face to face, or over a call or message outside ZeroMem, then tap They match and Mark verified.
- A verified contact has a filled shield next to their name. Your contact checks on their side too.
If a code you scan does not match, the app says whose copy is wrong. When you compare the digits yourself, the app cannot tell: if they differ, you see it. Either way, do not mark the contact verified; check who they are in person first.
When a contact's identity changes
- “@name now points to another identity”: when you use Add contact again with a username you added before and it now leads to another identity (a new phone, or someone else now has the name), the app stops and shows this. Nothing is sent to it until you choose Keep current, Scan their code or Add as a new contact.
- “Name moved to a new identity”: the contact announced and proved a new identity. If you had verified them, the shield becomes hollow (Carried over) until you compare again.
- “Name's previous identity is still in use”: the old identity sent something after the move. Tap it and choose Switch back or Keep new; check in person if you can.
Chatting and files
- Type in Type a message… and press Enter or Send. The paperclip (Send file) sends a file of up to 64 MB.
- Right-click a message (computer) or long-press it (phone) for Reply, Copy, Save to device (files) and Delete from device.
- The top of a chat shows Online or Offline. A message to someone offline is not delivered and is not kept for later. A file needs the other person online for the whole transfer.
- A file you receive is kept in memory only. Choose Save to device to write it to disk.
- Nothing is kept: after a lock, a close or a restart, all chats are gone. Your contacts and Circles stay.
The marks next to your own messages:
| Mark | Meaning |
|---|---|
| Clock | Still waiting on this device to go out. |
| One tick | Sent, waiting for confirmation. |
| Double tick | Delivered: the other device has it. It does not mean read. It usually appears within a few seconds to about twenty. |
| Unconfirmed | No confirmation came in time: it may or may not have arrived. |
| Not delivered | It did not arrive. |
| 2/3 | In a Circle: two of the three members who should confirm have it. It never says who. |
Nothing is resent by itself. If your own one-to-one text is Not delivered or Unconfirmed, open its menu and choose Send again; the other side sees it only once.
Calls
- To call, open the chat and tap the phone icon at the top right. The other person must be online. They see Incoming voice call with Answer and Decline; there is no ringtone apart from the system's sound.
- During a call: Mute, the voice changer button, Hang up and, on Android, Speaker. The arrow at the top left (Back to chat) takes you to your chats while the call goes on; the green bar at the top (“Tap to return to the call”) brings it back.
- In a Circle, tap the phone icon in the Circle's chat to join its call. Members see who is in the call with Join; anyone can join and Leave at any time.
- Every ten minutes (:00, :10, :20 …) a call pauses for about a second and carries on. On Android, keep the app in the foreground during a call.
Voice changer
The voice changer is on by default: what the other side hears and records is not your real voice, and it differs on every call. During a call, tap Voice changer on to switch it off; the button then says Voice changer off, and another tap switches it back on. The same switch is in Settings → Calls → Voice changer, and your choice stays for later calls.
Circles
- Create: menu → New circle. Type the Circle name and tick the contacts to invite in the list (until you do, the button says Choose members), then tap Create (n people); n counts you too. Only your contacts can be invited.
- Invite: in the Circle's chat, tap its name at the top to open Circle info, and under Add members tap a contact.
- Members who are not your contacts show “Not in your contacts”. Tap one to check their safety code or Add as contact.
- Leave: Circle info → Leave circle → Leave. Someone who left cannot be added back. A Circle has no administrator: nobody can remove anyone else.
- As in one-to-one chats, members receive messages only while they are online.
Locking and security
- Lock (in the menu): the app saves your identity file, ends and starts again at the passphrase screen. The session's chats go with it, and a call in progress ends. Lock it when you leave the computer. Closing the window does the same, without the restart.
- While unlocked, Export identity, Add security key and Change passphrase ask for your passphrase again. Three wrong tries lock the app.
- Change passphrase: Settings → Protection and unlock → Passphrase. Enter the Current passphrase, the new one twice, and tap Change passphrase. Spare keys you did not use in this session are removed; add them again.
- Security keys: see First start.
- Screenshots, screen recording and screen sharing cannot capture ZeroMem's window on Windows or Android; there is no switch for this. On Android, other apps cannot record your calls.
- The typing indicator is off by default. To let others see when you are typing: Settings → Chats → Show when I am typing. The server cannot read it, but it can see when you write.
- Text you copy from a message is cleared from the clipboard when you lock, but not from Windows clipboard history or a phone keyboard's own copy. On Windows, turn on BitLocker or Device Encryption.
Moving to a new device
Your identity lives on one device. To move it:
- On the old device: Settings → Export identity (for changing device). Enter your passphrase and save the .zsvault file. It holds your identity, contacts and Circles, encrypted with your passphrase.
- Take the file to the new device: a USB stick, email or a cloud drive will do, since the file is encrypted.
- Install ZeroMem on the new device. On the first screen, tap Already have an identity? Import from another device, choose the file, enter the same passphrase and tap Import.
- Then destroy the identity on the old device with Emergency destroy (not Delete account, which would remove your username). Use one identity on one device at a time.
Export first before you reinstall the operating system, clear the TPM, uninstall the Android app or reset the phone. Each of these leaves the identity file on the device impossible to open, and without an export it is lost.
Updates
- From v21, ZeroMem checks for a new version a few minutes after you unlock it and about once a day after that, never during a call. It fetches one small file from this site, without your username, licence or device details.
- When a new version is out, the chat list shows “ZeroMem version is available”. Download opens the download section in your browser; the × (Hide for this version) hides the notice until the next version. Settings → About shows the version you have.
- Download from zeromem.site/#download. On Windows, close ZeroMem, unzip the new version and run its zeromem.exe. On Android, install the new APK over the app. Your identity stays.
Leaving
- Delete account: Settings → Danger zone → Delete account. The server removes your username, your seat on the licence and any contact requests waiting for you; then the identity, contacts and Circles on the device are destroyed. It needs a connection and cannot be undone; if the server cannot be reached, nothing is deleted. Without the app, email hello@zeromem.site with your username.
- Emergency destroy: Settings → Danger zone → Emergency destroy → Destroy. It works offline and wipes the identity, contacts and Circles from the device at once. Your username stays on the server until your administrator or we delete it. On the passphrase screen, Destroy this identity does the same without unlocking.
For organisations
An organisation buys a number of seats; one seat is one licence, for one member. Its administrator manages them at zeromem.site/org:
- Sign in with the Admin key we give you. The page keeps nothing: reloading or closing it, or ten minutes without activity, signs you out.
- Issue licences: choose How many (up to the free seats) and tap Issue. Each licence key is shown only once; hand it to its member, who types it into Licence key at first start.
- A member leaves: Revoke their licence and tick Also delete its usernames. The seat is free at once.
- A member lost their phone: revoke and issue them a new licence. If they exported their identity, they import it on the new phone and enter the new key in Settings → Server → Licence key → Save and reconnect (see Changing your username or licence key later); their username comes along. If they never exported it, they create a new identity with the new key: also delete their usernames, so they can take the name again. A member whose app says to ask the administrator to reset the seat needs Unbind (reset seat).
- Delete @name removes a username when its member asks for it.
The administrator sees the licences, the seats and the usernames. It cannot see messages, contacts, Circles or calls.
Troubleshooting
| You see | What to do |
|---|---|
| “Connecting…” does not go away, or “Cannot reach the licence service. Check the server settings” | Check the internet connection and that the device's time is right. The server addresses are filled in already; do not change them. |
| “Time on this device doesn't match the server. Turn on automatic time.” | Turn on automatic date and time in the system settings. Once the time is right, the app connects within about a minute. |
| “This version can't connect any more. Please update the app.” | Install the current version (see Updates). Your identity is not affected. |
| A contact shows Offline | They need ZeroMem open and unlocked, and you must both have added each other. If they are using it and still show offline, open Contact info → Reconnect; they may need to tap it too. |
| A contact request does not arrive | Requests go out within a few minutes and wait up to 7 days for someone offline. “Your contact request can't reach them yet.” means they are on an old version or have no username: ask them to update and choose one, or add each other by identity code. |
| “This licence is already bound to another identity” | Ask your administrator, or us, to reset the seat. |
| “The licence is invalid, expired or revoked” | At first start, check the key you typed. Later, your licence may have been replaced: ask your administrator, or us, for the new key and enter it as in Changing your username or licence key later. |
| Forgotten passphrase | It cannot be recovered, and we cannot restore your identity: nothing on our servers can open it, and an exported file needs the same passphrase. Tap Destroy this identity on the passphrase screen, create a new identity and add your contacts again. The new identity needs a licence key. If you still have yours, ask your administrator, or us, to reset your seat first. If not, ask for your old licence to be revoked with its usernames deleted and a new one issued; then you can take your username again. |
Anything else: hello@zeromem.site.