The self-hosted community platform you actually own.
Forum + Chat + Voice + P2P + Homepage Builder + Widget SDK — one server, one community, forever.
⭐ If Nodyx resonates with you, a star helps others find it — and keeps us going.
Nodyx brings them together. One command. Your server. Forever.
Discord, Facebook, Slack — they didn't build communities. They captured them.
Ten years of discussions. Tutorials. Collective knowledge. Memories. Locked in silos. Invisible to search engines. Gone when the platform decides.
You never owned any of it.
One command. Your server. Your rules. Your community — permanently.
curl -fsSL https://nodyx.org/install.sh | bash
Works on a Raspberry Pi behind a home router. No domain. No open ports. No cloud account.
| Nodyx | Discord | Matrix | Discourse | Lemmy | |
|---|---|---|---|---|---|
| Self-hosted | ✅ | ❌ | ✅ | ✅ | ✅ |
| Open source | ✅ AGPL | ❌ | ✅ | ✅ | ✅ |
| Forum indexed by Google | ✅ | ❌ | ❌ | ✅ | ✅ |
| Real-time chat | ✅ | ✅ | ✅ | ⚠️ | ❌ |
| Voice channels | ✅ | ✅ | ✅ | ❌ | ❌ |
| Screen sharing | ✅ | ✅ | ✅ | ❌ | ❌ |
| P2P voice — zero Big Tech relay | ✅ | ❌ | ❌ | ❌ | ❌ |
| Collaborative P2P canvas | ✅ | ❌ | ❌ | ❌ | ❌ |
| P2P DataChannels (instant typing, reactions) | ✅ | ❌ | ❌ | ❌ | ❌ |
| Home server (no port forwarding) | ✅ | ❌ | ❌ | ❌ | ❌ |
| Federated community directory | ✅ | ❌ | ⚠️ | ❌ | ✅ |
| Asset library (frames, badges, banners) | ✅ | ❌ | ❌ | ❌ | ❌ |
| Ephemeral whisper rooms | ✅ | ❌ | ❌ | ❌ | ❌ |
| Passwordless login (ECDSA P-256 PWA) | ✅ | ❌ | ❌ | ❌ | ❌ |
| P2P collaborative Jukebox (YouTube queue) | ✅ | ❌ | ❌ | ❌ | ❌ |
| Event calendar (OSM maps, RSVP, SEO) | ✅ | ❌ | ❌ | ⚠️ | ❌ |
| Cross-instance global search | ✅ | ❌ | ❌ | ❌ | ✅ |
| Per-user profile themes (app-wide) | ✅ | ❌ | ❌ | ❌ | ❌ |
| Homepage Builder — 11 layout zones, drag & drop | ✅ | ❌ | ❌ | ❌ | ❌ |
| Widget Store — install external widgets via .zip | ✅ | ❌ | ❌ | ❌ | ❌ |
| Widget SDK — build custom widgets, no framework needed | ✅ | ❌ | ❌ | ❌ | ❌ |
Nodyx is the only self-hosted platform combining an indexed forum, real-time chat, P2P voice, collaborative canvas, a federated directory, and a fully extensible homepage in a single install.
Nodyx ships with a drag-and-drop Homepage Builder and a complete Widget SDK — two features that no other self-hosted community platform offers.
Place widgets anywhere on your homepage. Positions include:
banner → full-width top announcement strip
hero → main hero section
stats-bar → community counters (members, online, posts)
main → above main content
sidebar → right column (join card, etc.)
half-1 / half-2 → 2-column grid
trio-1/2/3 → 3-column grid
footer-1/2/3 → footer columns
footer-bar → full-width footer strip
| Widget | Description |
|---|---|
| Hero Banner | Animated hero with live/event/night variants resolved server-side |
| Stats Bar | Live member count, online count, thread count with animated counters |
| Join Card | CTA card for guests, hidden for logged-in members |
| Announcement Banner | Closeable info/warning/error strip with icon |
Any developer can package a widget as a .zip and install it on any Nodyx instance:
my-widget-1.0.0.zip
├── manifest.json ← id, label, version, schema (config fields)
└── widget.iife.js ← Web Component — Shadow DOM isolated
The admin panel handles upload, validation, extraction and activation. No rebuild, no deploy.
Widgets are standard Custom Elements (Web Components). Plain JavaScript, no React, no Vue, no npm.
class MyWidget extends HTMLElement {
connectedCallback() { this._render() }
_render() {
var cfg = JSON.parse(this.dataset.config || '{}')
if (!this.shadowRoot) this.attachShadow({ mode: 'open' })
this.shadowRoot.innerHTML = `<div>Hello ${cfg.title}</div>`
}
}
customElements.define('nodyx-widget-my-widget', MyWidget)
→ Full step-by-step guide for non-developers → nodyx.dev/create-widget
This is where Nodyx goes further than anyone else.
coturn is the industry standard — a mature C server used by Signal, Jitsi, Matrix. We replaced it with a 2.9MB Rust binary that does exactly what Nodyx needs. Nothing more.
RFC 5389 (STUN) + RFC 5766 (TURN) + RFC 6062 (TURN-over-TCP)
HMAC-SHA1 time-based credentials (username={expires}:{userId})
MESSAGE-INTEGRITY on all responses (RFC 5389 §10.3) — Firefox/Chrome compliant
Rate limiting + allocation quotas (MAX_LIFETIME=300s) + ban map
tokio async runtime — UDP:3478 + TCP:3478 (VPN/firewall bypass)
Zero coturn dependency on production
A Raspberry Pi under your desk. No domain. No router port forwarding. No Cloudflare account. Run Nodyx anyway.
nodyx-relay server → listens TCP:7443 + HTTP:7001
nodyx-relay client → persistent TCP tunnel → exposes local port 80
yourclub.nodyx.org → proxied to the Pi behind your routerMessages between peers that never touch the server.
Draw together in real time. Synchronized via existing DataChannels. No server touches the data. Session-only by default.
CRDT Last-Write-Wins per element (UUID + timestamp)
canvas:op / canvas:clear / canvas:cursor → P2P DataChannels
Voice-aware cursors: peer cursor pulses when they're speaking
PNG export (browser-native) + text recap posted to chat channel
| Community Home | Forum |
![]() |
![]() |
| Real-time Chat | Voice Channels — WebRTC P2P |
![]() |
![]() |
| Admin Panel | Instance Directory |
![]() |
![]() |
The installer handles everything automatically. Your system only needs curl and git to get started.
# Ubuntu / Debian
apt-get install -y git curl
curl -fsSL https://nodyx.org/install.sh | bash
Or clone first:
git clone https://github.com/Pokled/Nodyx.git && cd Nodyx && sudo bash install.sh
The installer offers three network modes:
| Mode | Requirements | Result |
|---|---|---|
| Nodyx Relay ⭐ | Nothing — outbound TCP only | yourclub.nodyx.org in minutes |
| Open ports | Ports 80 + 443, domain or IP | Let's Encrypt HTTPS, full control |
| Cloudflare Tunnel | CF account + own domain | Your custom domain, no open ports |
Nodyx Relay is the recommended default — works on a Raspberry Pi behind a home router. No domain. No port forwarding. No cloud account. Just run the script.
Installs automatically: Node.js, PostgreSQL, Redis, nodyx-turn (Rust STUN/TURN), Caddy (HTTPS), PM2. Generates secrets, bootstraps the database, creates your admin account. No manual configuration.
Supported: Ubuntu 22.04 / 24.04, Debian 11 / 12 / 13.
→ Complete installation guide (EN)
→ Guide d'installation complet (FR)
cd /var/www/nexus && git pull && \
cd nodyx-core && npm run build && sudo -u nodyx pm2 restart nodyx-core && \
cd ../nodyx-frontend && npm run build && sudo -u nodyx pm2 restart nodyx-frontend
Database migrations are applied automatically on startup — no manual SQL needed.
┌─────────────────────────────────────────────────────────────┐
│ Your Browser │
└──────────────┬──────────────────────────────┬───────────────┘
│ HTTP / WebSocket │ WebRTC P2P
▼ ▼
┌──────────────────────────┐ ┌────────────────────────────┐
│ nodyx-core (Fastify) │ │ Direct peer connection │
│ nodyx-frontend (Svelte)│ │ DataChannels + Canvas │
│ PostgreSQL + Redis │ │ Voice + Screen share │
└──────────────────────────┘ └────────────────────────────┘
│ │
┌──────┴──────┐ ┌──────┴──────┐
│ nodyx-relay │ │ nodyx-turn │
│ (Rust TCP) │ │ (Rust TURN) │
│ home server │ │ NAT bypass │
└─────────────┘ └─────────────┘
| Layer | Technology |
|---|---|
| API | TypeScript + Fastify v5 |
| Database | PostgreSQL 16 · 71 migrations |
| Cache / Sessions | Redis 7 |
| Full-text search | PostgreSQL FTS (tsvector + GIN) |
| Frontend | SvelteKit 5 + Tailwind v4 |
| Editor | TipTap (WYSIWYG) |
| Real-time | Socket.IO |
| Voice | WebRTC P2P mesh |
| TURN relay | nodyx-turn — Rust, self-hosted, hardened |
| P2P relay | nodyx-relay — Rust, tokio + hyper |
| Collaborative canvas | NodyxCanvas — CRDT LWW, P2P DataChannels |
| Homepage | Homepage Builder — 11 zones, drag & drop, visibility rules |
| Widgets | Widget Store — .zip install + Widget SDK (Web Components) |
| Feature | Version |
|---|---|
| Forum (categories, threads, posts, reactions, tags) | v0.1 |
| Full-text search (PostgreSQL FTS) | v0.1 |
| Real-time chat (Socket.IO) | v0.1 |
| Voice channels (WebRTC P2P) | v0.1 |
| Screen sharing + clip recording | v0.2 |
| Admin panel | v0.2 |
| SEO (sitemap, RSS, JSON-LD) | v0.3 |
| One-click installer | v0.4 |
| Instance directory + auto DNS | v0.5 |
| nodyx-relay — Rust P2P TCP tunnel | v0.5 |
| Community asset library (frames, banners, badges) | v0.6 |
| Feature Garden — community voting | v0.6 |
| Federated asset directory (cross-instance sharing) | v0.7 |
| Whispers — ephemeral encrypted chat rooms (1h TTL) | v0.7 |
| P2P DataChannels — instant typing, optimistic reactions | v0.8 |
| nodyx-turn — Rust STUN/TURN replacing coturn | v0.9 |
| NodyxCanvas — collaborative P2P whiteboard | v0.9 |
| Profile theme system — 6 presets, per-user app-wide CSS engine | v1.0 |
| Mobile-responsive UI | v1.0 |
| Chat — Reply/quote, pinned messages, link previews, @mention badge | v1.1 |
| Presence — Custom status + offline members list | v1.1 |
| Direct Messages (DMs) — private 1:1 conversations | v1.2 |
| Polls — in chat and forum, 3 types, real-time results | v1.2 |
| Ban system — IP ban, email ban, multi-layer enforcement | v1.2 |
| nodyx-turn — TURN-over-TCP (RFC 6062) | v1.3 |
| Voice — Relay failover + Opus tuning | v1.3 |
| Feature | Version |
|---|---|
| Thread slug URLs + full SEO (canonical, OG, JSON-LD, sitemap) | v1.4 |
| Category slugs + subcategories | v1.5 |
| Global Search — cross-instance FTS index, /discover UI | v1.5 |
| Event Calendar — CRUD, RSVP, OSM maps, cover image, rich snippets | v1.6 |
| Gossip Protocol — event federation across instances | v1.6 |
| Nodyx Signet — passwordless ECDSA P-256 auth PWA | v1.7 |
| QR enrollment + Optimistic UI + Notification center | v1.7 |
| Tasks / Kanban — per-community boards, drag & drop, deadlines | v1.8 |
| Update alert + Instance version display | v1.8 |
| Full paranoid security audit — 38 vulnerabilities fixed | v1.8.2 |
| Honeypot — 25+ scanner paths trapped; tarpit; geolocation; DB logging | v1.9.0 |
| fail2ban — 5 jails: SSH, brute force, honeypot (7d), permanent blacklist | v1.9.0 |
| Argon2id — OWASP 2026 password hashing | v1.9.0 |
| 2FA TOTP (RFC 6238) + 2FA via Nodyx Signet | v1.9.1 |
| Credential harvesting traps + Canary files + Canvas fingerprint | v1.9.2 |
| Slowloris inverse — byte-by-byte streaming burns attacker threads 45–90s | v1.9.2 |
| Olympus Hub security dashboard | v1.9.2 |
Process isolation — all processes under nodyx system user |
v1.9.4 |
| 181 Node.js tests + 18 Rust unit tests + CI pipeline | v1.9.4 |
| Living Profile — Generative banner (Lissajous/FNV-1a), Reputation rings (SVG animated), Activity heatmap | v1.9.5 |
Parallax hero, rotating avatar arcs, Timeline, /reputation transparent formulas |
v1.9.5 |
| Forum redesign — flat design, zero radius, full-width content | v1.9.5 |
| Feature | Version |
|---|---|
| DM E2E encryption — ECDH P-256 + AES-256-GCM, private key never leaves the browser (IndexedDB non-extractable) | v2.0 |
| ESY Barbare layer — per-instance byte-permutation obfuscation on top of AES-GCM, server sees only opaque ciphertext | v2.0 |
| E2E shield — live indicator in DM header (green pulse = active, orange = partial), ESY fingerprint tooltip | v2.0 |
| Barbarize animation — sender sees obfuscated text during encryption, receiver sees it decipher in real-time | v2.0 |
| DM message edit — inline edit with re-encryption for E2E messages, real-time propagation via socket | v2.0 |
| DM message delete — real-time soft-delete propagated to all participants instantly | v2.0 |
| DM full-width redesign — split layout, glassmorphism sidebar, iMessage-style bubbles, grouped messages | v2.0 |
| AudioContext shared — single context for all peer VAD (Chrome 6-context limit fix) | v2.0 |
| Feature | Version |
|---|---|
| Homepage Builder — drag-and-drop admin, 11 layout zones (banner, hero, stats-bar, main, sidebar, half ×2, trio ×3, footer ×4) | v2.1 |
| Plugin registry — each native widget is a self-contained file, zero core changes to add new ones | v2.1 |
| 4 native widgets Phase 1 — Hero Banner (live/event/night variants), Stats Bar (animated counters), Join Card, Announcement Banner | v2.1 |
| Visibility rules — per-widget audience (all / guests / members) + scheduled start/end dates | v2.1 |
Widget Store — install external widgets via .zip upload (XHR progress bar, 4-step validation, extraction whitelist) |
v2.1 |
| Dynamic Widget Loader — Web Components loaded at runtime, no rebuild, no deploy | v2.1 |
Widget SDK — plain JS Custom Elements (Shadow DOM), manifest.json schema → auto-generated config fields in builder |
v2.1 |
| Demo widget: Video Player — YouTube / Vimeo / MP4 with live preview, source viewer, one-click install | v2.1 |
| nodyx.dev/create-widget — step-by-step guide for non-developers (7 steps, EN) | v2.1 |
| Feature | Notes |
|---|---|
| More native widgets — Countdown, Leaderboard, Latest Threads, Featured Events, Jukebox Player | Phase 2 |
| Widget marketplace — community-published widgets, ratings, one-click install from directory | — |
| Nodes — durable structured knowledge, community-validated via Garden | SPEC 013 |
| Module system — 26 activatable modules from admin panel (Joomla-style CMS) | Spec |
| DM reactions — emoji reactions on private messages | — |
| Discord import — bulk import channels, threads, reactions, avatars | — |
| Mobile (Capacitor) / Desktop (Tauri) | — |
| Rust migration — nodyx-server (Axum) replacing nodyx-core progressively | — |
Nodyx is not a Discord alternative.
It is a different answer to a different question.
Discord asked: "How do we grow fast and capture communities?"
Nodyx asks: "How do we give communities sovereignty over their own existence?"
Every Nodyx instance is a sovereign node. It runs where you run it — a VPS, a Pi, a spare laptop. It stores what you choose to store. It shares what you choose to share. It shuts down when you decide — not when a company pivots.
The internet was decentralized by design. SMTP, IRC, NNTP — anyone could run a server and talk to anyone else's server. That was the promise. Big Tech centralized it into silos over two decades.
Nodyx is the promise, kept.
And it spreads the same way. Each instance that goes live exposes others to the idea. Each public event indexed by Google brings in someone new. Each community that chooses sovereignty inspires another.
"Fork us if we betray you." — AGPL-3.0
| Language | Docs |
|---|---|
English |
nodyx.dev · docs/en/ |
Français |
docs/fr/ |
Español |
coming soon |
Deutsch |
coming soon |
Nodyx belongs to its community.
Contribute freely — no prior validation required:
docs/ → improve or translate documentation
docs/ideas/ → design thinking, UX proposals, new ideas
The core (nodyx-core/src/) requires discussion first — open an Issue.
AGPL-3.0 — The strongest open source license for networked software.
If you use Nodyx, even over a network, your modifications must be open source. If Nodyx ever betrays its principles, this license lets anyone fork it and continue in the spirit of the Manifesto.
Born February 18, 2026.
"Fork us if we betray you."