FAQ
What is repartee?
repartee is a terminal IRC client written in Rust, inspired by irssi and built as a port of kokoirc (TypeScript/OpenTUI/Bun) to Rust/ratatui/tokio.
Why Rust?
- Performance: ~5MB binary, instant startup, minimal memory usage
- Safety: Memory-safe without garbage collection
- Concurrency: tokio async runtime handles multiple connections efficiently
- Reliability: Rust's type system catches bugs at compile time
- Distribution: Single static binary, no runtime dependencies
How does repartee compare to kokoirc?
| Feature | kokoirc | repartee |
|---|---|---|
| Language | TypeScript | Rust |
| TUI framework | OpenTUI/React | ratatui |
| Runtime | Bun | Native binary |
| Binary size | ~68MB | ~5MB |
| Scripting | TypeScript | Lua 5.4 |
| Config format | TOML | TOML (same format) |
| Theme format | irssi-compatible | irssi-compatible (same) |
The config and theme formats are compatible — you can copy your kokoirc config to repartee with minimal changes.
How do I migrate from kokoirc?
- Copy
~/.kokoirc/config.tomlto~/.repartee/config.toml - Copy
~/.kokoirc/.envto~/.repartee/.env - Copy
~/.kokoirc/themes/to~/.repartee/themes/ - Scripts need to be rewritten from TypeScript to Lua
How do I migrate from irssi?
repartee uses irssi-compatible format strings, so your theme knowledge transfers directly. The key differences:
- Config is TOML instead of irssi's custom format
- Scripts are Lua instead of Perl
- Most
/commandswork the same
Does repartee support DCC?
Yes — repartee supports DCC CHAT with full irssi/erssi parity:
- Active and passive (reverse) DCC CHAT connections
=nickbuffer convention — DCC chats appear as=Alicein the buffer list- Auto IP detection from the IRC socket, with manual override via
/set dcc.own_ip - Auto-accept masks, timeout, nick tracking, DCC REJECT
- Tab-completable commands:
/dcc chat,/dcc close,/dcc list,/dcc reject - Scripting events:
dcc.chat.request,dcc.chat.connected,dcc.chat.message,dcc.chat.closed
Does repartee load chat history?
Yes. When you open a channel, query, or DCC buffer, the last 20 messages (configurable) are loaded from the SQLite log database. Set display.backlog_lines to adjust or disable.
Where are logs stored?
~/.repartee/logs/messages.db — a SQLite database with optional AES-256-GCM encryption.
Can I use multiple IRC networks?
Yes. Add multiple [servers.*] sections to your config. Each gets its own connection and set of channel buffers.
Does repartee support IRCv3?
Yes — repartee has comprehensive IRCv3 support negotiated at connection time:
- server-time, echo-message, away-notify, account-notify, chghost, cap-notify
- multi-prefix (e.g.
@+nick), extended-join, userhost-in-names, message-tags - invite-notify, BATCH (netsplit/netjoin grouping)
- SASL: PLAIN, EXTERNAL (client certificate), SCRAM-SHA-256
- WHOX: auto-detected for account name and full host tracking
- Extban:
$a:accountban type with/ban -ashorthand
How do I keep repartee running in the background?
Use /detach (or press Ctrl+\ / Ctrl+Z) to detach from the terminal. repartee continues running — IRC connections stay alive, messages are logged, and scripts keep executing.
Reattach with repartee a from any terminal. You can also start headless with repartee -d and attach later.
See Sessions & Detach for the full guide.
Can I close my terminal and reconnect later?
Yes. When you close your terminal window, repartee catches SIGHUP and auto-detaches. The session stays running and you can reattach with repartee a.
This also works across SSH disconnections — start with repartee -d on a remote server, disconnect SSH, reconnect later, and repartee a picks up your session.
What does /cycle do?
/cycle parts and immediately rejoins a channel. Useful for refreshing your nick list, re-triggering auto-op, or clearing stale channel state. Channel keys are preserved. Alias: /rejoin.
Can I run shell commands without detaching?
Yes! Use /shell to open an embedded terminal inside Repartee. You get a full PTY-backed shell (zsh, bash, vim, htop) in a separate buffer. Press Ctrl+] to switch back to IRC input, or click another buffer in the sidebar. Type exit in the shell to close it automatically. You can open multiple shells — they appear under a "Shell" group in the sidebar.
The shell also works in the web frontend — each web session gets its own independent PTY sized to the browser viewport. The web shell uses a beamterm WebGL2 renderer with FiraCode Nerd Font, mouse text selection, Ctrl+/- font resize, and clipboard paste.