Skip to content

Releases: therudywolf/OneToThree

v0.10.0 — client apps + Lite self-host

Choose a tag to compare

@therudywolf therudywolf released this 03 Jul 11:57

OneToThree is a self-hosted, end-to-end-encrypted messenger. There are two
distinct things
in this release — pick what you need:


⬇️ 1. Get a client app (to use the hosted service — onetothree.ru)

These are client applications. They connect to the public onetothree.ru
server — they are not the server itself. (Or just open the web app / install the PWA.)

Platform Download How
Android OneToThree-0.10.0-android.apk install the APK (signed; updates 0.9.x in place)
Windows OneToThree_0.10.0_x64-setup.exe run the NSIS installer (x64)
Linux — Debian/Ubuntu OneToThree_0.10.0_amd64.deb sudo dpkg -i … (needs libwebkit2gtk-4.1 + libgtk-3)
Linux — portable OneToThree_0.10.0_amd64.AppImage chmod +x … and run, any distro

Each has a matching .sha256. These clients target onetothree.ru; building a
client that points at your own server (build:selfhost) is on the roadmap.


🪶 2. Run your OWN server (self-host — the "Lite" edition)

This is not a download here — you self-host from the repo with one command.
No file below is a "server build"; the server is the repo + the guided installer:

git clone https://github.com/therudywolf/OneToThree.git
cd OneToThree
npm run lite     # guided installer: no-domain (localhost) OR with a domain, tick features, go

The installer stands up your own instance — without a domain (on your machine)
or with a domain (automatic HTTPS) — serving web + API + realtime from a single
origin behind Caddy. Full guide (EN + RU):
docs/guides/LITE.md.


What's new in 0.10.0

The headline of this release is the Lite self-host edition above. Under the hood:

  • Feature flags FEATURE_MEDIA/CALLS/STICKERS/GIF/PUSH/2FA/ADMIN/GROUPS (all
    default ON, so the full/hosted edition is unchanged), surfaced at GET /capabilities.
  • End-to-end capability gating — a disabled feature is removed from the UI
    (no dead buttons) and the API (route groups 404, chat-media 403s while
    avatars stay open, WS rejects call signaling).
  • Single-origin compose stack; calls use an external LiveKit you provide
    (OT_LIVEKIT_*) — a bundled LiveKit is on the roadmap.

Verified: client 296 + server 183 tests green (incl. new capability/route-gating
suites), typechecks, ESLint, production build; a 5-agent adversarial audit found and
fixed 7 gating gaps before release.

Full changelog: CHANGELOG.md ·
Roadmap: ROADMAP_SELFHOST_LITE.md

v0.9.3 — Create-your-own sticker packs

Choose a tag to compare

@therudywolf therudywolf released this 03 Jul 01:18

OneToThree — self-hosted, end-to-end encrypted messenger (web · Android · desktop).

Second sticker pass: the create-your-own-pack feature plus the rest of the cross-platform audit backlog.

✨ Added

  • Create your own sticker packs — no Telegram required. Settings → Stickers now has a "Create your own pack" box (name → Create) and a + button on each of your packs to upload image stickers (WEBP/PNG/JPG/GIF, ≤512 KB, up to 120 per pack, 50 packs per user). Your packs appear in the composer picker just like imported ones.

✅ Fixed

  • Animated (tgs/lottie) stickers now render on desktop & Android. They were fetch()-ing a blob: URL that the Tauri/Capacitor CSP blocks; they now read the cached image bytes directly.
  • Consistent sticker access. Fetching a sticker image (/asset-url, /media) now honors the same shared-chat access that pack detail/clone already granted — no more inconsistent 403 for a legitimate recipient.
  • Self-owning clones. Cloning a pack now copies each image to the clone's own storage key, so deleting the original pack no longer breaks the clone (and per-pack cleanup is correct).
  • Share consent. Only a pack's owner can share a private pack; a non-owner who merely received a sticker can't spread it to other chats.
  • Performance & polish. Sticker image cache is memory-bounded (no more session-long leak); pack thumbnails load in parallel; in-chat search debounces the scan properly (and handles IME input); the "add pack" link validates a real ID.
  • Robustness. The first sticker upload on a fresh server creates the storage bucket automatically.

📦 Downloads

Platform File
Android OneToThree-0.9.3-android.apk (signed)
Windows OneToThree_0.9.3_x64-setup.exe

*.sha256 checksums attached. Android signing cert: SHA-256 29c9a287911e9eaad27943714b646002070e51c326f30512fdd225b20a02d5a7 (CN=OneToThree, O=therudywolf).


Full details in CHANGELOG.md. Built from commit 68e37cde.

🤖 Generated with Claude Code

v0.9.2 — Stickers, GIFs & search polish

Choose a tag to compare

@therudywolf therudywolf released this 03 Jul 00:05

OneToThree — self-hosted, end-to-end encrypted messenger (web · Android · desktop).

A polish pass on the stickers, GIFs, and search subsystems, from a cross-platform audit.

✅ Fixed

  • Desktop emoji picker was blank. Emoji were loaded as Google-style PNGs from cdn.jsdelivr.net, which the Tauri desktop CSP blocks — so the grid showed broken tiles. Now uses native system-font emoji: renders on web/Android/desktop, works offline, and makes zero third-party requests (a better fit for a private, self-hosted app).
  • GIF search flashed a spinner on every keystroke. The loading state now appears only when a request actually fires (after the debounce); your previous results stay on screen while you type.
  • A down GIF provider was invisible. When Tenor/Giphy can't be reached, the picker now shows a small “provider unavailable — showing suggestions” notice instead of silently presenting fallback GIFs as real results.
  • Recent GIFs now fall back to the direct source if the server thumbnail proxy is unavailable (matching the search/favorites grids).
  • Recent/favorite stickers now show an error toast if a send fails (previously swallowed — it looked like it worked) and re-load their image correctly after an app reload.
  • Message search no longer silently ignores a search for the literal words “undefined” or “null”.

✨ Added

  • Per-pack sticker filter — large sticker packs get a filter box instead of one long scroll.

🧹 Backend / hygiene

  • Sticker images are now garbage-collected when a pack is deleted or refreshed (previously every delete/refresh left orphaned files in object storage forever). Clone-safe — shared images used by cloned packs are never removed.
  • GIF favorites are capped per user (oldest evicted beyond 200) so the list can't grow without bound.

📦 Downloads

Platform File
Android OneToThree-0.9.2-android.apk (signed)
Windows OneToThree_0.9.2_x64-setup.exe

*.sha256 checksums attached. Android signing cert: SHA-256 29c9a287911e9eaad27943714b646002070e51c326f30512fdd225b20a02d5a7 (CN=OneToThree, O=therudywolf).


Full details in CHANGELOG.md. Built from commit f4e528f.

🤖 Generated with Claude Code

v0.9.1 — Media delivery fix for direct chats

Choose a tag to compare

@therudywolf therudywolf released this 02 Jul 23:01

OneToThree is a self-hosted, end-to-end encrypted messenger — Double Ratchet v2 + X3DH for direct chats, with web, Android, and desktop clients.

🔧 Highlights

Media now delivers correctly in direct chats. Attachments — images, voice notes, video, files, and albums — in one-to-one chats were encrypted with the legacy v1 path and rejected by the recipient's v2-only receiver, so they showed up as “message could not be decrypted.” They now ride the same Double Ratchet v2 path as text messages.

✅ Fixed

  • Media in DIRECT chats — attachments and albums are now sent over Double Ratchet v2 (per-device dr_slots) instead of legacy v1 fan-out, so recipients can actually decrypt them. Text was never affected.
  • Attachment queue — a second file attached while the first is still uploading is no longer silently dropped.
  • Decrypt stability — a message that decrypted cleanly can no longer regress to a “decrypt failed” placeholder when multiple load paths race on first chat open (message plaintext is now monotonic). Genuine key-change warnings still surface.

🧪 Quality

  • Repaired the media end-to-end specs (they had been failing early and masking the bug above): decodable image fixture, locale-independent selectors, race-safe interactions, and a toast-based size-limit assertion. The full Playwright cross-delivery suite runs green, twice consecutively.
  • Signed release APK verified with apksigner (exit 0); desktop installer built via Tauri (NSIS).

📦 Downloads

Platform File
Android OneToThree-0.9.1-android.apk (signed)
Windows OneToThree_0.9.1_x64-setup.exe

*.sha256 checksums are attached for verification.

Android signing certificate: SHA-256 29c9a287911e9eaad27943714b646002070e51c326f30512fdd225b20a02d5a7CN=OneToThree, O=therudywolf.


Full details in CHANGELOG.md. Built from commit 3bb102e7.

🤖 Generated with Claude Code