Uplink app icon
v0.25.17 · Qt6 / C++ · MIT · 21 IRCv3 caps

IRC, with everything
the protocol can do today.

Uplink is a fast, secure, native IRC client with full IRCv3 support — chat history, reactions, typing indicators, message deletion — wrapped in a clean Qt6 interface. No Electron. No web view. Just C++.

Uplink connected to LinuxDojo, showing the #uplink channel

Native builds for every desk

Pre-built binaries straight from the releases page. One codebase, four platforms, zero web runtime.

All builds are on the releases page ↗ · New? Start with the quick start ↓ or the full how-to guide ↗


The modern protocol, fully wired in

IRCv3 isn't a checkbox here — it's the point. Uplink negotiates 21 capabilities and turns them into features you can actually see.

Chat history replay

Join a channel and the last 100 messages load via CHATHISTORY, dimmed with their original timestamps. No more joining blind.

Typing indicators

draft/typing shows who's mid-thought as a quiet overlay on the chat. Your own state is sent debounced — no spam.

Reactions & replies

React to any message with an emoji via draft/react; reply threading shows ↩ origNick inline. IRC, but it understands context.

Message deletion

draft/message-redaction lets you delete your own messages — properly, across every client that supports it.

Account tracking

account-notify, account-tag, extended-join, and WHOX keep NickServ identities visible in real time — hover any nick to see who's actually there.

Netsplit collapse

Server batch support folds netsplits and netjoins into a single summary line instead of a wall of quits. Your scrollback stays readable.

multi-prefix away-notify server-time message-tags batch chathistory labeled-response draft/typing echo-message chghost draft/react sasl account-notify account-tag extended-join invite-notify setname userhost-in-names draft/message-redaction sts standard-replies

55 built-in themes. Light included.

Catppuccin, Dracula, Nord, Gruvbox, Tokyo Night, Solarized, One Dark, and dozens more — browse with arrow keys, apply with Enter. Click below to preview.

Uplink in Gruvbox Dark Uplink in Bam theme Uplink in Base16 Light

52 more in Preferences → Theme. Per-widget font sizes, hanging indent toggle, and a collapsible sidebar round out the fit-and-finish.


Paranoid by default

Security isn't a feature-page afterthought — it's in the connection layer, the config file, and the rendering pipeline.

TLS by default, verified

Every connection runs through QSslSocket. Invalid or self-signed certs disconnect immediately — no silent bypass, ever.

OS keychain storage

Passwords live in Secret Service, macOS Keychain, or Windows Credential Manager. The config holds a sentinel — no plaintext secrets on disk.

SASL PLAIN + EXTERNAL

Full CAP-flow SASL, including certificate-based EXTERNAL auth with RSA and ECDSA keys. Log in without ever sending a password.

Credential redaction

PASS, OPER, AUTHENTICATE, and NickServ payloads never appear in the raw log or any visible panel.

DoS resistance

Inbound data capped at 64 KB, batches bounded, scrollback block count limited. A hostile server can't eat your RAM.

Link preview privacy

Auto-previews skip loopback, RFC 1918, link-local, and .local addresses. Nobody can make your client probe your LAN.


Built by someone who lives in IRC

The details that matter when IRC is open all day, every day.

First-class bouncer support

ZNC and soju are native citizens: znc.in/playback, soju.im/bouncer-networks, read markers, and self-message echo all work out of the box.

Channel panes

Open up to four channels at once — each pane gets its own history, nick list, topic bar, and input. Auto-layout from side-by-side to a 2×2 grid.

Watch list & logging

IRCv3 MONITOR tells you when someone comes online. Per-channel logs land in ~/.config/uplink/logs/, toggleable in Preferences.

DCC file transfer

Active and passive DCC send with live progress, standard ACK protocol, and sanitized filenames that shut down CTCP injection.

Plain-text config

Everything lives in a single config.toml — mode 0600, atomic saves, openable straight from the ☰ menu. Your setup is greppable and versionable.

mIRC formatting & CTCP

Bold, italic, all 16 IRC colors, /ping round-trips, rate-limited CTCP replies. The classics, done right.

Come say hi

/server irc.linuxdojo.org:6697  →  /join #uplink

Uplink ships pointed at its home network. Fire it up and you're one /join away from the people who build and use it.


Up and running in under a minute

Three steps. Everything else is optional — the full guide covers SASL, bouncers, DCC, and more.

① Download & run

Grab the binary for your platform from the download section above. The Linux AppImage runs anywhere — chmod +x Uplink-*.AppImage then run it. No install, no package manager.

② Set your nick

First launch connects to LinuxDojo with a placeholder nick. Open ☰ → Open Config, change nick = "yournick" to your actual nick, save, then click ☰ → Reload Config.

③ You're in

Uplink auto-joins #uplink on irc.linuxdojo.org:6697. To add any server: ☰ → Manage Servers. To join a channel: /join #channel.

Minimal config block

~/.config/uplink/config.toml
[[server]]
name = "LinuxDojo"
host = "irc.linuxdojo.org"
port = 6697
ssl = true
nick = "alice" # ← change this
user = "uplink"
realname = "Uplink User"
channels = "#uplink"

Config file location

PlatformPath
Linux / FreeBSD~/.config/uplink/config.toml
macOS~/.config/uplink/config.toml
Windows%USERPROFILE%\.config\uplink\config.toml

Essential slash commands

CommandWhat it does
/join #channelJoin a channel
/partLeave the current channel
/nick newnickChange your nickname
/msg nick textSend a private message
/me actionCTCP action (/me waves)
/whois nickFull user info — lands in active channel
/away messageSet away · /back to return
/ignore nickSuppress a nick · /unignore nick to lift
/clearClear the chat buffer
/raw lineSend a raw IRC protocol line
/quit [msg]Disconnect
/helpList all commands

Keyboard shortcuts

KeyAction
TabCycle through nick completions alphabetically
/ Scroll input history
Ctrl+FSearch the chat buffer
Ctrl+WMinimize to system tray
PgUp / PgDnScroll chat

That's the surface. The full how-to guide → covers connecting to any server, SASL PLAIN & EXTERNAL auth, ZNC / soju bouncer setup, chat history, DCC transfers, avatars, themes, and troubleshooting.


Or compile it yourself

CMake + Qt6 is all it takes. FreeBSD users: install qt6-base, qt6-websockets, and cmake from ports or pkg first.

clone & build
git clone https://github.com/noderelay/UplinkIRC.git
cd UplinkIRC
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(nproc) # BSD: -j$(sysctl -n hw.ncpu)
run
./build/Uplink