~/offline $ ssh anonymous @relay.offlineapp.org
Offline

No phone number. No cloud. No trace.

A messenger designed to leave nothing behind. End-to-end encrypted with the Double Ratchet. No phone number. No cloud. No identity. Constant-size packets, cover traffic, and Tor — so even an observer of the network can't tell who you talk to.

0
identity required
DR
double ratchet
active users
1,000+
total users

We can't leak what we don't have. That's the entire design.

[ 01 ]

No identity

No phone number. No email required to use. No real name. You generate a cryptographic ID on your device. That's your entire identity.

[ 02 ]

No metadata

The server logs no IP addresses, no timestamps, no who-talks-to-whom graphs. We can't hand over data we never wrote down.

[ 03 ]

No cloud

Messages live only on your devices. Lose your phone, lose your history. That's not a bug — it's the guarantee.

[ 04 ]

No persistence

Messages are deleted from the relay the moment they're delivered. The server is a mailbox, never an archive.

[ 05 ]

No tracking

No ads. No analytics. Not even anonymous telemetry. We don't want to know things about you.

[ 06 ]

No black box

The relay server code is open source. You can audit exactly what it does — and what it doesn't.

Built for privacy. Not for data collection.

[ ratchet ]

Double Ratchet

Same protocol Signal uses. Forward secrecy + post-compromise security. Every message has its own key. Compromise one, the rest stay safe — past and future.

[ sealed ]

Sealed sender

The relay can't see who sent a message — only who it's going to. Sender identity is hidden inside the encrypted envelope. Server stripped of from-id at the protocol level.

[ onion ]

Tor hidden service

Reach the app through a .onion address via Tor Browser. The server never sees your IP. ISP can't see what you're doing. Three encrypted hops between you and us.

[ pad ]

Constant-size packets

Every message gets padded to a fixed bucket size before encryption (1KB, 4KB, 16KB, 64KB). Observers can't tell a one-word reply from a long paragraph. Length leaks nothing.

[ cover ]

Cover traffic

The app continuously sends encrypted dummy packets in the background — indistinguishable from real messages. An observer can't tell when you're actually talking to someone, only that you're online.

[ rotate ]

Rotating sessions

Your connection token rotates every 10 minutes. Even if someone is recording network traces, they can't link your morning sessions to your evening ones without breaking into the server itself.

[ jitter ]

Anti-timing analysis

Outbound messages are delayed by a random 30–200 ms before being sent. Defeats fine-grained timing correlation that could otherwise link sender to recipient.

[ verify ]

Verifiable build

Open Settings → Security and you'll see a SHA-256 of the running app. Compare it with the hash on GitHub. If they match, you're running the exact code we published. No mystery binaries.

[ msg ]

E2E encrypted chat

ECDH P-256 key exchange, AES-256-GCM per message. Text, voice, images. Messages live only on your devices.

[ voice ]

Voice messages + effects

Tap-and-hold voice notes. Disguise your voice with live effects: Normal, Deep, High, Robot. Opus-encoded, tiny file size.

[ grp ]

Group chats

Up to 50 members. Shared AES-256 group key, distributed E2E via each member's public key. Creator owns, can rename.

[ timer ]

Disappearing messages

Auto-delete after read: 10s, 1min, 1h, 1d. Timer starts when recipient opens the chat — not on send.

[ lock ]

Time-locked messages

Lock a message until a specific date/time. Recipient sees only a lock icon with countdown until the moment it unlocks.

[ notes ]

Encrypted notes

Private notes with title, rich text, checklists. Encrypted with AES-GCM using your identity key. Local only, never transmitted.

[ wipe ]

Auto-wipe

Set your account to automatically self-destruct after 1 week, 2 weeks, 1 month, 3 months, or 6 months of inactivity.

[ img ]

Image sharing

Send any photo. Auto-compressed on-device for fast delivery. Encrypted like everything else. No server-side copy ever kept.

[ call ]

Voice + video calls

WebRTC peer-to-peer encrypted voice and video. In-call voice effects, camera flip, draggable PiP. No call logs on the server — signaling only.

[ safety ]

Safety numbers

Each conversation has a unique safety number. Compare it with your contact in person to confirm the connection is end-to-end encrypted with the right person.

[ qr ]

QR code add

Share your ID via QR code or copyable link. Scan to start an encrypted chat instantly — no phone numbers, no email, no account creation.

[ ack ]

Read receipts · typing

Optional read receipts and typing indicators. Toggleable — default on, but you're in control. All signals are E2E encrypted.

[ react ]

Replies · reactions · search

Reply to specific messages with preview. Long-press for emoji reactions. In-chat full-text search with highlighting.

[ swipe ]

Swipe actions

Swipe right to pin or mark read. Swipe left to mute or delete. Pinned chats float to the top. Two-sided delete removes the chat for both of you.

[ theme ]

Themes

Three built-in themes: terminal green (default), pure dark, and clean light. Switch any time from settings.

Simple crypto. No magic.

~/alice/send-to-bob.sh
alice $ offline generate-id generated ECDH P-256 identity keypair on device ID: of1_aC9Kq7xM...p4N   alice $ offline add bob_id fetched bob's identity key from relay initialized Double Ratchet session safety number: f3:b2:9c:4a:21:e7   alice $ offline send bob "signal's down — switching to this" ratchet step → fresh message key padded to 4 KiB bucket encrypted with AES-256-GCM jitter delay: 134 ms relayed via .onion (Tor circuit)   ↳ server sees: "→ user Y · opaque 4 KiB blob" ↳ server does not see: who sent it, contents, your IP ↳ observer does not see: message length, exact timing   # message delivered. ratchet rotated. message key destroyed. # even if bob's phone is seized tomorrow, this message can't be # decrypted — the key that decrypted it no longer exists.

What Offline protects you from. And what it doesn't.

✓ Offline protects against

  • ISP surveillance of your message contents
  • Government subpoenas for chat history (we have nothing to give)
  • Hackers breaching the relay server (they'd only get ciphertext)
  • SIM-card registries linking you to an identity
  • Cloud provider scanning your conversations
  • Metadata graphs showing who you talk to
  • Corporate advertisers profiling your behavior

✕ Offline cannot protect against

  • A compromised phone (keylogger, spyware, etc.)
  • Someone physically taking your unlocked device
  • The person you're chatting with screenshotting messages
  • Deep state-level adversaries with zero-day exploits
  • You being socially engineered into adding a fake contact
  • Loss of your device (no cloud = no recovery)
  • Traffic analysis by a global passive adversary

// Honesty matters more than marketing. Any messenger claiming total privacy is lying.
We can tell you exactly where our protection ends.

Side by side with everything else.

WhatsApp Signal Telegram Offline
End-to-end encryption by default yes yes no yes
Forward secrecy (Double Ratchet) yes yes no yes
Post-compromise security yes yes no yes
Sealed sender (server can't see who sent) no yes no yes
No phone number required no no no yes
No real-world identity at all no no no yes
Constant-size packets (anti-traffic-analysis) no no no yes
Continuous dummy traffic (cover) no no no yes
Rotating session tokens no no no yes
Randomized send delays (anti-timing) no no no yes
Tor hidden service (.onion) no no no yes
No cloud backup at all no opt-in no yes
No metadata persisted no partial no yes
Open source server no yes no yes
Open source client (verifiable hash) no yes partial yes
Encrypted voice & video calls yes yes opt-in yes
Disappearing messages yes yes yes yes
No ad-driven owner no yes yes yes
Works fully anonymously no no no yes

Signal is the gold standard for protecting individuals. Offline goes further by also protecting relationships — what an observer of the network can learn about who you talk to and when. The Signal protocol assumes the server knows your phone number; we assume the server knows nothing.

What's live. What's next.

✓ done · Q2 2026

Relay server — live

Go-based WebSocket relay. Runs on a single VPS. Handles E2E-encrypted ciphertext. Logs nothing. Sealed sender (server doesn't see who sent). Deletes messages after delivery.

✓ done · Q2 2026

Web app — /app

Fully in-browser messenger. Single HTML file. Keys generated locally via Web Crypto API. Works on iPhone & Android as a PWA. No install required.

✓ done · Q2 2026

Double Ratchet protocol

Forward secrecy + post-compromise security. Each message gets a fresh key. Out-of-order delivery handled. Ephemeral keys destroyed after use.

✓ done · Q2 2026

Anti-traffic-analysis stack

Constant-size packets (bucket padding). Continuous cover traffic. Rotating session tokens. Randomized send delays. Sealed sender at the protocol level.

✓ done · Q2 2026

Tor hidden service

Reach the app via .onion through Tor Browser. The relay never sees your IP. Three encrypted hops between you and us.

✓ done · Q2 2026

Verifiable build

SHA-256 of running app shown in Settings. Compare with published hash on GitHub to prove no tampering between us and you.

◉ in progress · Q3 2026

$OFF token — built on Injective

A utility token on Injective that powers the network: pay for relays, unlock Pro features, settle on a fast L1. No pre-sale hype — utility first. See below.

· next · Q3 2026

Relay incentive layer

Anyone can run a TURN relay and earn $OFF for the bandwidth they contribute. Decentralizes the call infrastructure away from a single operator.

· later · Q4 2026

Independent security audit

Third-party cryptographic review by Trail of Bits or Cure53. Findings published publicly. We want adversarial eyes.

· later · 2027

Federated mixnet

Multiple independent relays run by different operators. Multi-hop routing where no single relay knows both sender and recipient. The final layer of metadata protection.

· later · TBA

iOS & Android — native release

Once the protocol, $OFF utility, and mixnet are battle-tested, native apps for iPhone and Android with background push, hardware keystore, and the full Offline experience. Web app remains canonical.

Injective Built on Injective

The $OFF token.

Offline is funded by what it actually does — not by hype. $OFF is a utility token on Injective that pays for the network's real costs and unlocks premium features. No promises about price. Just utility.

Run a relay, earn $OFF

Calls fall back to TURN relays when peer-to-peer fails. Anyone can run a relay and earn $OFF for the bandwidth they contribute — decentralizing the infrastructure.

Pay for Pro in $OFF

Unlock premium features — unlimited devices, larger encrypted storage, custom .onion address, dead-man-switch auto-wipe — using $OFF.

Settled on Injective

$OFF lives on Injective: fast finality, low fees, and a chain built for finance-grade settlement. Payments and relay rewards clear on-chain.

$OFF is not yet live. This describes planned utility. Nothing here is financial advice or an offer to sell a security.

Questions people ask before signing up.

What does "end-to-end encrypted" actually mean?

Your messages, calls, and voice notes are locked on your device with a key that only the recipient's device can unlock. The server in the middle just shuffles bytes around — it physically can't read what you sent, even if a court ordered it to. Same protection for text, voice messages, and live calls.

What is "Verify" and when should I use it?

Every conversation in Offline has a unique safety number — six groups of five digits — generated from both of your encryption keys. Both phones calculate the exact same number from the math. If you compare the digits with your contact (in person, or over another trusted channel) and they match, you've confirmed your connection is genuinely between just the two of you. It's an extra layer of confidence, not something most people need to do every chat — think of it like checking the seal on a package. Useful for sensitive conversations, optional for everyday chats.

Why does the safety number matter?

Encryption protects what's inside the package, but you also want to know the package is going to the right person. The safety number is how you confirm your messages are reaching exactly who you think they are. If the number changes unexpectedly later, it means your contact reinstalled the app on a new device — Offline will let you know so you can re-verify with them.

How is the safety number generated?

Both phones take both public keys, sort them in the same order, and run them through SHA-256 — a standard one-way hash function. The result is split into six 5-digit groups. Same math on both sides means matching numbers. No central server is involved; the calculation happens entirely on your devices.

Who is Offline for?

People who care more about privacy than convenience. Journalists protecting sources. Activists in countries where SIM cards are registered to the state. Anyone who thinks a chat app shouldn't require handing over their phone number, location, and social graph to a corporation in exchange for basic communication.

How is this different from Signal?

Signal is the gold standard for protecting individuals — and we use the same core cryptographic protocol they invented (Double Ratchet, sealed sender, ECDH + AES-GCM). The differences:

What Signal does that we don't (yet): independent third-party security audits, decade of production hardening, billions of users worth of attack mitigation.

What we do that Signal doesn't: no phone number required, no real-world identity at all, constant-size packets, continuous cover traffic, rotating session tokens, randomized send delays, Tor hidden service. Signal protects individuals; Offline also protects relationships — the social graph an observer could otherwise reconstruct from network traffic.

What is forward secrecy and why does it matter?

Forward secrecy means each message gets its own encryption key, and old keys are destroyed after use. So if someone steals your phone tomorrow and extracts your current keys, they still can't read what you sent last week — those keys no longer exist. Combined with post-compromise security (the Double Ratchet), the inverse also holds: if your keys leak today, your future messages still become unreadable to the attacker as soon as the next key rotation happens.

Why do you send fake "cover" traffic?

Even with end-to-end encryption, an observer watching the network can see when you send messages and how often. That alone reveals a lot — whether you're online, whether you're talking to someone, who you're probably talking to. Cover traffic sends realistic-looking encrypted dummy packets in the background, so an observer can't tell when you're actually communicating versus idle. The recipient's app silently drops the dummies after decryption.

What does the Tor option give me?

If you visit Offline through our .onion address using Tor Browser, your traffic goes through three encrypted hops before reaching us. We can't see your IP. Your ISP can't see what you're doing. It's the strongest network-level anonymity possible without running our own decentralized mixnet (which is on the roadmap). Available now to anyone who wants it; clearnet access stays the default for convenience.

How can I verify the app I'm running matches the open-source code?

Open Settings → Security & verification inside the app. You'll see a SHA-256 hash of the running app.html. Compare that hash with the one published on our GitHub release. If they match exactly, no one has tampered with the app between us and you. The whole client is one HTML file with no build step — every line is auditable in your browser's DevTools.

Is it really free?

The basic messenger is free forever. Later, premium features (larger file transfers, multi-device sync, custom human-readable handles) may cost a small subscription. We will never run ads. We will never sell data. We have nothing to sell.

What if I lose my phone?

Your messages are gone. That's the tradeoff for having no cloud backup. If we can't read your messages, we can't restore them either. Your contacts can re-verify you with a new ID via safety-number comparison.

How do I add contacts without a phone number?

QR code, shared link, or typing someone's ID directly. The web app can generate a QR you scan in person. Your contact list lives only on your device.

Can I use it on multiple devices?

Not in the MVP. Multi-device is planned but requires careful key distribution to avoid becoming a security hole. We'd rather launch one device done right than three done poorly.

Who built this?

A small team with backgrounds in smart contract security and cryptography. We've written audit reports on DeFi protocols holding hundreds of millions in user funds. We take privacy seriously because we know exactly what it costs when it fails.

Is the code open source?

The relay server will be open source at launch. Clients (web / iOS / Android) will be open-sourced in phases as they stabilize. We believe you can't claim to protect privacy with closed-source code.

Why should I trust you?

You shouldn't. Trust the math. Trust the open-source code. Trust the warrant canary. We designed Offline so that trusting us isn't required — the server architecture genuinely cannot leak what it doesn't store.

Ready to chat without being watched?