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?

  1. Copy ~/.kokoirc/config.toml to ~/.repartee/config.toml
  2. Copy ~/.kokoirc/.env to ~/.repartee/.env
  3. Copy ~/.kokoirc/themes/ to ~/.repartee/themes/
  4. 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 /commands work the same

Does repartee support DCC?

Yes — repartee supports DCC CHAT with full irssi/erssi parity:

  • Active and passive (reverse) DCC CHAT connections
  • =nick buffer convention — DCC chats appear as =Alice in 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:account ban type with /ban -a shorthand

Does repartee support end-to-end encryption?

Yes. repartee includes built-in end-to-end encryption for channels and private conversations. Message bodies are encrypted on the client and decrypted only by trusted peers.

The IRC server still sees metadata such as nicknames, channels, timing, and message sizes. If you want protection against active impersonation during first contact, verify peer fingerprints out of band.

See End-to-End Encryption for the workflow and trust model.

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.

How do I report bugs?

Open an issue on GitHub or visit repart.ee.