# FAQ

## What is repartee?

repartee is a terminal IRC client written in Rust, inspired by irssi and built as a port of [kokoirc](https://github.com/kofany/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

## 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](sessions.html) 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](https://github.com/outragedevs/repartee/issues) or visit [repart.ee](https://repart.ee/).
