Core Features
The fundamentals of the IRC experience in HexDroid.
Multi-Network
- Multiple simultaneous connections
- Auto-connect on app startup (per network)
- Auto-reconnect with exponential backoff
- Auto-join channels with optional keys
- Post-connect commands with configurable delay
- Pin / favourite networks to top of list
- Drag-and-drop network reordering in sidebar and Networks screen
Secure by Default
- TLS 1.2 / TLS 1.3 (default on)
- SASL PLAIN, SCRAM-SHA-256, EXTERNAL
- TLS client certificates (.pem, .crt+.key, or .p12/.pfx)
- TOFU certificate pinning learns the server SHA-256 fingerprint on first connect, verifies it on every subsequent connect, refuses mismatches with a clear warning
- IRCv3 STS honours server Strict Transport Security policies: a plaintext connection upgrades to TLS automatically, the TLS-only policy persists per host, and certificate errors cannot be bypassed while a policy is active
- TLS session resumption via shared
SSLContextcache - SASL credentials in
EncryptedSharedPreferences - Credentials excluded from Android backup
- End-to-end message encryption AES-256-GCM (
+AGM) and Blowfish/FiSH (+OK). Read the encryption guide
Backup & Restore
- Export every network and setting to a single JSON file, portable between devices
- SASL credentials and client certificates are not exported, for security
- See Getting Started → Moving to a new device
Character Encoding
- Auto-detect per message (UTF-8 fallback)
- Manual encoding per network
windows-1251Russian/CISKOI8-Rolder Cyrillic systemsISO-8859-1/15Western European- Any encoding supported by Java's
Charset
Bouncer Support
- Works with soju, ZNC, kiwibnc, pounce and anything following the
user/networkconvention - Per-client buffers on ZNC and per-client history on soju, so each device keeps its own read position
- Native chathistory playback on both
/zncand/bouncerserv(alias/bnc) talk to the bouncer directly- See Getting Started → Bouncers to set one up
Server-Aware Limits
- Topic, away, quit and kick text is trimmed to the server's
TOPICLEN/AWAYLEN/QUITLEN/KICKLENbefore sending - History requests respect the server's
CHATHISTORYsize limit andMSGREFTYPESselectors /knock <#channel> [reason]asks for an invite where the server advertisesKNOCK- The “too many channels” error reads the server's
CHANLIMITfigure - Bot users are badged
[bot]from theBOTmode letter or thebotmessage tag
IRCv3 Capabilities
HexDroid negotiates capabilities during the connection handshake, and each one can be switched off per network under IRCv3 Capabilities in network settings. The cards below cover what you actually see in the app; the tables after them are the complete list.
What you get on a modern server
Message Reactions
- React to a recent message with an emoji via
/react <emoji> [n] [n]targets the message n lines back (default 1)- Remove your reaction with
/unreact <emoji> [n] - Reaction counts render inline under the message
- Requires
draft/message-reactions; otherwise sent as a plain notice
Typing Indicators
- Shows when others are composing a message in a channel or query
- Sends your own typing state as you type, stopping when you send or clear the input
- Sent as the
+typingclient tag overmessage-tags; respects a server'sCLIENTTAGDENYpolicy - Purely transient - never logged or stored
File Uploads (Filehost)
- Attach button in the chat input when the server offers a
soju.im/FILEHOSTupload endpoint (soju; others viaadditional-isupport) - Uploads use your existing connection credentials - nothing extra to configure
- The returned URL lands in the input so you can add text before sending
- Refuses plaintext
http://filehosts on TLS connections - For non proxied (Tor/SOCKS) networks so the upload can never leak outside the proxy
- Toggleable per network under IRCv3 Capabilities
Message Deletion
- Long-press one of your own messages › Delete message to remove it for everyone
- Uses IRCv3
draft/message-redaction(REDACT); the server relays the deletion to all clients - Deleted messages become (“message deleted by …”) rather than silently vanishing
- Applied only when the server confirms, so a rejected delete never leaves your view out of sync
- Available on servers that advertise the cap
Account Registration
- A guided Register account dialog (overflow menu) walks through register → email verify → done via IRCv3
draft/account-registrationno NickServ syntax to learn - Fields adapt to the server: email required, custom account names
- Optionally save the password so SASL logs you in automatically next time
/registerand/verify <code>drive the same flow from the command line; the account is remembered from the server's prompt- Registration failures come back as plain-language hints, not bare error codes
- Falls back to a NickServ pointer on servers without the capability
Display Names & Metadata
- Users who set a
display-namehave it shown beside their nick, Discord-style; acolortints their nick - Tap a nick to see their avatar and status; avatars follow the same rules as other remote images: previews on, HTTPS only, never on proxied profiles
- Values are sanitised on arrival: control characters and colour codes stripped, length capped
- A metadata editor (overflow menu, or
/metadata) sets your own display name, status, colour, avatar and more;/metadata <nick> listreads someone else's - Uses IRCv3
draft/metadata-2; subscriptions are set up automatically on connect
HexDroid negotiates around fifty capabilities in total, and each can be switched off per network. See the full capability list for what it does with every one.
User Experience
Material 3 Interface
- Jetpack Compose + Material Design 3
- Dark, Light, Matrix (green-on-black), and system themes
- Adjustable font size
- Open Sans, Inter, Monospace fonts
- mIRC/ANSI colour code rendering
- 99-colour code picker
- Colourised nicknames
- Landscape split-pane with draggable dividers
Notifications
- Highlights on your nick, private messages, and custom keywords you define
- Separate silent and sound notification channels; vibration Low / Medium / High
- See Getting Started → Staying connected to set them up
Usability
- Link previews for images and video
- Nick completion (@..) or nicklist mention
- Clickable URLs and email addresses
- Long-press to copy message text
- Swipe left on buffer to close / part
- Channel topic bar (optional)
- Lag indicator in toolbar
- Guided intro tour for new users
- Configurable scrollback limit (default 800)
- Hide JOIN/PART/QUIT globally
User / Channel Actions
- Nick action sheet: WHOIS, query, mention, DCC, ignore/unignore
- Channel mode panel with descriptions
- Ban/quiet/except/invex list management
- IRCop tools: kick-ban, force join/part, broadcast
Nick & Command Completion
@mentionpopup insertsnick:at start or@nickinline/-completion bar for all slash commands- NickServ/ChanServ shorthand:
ns,cs,as,hs,ms,bs
Inline Media Previews
- In-line image previews with a "Load preview" button
- Embedded YouTube video player
- Inline X / Twitter video playback from X post links (HLS via Media3 / ExoPlayer)
- Images capped at 5 MB; Wi-Fi-only mode available
- Disabled by default opt in under Settings › Media Previews
Readline Marker
- Thin line marks where you stopped reading
- Only appears when scrolling up past visible messages
- Resets automatically when you reach the bottom
Ignore List
- Per-network ignore list
- Case-insensitive nick matching
/ignore nickor via Settings UI- Ignored messages silently hidden
Chat Logging
- Optional per-session logging (off by default)
- Configurable retention (default 14 days)
- Custom folder via Android SAF
- Server buffer logging (optional)
/find keywordsearches scrollback & logs
DCC File Transfers
DCC SEND, CHAT & Passive
- DCC send/receive files from other users
- DCC SSEND Encrypted file transfers
- DCC CHAT direct peer-to-peer text sessions
- Passive / Reverse DCC HexChat-compatible token handshake; useful behind NAT
- Turbo DCC (TSEND) no per-packet ACKs for faster throughput
- Full IPv6 DCC addressing for SEND, CHAT and passive transfers
- Progress tracking in the Transfers screen
- Incoming port range configurable for NAT/firewall forwarding
- Received files saved to Downloads (or custom folder via SAF)
- DCC disabled by default enable in Settings
Security note
DCC establishes direct connections between clients. Only accept files from users you trust.
Passive DCC means you initiate the connection to the sender works better behind NAT/CGNAT.
Large Files (> 4 GB)
- Files larger than 4 GB use 64-bit (8-byte) DCC acknowledgements
- Smaller transfers keep the standard 4-byte acks
- Both big- and little-endian ack widths are accepted for mIRC compatibility
- Streamed transfers of unknown size (
size 0) also use 64-bit acks
Resume Interrupted Transfers
- A failed download remembers its partial bytes (peer + filename + size + path)
- Re-offering the same file shows a Resume button beside Accept / Reject
- Honours incoming
DCC RESUMEon your outgoing sends, replyingDCC ACCEPTfrom the agreed offset - Partial state survives restarts, is pruned after 30 days, and tolerates corruption
Proxy/Tor
- Transfers route through the network's configured SOCKS5 / SOCKS4a proxy
- Works over Tor (via Orbot) alongside the IRC connection
- See Getting Started > Proxy & Tor