HexDroid is a free and open source IRC client for Android. It provides a clean, modern interface while supporting the features users expect from a desktop client — including IRCv3 capabilities, SASL authentication, TLS encryption, bouncer support, DCC file transfers, and an array of commands.
Requirements: Android 8.0 (API 26) or higher · License: GPLv3
- Multi-network — connect to multiple servers simultaneously, each with independent nick, SASL, TLS, autojoin, and encoding settings
- IRCv3 — 40+ capabilities including
chathistory,away-notify,server-time,echo-message,draft/typing, MONITOR, bouncer-specific caps, and more - Security — TOFU certificate pinning, SASL (PLAIN / SCRAM-SHA-256 / EXTERNAL), client certificates, Android Keystore credential storage
- Localisation — Arabic, Chinese, Dutch, French, German, Italian, Japanese, Korean, Polish, Portuguese, Russian, Spanish, Turkish
- Material Design 3 with light, dark, and Matrix (green-on-black) themes
- Adjustable font family (Open Sans, Inter, Monospace, custom TTF/OTF) and size, separately for UI and chat
- mIRC colour rendering with 99-colour picker + ANSI colour rendering
- Nick
@autocomplete and/commandcompletion with inline hint chips - Channel op panel: topic, key, user limit; ban/quiet/except/invex list management
- IRCop tools panel (visible when umode
+o): K/G/D/Z-line, Shun, Kill, SAJoin/SAPart, WALLOPS/GLOBOPS/LOCOPS, MOTD, Links, Uptime - Per-network ignore list (case-insensitive; covers chat, notices, and DCC offers)
- Channel list with live search and typing indicators displayed per-buffer
- Lag indicator, swipe gestures, compact mode, intro tour for new users
- Backup/restore: network profiles and settings exported as JSON
HexDroid negotiates a comprehensive set of capabilities. All are enabled by default unless noted.
Core message infrastructure
| Cap | Notes |
|---|---|
message-tags |
Base for all tag-based features |
server-time |
Timestamps on every message, including history replay |
echo-message + labeled-response |
Outbound message confirmation; deduplication via msgid |
batch |
chathistory, event-playback, and labeled-response grouping |
message-ids |
Unique msgid per message; prevents duplicates during chathistory overlap |
standard-replies |
Structured FAIL/WARN/NOTE from Ergo, soju, InspIRCd |
utf8only |
Signals UTF-8 intent to server |
History & read state
| Cap | Notes |
|---|---|
chathistory / draft/chathistory |
Replay on join; BEFORE paging on scroll-to-top; LATEST for unread catch-up |
draft/event-playback |
JOIN/PART/MODE events included in history batches |
draft/read-marker / soju.im/read |
Read pointer sync; drives the unread separator line |
Membership & presence
| Cap | Notes |
|---|---|
away-notify |
* nick is now away / * nick is back in every shared channel; initial away state seeded from WHOX flags on join |
account-notify |
Services login/logout notifications |
extended-join |
JOIN line shows [logged in as account] for authenticated users |
chghost |
Live ident/hostname changes reflected in nicklist |
setname |
Receive realname changes; send your own with /setname |
multi-prefix |
Full mode prefix stack in NAMES (e.g. @+nick) |
invite-notify |
Notifies all channel members of /invite |
monitor / draft/extended-monitor |
Nick watch list; MONONLINE/MONOFFLINE notifications |
| WHOX (005 ISUPPORT) | WHO %uhsnfar on join seeds ident, host, account, and initial away state |
Messaging
| Cap | Notes |
|---|---|
account-tag |
Sender account exposed on every PRIVMSG/NOTICE |
draft/typing |
Composing indicators; sending opt-in (off by default), receiving opt-out |
draft/message-reactions |
Emoji reactions via TAGMSG +draft/react; displayed as status lines |
+draft/reply |
Reply-to msgid threading; forwarded on PRIVMSG and RELAYMSG |
draft/relaymsg |
Relay bot messages attributed to the relayed nick (off by default) |
Channel management & bouncer / vendor caps
| Cap | Notes |
|---|---|
draft/channel-rename |
Buffer keys, nicklists, and selected buffer all updated on server-issued RENAME |
soju.im/bouncer-networks + soju.im/bouncer-networks-notify |
Multi-upstream support via soju |
soju.im/read |
soju read-marker protocol (parallel to draft/read-marker) |
soju.im/no-implicit-names / draft/no-implicit-names |
Suppress auto-NAMES on JOIN (avoids flood on reconnect) |
znc.in/server-time-iso |
Legacy ZNC < 1.7 timestamps |
znc.in/playback |
ZNC *playback module for missed-message replay |
Automatic detection starting from UTF-8, with fallback to windows-1251, KOI8-R, ISO-8859-1/15, GB2312, Big5, Shift_JIS, EUC-JP, EUC-KR, and more. Manual override per network for legacy servers.
- DCC SEND and DCC CHAT with active, passive, and auto modes
- Configurable incoming port range and download folder
- Rich transfer progress cards with one-tap accept from notification
- Incoming DCC CHAT offers create a buffer immediately and deep-link from notification
|
Google Play |
IzzyOnDroid |
Direct APK |
Build from source:
git clone https://github.com/boxlabss/hexdroid.git
cd hexdroid
./gradlew assembleRelease- Tap Networks → + and enter a server hostname and port (
6697for TLS) - Set your nickname; optionally configure SASL credentials
- Save and tap Connect
- Use
/join #channelor tap Channel list to browse
Full documentation at hexdroid.boxlabs.uk.
No ads, analytics, crash reporters, or third-party SDKs. The app communicates only with the IRC servers you configure. All data is stored locally and deleted with the app.
| Where | Link |
|---|---|
| Docs | hexdroid.boxlabs.uk |
| android@boxlabs.co.uk | |
| IRC | #HexDroid on irc.afternet.org |
Open an issue before submitting a pull request for non-trivial changes. Bug reports should include:
- Device model and Android version
- HexDroid version
- Steps to reproduce
- Relevant logcat output
Built with Kotlin · Jetpack Compose · Material Design 3
