Releases: therudywolf/OneToThree
Release list
v0.10.0 — client apps + Lite self-host
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, goThe 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 atGET /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
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 ablob: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
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
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 29c9a287911e9eaad27943714b646002070e51c326f30512fdd225b20a02d5a7 — CN=OneToThree, O=therudywolf.
Full details in CHANGELOG.md. Built from commit 3bb102e7.
🤖 Generated with Claude Code