Encryption
Simplepush supports end-to-end encryption. Content is encrypted on the sending device and decrypted on the receiving device. The server only ever stores and relays encrypted data. Encryption covers notifications, tasks, answers, replies, submissions, and files.
Encrypted and plain traffic can mix freely on one account. Anything you receive that was encrypted with a password you do not have passes through unreadable. It does not break the stream.
Two ways to encrypt
- Personal accounts: you pick the passwords. A topic password is meant to be shared with the people who should be able to read that topic. Your personal password is yours alone and stays on your own devices.
- Organizations: the admin turns on encryption once and the key is distributed to member devices automatically. Nobody handles passwords. See organizations.
Your passwords
Every password is tied to what it protects:
- A topic password (Settings -> Topics -> Your Topic -> Set Password) protects sends to one topic. Everyone who holds the topic and knows the password can read them. This is the password you share with the recipients.
- Your personal password (Settings -> Encryption -> Personal Password) protects your submissions and the tasks and notifications you send to yourself. It only ever travels between your own devices, so keep it to yourself.
# secret@family = the password for the topic "family"
sp task -t family --title "Groceries?" --text-input "What do we need?" -p "secret@family"
# a bare password = your personal password
sp collect --submissions -p "personal-secret"from simplepush import Client
client = Client(
api_token="YOUR_API_TOKEN",
passwords=[
("secret", "family"), # topic password
"personal-secret", # personal password
],
)
# encrypted automatically: the topic has a password
client.send_task(topic="family", title="Groceries?")import { Client } from "@simplepush/sdk";
const client = new Client({
apiToken: "YOUR_API_TOKEN",
passwords: [
["secret", "family"], // topic password
"personal-secret", // personal password
],
});
await client.sendTask({ topic: "family", title: "Groceries?" });What stays visible
Everything a person reads or answers is encrypted: titles, content, questions, choice options, action buttons (both the label and the key your code matches on), slider scales, links, and file contents.
The server still needs the routing data in the clear: who a message is addressed to, when it was sent, and the ids used to route answers back to you. Encryption hides the content of your work, not the fact that work happened.
Choosing passwords
There is no recovery. If nobody remembers a password, nobody can read the content it protects, including you. Losing a password never locks you out of your account, only out of the content it protected.