MCPcopy Index your code
hub / github.com/ancsemi/Haven

github.com/ancsemi/Haven @v3.29.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v3.29.0 ↗ · + Follow
1,369 symbols 3,400 edges 57 files 111 documented · 8%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

⬡ HAVEN — Private Chat That Lives On Your Machine

Your server. Your rules. No cloud. No accounts with Big Tech. No one reading your messages.

Version License Node Platform

Haven is a self-hosted Discord alternative. Run it on your machine. Invite friends with a code. No cloud. No email signup. No tracking. Free forever.

Screenshot 2026-02-14 102013


🖥️ NEW — Haven Desktop (Beta)

Want a native desktop experience? Haven Desktop is a standalone app that connects to any Haven server — with features that go beyond the browser.

Haven Desktop is now available as a public beta. Download the installer and connect to your server in seconds.

  • Per-Application Audio — share audio from a single app during screen share, just like Discord. Powered by native WASAPI (Windows) and PulseAudio (Linux) hooks.
  • Audio Device Switching — change your mic and speaker mid-call without leaving voice chat
  • Native Desktop Notifications — OS-level notifications via the system tray
  • Minimize to Tray — keeps running quietly in the background
  • One-Click Install — NSIS installer (Windows), AppImage / .deb (Linux). Download, run, done.

⚠️ This is a beta release. Bugs are expected. Your feedback is what makes it better — please open an issue if something breaks or feels off.

You still need a Haven server. The desktop app is a client — it connects to a Haven server. Download and run Haven first if you haven't already.

📥 Download Haven Desktop →


📱 Amni-Haven Android — Now on Google Play!

Want Haven on your phone? Amni-Haven Android is a native Android app built from the ground up by Amnibro, now available on Google Play.

Amni-Haven Android features full chat and voice support, push notifications, and a true mobile-native experience.

  • Native Android — built from scratch specifically for Haven, not a web wrapper
  • Push Notifications — real-time notifications via Google Play services
  • Full Chat & Voice — all the features you love, in your pocket

You still need a Haven server. The Android app is a client — it connects to a Haven server. Download and run Haven first if you haven't already.

Built with ❤️ by Amnibro — huge thanks for his incredible work building the Amni-Haven Android app from the ground up.

📲 Get it on Google Play →


🌐 Try Haven — No Download Required

Want to see what Haven looks like before hosting your own? Jump into the community server and explore — chat, voice, themes, the works.

🔗 Join the Community Server →

After signing up, enter this channel code to join: da0b9be7

Volunteer-hosted community server — thanks MutantRabbit!


NEW in v2.0.0 — Import Your Discord History

Leaving Discord? Haven can import your entire server's message history — directly from the app. No external tools, no command-line exports, no hassle.

Open Settings → Import and connect with your Discord token. Haven pulls every channel, thread, forum post, announcement, reaction, pin, attachment, and avatar — then lets you map them to Haven channels. Your community's history comes with you.

  • Direct Connect — paste your Discord token, pick a server, select channels & threads, import
  • File Upload — or upload a DiscordChatExporter JSON/ZIP if you prefer
  • Full fidelity — messages, replies, embeds, attachments, reactions, pins, forum tags, all preserved
  • Discord avatars — imported messages show the original author's Discord profile picture
  • All channel types — text, announcement, forum, media, plus active & archived threads

Your entire Discord history, now on a server you own. No one can delete it, no one can read it, no one can take it away.


Quick Start — Docker (Recommended)

Option A — Pre-built image (fastest, easiest updates):

docker pull ghcr.io/ancsemi/haven:latest
docker run -d -p 3000:3000 -v haven_data:/data ghcr.io/ancsemi/haven:latest

Or with Docker Compose (recommended):

git clone https://github.com/ancsemi/Haven.git
cd Haven
docker compose up -d

The shipped docker-compose.yml uses the pre-built image by default.

Option B — Build from source (only if you need to modify the code):

git clone https://github.com/ancsemi/Haven.git
cd Haven

Uncomment build: . in docker-compose.yml, then:

docker compose up -d

Open https://localhost:3000 → Register with username admin → Create a channel → Share the code with friends. Done.

Certificate warning is normal — click Advanced → Proceed. Haven uses a self-signed cert for encryption.

Updating — if using the pre-built image (default):

docker compose pull
docker compose up -d --force-recreate

Check your version: visit https://localhost:3000/api/version in your browser.

Option C — One-click cloud deploy (Zeabur):

Deploy on Zeabur


Quick Start — Windows (No Docker)

  1. Download and unzip this repository
  2. Double-click Start Haven.bat
  3. If Node.js isn't installed, the script will offer to install it for you automatically

That's it. The batch file handles everything — Node.js installation, dependencies, SSL certificates, config — and opens your browser. Register as admin to get started.

Don't have Node.js? No problem. The launcher detects this and can install it for you with one keypress. Or install it yourself from nodejs.org and restart your PC.

Quick Start — Linux / macOS (No Docker)

chmod +x start.sh
./start.sh

Or manually: npm install && node server.js


Who Is This For?

  • Small friend groups who want a private place to talk
  • Self-hosters who run services on their own hardware
  • Privacy-conscious communities done with Big Tech
  • LAN gaming crews who need voice + screen share without Discord
  • Homelab enthusiasts looking for a lightweight chat service

Screenshot 2026-02-13 174344

Why Not Discord?

Discord Haven
Hosting Their cloud Your machine
Account Email + phone required No email, no verification
Your data Stored by Discord Inc. Never leaves your server
Cost Nitro upsells, boosts Free forever
Telemetry Analytics, tracking Zero telemetry
Source code Closed Open (AGPL-3.0)

Features

Category What You Get
Chat Real-time messaging, image uploads (paste/drag/drop) with click-to-enlarge lightbox, typing indicators, message editing, replies, emoji reactions, @mentions with autocomplete, :emoji autocomplete, message pinning (admin)
Voice Peer-to-peer audio chat, per-user volume sliders, mute/deafen, join/leave audio cues, talking indicators, click usernames for profile/DM
Screen Share Multi-stream screen sharing with tiled grid layout, per-user video tiles, one-click close
Channels Hierarchical channels with sub-channels, private (invite-only) sub-channels with 🔒 indicator, channel topics
Join Codes Per-channel invite codes with admin controls: public/private visibility, static/dynamic mode, time-based or join-based auto-rotation, manual rotation
Avatars Upload profile pictures (including animated GIFs!), choose avatar shape (circle/square/hexagon/diamond), per-user shapes visible to everyone
Formatting Bold, italic, ~~strikethrough~~, code, ||spoilers||, auto-linked URLs, fenced code blocks with language labels, blockquotes
Link Previews Automatic OG metadata previews for shared URLs with title, description, and thumbnail
GIF Search GIPHY-powered GIF picker — search and send GIFs inline (admin-configurable API key)
Direct Messages Private 1-on-1 conversations — click 💬 on any user in the member list
User Status Online, Away, Do Not Disturb, Invisible — with custom status text and auto-away after 5 min idle
File Sharing Upload and share PDFs, documents, audio, video, archives (up to 25 MB) with inline players
Persistent Unread Server-tracked read state — unread badges survive page refreshes and reconnects
Slash Commands /shrug, /tableflip, /roll 2d20, /flip, /me, /spoiler, /tts, and more — type / to see them all
Search Search messages in any channel with Ctrl+F
Themes 20+ themes with stackable visual effects: CRT, Matrix Rain, Cyberpunk Text Scramble, Snowfall, Campfire Embers, and more — configurable intensity/frequency sliders
Multi-Server Add friends' Haven servers to your sidebar with live online/offline status
Notifications 5 notification sounds, per-channel volume controls
Moderation Admin: kick, mute (timed), ban, delete users, delete channels, auto-cleanup. Role system with granular permissions.
Security Bcrypt passwords, JWT auth, HTTPS/SSL, rate limiting, CSP headers, input validation
E2E Encryption ECDH P-256 + AES-256-GCM encrypted DMs — private keys never leave the browser
Discord Import Import your entire Discord server history — channels, threads, forums, reactions, pins, avatars — directly from Haven's UI or via file upload
Game Shippy Container — Drew's shipment got hung up. Server-wide leaderboard.
Translations 6 languages out of the box (English, French, German, Spanish, Russian, Chinese). Community-contributed.

Screenshot 2026-02-16 013038


🌐 Translations (i18n)

Haven supports multiple languages. Users can switch languages from Settings → Language or the login page. The choice is saved per-browser.

Language Code Status
English en ✅ Complete (reference)
Français fr 🟡 AI-generated, needs review
Deutsch de 🟡 AI-generated, needs review
Español es 🟡 AI-generated, needs review
Polski pl 🟢 Human-translated
Русский ru 🟡 AI-generated, needs review
中文 zh 🟡 AI-generated, needs review

⚠️ Translation Quality

Non-English translations were initially generated with AI assistance and have not been fully reviewed by native speakers. They may contain awkward phrasing, incorrect terminology, or outright errors. If you speak one of these languages, corrections are hugely appreciated.

Contributing a Translation

Improve an existing language: 1. Open public/locales/{code}.json (e.g. fr.json) 2. Fix any incorrect or awkward translations 3. Submit a PR

Add a new language: 1. Copy public/locales/en.json to public/locales/{code}.json 2. Translate all values (keep the keys unchanged) 3. Fill in the _meta block with your language name and flag 4. Add the code to the SUPPORTED array in public/js/i18n.js 5. Add a <option> to both language selectors in public/index.html and public/app.html 6. Submit a PR

Maintenance Reality

Translations are a community effort. As new features are added to Haven, new English strings appear, and other languages will fall behind until someone updates them. Missing keys gracefully fall back to the English text, so nothing breaks — you'll just see some English mixed in until someone contributes the translation.

If you'd like to "own" a language and keep it current, reach out via an issue. Long-term language maintainers are welcome and appreciated.

Letting Friends Connect Over the Internet

If your friends aren't on your WiFi, you need to open a port on your router.

Step 1 — Find Your Public IP

Go to whatismyip.com. That's the address your friends will use.

Step 2 — Port Forward

  1. Log into your router (usually http://192.168.1.1 or http://10.0.0.1)
  2. Find Port Forwarding (sometimes called NAT or Virtual Servers)
  3. Forward port 3000 (TCP) to your PC's local IP
  4. Save

Find your local IP: Open Command Prompt → type ipconfig → look for IPv4 Address (e.g. 192.168.1.50)

Step 3 — Windows Firewall

Open PowerShell as Administrator and run:

New-NetFirewallRule -DisplayName "Haven Chat" -Direction Inbound -LocalPort 3000 -Protocol TCP -Action Allow

Step 4 — Share With Friends

Send them:

https://YOUR_PUBLIC_IP:3000

Tell them to click AdvancedProceed on the certificate warning. It's normal.


Configuration

Haven creates a .env config file automatically on first launch — you don't need to create or rename anything. It lives in your data directory:

OS Data Directory
Windows %APPDATA%\Haven\
Linux / macOS ~/.haven/

Running Haven as a systemd service? systemd runs the unit as the user you set in User= (often root), so ~/.haven/ resolves to that user's home (e.g. /root/.haven/) — not the directory

Core symbols most depended-on inside this repo

t
called by 917
public/js/i18n.js
get
called by 725
public/js/modules/stream-debug.js
remove
called by 345
public/js/servers.js
_showToast
called by 311
public/js/modmode.js
join
called by 303
public/js/voice.js
add
called by 232
public/js/servers.js
getDb
called by 109
src/database.js
userHasPermission
called by 93
src/socketHandlers/permissions.js

Shape

Function 1,127
Method 224
Class 18

Languages

TypeScript100%
Python1%

Modules by API surface

public/js/modules/app-admin.js144 symbols
public/js/modules/app-ui.js115 symbols
public/js/modules/app-voice.js114 symbols
public/js/modules/app-utilities.js108 symbols
public/js/modules/app-media.js97 symbols
public/js/theme.js67 symbols
public/js/modules/app-channels.js67 symbols
public/js/voice.js62 symbols
public/js/e2e.js48 symbols
server.js46 symbols
public/js/modules/app-platform.js37 symbols
public/js/modules/app-context.js37 symbols

For agents

$ claude mcp add Haven \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact