Connect to freeq

Multiple ways to connect. Pick what works for you.

Web Client

No install needed. Works in any browser.

→ Open app.freeq.at

Supports AT Protocol OAuth login, channels, PMs, nick completion, and message history.

Standard IRC Client

Any IRC client works. Connect as a guest — no authentication required.

irssi

/server add -tls freeq irc.freeq.at 6697
/connect freeq

WeeChat

/server add freeq irc.freeq.at/6697 -ssl
/connect freeq

Hexchat / mIRC

Add server irc.freeq.at/6697 with SSL enabled.

Plain TCP (no TLS)

/server add freeq irc.freeq.at 6667
/connect freeq

netcat (testing)

nc irc.freeq.at 6667
NICK mynick
USER mynick 0 * :Hello
JOIN #freeq

TUI Client (with AT Protocol auth)

The freeq TUI client authenticates with your Bluesky identity via OAuth.

# Build from source
git clone https://github.com/chad/freeq
cd freeq
cargo build --release --bin irc-at-tui

# Connect with AT Protocol authentication
./target/release/irc-at-tui \
  --server irc.freeq.at --tls \
  --at-handle yourname.bsky.social

First run opens your browser for OAuth. Sessions are cached locally at ~/.config/freeq-tui/.

WebSocket

Connect from JavaScript or any WebSocket client:

const ws = new WebSocket('wss://irc.freeq.at/irc');
ws.onopen = () => {
  ws.send('NICK mybot\r\n');
  ws.send('USER mybot 0 * :My Bot\r\n');
};
ws.onmessage = (e) => console.log(e.data);

iroh QUIC

NAT-traversing, end-to-end encrypted QUIC transport via iroh. The server advertises its iroh endpoint ID in CAP LS. The TUI client auto-discovers and upgrades.

# Connect directly via iroh endpoint ID
./target/release/irc-at-tui --iroh-addr <endpoint-id>

Bot SDK

Build bots with the Rust SDK:

use freeq_sdk::bot::{Bot, BotConfig, Command, PermissionLevel};

let config = BotConfig {
    server: "irc.freeq.at".into(),
    port: 6697,
    tls: true,
    nick: "mybot".into(),
    channels: vec!["#bots".into()],
    ..Default::default()
};

let mut bot = Bot::new(config);
bot.command(Command::new("hello", "Say hello", PermissionLevel::Anyone,
    |ctx| Box::pin(async move {
        ctx.reply("Hello!").await;
        Ok(())
    })
));
bot.run().await?;

See SDK documentation for the full API.

Connection Summary

MethodAddressAuth
TCPirc.freeq.at:6667Guest
TLSirc.freeq.at:6697Guest
WebSocketwss://irc.freeq.at/ircGuest or OAuth
Web Clientapp.freeq.atGuest or OAuth
TUI ClientBuild from sourceAT Protocol SASL
iroh QUICAuto-discoveredAT Protocol SASL