<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="repartee — A modern terminal IRC client built with Ratatui, Tokio, and Rust. Scripting, theming, encrypted logging, and more.">
<meta name="keywords" content="irc, terminal, tui, client, chat, repartee, ratatui, tokio, rust">
<meta name="author" content="outragedevs">
<meta property="og:title" content="First Connection — repartee">
<meta property="og:description" content="A modern terminal IRC client built with Ratatui, Tokio, and Rust. Inspired by irssi, designed for the future.">
<meta property="og:type" content="website">
<meta property="og:url" content="https://outragedevs.github.io/repartee/">
<meta property="og:image" content="https://outragedevs.github.io/repartee/images/chat.png">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="{{title}} — repartee">
<meta name="twitter:description" content="A modern terminal IRC client built with Ratatui, Tokio, and Rust.">
<meta name="twitter:image" content="https://outragedevs.github.io/repartee/images/chat.png">
<title>{{title}} — repartee</title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<button class="hamburger" aria-label="Toggle navigation">
<span></span>
<span></span>
<span></span>
</button>
<div class="page-wrapper">
<aside class="sidebar">
<div class="sidebar-header">
<a href="index.html" class="brand">repartee</a>
<span class="brand-tagline">Documentation</span>
</div>
<nav class="sidebar-nav">
<ul>
<li><a href="index.html">Home</a></li>
</ul>
<div class="nav-section">
<span class="nav-section-title">Getting Started</span>
<ul>
<li><a href="installation.html">Installation</a></li>
<li><a href="first-connection.html" class="active">First Connection</a></li>
<li><a href="configuration.html">Configuration</a></li>
</ul>
</div>
<div class="nav-section">
<span class="nav-section-title">Reference</span>
<ul>
<li><a href="commands.html">Commands</a></li>
</ul>
</div>
<div class="nav-section">
<span class="nav-section-title">Scripting</span>
<ul>
<li><a href="scripting-getting-started.html">Getting Started</a></li>
<li><a href="scripting-api.html">API Reference</a></li>
<li><a href="scripting-examples.html">Examples</a></li>
</ul>
</div>
<div class="nav-section">
<span class="nav-section-title">Customization</span>
<ul>
<li><a href="theming.html">Theming</a></li>
<li><a href="theming-format-strings.html">Format Strings</a></li>
<li><a href="logging.html">Logging & Search</a></li>
</ul>
</div>
<div class="nav-section">
<span class="nav-section-title">Project</span>
<ul>
<li><a href="architecture.html">Architecture</a></li>
<li><a href="faq.html">FAQ</a></li>
</ul>
</div>
</nav>
<div class="sidebar-footer">
Built with <a href="https://www.rust-lang.org">Rust</a>
·
<a href="https://github.com/outragedevs/repartee">GitHub</a>
</div>
</aside>
<div class="sidebar-overlay"></div>
<div class="content-wrapper">
<main class="content">
<h1>First Connection</h1>
<h2>Quick start</h2>
<p>After installing repartee, launch it:</p>
<pre><code class="language-bash">repartee
</code></pre>
<p>You'll see the main UI with a status buffer. Let's connect to an IRC network.</p>
<h2>Add a server</h2>
<p>Edit <code>~/.repartee/config.toml</code> (created on first run) and add a server:</p>
<pre><code class="language-toml">[servers.libera]
label = "Libera"
address = "irc.libera.chat"
port = 6697
tls = true
autoconnect = true
channels = ["#repartee"]
</code></pre>
<p>Or use the <code>/server</code> command at runtime:</p>
<pre><code>/server add libera irc.libera.chat
/server connect libera
</code></pre>
<h2>Join channels</h2>
<p>Once connected, join channels with:</p>
<pre><code>/join #channel
/join #secret mykey
</code></pre>
<p>Channels listed in your config's <code>channels</code> array are joined automatically on connect.</p>
<h2>Cycle a channel</h2>
<p>To refresh your presence in a channel (part + rejoin), use:</p>
<pre><code>/cycle
/cycle #channel
/cycle Refreshing...
</code></pre>
<h2>Navigation</h2>
<ul>
<li><strong>Esc + 1–9</strong> — switch between buffers (windows)</li>
<li><strong>Ctrl+N / Ctrl+P</strong> — next / previous buffer</li>
<li><strong>Click</strong> on buffer list or nick list entries</li>
<li><strong>Mouse wheel</strong> — scroll chat history</li>
<li><strong>Tab</strong> — nick completion</li>
<li><strong>Up/Down</strong> — input history</li>
</ul>
<h2>SASL authentication</h2>
<p>For networks that support SASL (Libera Chat, OFTC, etc.), add credentials to <code>~/.repartee/.env</code>:</p>
<pre><code class="language-bash"># ~/.repartee/.env
LIBERA_SASL_USER=mynick
LIBERA_SASL_PASS=hunter2
</code></pre>
<p>Then in your config:</p>
<pre><code class="language-toml">[servers.libera]
address = "irc.libera.chat"
port = 6697
tls = true
sasl_user = "mynick"
# sasl_pass loaded from .env
# sasl_mechanism = "SCRAM-SHA-256" # or PLAIN (default), EXTERNAL
</code></pre>
<p>Supported SASL mechanisms: <strong>PLAIN</strong>, <strong>EXTERNAL</strong> (client TLS certificate), <strong>SCRAM-SHA-256</strong> (secure challenge-response — preferred when available).</p>
<h2>Next steps</h2>
<ul>
<li><a href="configuration.html">Configuration</a> — full config reference</li>
<li><a href="commands.html">Commands</a> — all available commands</li>
<li><a href="theming.html">Theming</a> — customize colors and layout</li>
</ul>
<nav class="page-nav">
<a href="installation.html" class="page-nav-link prev">
<span class="page-nav-label">← Previous</span>
<span class="page-nav-title">Installation</span>
</a>
<a href="configuration.html" class="page-nav-link next">
<span class="page-nav-label">Next →</span>
<span class="page-nav-title">Configuration</span>
</a>
</nav>
<footer class="site-footer">
Built with <a href="https://www.rust-lang.org">Rust</a> ·
<a href="https://github.com/outragedevs/repartee">GitHub</a> ·
MIT License
</footer>
</main>
</div>
</div>
<script>
(function() {
const hamburger = document.querySelector('.hamburger');
const sidebar = document.querySelector('.sidebar');
const overlay = document.querySelector('.sidebar-overlay');
function toggleSidebar() {
hamburger.classList.toggle('active');
sidebar.classList.toggle('open');
overlay.classList.toggle('visible');
document.body.style.overflow = sidebar.classList.contains('open') ? 'hidden' : '';
}
function closeSidebar() {
hamburger.classList.remove('active');
sidebar.classList.remove('open');
overlay.classList.remove('visible');
document.body.style.overflow = '';
}
hamburger.addEventListener('click', toggleSidebar);
overlay.addEventListener('click', closeSidebar);
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape' && sidebar.classList.contains('open')) {
closeSidebar();
}
});
})();
</script>
</body>
</html>