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 and persists server SHA-256 fingerprint on first connect
  • SASL credentials in EncryptedSharedPreferences
  • Credentials excluded from Android backup

Backup & Restore

  • Export all network configurations to a JSON file
  • Import to restore networks and settings
  • Portable between devices
  • Accessible from Settings > Backup & Restore
  • SASL credentials are not exported for security

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

  • Dedicated bouncer mode per network
  • Skips auto-join (bouncer manages channels)
  • ZNC: znc.in/server-time-iso, znc.in/playback
  • soju: soju.im/bouncer-networks, soju.im/read
  • Ergo / soju: native chathistory playback
  • MOTD pass-through for bouncer status

IRCv3 Capabilities

HexDroid negotiates capabilities during the connection handshake. Each capability can be toggled per network in the IRCv3 Capabilities section of network settings. Badges: graduated = finalized spec · draft = draft spec · vendor = implementation-specific.

Core Message Infrastructure

CapabilityStatusWhat HexDroid does
message-tagsgraduatedParses and propagates @tag=value metadata on incoming messages
server-timegraduatedDisplays accurate timestamps on all messages, including replayed history
echo-messagegraduatedUses server-echoed messages as authoritative sent events instead of local echo
labeled-responsegraduatedCorrelates command responses with their triggering requests
batchgraduatedProcesses grouped message batches (chathistory, netsplit, etc.) atomically
utf8onlygraduatedSignals UTF-8 capability; enforces UTF-8 output on utf8only networks
message-idsgraduatedTracks unique msgid tags for deduplication of chathistory replays
standard-repliesgraduatedParses FAIL/WARN/NOTE replies and surfaces them contextually per buffer

History & Read State

CapabilityStatusWhat HexDroid does
chathistorygraduatedRequests recent message history on join (Ergo 2.11+, soju 0.7+)
draft/chathistorydraftSame as above for servers on the earlier draft spec
draft/event-playbackdraftReplays channel state events (joins, modes) alongside message history
draft/read-markerdraftSyncs read position with the server for multi-client read-state tracking
soju.im/readvendorsoju-specific read-marker sync

Membership & Presence

CapabilityStatusWhat HexDroid does
account-notifygraduatedUpdates account name when a user logs in/out of services
away-notifygraduatedTracks away/back state for all channel members in real time
chghostgraduatedUpdates the user's displayed hostmask when it changes without a rejoin
extended-joingraduatedReceives account name and real name in JOIN; displayed in user info panel
multi-prefixgraduatedShows all channel prefixes a user holds (e.g. @+nick for op+voice)
userhost-in-namesgraduatedReceives full nick!user@host in 353 NAMES reply
invite-notifygraduatedNotifies you when another user is invited to a channel you're in
monitorgraduatedWatches for a list of nicks coming online/offline
draft/extended-monitordraftExtended MONITOR with account and away state in notifications
pre-awaygraduatedSends AWAY before 001 registration when configured as away

Messaging

CapabilityStatusWhat HexDroid does
account-taggraduatedSurfaces the sender's services account name as a per-message tag
typinggraduatedShows a typing indicator when a user is composing (with privacy controls)
draft/typingdraftSame as above for servers on the earlier draft spec — both are negotiated simultaneously
saslgraduatedAuthenticates using PLAIN, SCRAM-SHA-256, or EXTERNAL during handshake
setnamegraduatedEnables /setname to change your real name on the fly without reconnecting
draft/message-reactionsdraftReceives TAGMSG-based emoji reactions; displayed inline on messages
draft/relaymsgdraftRenders RELAYMSG-relayed messages with the original sender identity shown

Bouncer / Vendor

CapabilityStatusWhat HexDroid does
znc.in/server-time-isovendorParses ZNC's legacy server-time format for accurate timestamps on playback
znc.in/playbackvendorUses ZNC's playback module to request missed messages
soju.im/bouncer-networksvendorEnumerates per-network sessions from a single soju connection
soju.im/bouncer-networks-notifyvendorReceives push notifications when the soju network list changes
draft/channel-renamedraftFollows channel renames in real time without user intervention
draft/no-implicit-namesdraftOpts out of implicit 353 NAMES on join; uses explicit NAMES request instead

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

  • Highlight notifications (nick mention)
  • Private message alerts
  • Custom highlight words (case-insensitive)
  • Sound on highlight (optional)
  • Vibration: Low / Medium / High
  • Silent vs. sound notification channels
  • Persistent connection status notification

Usability

  • Link previews for images and video
  • Nick completion (Tab key or button)
  • 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

  • Tab key or toolbar button to complete nicks
  • @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 "Load preview" button
  • Embedded YouTube video player
  • Images capped at 5 MB; Wi-Fi-only mode available
  • Disabled by default — opt-in in Settings

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
  • 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.

Settings Reference

Global settings available in the app's Settings screen.

Appearance

SettingDescriptionDefault
Font sizeChat text size across all buffersSystem
Font familyOpen Sans, Inter, or MonospaceOpen Sans
Colorise nicksConsistent colour per nicknameOn
Custom nick colourCustomise the colour of your nickAuto
Show topic barChannel topic above message listOn
Hide JOIN/PART/QUITSuppress join/part/quit events globallyOff
Hide topic on entrySuppress topic being displayed when joining channelsOff
Scrollback limitMax lines per buffer kept in memory800

Inline Media

SettingDescriptionDefault
Inline media enabledShow image and YouTube previews inline in chatOff
Wi-Fi onlyOnly load media previews when connected to Wi-FiOff

Notifications

SettingDescriptionDefault
Notifications enabledMaster toggle for all notificationsOn
Notify on highlightsAlert when your nick is mentionedOn
Notify on PMAlert on incoming private messagesOn
Extra highlight wordsAdditional trigger words (case-insensitive)
Sound on highlightAudible alertOff
Vibrate on highlightHaptic feedbackOff
Vibration intensityLow, Medium, or HighMedium

Connection

SettingDescriptionDefault
Keep alive in backgroundForeground service to maintain connectionOn
Auto-reconnectReconnect on unexpected disconnectionOn
Reconnect delaySeconds before first retry10 s
History limitMessages fetched via chathistory on join50
History counts as unreadMark replayed history as unreadOff
History triggers notificationsSend notifications for replayed messagesOff

Logging

SettingDescriptionDefault
Logging enabledWrite chat messages to log files on deviceOff
Log server bufferAlso log server/status messagesOff
Retention periodDelete logs older than N days14 days
Log folderCustom folder via SAF (default: app-private)

Backup & Restore

ActionDescription
Export backupSave all network configurations and settings to a JSON file
Import backupRestore networks and settings from a previously exported JSON file

DCC

SettingDescriptionDefault
DCC enabledMaster toggle for all DCC featuresOff
DCC send modeActive, Passive, or AutoAuto
Incoming port rangePorts to listen on (for router forwarding)5000–5010
DCC download folderCustom folder for received filesDownloads