MIT · BCL sockets only

One channel.
Nothing else.

Schipper.Io.Irc connects, registers, joins one channel, relays PRIVMSG, and answers PING. Confidentiality, authentication, and envelope framing belong to the caller.

1
Channel
TLS
Optional
512
Byte line cap
0
Package deps

A relay bus, not a chat client

No SASL, no multi-channel, no CTCP. Lines are CRLF UTF-8. Injection characters are rejected before they hit the socket.

Join after 001

Joined is true only when the server confirms JOIN for this nick. A ban numeric returns so the caller can reconnect.

Safe writes

CR, LF, and NUL are refused. Commands over 512 UTF-8 bytes including CRLF throw and are not written. Writes are serialized.

Idle keepalive

A fixed 4096-byte read buffer survives idle timeouts. A split PING stays one PONG. A line with no LF returns instead of growing forever.

Connect. Handle messages. Reconnect.

RunAsync is one attempt. The caller loops. TLS uses the default hostname check.

C#
await using var irc = new IrcConnection(
    host: "irc.example.net",
    port: 6697,
    tls: true,
    nick: "ada",
    channel: "#workshop",
    log: line => logger.LogInformation("{Line}", line));

irc.ChannelMessage += (nick, text) => { };
await irc.RunAsync(cancellationToken);

Source on GitHub

MIT. BCL sockets only.

Repository