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
- Bouncer support supports ZNC and soju. Discover and clone profiles when connecting without a network profile.
- 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
- irc:// and ircs:// — tapping IRC links in other apps opens HexDroid directly and connects to the target network and channel
- 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
- Inline image and video link previews
- ASCII art rendering with auto-sized MOTD display
- 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 |
utf8only |
Signals UTF-8 intent to server |
draft/multiline |
When the server supports multiline for messages over 512 bytes |
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) |
userhost-in-names |
Full nick!user@host in NAMES replies (off by default) |
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 / 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 |
Reply-to msgid threading; forwarded on PRIVMSG and NOTICE |
draft/relaymsg |
Relay bot messages attributed to the relayed nick (off by default) |
pre-away / draft/pre-away |
Sends AWAY before 001 so the session starts marked away when an away message is configured |
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
- Secure DCC — SSEND and SCHAT for TLS-encrypted file transfers and chat sessions
- 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 Available via the IzzyOnDroid F-Droid repo. Not yet in the main F-Droid repository. |
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.
The Play Store and IzzyOnDroid releases are reproducibly buildable — the APK produced from source matches the distributed binary byte-for-byte. The RB Status badge above links to the verification record. To verify locally:
./gradlew assembleRelease
# Compare the output APK against the downloaded release APKNo 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. See the full privacy policy.
See CHANGELOG.md for the full version history.
| Where | Link |
|---|---|
| Docs | hexdroid.boxlabs.uk |
| android@boxlabs.co.uk | |
| IRC | #HexDroid on irc.afternet.org |
Bug reports and pull requests are welcome. Please open an issue before submitting a PR for non-trivial changes.
Bug reports should include:
- Device model and Android version
- HexDroid version (Settings → About)
- Steps to reproduce
- Relevant logcat output (Android Studio > Logcat, filter by
hexdroid)
Development setup:
- Clone the repo and open in Android Studio Meerkat (2024.3) or later
- Sync Gradle — no additional configuration required
- Run on a device or emulator with API 26+
- Tests:
./gradlew testfor unit tests,./gradlew connectedAndroidTestfor instrumented tests
Translations are managed in the string resources under app/src/main/res/values-*/. If your language is missing or incomplete, a PR updating the relevant strings.xml is very welcome.
HexDroid — IRC Client for Android
Copyright (C) 2026 boxlabs
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Full license text in LICENSE.
Built with Kotlin · Jetpack Compose · Material Design 3



