{"id":44324872,"url":"https://github.com/ancsemi/haven","last_synced_at":"2026-04-09T06:01:07.238Z","repository":{"id":337757518,"uuid":"1155081460","full_name":"ancsemi/Haven","owner":"ancsemi","description":"Self-hosted private chat — No cloud, no telemetry, no Big Tech. Discord alternative that runs on your own machine.","archived":false,"fork":false,"pushed_at":"2026-04-07T02:40:49.000Z","size":2964,"stargazers_count":328,"open_issues_count":16,"forks_count":28,"subscribers_count":7,"default_branch":"main","last_synced_at":"2026-04-07T04:30:12.859Z","etag":null,"topics":["android-application","browser","chat","discord","discord-alternative","docker","encryption","homelab","linux","messaging","nodejs","picture-in-picture","privacy","self-hosted","selfhosted","server","soundcloud","streaming","voice-chat","youtube"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ancsemi.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":"docs/support.html","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"ko_fi":"ancsemi"}},"created_at":"2026-02-11T05:16:20.000Z","updated_at":"2026-04-07T03:02:35.000Z","dependencies_parsed_at":"2026-02-17T04:02:44.099Z","dependency_job_id":"de81f708-97f7-4d8a-9e47-49552333fd5e","html_url":"https://github.com/ancsemi/Haven","commit_stats":null,"previous_names":["ancsemi/haven"],"tags_count":70,"template":false,"template_full_name":null,"purl":"pkg:github/ancsemi/Haven","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ancsemi%2FHaven","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ancsemi%2FHaven/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ancsemi%2FHaven/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ancsemi%2FHaven/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ancsemi","download_url":"https://codeload.github.com/ancsemi/Haven/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ancsemi%2FHaven/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31588038,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-09T05:33:47.836Z","status":"ssl_error","status_checked_at":"2026-04-09T05:32:26.579Z","response_time":112,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android-application","browser","chat","discord","discord-alternative","docker","encryption","homelab","linux","messaging","nodejs","picture-in-picture","privacy","self-hosted","selfhosted","server","soundcloud","streaming","voice-chat","youtube"],"created_at":"2026-02-11T07:19:41.605Z","updated_at":"2026-04-09T06:01:07.111Z","avatar_url":"https://github.com/ancsemi.png","language":"JavaScript","readme":"# ⬡ AMNI-HAVEN — Private Chat That Lives On Your Machine\n\n\u003e **Your server. Your rules. No cloud. No accounts with Big Tech. No one reading your messages.**\n\n![Version](https://img.shields.io/badge/version-2.8.2-blue)\n![License](https://img.shields.io/badge/license-MIT--NC-green)\n![Node](https://img.shields.io/badge/node-%3E%3D18-brightgreen)\n![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20Linux%20%7C%20macOS-lightgrey)\n\nAmni-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.\n\n\u003cimg width=\"1917\" height=\"948\" alt=\"Screenshot 2026-02-14 102013\" src=\"https://github.com/user-attachments/assets/0c85ca6c-f811-43db-a26b-9b66c418830e\" /\u003e\n\n---\n\n## 🖥️ NEW — Amni-Haven Desktop (Beta)\n\n\u003e **Want a native desktop experience?** Amni-Haven Desktop is a standalone app that connects to any Amni-Haven server — with features that go beyond the browser.\n\n**[Amni-Haven Desktop](https://github.com/ancsemi/Haven-Desktop)** is now available as a public beta. Download the installer and connect to your server in seconds.\n\n- **Per-Application Audio** — share audio from a single app during screen share, just like Discord. Powered by native WASAPI (Windows) and PulseAudio (Linux) hooks.\n- **Audio Device Switching** — change your mic and speaker mid-call without leaving voice chat\n- **Native Desktop Notifications** — OS-level notifications via the system tray\n- **Minimize to Tray** — keeps running quietly in the background\n- **One-Click Install** — NSIS installer (Windows), AppImage / .deb (Linux). Download, run, done.\n\n\u003e **⚠️ This is a beta release.** Bugs are expected. Your feedback is what makes it better — please [open an issue](https://github.com/ancsemi/Haven-Desktop/issues) if something breaks or feels off.\n\u003e\n\u003e **You still need an Amni-Haven server.** The desktop app is a client — it connects to an Amni-Haven server. Download and run [Amni-Haven](https://github.com/ancsemi/Haven) first if you haven't already.\n\n📥 **[Download Amni-Haven Desktop →](https://github.com/ancsemi/Haven-Desktop/releases/latest)**\n\n---\n\n## 📱 NEW — Amni-Haven Android (Closed Beta)\n\n\u003e **Want Amni-Haven on your phone?** Amni-Haven Android is a native Android app built from the ground up, now in closed beta on Google Play.\n\n**Amni-Haven Android** features full chat and voice support, push notifications, and a true mobile-native experience.\n\n- **Native Android** — built from scratch specifically for Amni-Haven, not a web wrapper\n- **Push Notifications** — real-time notifications via Google Play services\n- **Full Chat \u0026 Voice** — all the features you love, in your pocket\n\n\u003e **🚀 Want to join the beta?** Visit **[amni-scient.com/amni-haven.html](https://amni-scient.com/amni-haven.html)** to request access to the closed beta.\n\u003e\n\u003e **You still need an Amni-Haven server.** The Android app is a client — it connects to an Amni-Haven server. Download and run [Amni-Haven](https://github.com/ancsemi/Haven) first if you haven't already.\n\n*Built with ❤️ by **Amnibro** — huge thanks for his incredible work building the Amni-Haven Android app from the ground up.*\n\n📲 **[Request Android Beta Access →](https://amni-scient.com/amni-haven.html)**\n\n---\n\n## NEW in v2.0.0 — Import Your Discord History\n\n\u003e **Leaving Discord?** Amni-Haven can import your entire server's message history — directly from the app. No external tools, no command-line exports, no hassle.\n\nOpen **Settings → Import** and connect with your Discord token. Amni-Haven pulls every channel, thread, forum post, announcement, reaction, pin, attachment, and avatar — then lets you map them to Amni-Haven channels. Your community's history comes with you.\n\n- **Direct Connect** — paste your Discord token, pick a server, select channels \u0026 threads, import\n- **File Upload** — or upload a DiscordChatExporter JSON/ZIP if you prefer\n- **Full fidelity** — messages, replies, embeds, attachments, reactions, pins, forum tags, all preserved\n- **Discord avatars** — imported messages show the original author's Discord profile picture\n- **All channel types** — text, announcement, forum, media, plus active \u0026 archived threads\n\nYour 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.\n\n---\n\n## Quick Start — Docker (Recommended)\n\n**Option A — Pre-built image** (fastest, easiest updates):\n```bash\ndocker pull ghcr.io/ancsemi/haven:latest\ndocker run -d -p 3000:3000 -v haven_data:/data ghcr.io/ancsemi/haven:latest\n```\n\nOr with Docker Compose (recommended):\n```bash\ngit clone https://github.com/ancsemi/Haven.git\ncd Haven\ndocker compose up -d\n```\nThe shipped `docker-compose.yml` uses the pre-built image by default.\n\n**Option B — Build from source** (only if you need to modify the code):\n```bash\ngit clone https://github.com/ancsemi/Haven.git\ncd Haven\n```\nUncomment `build: .` in `docker-compose.yml`, then:\n```bash\ndocker compose up -d\n```\n\nOpen `https://localhost:3000` → Register with username `admin` → Create a channel → Share the code with friends. Done.\n\n\u003e Certificate warning is normal — click **Advanced → Proceed**. Amni-Haven uses a self-signed cert for encryption.\n\n**Updating** — if using the pre-built image (default):\n```bash\ndocker compose pull\ndocker compose up -d --force-recreate\n```\n\n**Check your version**: visit `https://localhost:3000/api/version` in your browser.\n\n**Option C — One-click cloud deploy** (Zeabur):\n\n[![Deploy on Zeabur](https://zeabur.com/button.svg)](https://zeabur.com/templates?repoURL=https://github.com/ancsemi/Haven)\n\n---\n\n## Quick Start — Windows (No Docker)\n\n1. Download and unzip this repository\n2. Double-click **`Start Haven.bat`**\n3. If Node.js isn't installed, the script will offer to install it for you automatically\n\nThat's it. The batch file handles everything — Node.js installation, dependencies, SSL certificates, config — and opens your browser. Register as `admin` to get started.\n\n\u003e **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](https://nodejs.org/) and restart your PC.\n\n## Quick Start — Linux / macOS (No Docker)\n\n```bash\nchmod +x start.sh\n./start.sh\n```\n\nOr manually: `npm install \u0026\u0026 node server.js`\n\n---\n\n## Who Is This For?\n\n- **Small friend groups** who want a private place to talk\n- **Self-hosters** who run services on their own hardware\n- **Privacy-conscious communities** done with Big Tech\n- **LAN gaming crews** who need voice + screen share without Discord\n- **Homelab enthusiasts** looking for a lightweight chat service\n\n---\n\n\u003cimg width=\"1918\" height=\"945\" alt=\"Screenshot 2026-02-13 174344\" src=\"https://github.com/user-attachments/assets/a1925091-46de-4fa6-bb8d-788985c974be\" /\u003e\n\n\n## Why Not Discord?\n\n| | Discord | Amni-Haven |\n|---|---------|-------|\n| **Hosting** | Their cloud | Your machine |\n| **Account** | Email + phone required | No email, no verification |\n| **Your data** | Stored by Discord Inc. | Never leaves your server |\n| **Cost** | Nitro upsells, boosts | Free forever |\n| **Telemetry** | Analytics, tracking | Zero telemetry |\n| **Source code** | Closed | Open (MIT-NC) |\n\n---\n\n## Features\n\n| Category | What You Get |\n|----------|-------------|\n| **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) |\n| **Voice** | Peer-to-peer audio chat, per-user volume sliders, mute/deafen, join/leave audio cues, talking indicators, click usernames for profile/DM |\n| **Screen Share** | Multi-stream screen sharing with tiled grid layout, per-user video tiles, one-click close |\n| **Channels** | Hierarchical channels with sub-channels, private (invite-only) sub-channels with 🔒 indicator, channel topics |\n| **Join Codes** | Per-channel invite codes with admin controls: public/private visibility, static/dynamic mode, time-based or join-based auto-rotation, manual rotation |\n| **Avatars** | Upload profile pictures (including animated GIFs!), choose avatar shape (circle/square/hexagon/diamond), per-user shapes visible to everyone |\n| **Formatting** | **Bold**, *italic*, ~~strikethrough~~, `code`, \\|\\|spoilers\\|\\|, auto-linked URLs, fenced code blocks with language labels, blockquotes |\n| **Link Previews** | Automatic OG metadata previews for shared URLs with title, description, and thumbnail |\n| **GIF Search** | GIPHY-powered GIF picker — search and send GIFs inline (admin-configurable API key) |\n| **Direct Messages** | Private 1-on-1 conversations — click 💬 on any user in the member list |\n| **User Status** | Online, Away, Do Not Disturb, Invisible — with custom status text and auto-away after 5 min idle |\n| **File Sharing** | Upload and share PDFs, documents, audio, video, archives (up to 25 MB) with inline players |\n| **Persistent Unread** | Server-tracked read state — unread badges survive page refreshes and reconnects |\n| **Slash Commands** | `/shrug`, `/tableflip`, `/roll 2d20`, `/flip`, `/me`, `/spoiler`, `/tts`, and more — type `/` to see them all |\n| **Search** | Search messages in any channel with Ctrl+F |\n| **Themes** | 20+ themes with stackable visual effects: CRT, Matrix Rain, Cyberpunk Text Scramble, Snowfall, Campfire Embers, and more — configurable intensity/frequency sliders |\n| **Multi-Server** | Add friends' Amni-Haven servers to your sidebar with live online/offline status |\n| **Notifications** | 5 notification sounds, per-channel volume controls |\n| **Moderation** | Admin: kick, mute (timed), ban, delete users, delete channels, auto-cleanup. Role system with granular permissions. |\n| **Security** | Bcrypt passwords, JWT auth, HTTPS/SSL, rate limiting, CSP headers, input validation |\n| **E2E Encryption** | ECDH P-256 + AES-256-GCM encrypted DMs — private keys never leave the browser |\n| **Discord Import** | Import your entire Discord server history — channels, threads, forums, reactions, pins, avatars — directly from Amni-Haven's UI or via file upload |\n| **Game** | Shippy Container — Drew's shipment got hung up. Server-wide leaderboard. |\n| **Translations** | 6 languages out of the box (English, French, German, Spanish, Russian, Chinese). Community-contributed. |\n\n\n\u003cimg width=\"1917\" height=\"911\" alt=\"Screenshot 2026-02-16 013038\" src=\"https://github.com/user-attachments/assets/79b62980-0822-4e9d-b346-c5a93de95862\" /\u003e\n\n\n---\n\n## 🌐 Translations (i18n)\n\nAmni-Haven supports multiple languages. Users can switch languages from **Settings → Language** or the login page. The choice is saved per-browser.\n\n| Language | Code | Status |\n|----------|------|--------|\n| English | `en` | ✅ Complete (reference) |\n| Français | `fr` | 🟡 AI-generated, needs review |\n| Deutsch | `de` | 🟡 AI-generated, needs review |\n| Español | `es` | 🟡 AI-generated, needs review |\n| Русский | `ru` | 🟡 AI-generated, needs review |\n| 中文 | `zh` | 🟡 AI-generated, needs review |\n\n### ⚠️ Translation Quality\n\nNon-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.\n\n### Contributing a Translation\n\n**Improve an existing language:**\n1. Open `public/locales/{code}.json` (e.g. `fr.json`)\n2. Fix any incorrect or awkward translations\n3. Submit a PR\n\n**Add a new language:**\n1. Copy `public/locales/en.json` to `public/locales/{code}.json`\n2. Translate all values (keep the keys unchanged)\n3. Fill in the `_meta` block with your language name and flag\n4. Add the code to the `SUPPORTED` array in `public/js/i18n.js`\n5. Add a `\u003coption\u003e` to both language selectors in `public/index.html` and `public/app.html`\n6. Submit a PR\n\n### Maintenance Reality\n\nTranslations are a community effort. As new features are added to Amni-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.\n\nIf you'd like to \"own\" a language and keep it current, reach out via an issue. Long-term language maintainers are welcome and appreciated.\n\n## Letting Friends Connect Over the Internet\n\nIf your friends aren't on your WiFi, you need to open a port on your router.\n\n### Step 1 — Find Your Public IP\n\nGo to [whatismyip.com](https://whatismyip.com). That's the address your friends will use.\n\n### Step 2 — Port Forward\n\n1. Log into your router (usually `http://192.168.1.1` or `http://10.0.0.1`)\n2. Find **Port Forwarding** (sometimes called NAT or Virtual Servers)\n3. Forward port **3000** (TCP) to your PC's local IP\n4. Save\n\n\u003e **Find your local IP:** Open Command Prompt → type `ipconfig` → look for IPv4 Address (e.g. `192.168.1.50`)\n\n### Step 3 — Windows Firewall\n\nOpen PowerShell as Administrator and run:\n```powershell\nNew-NetFirewallRule -DisplayName \"Amni-Haven Chat\" -Direction Inbound -LocalPort 3000 -Protocol TCP -Action Allow\n```\n\n### Step 4 — Share With Friends\n\nSend them:\n```\nhttps://YOUR_PUBLIC_IP:3000\n```\n\nTell them to click **Advanced** → **Proceed** on the certificate warning. It's normal.\n\n---\n\n## Configuration\n\nAmni-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**:\n\n| OS | Data Directory |\n|----|---------------|\n| Windows | `%APPDATA%\\Haven\\` |\n| Linux / macOS | `~/.haven/` |\n\n| Setting | Default | What It Does |\n|---------|---------|-------------|\n| `PORT` | `3000` | Server port |\n| `SERVER_NAME` | `Haven` | Your server's display name |\n| `ADMIN_USERNAME` | `admin` | Register with this name to get admin powers |\n| `JWT_SECRET` | *(auto-generated)* | Security key — don't share or edit this |\n| `SSL_CERT_PATH` | *(auto-detected)* | Path to SSL certificate |\n| `SSL_KEY_PATH` | *(auto-detected)* | Path to SSL private key |\n| `HAVEN_DATA_DIR` | *(see above)* | Override the data directory location |\n\nAfter editing `.env`, restart the server.\n\n---\n\n## Slash Commands\n\nType `/` in the message box to see the full list. Here are some highlights:\n\n| Command | What It Does |\n|---------|-------------|\n| `/shrug` | ¯\\\\_(ツ)_/¯ |\n| `/tableflip` | (╯°□°)╯︵ ┻━┻ |\n| `/unflip` | ┬─┬ ノ( ゜-゜ノ) |\n| `/roll 2d20` | Roll dice (any NdN format) |\n| `/flip` | Flip a coin |\n| `/me does something` | Italic action text |\n| `/spoiler secret text` | Hidden spoiler text |\n| `/tts hello` | Text-to-speech |\n| `/nick NewName` | Change your username |\n| `/clear` | Clear your chat view |\n| `/bbs` | \"Will be back soon\" |\n| `/afk` | \"Away from keyboard\" |\n\n---\n\n## Themes\n\n25 themes, switchable from the sidebar:\n\n**Amni-Haven** · **Discord** · **Matrix** · **Tron** · **HALO** · **Lord of the Rings** · **Cyberpunk** · **Nord** · **Dracula** · **Bloodborne** · **Ice** · **Abyss**\n\nYour theme choice persists across sessions.\n\n\n\u003cimg width=\"1919\" height=\"908\" alt=\"Screenshot 2026-02-16 013319\" src=\"https://github.com/user-attachments/assets/f061491e-d998-4160-9971-b846cea83cd4\" /\u003e\n\n\n---\n\n## Voice Chat\n\n1. Join a text channel\n2. Click **🎤 Join Voice**\n3. Allow microphone access\n4. Adjust anyone's volume with their slider\n5. Click **📞 Leave** when done\n\nVoice is peer-to-peer — audio goes directly between users, not through the server. Requires HTTPS.\n\n- **Join / leave cues** — synthesized audio tones when users enter or leave voice.\n- **Talking indicators** — usernames glow green when speaking (300 ms hysteresis for smooth animation).\n- **Screen sharing** — click **🖥️ Share Screen** to broadcast your display. Multiple users can share simultaneously in a tiled grid.\n\n---\n\n## Admin Guide\n\nIf you registered with the admin username, you can:\n\n- **Create / delete channels**\n- **Kick users** — disconnects them (they can rejoin)\n- **Mute users** — timed mute (can't send messages)\n- **Ban users** — permanent ban (can't connect)\n- **Delete users** — remove banned accounts (frees up their username)\n- **Auto-cleanup** — configure automatic deletion of old messages (Settings → Admin)\n- **Server settings** — EULA, max message age, DB size limits\n\nAccess admin controls in the **Settings** panel (⚙️ gear icon in the sidebar).\n\n---\n\n## Troubleshooting\n\n| Problem | Fix |\n|---------|-----|\n| \"SSL_ERROR_RX_RECORD_TOO_LONG\" | Your browser is using `https://` but the server is running HTTP. **Change the URL to `http://localhost:3000`**, or install OpenSSL and restart to enable HTTPS (see below). |\n| \"Node.js is not installed\" | The launcher offers to install it automatically. Or run `winget install OpenJS.NodeJS.LTS` in a terminal, restart, and try again. |\n| Browser shows blank page | Clear cache or try incognito/private window |\n| Friends can't connect | Check port forwarding + firewall. Make sure server is running. |\n| \"Error: EADDRINUSE\" | Another app is using port 3000. Change `PORT` in `.env`. |\n| Voice chat echoes | Use headphones |\n| Voice doesn't work remotely | Must use `https://`, not `http://` |\n| Certificate error in browser | Normal — click Advanced → Proceed |\n\n### HTTPS / SSL Details\n\nAmni-Haven **automatically generates self-signed SSL certificates** on first launch — but only if **OpenSSL** is installed on your system.\n\n**How to tell which mode you're in:** Look at the startup banner in the terminal window. If the URL shows `http://` — you're on HTTP. If it shows `https://` — you're on HTTPS.\n\n**If Amni-Haven falls back to HTTP** (no OpenSSL, or cert generation failed):\n- Everything works fine for local use — just use `http://localhost:3000`\n- Voice chat will only work on localhost, not for remote friends\n- To enable HTTPS:\n  1. Install OpenSSL: [slproweb.com/products/Win32OpenSSL.html](https://www.slproweb.com/products/Win32OpenSSL.html) (the \"Light\" version)\n  2. During install, choose \"Copy OpenSSL DLLs to the Windows system directory\"\n  3. Restart your PC\n  4. Delete `%APPDATA%\\Haven\\certs` and re-launch `Start Haven.bat`\n\n---\n\n## Keyboard Shortcuts\n\n| Key | Action |\n|-----|--------|\n| `Shift+Enter` | New line |\n| `Ctrl+F` | Search messages |\n| `@` | @mention autocomplete |\n| `:` | Emoji autocomplete (type 2+ chars) |\n| `/` | Slash command autocomplete |\n| `Tab` | Select autocomplete suggestion |\n\n---\n\n## Backing Up Your Data\n\nAll your data lives in a dedicated directory **outside** the Haven code folder:\n\n| OS | Location |\n|----|----------|\n| Windows | `%APPDATA%\\Haven\\` |\n| Linux / macOS | `~/.haven/` |\n\nInside you'll find:\n- **`haven.db`** — all messages, users, and channels\n- **`.env`** — your configuration\n- **`certs/`** — SSL certificates\n- **`uploads/`** — uploaded images\n\nCopy the entire folder somewhere safe to back up everything. The Haven code directory contains no personal data.\n\n---\n\n## GIF Search — GIPHY API Setup\n\nAmni-Haven has a built-in GIF picker powered by **GIPHY**. To enable it you need a free API key.\n\n### 1. Create a GIPHY Developer Account\n\n1. Go to [developers.giphy.com](https://developers.giphy.com/)\n2. Sign up for an account (or sign in)\n\n### 2. Create an App\n\n1. Click **Create an App**\n2. Choose **API** (not SDK)\n3. Give it any name (e.g. \"Amni-Haven Chat\") and a short description\n4. Copy the **API Key** shown on the next page\n\n### 3. Add the Key in Amni-Haven\n\n1. Log into Amni-Haven as your **admin** account\n2. Click the **GIF button** (🎞️) in the message input area\n3. You'll see a setup prompt — paste your API key and save\n4. The key is stored server-side in the database — only admins can see or change it\n\nThat's it. All users can now search and send GIFs.\n\n\u003e **Free tier:** GIPHY's free tier allows plenty of requests for a private chat server — you'll never come close to the limit.\n\n---\n\n## Roadmap\n\nPlanned features — roughly in priority order:\n\n| Feature | Status | Description |\n|---------|--------|-------------|\n| **Sub-channels** | ✅ Done | Hierarchical channels with auto-membership inheritance and private (invite-only) sub-channels |\n| **Join code management** | ✅ Done | Admin controls: public/private visibility, static/dynamic mode, time/join-based rotation |\n| **Role system** | ✅ Done | Role-based access with granular per-channel permissions |\n| **Avatar system** | ✅ Done | Profile picture uploads with selectable avatar shapes (circle, square, hexagon, diamond) |\n| **Effect system** | ✅ Done | 15+ stackable visual effects with configurable intensity/frequency |\n| **Webhook / Bot support** | ✅ Done | Incoming webhooks and a lightweight bot API for external integrations |\n| **Thread replies** | 📋 Planned | Threaded conversations that branch off a message |\n| **End-to-end encryption** | ✅ Done | ECDH P-256 + AES-256-GCM encryption for DMs — private keys stay in the browser |\n| **Multi-factor authentication** | 📋 Planned | U2F/FIDO key and TOTP support, with optional admin MFA requirement |\n| **Session invalidation on password change** | 📋 Planned | All active sessions are forcibly logged out when a user changes their password |\n| **Recovery-key password reset** | 📋 Planned | Generate a 24-word recovery phrase from settings — used to reset your password without losing E2E DM history. Existing users get a one-time prompt to generate theirs. No admin involvement, no email required. |\n| **Android App** | 🟢 Closed Beta! | [Request Beta Access](https://amni-scient.com/amni-haven.html) |\n| **Desktop App** | ✅ Beta! | https://github.com/ancsemi/Haven-Desktop |\n\n\u003e Want something else? Open an issue — PRs are always welcome.\n\n---\n\n## License\n\nMIT-NC — free to use, modify, and share. **Not for resale.** See [LICENSE](LICENSE).\n\nOriginal project: [github.com/ancsemi/Haven](https://github.com/ancsemi/Haven)\n\n---\n\n\u003cp align=\"center\"\u003e\n  \u003cb\u003e⬡ Amni-Haven\u003c/b\u003e — Because your conversations are yours.\n\u003c/p\u003e","funding_links":["https://ko-fi.com/ancsemi"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fancsemi%2Fhaven","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fancsemi%2Fhaven","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fancsemi%2Fhaven/lists"}