CUBE Contact · Linux desktop
CUBE Contact is a Linux desktop client: sealed messaging, groups, signed pages and listings through a relay that cannot read them, and a full IMAP/SMTP mail client over the sealed store. There is no account and no phone number. The app you download is the product; everything stays on your machine. No domains and no hosting fees for your own pages. Secure your unique handle name by registering today!
Banned in countries with U.S. encryption export restrictions.
One installable app: unpack the tarball, run the installer, pick a handle, connect to a relay. Needs GTK 3 and WebKitGTK 4.1 (Debian 13 trixie ships both).
Every message is sealed with a hybrid X25519 + ML-KEM-768 handshake and AES-256-GCM. The relay routes sealed cells by coordinate; it sees who talks to what coordinate, never the content.
Your identity is a 32-byte seed kept in the app's sealed store. The handle is a name at a relay, not a login.
Records in the browser store are sealed with a key derived from your identity. A copy of the store without your key is unreadable.
One-to-one sealed messages. If the other side is offline, the relay keeps the sealed envelope up to seven days (thirty at most) and hands it over when they return.
A group is a local list that fans out one sealed envelope per member through the relay. Membership stays on your machine.
Publishers can list a signed page in the relay index. Search by host, title or summary, see the page's five-star average, and rate pages as you use them — signed ratings the relay cannot forge.
Read sealed pages from your store in a sandboxed viewer. A page is signed by its publisher; one changed byte and it is refused.
The CUBE Contact desktop app carries a full email client. It is a real IMAP/SMTP client for mailboxes you already own, with the sealed store underneath: messages sit encrypted at rest on your machine, and reading them never needs a network round trip.
List mail is recognised by its own headers and filed into a Newsletters folder. Unsubscribing opens the list's real one-click or mailto endpoint in your system browser — CUBE Contact never claims a sender honoured something it didn't, and it remembers a sender so their future newsletters file themselves.
Blocking a sender is the lever: blocked senders are filed as junk on every sync, and a local scan looks at what mail actually contains — scripts, credential forms, look-alike links, and attachments whose real type is a program whatever their name says — before you open it. Every decision stays on your machine.
Point it at an address and a password and it finds the IMAP and SMTP settings (published autoconfig first, then the standard login probes). Multiple accounts keep their own folder trees, Sent and drafts, with identities, filing rules, and an address book with distribution lists.
The middle is deliberately dumb: it pairs sealed circuits by CUBE coordinate, keeps a bounded mailbox for envelopes addressed to someone who is offline, and holds the public listing index. It never holds an account record, a contact list, or anything it can read. The one thing it keeps on purpose is a sealed envelope for an offline friend, bounded in time, deleted on delivery or expiry.
A relay is a blind broker: it connects sealed circuits by coordinate and holds sealed mail for people who are away. It is the same binary you are running — there is nothing to install and nothing to administer. No accounts, no user list, no message table.
Two different things are being set: the relay you use is one address, saved next to the app (below, and in the app's own relay page); running a relay yourself is a terminal command, shown in step 1 — it starts a second CUBE Contact in relay mode on the machine that will carry it. The app never takes a command pasted into a field: a field is an address, not a program.
In CUBE Contact's relay page, the field takes host, port, then the path its WebSocket was published at — cubelinux.com:80/relay is the public one this build ships pointing at. It saves the address(es) in the app's own settings file and they are used from the next start, so restart CUBE Contact after saving. Blank means the app knows no relay: it can still talk to people on a direct address you type in a message.
The --reach ... text below is a command-line option, not a place in the app's form: you type it only if you start CUBE Contact from a terminal, or in the launcher's command. The app form is the same thing for the desktop launcher, which starts the app without any flags.
This is typed in a terminal on the machine that will host the relay — or put as the ExecStart line of a service (step 4). It is not pasted into the app, and --reach is not needed to run a relay.
cube-contact --relay 127.0.0.1:9444 --relay-store ~/cube-mailbox
--relay-store is where sealed envelopes for offline people wait (7 days by default, 30 at most). The first person to use the relay becomes its operator — you are that person.
Keep it on loopback and let a web server carry the WebSocket, so nothing new is exposed. In nginx, on the site that will serve the relay:
location = /relay {
proxy_pass http://127.0.0.1:9444;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
}
CUBE Contact speaks plain ws over port 80 (home networks often allow nothing else). TLS termination works for browsers and for clients that can do wss; a browser that opens the relay gets a short page telling it there is no web page here.
cube-contact --reach "relay.example.org:80/relay, cubelinux.com:80/relay"
--reach is the client-side twin of the app's settings field: same address list, typed when the app is started from a terminal. If you use the desktop launcher, the field is the whole story — do not type --reach anywhere.
The first address is where your handle registers and receives; your binding is published to every relay in the list and names the first as where you live. Anyone who looks you up on a hub they both share is told to reach you through your relay, and your sealed mail lands in your relay's store.
[Unit] Description=CUBE relay After=network-online.target [Service] ExecStart=/usr/local/bin/cube-contact --relay 127.0.0.1:9444 --relay-store /var/lib/cube-mailbox Restart=always [Install] WantedBy=multi-user.target
Two relays on one machine need distinct --store directories (one store, one writer). The relay limits one address to 120 operations, refilled twice a second, so enumeration is slow. Its log names each refusal; the store it keeps is only ever sealed envelopes, deleted on delivery or expiry.
The comparison below is the honest one: an IRC server anchors identity and state; this relay anchors nothing but a route.
| Axis | IRC | CUBE Contact |
|---|---|---|
| What the middle sees | The full message stream, channels, nicks, user accounts. | Sealed cells, addresses, timing and sizes — never content. |
| Identity | Registered nickname, often an email or account. | A 32-byte key; a handle is a name at a relay, not a login. |
| Channels | Server-side channel state and history. | Groups are a local list; each member gets a sealed envelope. |
| Offline delivery | The server buffers (or loses) messages. | The relay holds one sealed envelope up to 30 days, then forgets it. |
| Trust anchor | The server is the state. | The relay is a pipe; the keys are yours. |
After the trial: $19 a year — one licence covering the store, the relay service it uses, listings, ratings and signed pages, plus the full mail client (IMAP/SMTP, newsletters, local spam filtering), voice and video calls, and file transfer.
Download the Linux desktop build6.5 MB · sha256 ced9afb9ca08bc1359e111fd19fb5b602786ab72ac3763227635a6e79ee55250
tar xzf cube-contact-0.4.3-beta-linux-x86_64.tar.gz && cd cube-contact-0.4.3-beta-linux-x86_64./install.sh — it installs the app and its mail engine into ~/.local/bin and adds a menu launcher.Voice and video calls and file transfer live in this desktop build; CUBED-mail below is the mail-only variant.
Mail and nothing else: one window, the sealed CUBE store, a 16-digit key to open it. IMAP/SMTP, folders, search, newsletters and the local spam filter — no chat, no groups, no pages, no source. Linux desktop only.
Download the CUBED-mail build6.5 MB · sha256 8d25ef90e5327c14e531036c4163e1699ac8d381b8d95af0049d4549a2ee99a1
tar xzf cube-mail-0.1.1-beta-linux-x86_64.tar.gz && cd cube-mail-0.1.1-beta-linux-x86_64./install.sh — it installs the app and its mail engine into ~/.local/bin and adds a menu launcher.CUBED-mail is free to use on the Linux desktop. We email a 16-digit key to each downloader; the app accepts it on first run, and that key is the only way into the sealed store.
The full desktop app, thirty days from first launch. No account, no card. The trial is a record in the app; the clock is local.
After the trial, $19 a year: the store, the relay service it uses, listings, ratings and signed pages. Cloud messengers are free because they are funded by what they read; service without reading is not.
A paid licence is a signed Ed25519 record held in the app, verified offline. No phone-home; the software only asks for it once the trial ends.
Trials end; this is how a licence begins — or pay early, any time. Stripe handles the card; we never see it.
After paying, the signed licence record is minted and delivered straight to the CUBE handle you enter at checkout — automatically, from our relay host, once Stripe confirms the payment. It is one signed record, not an account; the app verifies it offline and never calls home. No email step, nothing to send us.
Mailboxes on our own server are available now: US$5 a month per domain, sealed at rest on a LUKS volume whose key is sealed in CUBE. Receiving works two ways. Standard: any mail client, IMAP/SMTP with TLS. Sealed relay, included free with CUBED-mail and CUBE-Contact: new message bodies arrive sealed to a key that exists only inside the app, so the server never holds a readable body for that account — the mail-only client, CUBED-mail, was built with exactly this in mind.
Open a CUBE mailbox — US$5 a month What CUBE Mail is Hosting and relay, priced apart
The relay is opt-in per account, off by default. Thunderbird and other clients still work on the same mailbox; sealed messages show there as an envelope that asks the reader to open them in CUBED-mail or CUBE-Contact.
Kept as we go: each entry names the fault, the fix and the day the fix shipped. Found by use, reported by users, or caught in our own testing — same list, same standard.
/mail/search route behind, so an address or subject you remembered could not be found at all. Fix — one box now searches both: every folder of every account (sender address, recipient, subject, body) above the pages list, newest first, up to 100 hits; the dead route is gone.\Seen on the server so it survives the next sync./mail/compose; the other doorways and their CSS are gone.action made the browser post to /mail/settings><input…, so every save answered 405. Quote restored; the rendered form is now checked, not assumed.