···11++++
22+title = "Features"
33+template = "page.html"
44+weight = 4
55++++
66+77+leveva implements the IRCnet-style client protocol, the UID-based
88+server-to-server protocol, a growing slice of IRCv3, and in-process
99+authentication. This page is a tour of that surface.
1010+1111+## Client protocol
1212+1313+The full IRCnet client experience:
1414+1515+- **Registration** — `NICK`/`USER` negotiation through the `001`–`004` welcome
1616+ burst and the `375`–`376` MOTD.
1717+- **Channels** — `JOIN`/`PART`/`KICK`/`INVITE`/`TOPIC`/`NAMES`/`LIST`, channel
1818+ keys, limits, ban/except/invite lists, and `KNOCK` for invite-only channels.
1919+- **Channel modes** — the standard set plus an elemental membership hierarchy
2020+ (`~` owner, `&` admin, `@` op, `%` halfop, `+` voice), charybdis-style extbans
2121+ (`$a`/`$o`/`$r`/`$x`/…), and InspIRCd-style official-join (`+Y`).
2222+- **User modes** — invisible, wallops, operator, server-notice, a deterministic
2323+ cloaked host (`+x`), caller-id (`+g`/`+G` with `ACCEPT`), and more.
2424+- **Queries** — `WHO`/`WHOIS`/`WHOWAS`, `WHOX`, `ISON`/`USERHOST`, `MOTD`,
2525+ `LUSERS`, `MAP`, `LINKS`, `TRACE`, `VERSION`, `TIME`, `ADMIN`, `INFO`.
2626+- **Operators** — `OPER`, `KILL`, `KLINE`/`UNKLINE`, `DLINE`/`UNDLINE`, `RESV`,
2727+ `XLINE`, `CONNECT`/`SQUIT`, `REHASH`, `WALLOPS`, `STATS`, and the `SA*`
2828+ override family (`SANICK`/`SAJOIN`/`SAPART`).
2929+3030+## Server-to-server
3131+3232+leveva links to other leveva servers over a UID-based TS6-style protocol:
3333+3434+- **Linking and bursting** — the `PASS`/`SERVER` handshake, full network burst on
3535+ link, and `EOB` (end-of-burst) signalling.
3636+- **State propagation** — `UNICK` user introduction, `NJOIN` channel joins,
3737+ `SAVE` nick-collision resolution, and timestamp-based (`TS`) conflict
3838+ resolution where the oldest state wins.
3939+- **Netsplit handling** — clean removal of a split server's users and channels,
4040+ and a netjoin flood to local members when a split heals.
4141+- **TLS links** — server links run over TLS in both directions, authenticated by
4242+ `PASS` rather than certificates.
4343+- Operator and notification verbs (`KILL`, `WALLOPS`, `KNOCK`, `METADATA`,
4444+ away/account/msgid/server-time tags) propagate across the network.
4545+4646+## IRCv3
4747+4848+A growing IRCv3 track, negotiated per client with `CAP`:
4949+5050+- **Message tags** — the tag delivery plane, `TAGMSG`, client-only tags,
5151+ `server-time`, `msgid`, `account`, and `bot`/`oper` tags.
5252+- **SASL** authentication during registration.
5353+- **MONITOR** for presence tracking.
5454+- **Capabilities** — `away-notify`, `account-notify`, `invite-notify`,
5555+ `echo-message`, `chghost`, `setname`, `multi-prefix`, `extended-join`,
5656+ labeled responses, standard replies, `STS`, and message redaction.
5757+- **WebSocket transport** so browser clients can connect directly.
5858+5959+## Authentication
6060+6161+Authentication runs **in-process** — `leveva-iauth` is an async library invoked
6262+with `.await` inside each connection's task, not a separate daemon talking over a
6363+pipe. Available checks include:
6464+6565+- **ident** — an RFC 1413 ident lookup.
6666+- **DNSBL** — DNS blocklist checks.
6767+- **SOCKS** and **web-proxy** open-proxy detection.
6868+6969+Checks are enabled in the `iauth` config block; their verdict is folded into
7070+registration before the client receives the welcome burst.
7171+7272+## Observability
7373+7474+leveva exports Prometheus metrics (server counters, link traffic) over an
7575+optional metrics listener, readable both there and through `STATS`. See
7676+[Operating leveva](@/operating.md).