GitHub - gh0st68/CryptIRC: Self-hosted encrypted IRC client. Rust backend with 24/7 connectivity, Signal Protocol E2E for DMs, AES-256-GCM encrypted logs and channel keys. Native apps for Windows/Linux/macOS plus installable PWA for iOS/Android.

24 min read Original article ↗

CryptIRC

End-to-end encrypted IRC. Self-hosted. Always on.

Your server holds the connection. Your device holds the key.
The server can't read a single thing it stores for you — and that's architectural, not a policy.

Version Rust Linux PWA License

Encrypted logs Signal Protocol Argon2id Zero knowledge

227 themes 140 fonts 19 bots 9 AI providers 100+ commands IRCv3

cryptirc.com  ·  Theme Gallery  ·  Hosted client  ·  Downloads


$ git clone https://github.com/gh0st68/CryptIRC.git && cd CryptIRC
$ sudo bash deploy/deploy.sh yourdomain.com you@yourdomain.com

  [✓] dependencies resolved        [✓] systemd units hardened
  [✓] TLS provisioned (Caddy)      [✓] irc-core daemon online
  [✓] both binaries built          [✓] https://yourdomain.com ready

One command. Debian · Ubuntu · Arch. Nothing else to configure.


Don't want to run your own? Use ours — free.
client.twistednet.org/cryptirc
Your vault key is derived from your passphrase on your device. The passphrase is never sent to the server or stored anywhere. Logs, DMs, credentials and notes are encrypted with that key before they touch disk — even we can't read them.

Support · bugs · hanging out:  irc.twistednet.org  →  #dev · #twisted
👻 built by gh0st

CryptIRC — Desktop Client

CryptIRC — Mobile (PWA)
Installable PWA — same client, on your phone.


What is CryptIRC?

CryptIRC is a self-hosted, encrypted IRC client that keeps you connected to IRC 24/7 from any device. Your server maintains persistent connections to all your IRC networks — so you never miss a message, even when all your devices are off. When you come back, your full history is waiting, encrypted and synced.

No plugins. No telemetry. No third parties. You own everything.

🤖 AI Assistant & Bots

CryptIRC ships a full server-side bot suite that runs 24/7 on your connection — even when every device is off — and replies as your own nick. Everything is off until you turn it on, each bot has its own access controls and per-channel scope, and all output is rate-limited server-side so it can't flood.

The AI chatbot plugs into any major model — OpenAI/ChatGPT, Anthropic/Claude, xAI/Grok, Google/Gemini, Perplexity, OpenRouter, Groq, Mistral, or your own self-hosted OpenAI-compatible endpoint — or sign in with your ChatGPT subscription (OAuth) instead of pasting an API key. Then:

  • Talk to it in any channel, in DMs, or privately with /ai. Your key is encrypted in your vault — nobody else can read it.
  • It's a real agent, not a parrot. It knows its own nick and (opt-in) your channels, topics and who's in them — and it can actually look around: ask "who's in #dev?" and it runs names/who/whois or joins the channel, reads the result, then answers.
  • Let it run the channel. With /aido it can op, voice, kick, ban, set the topic and more — bounded to a safe allowlist by default (or fully unrestricted YOLO mode, owner-only). Every action lands in an encrypted audit log.
  • Per-person memory that auto-clears, a strong built-in persona, and a custom system prompt if you want one.

19 built-in bots, all free and off by default:

🤖 AI Chatbot · 🌦 Weather · 📖 Urban Dictionary · 📚 Wikipedia · 📗 Dictionary · 🪙 Crypto price · 🕐 World time · 💱 Currency · 😂 Jokes · 💬 Quotes · 🧠 Facts · 🎱 8-ball · 🎲 Dice · 🪙 Coin flip · 🗒 Quote DB · 👀 Seen · ✉️ Tell (offline messages) · 📝 Notes · ❓ Help

Channel protection & moderationauto-op / auto-voice on join, flood protection and a bad-word filter with a warn → kick → kick+ban ladder and an exempt list, and an IP/host logger that records joins to your private encrypted log. All per-channel, all audited.

Available Everywhere

Platform How to Get It
Windows Download installer — native desktop app with system tray
Linux Download AppImagechmod +x and run
macOS Download zip — extract and drag to Applications
Android Open in Chrome/Brave → Menu → Add to Home Screen (PWA)
iPhone / iPad Open in Safari → Share → Add to Home Screen (PWA)
Any browser Just visit your server URL — nothing to install
Terminal cryptirc-tui — build it and run it in any shell, over SSH, inside tmux

The desktop apps and PWA give you push notifications, offline caching, and a native app feel. The web version works anywhere with a browser. And when you'd rather stay in the terminal, there's a full TUI that connects to the same account at the same time — see below.

🖥️ Terminal Client

A real TUI — not a stripped-down fallback. It logs into the same account as the web app and runs at the same time as your browser: same messages, same vault, same encrypted logs, same server-side bots.

cryptirc-tui — buffer list grouped by network, chat with wrapped messages, nick list and status bar

weechat-style layout — networks and channels on the left, members on the right, a status bar with your nick, lag and unread activity. Mouse works: click a buffer to switch, wheel to scroll. Plus Alt+1..9 to jump, Tab to cycle nick completion, paged scrollback, and the full slash-command set built the way the web client builds it.

52 built-in themes — real terminal colourschemes, switchable live with /theme and remembered:

Four of the 52 terminal themes: dracula, nord, catppuccin-mocha and phosphor-amber

$ cd tui && cargo build --release
$ ./target/release/cryptirc-tui -s https://your.server/cryptirc -u yournick

It talks the same WebSocket protocol the browser does, so it needs no changes to the server or the daemonfull details and key bindings.

Encryption — Everything is Encrypted

CryptIRC encrypts everything before it touches disk. The server cannot read your messages, logs, or credentials.

  • Encrypted logs — every message stored on the server is encrypted with your personal vault key (AES-256-GCM). Even the server admin can't read them.
  • Signal Protocol E2E for DMs — private messages use the same encryption as Signal: X3DH key agreement + Double Ratchet with authenticated headers. Forward secrecy and deniability built in.
  • Channel encryption — set a pre-shared AES-256-GCM key on any channel. Only people with the key can read messages.
  • Encrypted credentials — IRC passwords, NickServ passwords, SASL secrets are all encrypted at rest with your vault key. Never stored in plaintext.
  • Encrypted notepad — private notes encrypted server-side with your vault key.
  • Vault system — your master passphrase derives an encryption key via Argon2id. Lock the vault and the key is zeroed from memory. Auto-lock after configurable idle time.
  • Zero-knowledge architecture — the server is a dumb relay. It cannot decrypt anything.

Key Features

  • 24/7 connectivity — your server stays connected to IRC around the clock, logs everything encrypted, and syncs across all your devices
  • Updates without disconnecting — IRC connections live in a small, always-on background process, separate from the web server. Routine updates and restarts no longer part/rejoin you from every channel — only a change to that background process itself would ever require reconnecting
  • Multi-network — connect to as many IRC networks as you want simultaneously
  • Multi-device sync — messages, favorites, settings, unread counts sync across all your devices in real-time
  • Push notifications — get notified on your phone or desktop when someone DMs or mentions you, even when the app is closed
  • 227 themes (64 animated — starfields, rain, aurora, Matrix code — plus a pixel-perfect mIRC Win95 skin and a Discord theme) + 140 fonts and a live theme gallery. Customize any of them — hit ✎ on any theme to fork it into your own editable copy — and put your own picture behind any theme, with opacity, blur and dim so your chat stays readable
  • 🐑🦀👻🐟👽 Desktop pets — 25 of them. The five originals (the classic '95 eSheep that wanders, climbs walls, naps and gets abducted; a furious Angry Crab; a Ghost; a Calm Fish you can feed; a Little Alien flying saucer) plus 20 more — jellyfish, paper plane, hot-air balloon, manta, moth, snail, firefly, hedgehog, teacup, desk lamp, wind-up key, rubber duck, survey probe, Lumen, Vesper relay, data wisp, ghost lantern, paper crane, toddle cap and a moody cloud — each with 50 different behaviours. The new ones are deliberately unobtrusive: they keep to the edges and off the text you're reading, rest far more than they move, are silent, and clicks pass straight through. Up to three at a time, paused entirely when the window isn't focused, and off unless your system asks for reduced motion
  • Resizable columns — drag the divider at the edge of the channel list, the edge of the user list, or between the nicknames and the messages. Double-click a divider to reset it. Widths are remembered and sync across your devices
  • In-app News & changelog with an auto-versioning build badge, so you always see exactly what changed
  • Full IRCv3 support — 17 user-toggleable capabilities including typing indicators, away-notify, server-time, message-tags, plus SASL PLAIN/EXTERNAL and nick MONITOR
  • 100+ slash commands — everything from /ascii art to /ud Urban Dictionary lookups
  • Nick monitoring — track when specific users come online/offline with push alerts
  • Inline media — images, videos, YouTube rich cards, audio player, link previews
  • Mobile-first PWA — swipe gestures, safe-area support, works perfectly on iOS and Android
  • Deploy in one command — the installer builds both binaries and sets everything up on any Linux server

Deployment

  • Two small Rust binaries — the web server and the always-on IRC daemon — one cargo build for both
  • Interactive deploy script for Debian/Ubuntu and Arch Linux with Caddy, Postfix, and systemd
  • Automatic HTTPS via Caddy + Let's Encrypt
  • Hardened systemd units with full sandboxing (ProtectSystem, PrivateTmp, restricted syscalls, no capabilities)
  • Routine update.sh redeploys restart only the web server — the IRC daemon (and everyone's connections) stays up
  • Automatic backups on update — last 5 snapshots of all user data kept in /var/lib/cryptirc-backups/
  • Existing Caddyfile backed up before overwriting — safe for servers already running Caddy

Quick Start

# Clone
git clone https://github.com/gh0st68/CryptIRC.git
cd CryptIRC

# Deploy (Debian/Ubuntu) — single command, sets up everything
sudo bash deploy/deploy.sh yourdomain.com admin@yourdomain.com

That's it. Visit https://yourdomain.com, register an account, unlock your vault, and connect. You can sign in with either your username or your email.

Features

Themes & Personalization

227 built-in themes — 163 static + 64 animated — each hand-tuned across a full palette: five background layers, two border tiers, three text weights, matched accents and its own status colors. 90 ship an illustrated backdrop drawn in SVG. Highlights include a pixel-perfect mIRC skin with real Windows-95 window chrome, HexChat, XChat and irssi skins that copy each client's actual layout, not just its palette (right-aligned nick column with the separator rule for the GTK pair; black terminal, -!- status lines and the cyan status bars for irssi, in the two-bar adv_windowlist arrangement most people run) and a Discord theme with its familiar dark UI.

CryptIRC Theme Gallery — 227 live theme previews
Browse the live Theme Gallery →
every theme rendered as a live miniature IRC window in its own palette — search, filter and preview all 227

Make any of them yours

Hover any theme and hit . The editor opens on that exact theme — its colors, its animation, its artwork all loaded — and saving gives you your own copy, marked . The original is never touched, so you can always go back.

Your own background, on any theme. Upload an image or paste an https:// link and it sits behind every theme you switch to. Opacity, blur, dim and tiling are all on sliders — and they work on the built-in artwork too, so a theme you liked but found too busy can simply be turned down. Uploads stay on that device; a linked image follows you everywhere.

Family Examples
Editor classics Dracula · Monokai · Nord · Gruvbox · One Dark · Catppuccin · Solarized · Tokyo Night
App-inspired Discord · mIRC (full Win95 chrome) · HexChat · XChat · irssi (each with its real menubar/statusbar chrome)
Neon / cyberpunk Cyberpunk · Outrun · Blade Runner · Vaporwave · Hotline Miami · Neon Tokyo
Terminal / hacker Matrix · Hacker · Retro Terminal · Cyberdeck · CRT Terminal · Oscilloscope · Sonar
Materials & craft Blueprint · Carbon Fiber · Damascus Steel · Verdigris · Marble · Letterpress · Circuit Etch
Weather & light Blue Hour · Fog Bank · Heat Haze · Monsoon · Eclipse · Harvest Moon · Aurora · Snowfall
Living world Coral Reef · Mycelium · Butterfly Wing · Peacock · Tide Pool · Cherry Blossom · Forest Rain
Art & culture Ukiyo-e · Byzantine Gold · Kintsugi · Zellij · Sumi Ink · Runestone · Bauhaus · Art Deco
Print & optical Risograph · Halftone · Venetian · Infrared · X-Ray · Liquid Metal · Dreamcore
Mono / metal Stealth · Charcoal · Graphite · Slate · Noir · Obsidian
Warm / edible Matcha · Citrus Grove · Berry · Honeycomb · Cacao · Neapolitan · Golden Hour

…and ~180 more — see them all in the gallery.

Encryption & Security

  • Per-user vaults -- each user has their own passphrase and encryption key (Argon2id KDF + AES-256-GCM)
  • Signal-protocol E2E for direct messages -- X3DH key agreement + Double Ratchet with authenticated headers
  • Channel encryption -- pre-shared AES-256-GCM keys for group channels
  • Encrypted logs -- every line encrypted at rest with the user's vault key
  • Encrypted notepad -- private encrypted notes stored server-side
  • Encrypted credential storage -- IRC passwords, NickServ passwords, and SASL secrets never stored in plaintext
  • Vault lock/unlock -- locking the vault zeros the key from memory and disconnects IRC
  • Vault auto-lock -- configurable idle timer (5min–2hrs) automatically locks the vault
  • Client TLS certificates -- generate and manage ECDSA P-256 certs for SASL EXTERNAL
  • Zero-knowledge architecture -- the server cannot read your messages or credentials
  • SASL PLAIN protection -- refuses to send credentials over unencrypted connections
  • Upload metadata stripping -- all uploads are automatically scrubbed of metadata before being saved to disk:
    • JPEG: strips all APP1–APP15 markers (EXIF, XMP, IPTC, GPS coordinates, camera make/model, lens info, timestamps) while preserving APP0 (JFIF), quantization tables, Huffman tables, and image data
    • PNG: removes all ancillary chunks (tEXt, iTXt, zTXt, eXIf, dSIG, tIME) while preserving critical chunks (IHDR, PLTE, IDAT, IEND) and safe ancillary chunks (tRNS, gAMA, cHRM, sRGB, iCCP, pHYs)
    • Video/Audio (MP4, WebM, MP3, OGG, WAV, FLAC): uses ffmpeg to strip all metadata containers (-map_metadata -1) while copying streams untouched — no re-encoding, no quality loss
  • Block private messages -- +g mode with one-time notification per sender (3-hour cooldown)
  • Session manager -- view and revoke active sessions across devices
  • Message expiry -- configurable auto-delete of local message buffers (1hr–7days)
  • Client-side rate limiting -- configurable flood protection (200ms–3sec between messages)
  • Timing-safe comparisons -- registration codes use constant-time comparison with no length oracle
  • XSS hardened -- no inline onclick injection, prototype-pollution-safe E2E objects, comprehensive HTML escaping
  • CSP headers -- Content-Security-Policy, X-Frame-Options, X-Content-Type-Options, Referrer-Policy
  • Password complexity -- requires uppercase, lowercase, digit, and special character

IRC & IRCv3

  • Full IRC protocol support -- channels, DMs, modes, kicks, bans, CTCP, the works
  • IRCv3 capabilities (17 user-toggleable): away-notify, account-notify, extended-join, server-time, multi-prefix, cap-notify, message-tags, batch, echo-message, invite-notify, setname, account-tag, userhost-in-names, chghost, labeled-response, typing indicators, standard-replies (plus SASL, negotiated separately; nick MONITOR is a separate feature)
  • IRCv3 CAP toggle -- enable/disable individual capabilities per network in settings
  • SASL PLAIN & EXTERNAL authentication
  • Multi-network support -- connect to as many networks as you want simultaneously
  • Nick monitoring -- track when users come online/offline with push notifications
  • KeepNick -- irssi-style nick keeper with ISON polling, QUIT/NICK event detection, and auto-reclaim
  • Auto-identify -- automatically send NickServ IDENTIFY on connect (encrypted credential storage)
  • Auto-rejoin on kick -- automatically rejoin channels after being kicked (with saved channel keys)
  • Channel key manager -- store and auto-send channel keys (+k) when joining
  • Multi-device sync -- messages you send on one device appear on all your other devices
  • Typing indicators -- see when someone is typing (IRCv3 draft/typing)
  • Server-time -- accurate timestamps from the IRC server
  • ZNC playback detection -- detects and batches ZNC buffer playback with summary markers
  • Self-signed cert detection -- popup warning with one-click fix for ZNC/bouncer TLS errors
  • Status message condensing -- Lounge-style grouped join/part/quit (Show All / Condense / Hide)
  • Configurable join/part/quit message filtering
  • Infinite scroll -- load older messages from encrypted server logs on demand

Interface

  • Lounge-style layout -- clean input bar, grouped nick list, collapsible panels
  • Mobile-first PWA -- installable on iOS/Android with swipe gestures and safe-area support
  • iOS PWA keyboard handling -- works perfectly with iOS keyboard accessory bar
  • Collapsible panels -- sidebar and nick list collapse on desktop with persistent state
  • Nick list grouped by role -- Owners, Admins, Operators, Half-Ops, Voiced, Users
  • Nick context menu -- whois, query, slap, monitor, notes, kick/ban/voice/op based on power level
  • Clickable nicks in messages -- nick mentions in chat text are colored and clickable
  • Smart tab completion -- prioritizes most recent speakers, with Tab cycling
  • @nick autocomplete -- type @ to search and insert channel nicks
  • #channel autocomplete -- type # to autocomplete channel names
  • Inline media previews -- images, videos (.mp4/.webm/.mov), YouTube rich cards with title/author
  • Inline audio player -- .mp3, .ogg, .flac, .wav, .m4a, .aac, .opus with playback controls
  • GIF picker -- type /gif <search> (or /giphy) for a smooth in-line grid of results, navigable by tap or arrow keys + Enter. Powered by Giphy or Tenor -- the admin picks the provider and can set a shared key so it works for everyone with no setup, or each user can supply their own
  • Image lightbox -- click to zoom, scroll wheel zoom, pinch-to-zoom on mobile, pan when zoomed
  • Link previews -- server-side metadata fetcher with admin whitelist (SSRF protected)
  • Pastebin -- share text snippets with password protection and expiration
  • URL shortener -- built-in /shorten command creates short redirect URLs with interstitial page
  • Smart paste -- paste multi-line text and it auto-offers "send as pastebin?" instead of flooding
  • Split view -- view two channels side by side on desktop (/split)
  • Read markers -- "new messages since you were away" divider line in channels
  • User notes -- attach private notes to any nick (right-click menu or /note)
  • Seen database -- /seen nick tracks last message time and channel
  • Channel stats dashboard -- most active users with bar chart (/stats)
  • ASCII art generator -- /ascii text sends block-letter art to channel
  • Urban Dictionary -- /ud word looks up and sends definitions
  • DND mode -- Do Not Disturb with scheduled quiet hours (/dnd)
  • Encrypted notepad -- private auto-saving notes, encrypted with vault key
  • mIRC color formatting -- Ctrl+K color picker, Ctrl+B/U/I/O for bold/underline/italic/reset
  • Topic bar with mIRC color rendering and edit/copy/view menu
  • Emoji picker with colon autocomplete (:wave: style)
  • Slash command autocomplete -- type / to see all 100+ commands
  • Search -- search messages in current channel with highlighted results
  • File uploads -- drag-and-drop or paperclip, with automatic metadata stripping for images, video, and audio (configurable max size from admin panel)
  • My Uploads panel -- view, manage, and delete your uploaded files
  • Desktop & mobile push notifications -- iOS PWA support, suppressed when app is focused or DND active
  • Smart unread badges -- gray for regular messages, red for mentions and DMs
  • Mentions panel -- chat bubble icon with red dot badge for unseen mentions
  • Custom highlight words -- tag-based UI to add/remove trigger words for notifications
  • Persistent state -- everything syncs server-side (themes, favorites, unread, mentions, notes, keys, etc.)
  • Network drag-and-drop -- reorder networks with all their channels (desktop drag + mobile hold-to-drag)
  • Channel drag-and-drop -- reorder channels within a network
  • Favorites filter -- funnel icon filter bar to show only favorited channels
  • Messages inbox -- an optional pinned tab at the top of the sidebar that gathers every DM from all your networks into one unified inbox, iMessage-style (toggle in Appearance ▸ Messages tab)
  • Encryption indicators -- SVG lock/unlock icons on every channel and DM in the sidebar
  • Mobile lag indicator -- ping time shown next to channel name in topbar
  • SVG icon settings menu -- clean Lucide-style line icons, scrollable on small screens
  • Standalone security panel -- vault auto-lock, message expiry, rate limit, PM blocking, spellcheck, link previews
  • 140 fonts -- monospace, sans-serif, serif, display, and cursive/handwriting, mostly from Google Fonts
  • Clear all data -- one-click deletion of logs, notepad, and pastes with confirmation

Admin

  • Admin panel -- user management, live stats (total / online), registration settings
  • GIF Picker settings -- choose the provider (Giphy or Tenor), the mode (Off / per-user own-key / shared server key), and store the server-held Giphy + Tenor API keys (never exposed to users)
  • Max upload size -- admin-set per-file upload cap (1–500 MB)
  • Link preview controls -- pick a mode (Off / Whitelist approved-domains-only / All HTTPS links, with private IPs blocked) plus the domain whitelist
  • Registration modes -- open, invite-code, or closed (persists across reboots)
  • User management -- disable, delete, promote to admin, toggle upload permission
  • All admin settings persist to disk with mutex protection (survives server restarts)

Commands

All 100+ commands show in the / autocomplete dropdown. Type / to browse.

Channel:

Command Description
/join #channel [key] Join a channel (auto-adds # if missing)
/part [#channel] [reason] Leave a channel
/cycle Part and rejoin channel
/topic [text] View or set channel topic
/list List all channels on the server
/links Show server links
/invite nick Invite user to channel
/names Refresh the nick list
/key #channel [key] Save or clear a channel key (+k)

Messaging:

Command Description
/msg nick text Send a private message
/query nick [text] Open a DM window
/me text Send an action
/say text Send raw text to current target
/notice nick text Send a notice
/ctcp nick command Send a CTCP command
/slap nick Slap someone with a large trout

Identity & Info:

Command Description
/nick newnick Change your nickname
/away [message] Set away status
/back Remove away status
/whois nick Look up user info
/whowas nick Look up offline user
/who #channel List users in a channel

User Modes:

Command Description
/mode +mode [args] Set channel or user mode
/op /deop Give/remove operator (+o)
/voice /devoice Give/remove voice (+v)
/halfop /dehalfop Give/remove half-op (+h)
/admin /deadmin Give/remove admin (+a)
/owner /deowner Give/remove owner (+q)

Mass Operations:

Command Description
/opall Op everyone in the channel
/deopall Deop everyone
/mdop (aliases /massdeop, /drop) Strip ALL status (~&@%+) from everyone except you
/voiceall /devoiceall Voice/devoice everyone
/kickall Kick everyone except yourself

Moderation:

Command Description
/kick nick [reason] Kick a user
/ban nick Ban a user (nick!@)
/unban mask Remove a ban
/kickban nick [reason] Kick and ban
/tban nick seconds Temporary ban with auto-unban
/banlist View the ban list
/unbanall Remove ALL bans from channel
/unexemptall Remove all ban exempts (+e)
/ignore nick|mask Ignore a user (supports wildcards)
/unignore nick|mask Stop ignoring a user
/ignorelist Show your ignore list

Services:

Command Description
/ns command Send to NickServ
/cs command Send to ChanServ
/identify password Identify with NickServ
/register password email Register with NickServ
/ghost nick Ghost a nick
/regain nick Recover/regain a nick

IRCOp:

Command Description
/oper login password Authenticate as IRCOp
/kill nick reason Kill a user from the network
/shun /gline /zline /kline Server bans with duration/reason
/rehash Reload server configuration
/squit server reason Disconnect a linked server

Encryption:

Command Description
/encrypt keygen Generate Signal protocol identity
/encrypt on Enable E2E for current DM
/encrypt off Disable E2E for current DM
/encrypt add #channel Set a channel encryption key
/encrypt rotate Rotate your E2E keys

Tools:

Command Description
/ascii text Generate ASCII block-letter art
/ud word Urban Dictionary lookup (sends to channel)
/gif query (alias /giphy) Search a GIF and send the top match; add a trailing space to open the live picker; /gif key <k>, /gif rating <g|pg|pg-13|r> — Giphy or Tenor (admin-selectable)
/shorten url Shorten a URL with built-in shortener
/stats Channel statistics dashboard (top talkers)
/note nick [text] Set or view private notes on a nick
/seen nick When a nick was last seen and where
/dnd on|off Toggle Do Not Disturb mode
/dnd schedule HH:MM HH:MM Schedule quiet hours
/split Toggle split view (two channels side by side)
/keepnick [nick] Keep a nick (auto-reclaim via ISON + events)
/unkeepnick Stop keeping a nick
/listnick List all kept nicks with status
/ratelimit ms Set message rate limit (default 500ms)
/expire hours Auto-delete old messages (0 = off)
/autolock minutes Vault auto-lock after inactivity (0 = off)

Connection:

Command Description
/connect Connect to the current server
/disconnect Disconnect from the current server
/quote text Send a raw IRC command

Client:

Command Description
/close Close the current DM or channel tab
/clear Clear current chat history
/clearall Clear ALL chat buffers
/help Show help panel with all commands
/ping nick CTCP ping a user
/version nick CTCP version a user
/time nick CTCP time a user
/monitor nick Monitor nick online/offline
/unmonitor nick Stop monitoring
/advertise (alias /ad) Post the CryptIRC promo banner to the current channel

Fun & Emotes:

Command Output
/prism text · /prism on|off Rainbow mIRC colored text, or toggle rainbow for all your outgoing messages
/color <fg>[,<bg>] · /color off Set a persistent mIRC colour for your messages (codes 0–15 or names like red, blue)
/shrug ¯\_(ツ)_/¯
/tableflip (╯°□°)╯︵ ┻━┻
/unflip ┬─┬ノ( º _ ºノ)
/lenny ( ͡° ͜ʖ ͡°)
/disapprove ಠ_ಠ
/rage (ノಠ益ಠ)ノ彡┻━┻
/bear ʕ•ᴥ•ʔ
/sparkle text ✧・゚: *✧ text ✧*:・゚✧
/finger ╭∩╮(︶︿︶)╭∩╮
/dance ♪┏(・o・)┛♪┗(・o・)┓♪
/rip name ⚰️ R.I.P. name ⚰️
/hug nick (づ。◕‿‿◕。)づ nick

Keyboard Shortcuts:

Shortcut Action
Ctrl+K mIRC color picker (16 colors, fg+bg)
Ctrl+B Bold text
Ctrl+U Underline text
Ctrl+I Italic text
Ctrl+O Reset formatting
Tab Smart nick completion (most recent speaker first, cycles)
@ Nick autocomplete dropdown
# Channel autocomplete dropdown
: Emoji autocomplete
/ Slash command autocomplete (100+ commands)
Escape Close autocomplete / overlays
/ Input history navigation
Enter Send message

Settings

Accessible from the sidebar gear menu:

Panel Contents
Notifications Push alerts, desktop popups, sounds, trigger rules, custom highlight words (tag UI), per-network mute
Theme 227 themes (64 animated), 140 fonts, customize any theme, font sizes, layout, display options, compact mode, colors, brightness, mobile overrides
Security Vault auto-lock timer, message expiry, rate limit, block PMs (+g), auto-rejoin, link previews, spellcheck
Monitor Nick online/offline tracking with push notifications
Notepad Private encrypted auto-saving notes
Certs Client TLS certificate management for SASL EXTERNAL
IRCv3 Caps Toggle individual IRCv3 capabilities per network
Ignored Users Manage ignore list (nick and wildcard mask support)
My Uploads View, manage, and delete uploaded files with thumbnails
Sessions View and revoke active sessions across devices
Vault Password Change vault passphrase (re-encrypts all data)
Help Complete command reference, features list, keyboard shortcuts
Admin User management, registration settings, link-preview mode (off/whitelist/all), GIF picker (provider/mode/keys), max upload size

Deployment

  • Two small Rust binaries (web server + always-on IRC daemon) -- one cargo build for both
  • Interactive deploy script for Debian/Ubuntu and Arch Linux with Caddy, Postfix, and systemd
  • Automatic HTTPS via Caddy + Let's Encrypt
  • Hardened systemd units with full sandboxing
  • Routine updates restart only the web server -- IRC connections stay up through them

Architecture

The IRC connection itself lives in a small always-on daemon (irc-core), separate from the web server (cryptirc) that does everything else. Routine web-server updates and restarts never touch the daemon, so nobody's IRC connection drops.

The terminal client speaks that same WebSocket protocol, so a browser and a TUI can be signed into one account simultaneously — the web server fans every event out to all of a user's sessions.

Browser (PWA) ------.
cryptirc-tui -------+   (both, at the same time, same account)
  |-- E2E encryption (Signal protocol, Web Crypto API)
  |-- Per-user vault unlock (Argon2id KDF -> AES-256-GCM)
  '-- WebSocket --> cryptirc (Rust/Axum, web server)
                      |-- Per-user encrypted log storage
                      |-- Push notifications (Web Push / VAPID)
                      |-- Pastebin with password protection
                      |-- URL shortener with interstitial page
                      |-- File uploads with metadata stripping
                      |-- Session management
                      |-- Email verification (Postfix)
                      '-- Unix socket --> irc-core (always-on daemon)
                                            |-- IRC connections (TLS + IRCv3)
                                            |-- SASL / registration / CAP negotiation
                                            |-- Reconnect + backoff
                                            '-- Survives web server restarts

Tech Stack

Layer Technology
Backend Rust, Tokio, Axum
Encryption AES-256-GCM, Argon2id, HKDF-SHA256, Signal Protocol (X3DH + Double Ratchet + Authenticated Headers)
TLS OpenSSL (client certs), native-tls (IRC connections), rustls (outbound HTTP: link previews, GIF search, Web Push)
Frontend Vanilla JS, Web Crypto API, SVG icons (Lucide), CSS custom properties
Push Web Push with VAPID (RFC 8292), iOS PWA support
IRC IRCv3.2 with CAP negotiation (17 capabilities, user-toggleable)
Reverse Proxy Caddy (automatic HTTPS via Let's Encrypt)
Mail Postfix (local relay)

Configuration

Variable Default Description
CRYPTIRC_DATA ./data Path to the data directory
CRYPTIRC_BASE_URL http://localhost:9000 Public URL of your instance
CRYPTIRC_BASE_PATH /cryptirc URL path prefix
CRYPTIRC_PORT 9001 Port the server listens on
CRYPTIRC_HSTS on Set to off to disable the HSTS header (for self-signed / bare-IP deployments)
CRYPTIRC_FROM_EMAIL noreply@cryptirc.local Sender address for emails
CRYPTIRC_REGISTRATION open Registration mode: open, closed
CRYPTIRC_REG_CODE (none) Invite code required for registration
CRYPTIRC_IPC_SOCK $CRYPTIRC_DATA/irc-core.sock Unix socket path between the web server and the irc-core daemon
RUST_LOG info Log level

Requirements

  • Rust 1.78+
  • Linux — Debian 12, Ubuntu 22.04+, or Arch Linux (dedicated installer for each)
  • A domain name with an A record pointing to your server (or a bare IP for a self-signed cert)
  • Ports 80 and 443 open

License

Private. All rights reserved.