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.

17 min read Original article ↗

CryptIRC

End-to-end encrypted IRC client for the web

Rust AES-256-GCM Signal Protocol Version Themes Fonts Commands License

🎨 Browse the live Theme Gallery · Launch the hosted client · Download apps

For support, bugs, or just want to stop by:
irc.twistednet.org#dev & #twisted

👻 Developed by gh0st

Don't feel like setting up your own? Use ours — free.
Register at https://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. All your logs, DMs, credentials, and notes are encrypted with that key before they touch disk — even we can't read them.

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.

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

The desktop apps and PWA give you push notifications, offline caching, and a native app feel. The web version works anywhere with a browser.

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
  • 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
  • 172 themes (32 animated — starfields, rain, aurora, Matrix code — plus a pixel-perfect mIRC Win95 skin: title/menu/tool/status bars, <nick> brackets, [HH:MM] timestamps) + 139 fonts, a live theme gallery, and a full custom theme editor
  • 🐑🦀👻 Desktop pets — three to pick from (desktop, mobile, or both): the classic '95 eSheep (wanders, climbs walls, naps, UFO abduction), a furious Angry Crab (scuttles sideways, snaps its claws, eats shrimp, naps, digs — drag it around, and it pesters the sheep), and a friendly Ghost (floats freely, fades through walls, the odd spooky "BOO!"). The sheep and crab are draggable
  • In-app News & changelog with an auto-versioning build badge, so you always see exactly what changed
  • Full IRCv3 support — 17 capabilities including typing indicators, away-notify, SASL, 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
  • Single Rust binary — deploy in one command on any Linux server

Deployment

  • Single binary — one cargo build and you're done
  • Interactive deploy script for Debian/Ubuntu and Arch Linux with Caddy, Postfix, and systemd
  • Automatic HTTPS via Caddy + Let's Encrypt
  • Hardened systemd unit with full sandboxing (ProtectSystem, PrivateTmp, restricted syscalls, no capabilities)
  • 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.

Features

Themes & Personalization

172 built-in themes — 140 static + 32 animated (starfields, forest rain, aurora, Matrix code, the UFO/eSheep alien sequence, synthwave grids, and more), including a pixel-perfect mIRC skin with full Windows-95 window chrome. Each is hand-tuned across a 10-color palette. Plus a full custom theme editor (build your own, drop in a background image, customize link colors) and a separate mobile theme, so your phone and desktop can look completely different.

CryptIRC Theme Gallery — 171 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 171

A taste of the range:

Family Examples
Editor classics Dracula · Monokai · Nord · Gruvbox · One Dark · Catppuccin · Solarized · Tokyo Night
Neon / cyberpunk Cyberpunk · Outrun · Blade Runner · Vaporwave · Hotline Miami · Neon Tokyo
Terminal / hacker Matrix · Hacker · Retro Terminal · Cyberdeck · Firewall
Nature / seasonal Aurora · Snowfall · Cherry Blossom · Ocean · Forest Rain · Northern Lights
Mono / metal Stealth · Charcoal · Graphite · Slate · Noir · Obsidian
Gemstone / warm Emerald · Ruby · Sapphire · Amethyst · Lava · Copper · Golden Hour

…and ~140 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: 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, MONITOR
  • 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
  • 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
  • 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
  • 139 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, stats, registration settings
  • Link preview whitelist -- admin controls which domains get metadata fetched
  • Registration modes -- open, invite-code, or closed (persists across reboots)
  • User management -- disable, delete, promote to admin
  • 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 Mass deop all except yourself
/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)
/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

Fun & Emotes:

Command Output
/prism text Rainbow mIRC colored text
/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 171 themes (32 animated), 139 fonts, custom theme editor, 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 whitelist

Deployment

  • Single binary -- one cargo build and you're done
  • Interactive deploy script for Debian/Ubuntu with Caddy, Postfix, and systemd
  • Automatic HTTPS via Caddy + Let's Encrypt
  • Hardened systemd unit with full sandboxing

Architecture

Browser (PWA)
  |-- E2E encryption (Signal protocol, Web Crypto API)
  |-- Per-user vault unlock (Argon2id KDF -> AES-256-GCM)
  '-- WebSocket --> CryptIRC Server (Rust/Axum)
                      |-- IRC connections (TLS + IRCv3)
                      |-- 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)

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 (server connections)
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 or Nginx (automatic HTTPS)
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_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
RUST_LOG info Log level

Requirements

  • Rust 1.78+
  • Linux (Debian 12 / Ubuntu 22.04+ recommended)
  • A domain name with an A record pointing to your server
  • Ports 80 and 443 open

License

Private. All rights reserved.