IPHONE FIRST IN DEVELOPMENT

A little closer.
Even on a weak signal.

For the things you wanted to say.
Your message stays with you until the connection comes back.

Connection restored. One message, delivered.

An illustration of the send process. Timing is condensed; no messages leave this page.
  1. Saved on your phone.
  2. Retried when the connection returns.
  3. Delivered once.

NATIVE IOSCLOUD SYNCLOCAL FIRST
01 / A CLEAR UNDERSTANDING

Your conversations.
Our responsibility.

Toj is a cloud messenger. Default chats are encrypted in transit and at rest. The server holds the keys, so Toj operators can decrypt your messages. These chats are not end-to-end encrypted.

That model lets your history sync across devices. Opt-in, end-to-end encrypted Secret Chats are planned.

Read the security model

02 / MADE FOR REAL LIFE

Life moves.
Your conversations come along.

A LITTLE ROOM FOR NUANCE
ҲисорХисор

Different letters. A familiar place.

Product illustration
RIGHT HERE, ON YOUR PHONE

Open a chat.
Skip the wait.

Your conversations live in an encrypted database on your phone. Read, search, and write while the network catches up.

On-device search understands Tajik letter variants, while preserving distinctions in Russian text.

Inside on-device search
WHEREVER YOU PICK IT UP

The same story.
On your other phone.

Your history syncs across signed-in devices and restores when you log in again. After a disconnect, Toj catches up from the last update it received.

See how sync catches up
Product illustration · two iOS sessions

03 / UNDER THE SURFACE

Behind every
made it.

A connection can disappear between sending a message and hearing back. Toj is built around that awkward little gap.

01

A place to wait.

The message and its pending send are saved in one local transaction. Your conversation updates immediately. The outbox keeps the work that still needs a connection.

Read the local write
02

Retry the send.
Not the message.

If the server saves a message but its reply gets lost, the retry carries the same ID. The server returns the existing message instead of creating a second one.

Inspect the send path
03

Nothing skipped
in the catch-up.

WebSockets signal that something changed. Each device then requests the ordered updates after its last sequence number, recovering what the connection missed.

Read the sync protocol
PUT UNDER PRESSURE

Recorded fault-injection test

50,000messages

Across five network profiles,
including dropped connections and lost replies.

Messages lost
0
Server duplicates
0
Device mismatches
0

Measured September 30, 2026 · revision 47120dc.
Four headless clients against the server on one laptop, using Toxiproxy. This test did not run the iOS app or use a physical mobile network.

Method & raw results

THE BUILD SwiftUI SQLCipher Bun + TypeScript PostgreSQL

04 / STILL BECOMING

Good conversations
are worth the work.

Toj is in development. We're building the app,
testing the difficult parts, and sharing the work.

Follow the build
When can I try Toj?

Toj isn't accepting public users yet. Development uses private staging. Public release depends on physical-device and mobile-network validation, with no launch date announced.

What's built so far?

The code includes messaging, groups, media, on-device search, and multi-device sync. Voice and video calls are implemented but disabled pending infrastructure and release gates. Push provisioning and field testing remain launch work.

Can I explore the code?

Yes. The iOS app and Bun backend are in the same public, source-available repository. Start with the architecture, or follow the implementation links above.