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 SSLContext cache
  • 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

Character Encoding

  • Auto-detect per message (UTF-8 fallback)
  • Manual encoding per network
  • windows-1251 Russian/CIS
  • KOI8-R older Cyrillic systems
  • ISO-8859-1/15 Western European
  • Any encoding supported by Java's Charset

Bouncer Support

  • Works with soju, ZNC, kiwibnc, pounce and anything following the user/network convention
  • Per-client buffers on ZNC and per-client history on soju, so each device keeps its own read position
  • Native chathistory playback on both
  • /znc and /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 / KICKLEN before sending
  • History requests respect the server's CHATHISTORY size limit and MSGREFTYPES selectors
  • /knock <#channel> [reason] asks for an invite where the server advertises KNOCK
  • The “too many channels” error reads the server's CHANLIMIT figure
  • Bot users are badged [bot] from the BOT mode letter or the bot message 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 +typing client tag over message-tags; respects a server's CLIENTTAGDENY policy
  • Purely transient - never logged or stored

File Uploads (Filehost)

  • Attach button in the chat input when the server offers a soju.im/FILEHOST upload endpoint (soju; others via additional-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-registration no 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
  • /register and /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-name have it shown beside their nick, Discord-style; a color tints 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> list reads 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

  • @mention popup inserts nick: at start or @nick inline
  • /-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 nick or 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 keyword searches 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 RESUME on your outgoing sends, replying DCC ACCEPT from 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