{{title}} — repartee
Author: outragedevs
Description: repartee — A modern terminal IRC client built with Ratatui, Tokio, and Rust. Scripting, theming, encrypted logging, and more.
Keywords: irc, terminal, tui, client, chat, repartee, ratatui, tokio, rust

# 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.