{{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

# Scripting — Getting Started

repartee supports Lua 5.4 scripting with a rich API modeled after WeeChat, irssi, and kokoirc.

## Script location

Scripts live in `~/.repartee/scripts/` as `.lua` files.

## Script format

Every script has two parts: a `meta` table and a `setup` function:

    meta = {
        name = "hello",
        version = "1.0",
        description = "A simple greeting script"
    }

    function setup(api)
        api.on("irc.join", function(event)
            if event.nick ~= api.store.our_nick() then
                api.irc.say(event.channel, "Welcome, " .. event.nick .. "!")
            end
        end)

        api.log("Hello script loaded!")

        -- Return a cleanup function (optional)
        return function()
            api.log("Hello script unloaded")
        end
    end

### `meta` table

Field | Type | Required | Description
--- | --- | --- | ---
`name` | string | Yes | Script name (used for loading/unloading)
`version` | string | No | Version string
`description` | string | No | Short description

### `setup(api)` function

Called when the script is loaded. Receives the `api` object with all scripting capabilities. Can optionally return a cleanup function that runs on unload.

## Loading scripts

    /script load hello
    /script unload hello
    /script reload hello
    /script list

## Autoloading

Add script names to your config to load them automatically:

    [scripts]
    autoload = ["hello", "urllogger"]

## Sandboxing

Scripts run in a sandboxed Lua environment. The following globals are removed for security:

- `os` — no filesystem/process access
- `io` — no file I/O
- `loadfile`, `dofile` — no arbitrary file execution
- `package` — no module loading

Scripts are isolated from each other — each gets its own Lua environment.

## Next steps

- API Reference — full API documentation
- Examples — practical script examples