A full-featured chat platform in a single binary.
Messaging, voice, video, screen sharing, 2FA, encryption at rest, bot API.
No subscriptions, No Telemetry, No Third-Party Services.
Channels organized into collapsible categories, threaded replies, @mention autocomplete, custom emoji, reactions, link previews, typing indicators, and a local message cache for instant loads.
Organize text, voice, forum, and gallery channels into collapsible groups. Assign emoji icons and drag to reorder.
Reply to any message with context. Keep conversations organized without overwhelming noise.
Upload server-specific emoji. React to any message with built-in or custom emoji.
Shared URLs automatically unfurl with OpenGraph metadata — title, description, and thumbnail. Results cached for fast repeat access.
Share images, videos, audio, PDFs, text, and archives. Inline previews for media. Configurable size limits and per-user storage quotas.
VAPID-powered Web Push. Get notified even with the tab closed. Per-channel muting and @mention controls.
PWA InstallableBeyond traditional chat. Forum channels present thread-first discussions with pagination. Gallery channels display media-rich posts in a visual grid. Both support threaded replies and the full Chirm feature set.
Thread-first discussions with paginated post lists. Each post is a thread with its own reply chain. Link previews auto-fill thumbnails.
Visual grid layout for media-rich content. Images display as cards, text posts get styled previews. Perfect for art, screenshots, or portfolios.
All channel types share the same thread engine. Create discussions from any message, or start standalone posts in forum and gallery channels.
Peer-to-peer WebRTC mesh. No relay servers, no subscriptions, no data leaves your network. Opus codec tuned at 128 kbps stereo for rich, clear audio.
Screen sharing lets you present your work, debug together, or watch videos as a group.
Share your entire screen or a single window. Present code, watch videos, or collaborate visually.
Adjust volume or mute individual participants locally. Your preferences persist across sessions.
Click any tile to enlarge it. Or enable auto-focus to spotlight whoever is currently speaking.
From the setup wizard to fine-grained permissions, Chirm puts you in charge of every aspect of your community.
Generate invite codes with optional max-use and expiry. Require codes for registration or leave it open.
Seven granular permissions stacked via colored, position-ordered roles. Assign multiple roles per user with visual hierarchy.
First-run wizard creates your server name, owner account, default channel, and @everyone role in 60 seconds.
Upload a server icon, customize the login background, configure registration policies, and create custom color themes from the admin panel.
Rich user profiles with avatar, banner, bio, and custom links. Set your status to online, away, or do not disturb.
Require new members to accept server Terms of Service before registering. Markdown-formatted, configurable from the admin panel.
From automatic TLS to optional encryption at rest, Chirm treats security as a first-class concern — not an afterthought.
Enable TOTP on your account for a second login step. QR-scannable secrets, clock-drift tolerance, and one-time backup codes.
2FAOptionally encrypt uploaded files with AES-256-GCM. Per-record key derivation via HKDF-SHA256. Transparent lazy migration for existing data.
AES-256-GCMGenerates a persistent CA and signed server cert on first run. Install the CA once per device via /ca-cert.
Structured security audit log with automatic daily rotation and configurable retention. Logs login attempts, 2FA events, and admin actions.
Escalating lockout windows after failed login attempts: 5 failures triggers 5 minutes, scaling up to 24 hours at 20 attempts.
Per-IP throttling on auth endpoints prevents brute-force attacks. WebSocket messages capped at 64 KB.
A clean API surface, an event bus for real-time hooks, and a sandboxed plugin interface mean Chirm grows with your community.
Create bots with scoped bitmask permissions and token authentication. Post messages to any channel via the REST API. Tokens are regeneratable.
Sandboxed plugin interface with access to a scoped database, WebSocket hub, and HTTP router. Plugins subscribe to domain events and mount custom API routes.
HooksIn-process pub/sub event bus with 16+ event types covering messages, reactions, channels, threads, and user activity. Handlers run in isolated goroutines.
Every dependency earns its place. No ORM, no framework, no build step. Just Go, SQL, and vanilla JS.
Server, router, TLS, binary embedding
Lightweight, composable HTTP routing
4-database architecture: auth, members, server, per-channel
Real-time messaging hub
Stateless auth, secure password hashing
Browser-native P2P voice, video, screen share
Hand-rolled encryption, zero dependencies
No React, no bundler, no build step
Field-level & file encryption at rest via HKDF-SHA256
Three commands. Sixty seconds. Full sovereignty.
# Clone & configure git clone https://github.com/Jacob-Ritchey/Chirm && cd Chirm cp .env.example .env echo "JWT_SECRET=$(openssl rand -hex 32)" >> .env # Launch Manually go mod tidy go build -o chirm . ./chirm # Launch with docker (Recommended) git clone https://github.com/Jacob-Ritchey/Chirm cd Chirm docker compose up -d # Open https://localhost:8443 → follow setup wizard