// what's new
News & releases
Release notes, new features and announcements for CryptIRC — the always-on, end-to-end encrypted IRC client by TwistedNET. Follow along here, or watch the releases feed on GitHub.
A terminal client — and it runs alongside your browser
CryptIRC now has a real terminal client. cryptirc-tui is a full TUI, not a stripped-down fallback: a buffer list grouped by network, a member list, wrapped scrollback, tab completion, and mouse support — click a channel to switch, scroll with the wheel. It runs in any shell, over SSH, inside tmux.
The part that matters is that it signs into the same account as the web app and stays connected at the same time as your browser. Same messages, same vault, same encrypted logs, same server-side bots. Send from your phone, see it in the terminal; run a bot command in the terminal, watch the answer arrive in the browser. It speaks the same protocol the web client speaks, so it needs no changes to the server or the IRC daemon.
It ships with 52 terminal colour schemes — gruvbox, dracula, nord, solarized, catppuccin, tokyo-night, rose-pine, the amber and green CRT phosphors and more — switchable live with /theme and remembered between sessions. A terminal theme simply follows whatever palette your emulator already uses.
- Your own bot triggers now work — typing
$aior!wyourself used to do nothing, because bots only ever watched messages from other people - Bot replies are now visible to the person who owns the bot; everyone else in the channel could already see them
- AI answers are formatted for IRC — one line, real bold instead of asterisks, no citation markers
/mode #channelnow tells you the channel's modes in plain language instead of hiding the answer in a collapsed status block- Three new themes that copy real IRC clients — HexChat, XChat and irssi — bringing the total to 227
Desk pets, drag-to-resize columns, and a chat that keeps up
Twenty new desk pets joined the five originals — jellyfish, paper plane, hot-air balloon, snail, firefly, rubber duck, moody cloud and more — and each one now moves like the thing it actually is. A snail inches along the floor and never leaves it; a paper plane glides on a long arc; a jellyfish pulses upward and drifts back down. Same shared engine, twenty different ways of getting around. They keep to the edges, rest far more than they move, are silent, and clicks pass straight through them.
Three column boundaries are now draggable: the channel list's right edge, the user list's left edge, and the divider between nicknames and messages inside every chat row. A drag writes the same setting the Appearance sliders write, so widths persist across reloads and sync to your other devices — the slider and the divider can never disagree. Double-click a divider to reset it.
- Fixed chat not following a busy channel — once it decided you'd scrolled away it never re-attached; landing at the bottom now always re-pins
- Fixed the typing indicator covering the newest message
- Auto-scroll pauses briefly around a live touch gesture, so an arriving message can't drag the view out from under your finger
- 25 pets in all, up to three on screen at once, paused when the window isn't focused
Customize any theme, bring your own background — 224 themes in all
Every theme card now carries a ✎, not just the ones you made yourself. Open it and the editor is seeded from that exact theme; save and you get your own copy, marked with a ★ next to the built-in it came from. The originals are never touched, so a server's shipped themes stay pristine for everyone else using it.
Fifty new themes landed at the same time, taking the gallery from 174 to 224 — and you can set your own background image behind any of them.
- Cloning a built-in is now faithful — accent and status colours carry across, so the copy really is identical until you change something
- Illustrated scene themes are inherited by reference, so customizing one doesn't blow past the size limit on your synced settings
- The public gallery is regenerated from the source — all 224 browsable as live miniature IRC windows
Smart-paste links can expire on your schedule
Paste five or more lines into the input bar and CryptIRC offers to turn it into a pastebin link instead of flooding the channel. That link used to live forever, with no way to say otherwise. The dialog now has an Expires dropdown — never, 10 minutes, 1 hour, 1 day, 1 week or 30 days, the same ladder the /paste panel already offered — and it remembers what you picked last time.
Full release notes ↗Your own timestamp format, plus command-line admin tools
Requested by someone running their own server: Appearance ▸ Display now has an optional custom timestamp format with a live preview. It is strictly opt-in — until you turn it on, timestamps look exactly as they always have, and switching it on seeds the field with the format that reproduces the built-in look byte for byte. Clear the field and it turns itself back off.
- The common strftime codes plus GNU padding flags — 24-hour, 12-hour, uppercase AM/PM, seconds, dates
- makeadmin.sh grants or removes admin from the command line, with no database poking
- resetpass.sh does a proper terminal password reset and can verify an account without changing it
- The native desktop apps moved to Electron 43.2.0, clearing the shipped dependency advisory
Sideways photos, and the GIF picker that came up empty
Photos uploaded from a phone could arrive rotated. The privacy pass that strips EXIF was removing the orientation tag along with the location data, so viewers no longer knew which way was up. Rotation is now baked into the pixels before the metadata is stripped — the photo looks right everywhere and still carries nothing identifying.
- The GIF picker came up empty until you reloaded the page — fixed
A steadier Messages inbox
On some devices the Messages inbox could fall into a loop where it flickered and stopped responding to clicks — an empty conversation log kept re-triggering the very render that had asked for it. Fixed, with a regression test that reproduces the old loop so it can't come back quietly.
- Version reporting is centralized, so the app, the manifests and the CTCP VERSION reply can no longer drift apart
New private messages always show up in Messages
A fresh DM could arrive and never appear in the Messages list. A rule meant to hide replayed bouncer backlog was judging messages purely by age, so a message that simply took more than a minute to reach you got filed as history and swallowed. It now tells a real backlog replay apart from a late delivery.
Full release notes ↗Unread badges stay read on every device
An unread badge could come back from the dead: mark a channel read on one device and moments later it would reappear as read state synced between them. The comparison was against a wall-clock marker that always looked newer than the read you had just made, so the badge always won. Reading a channel now settles everywhere.
Full release notes ↗Shared files open for the people you send them to
Links to uploaded images and PDFs returned a 401 when opened outside the app — the person you sent it to wasn't carrying your session, so the file refused to load. Uploaded files now get a link that works wherever you paste it, while everything else about the upload path — including the metadata stripping — stays exactly as it was.
Full release notes ↗Case-insensitive channels: no more empty or duplicate user lists
IRC treats #Channel and #channel as the same room; CryptIRC didn't always agree. The mismatch could leave you looking at an empty user list, a duplicated one, or logs split across two spellings of the same place. Channel names are now folded consistently everywhere, including on reconnect resync.
Full release notes ↗Meet your AI — now a real agent, plus a whole bot suite
CryptIRC now has a built-in AI assistant that lives on your connection 24/7 and replies as your own nick — even when every device is off. Plug in whichever model you like (ChatGPT, Claude, Grok, Gemini, Perplexity, and more), or sign in with your ChatGPT subscription instead of pasting an API key. Your key is encrypted in your vault.
And it isn't just a chatbot — it knows your channels and who's in them, and it can actually look around: ask who's in a channel and it runs whois/who/names or joins to find out, then answers. With one command it can op, voice, kick, ban and set topics for you, all written to an encrypted audit log.
- Talk to it in any channel, in DMs, or privately with /ai — with per-person memory that auto-clears
- Real agent mode: it runs whois/who/names or joins a channel, reads the result, then answers
- /aido lets it run safe channel commands (or unrestricted YOLO, owner-only)
- 19 built-in bots — Weather, Wikipedia, Urban Dictionary, Crypto, Quotes, a channel Quote DB, Seen, Tell, Notes, Help and more
- Moderation: auto-op/voice, flood & bad-word filters with a warn→kick→ban ladder, and an IP logger
- Inline media playback plus new notification sounds you can upload yourself
Privacy metadata stripping now covers every photo and video format
Uploaded photos and videos automatically have EXIF/GPS and other identifying metadata stripped before storage — and that protection now covers every image and video format the app accepts, not just JPEG/PNG/MP4/WEBM.
- iPhone HEIC photos are now fully supported and stripped.
- Also covers GIF, WEBP, AVIF, TIFF, and MOV/AVI/MKV/3GP/FLV/WMV video.
Fixed upload preview thumbnails not showing
The "Upload this?" confirmation dialog now correctly shows a thumbnail for the photo or video you're about to send, instead of "(no preview available)".
Full release notes ↗Hardened the background service split further
Fixed a rare timing gap during a service update that could misroute or duplicate a live message, a spurious "Nickname already in use" notice that could reappear after an update, a duplicate "you joined" line for channels you were already in, and a couple of smaller reconnect-related edge cases.
Full release notes ↗Fixed duplicate messages in channels
A background service update could leave duplicate-message suppression turned off until your next full reconnect, occasionally showing your own channel messages twice. That's now restored immediately after any update.
Full release notes ↗Start a new message from anywhere you're already talking
The Messages inbox now has a ✎ New message button: pick anyone from every channel you've joined, across every network you're connected to, and jump straight into a DM.
- Search by nick, network, or channel name to find who you're looking for fast.
- Works the same on desktop and mobile.
IRC stays connected through every update
Your IRC connection now lives in a small, always-on background process, separate from the web server. When the server gets updated or restarted, you stay connected the whole time — no more part/rejoin every time we ship a fix.
- New Discord theme in Appearance ▸ Themes — a familiar dark look for anyone coming from Discord.
- Deploy and update scripts hardened after real live-testing on fresh Debian and Arch installs.
CryptIRC 0.3.17 — sync & stability
The latest desktop and mobile builds ship faster reconnects, smoother multi-device history sync, and a batch of polish across the vault and notification pipeline.
- Faster bouncer re-attach and backlog replay after your device wakes.
- Tighter cross-device sync so desktop and mobile stay perfectly in step.
- Fixes to push notifications, typing indicators and inline media previews.
End-to-end encrypted DMs, everywhere
Direct messages now use the Signal Protocol end to end, with forward secrecy and deniability — and your logs, credentials and notes stay sealed in an AES-256-GCM vault whose key never leaves your device.
How the encryption works →173 themes and 140 fonts built in
Make CryptIRC yours. The theme gallery now bundles 173 curated themes and 140 fonts, all switchable on the fly. Browse the full set and preview them live before you pick.
Browse all themes ↗One-command self-hosting
Run your own always-on CryptIRC in minutes. The deploy script sets up the Rust backend, Caddy, TLS, systemd and your first admin user on a fresh Debian, Ubuntu or Arch box. No domain? It serves on your IP with a self-signed cert.
See the install →// get started
Try the latest build
Launch the hosted client in your browser, or grab the newest desktop and mobile builds from GitHub.