A terminal-based IRC client with Vim-inspired keybindings, built with Rust and Ratatui.

- Vim-inspired keybindings - Multiple modes (Normal, Insert, Visual, Command)
- TUI Interface - Clean terminal UI with mouse support
- Server Tree - Visual server and channel navigation
- Multiple Channels - Support for channels and direct messages
- Colored Nicks - Unique colors for each user
- Clipboard Integration - Wayland clipboard support
- Server Management - Add, remove, and manage multiple IRC servers
- TLS Support - Secure connections with TLS/SSL
- Rust 1.70 or higher
- Wayland (for clipboard support)
git clone https://github.com/yourusername/duckirc
cd duckirc
cargo build --releaseThe binary will be available at target/release/duckirc
(there is a release build already included if you simply clone the repo, but if you don't trust me you can build it yourself).
-
Launch DuckIRC:
./duckirc
-
Connect to a server:
:connect Libera -
Join a channel:
:join #rust -
Start chatting:
- Press
ito enter Insert mode - Type your message
- Press
Enterto send
- Press
DuckIRC operates in different modes, similar to Vim:
Default mode for navigation and commands
i- Enter Insert modev- Enter Visual mode:- Enter Command modes- Enter Server modem- Enter Messages modec- Enter Clients modeq- Quit
For typing messages
Esc- Return to Normal modeEnter- Send messageTab- Switch to Server mode
For selecting text
h/l- Move cursor left/righty- Yank (copy) selectiond/x- Delete selectionEsc- Return to Normal mode
For executing commands
:connect <server>- Connect to a server:join <#channel>- Join a channel:msg <user> <message>- Send a direct message:nick <nickname>- Change your nickname:quitor:q- Quit the application:clearor:c- Clear messages:add_server <name> <address> <port> [tls]- Add a server:remove_server <name>- Remove a server
Navigate and manage servers/channels
j/kor↑/↓- NavigateEnter- Connect/disconnect server or join channel- Double-click - Same as Enter
Esc- Return to Normal mode
Navigate through chat history
j/kor↑/↓- Scroll messagesy- Yank (copy) selected messagegg- Jump to topG- Jump to bottomEsc- Return to Normal mode
View and interact with users in current channel
j/kor↑/↓- Navigate usersEnter- Start direct messagey- Copy usernameEsc- Return to Normal mode
A simplified mode without Vim keybindings
- Type normally and press
Enterto send /quitor/q- Quit/vimor/v- Return to Normal mode- Commands use
/prefix instead of:
h/lor←/→- Move cursorw- Move forward by wordb- Move backward by worde- Move to end of wordW/B/E- Word movements (WORD-based)gg- Jump to startG- Jump to end
a- Append (enter Insert mode after cursor)A- Append at end of linedd- Delete entire linediw- Delete inner wordp- Paste from yank buffer
- Click to position cursor
- Double-click to select in Server mode
- Scroll to navigate in Messages/Clients/Server modes
DuckIRC stores configuration in ~/.config/duckIRC/:
Manage your IRC servers:
[[servers]]
name = "Libera"
address = "irc.libera.chat"
port = 6697
use_tls = true
[[servers]]
name = "OFTC"
address = "irc.oftc.net"
port = 6697
use_tls = true
[[servers]]
name = "tpp"
address = "thepiratesplunder.org"
port = 6697
channels = ["#TPP"]Beware of rapidly changing between servers as it may lead to unexpected behavior. I am investigating why it happens.
You can change these manually but I kind of don't recommend it yet.
User settings:
[[servers]]
name = "Libera"
address = "irc.libera.chat"
port = 6697
use_tls = true
[[servers]]
name = "OFTC"
address = "irc.oftc.net"
port = 6697
use_tls = true
[[servers]]
name = "tpp"
address = "thepiratesplunder.org"
port = 6697ratatui- Terminal UI frameworkcrossterm- Terminal manipulationtokio- Async runtimeirc- IRC protocol implementationgapbuf- Gap buffer for efficient text editingwl-clipboard-rs- Wayland clipboard integrationserde&toml- Configuration serialization
- Inspired by Vim's modal editing
- Built with Ratatui and the Rust IRC library
- Fix rapid server switching issues (somehow I can't replicate them anymore, but I didn't do anything to fix them)
- Add inline image support
- Add more vim commands/motions
- Add more IRC commands
- Implement a plugin system (embdded Lua?)
- Enhance clipboard support for X11
- Add theming support for UI customization
- Add self signing TLS certificate support for secure connections to custom servers