The self-hosted community platform you actually own.
Forum + Chat + Voice + P2P + Canvas + Homepage Builder + Widget SDK — one server, one community, forever.
⭐ If Nodyx resonates with you, a star helps others find it — and keeps us going.
Hey, before you scroll. Nodyx isn't trying to fight Discord, and it isn't trying to be the only open alternative. There are great projects out there. Matrix, Stoat, Fluxer, Mattermost, Rocket.Chat, Discourse, Haven and others. And we genuinely want you to know about them. We list them, with their GitHub repos, on a page we wrote ourselves: → Why Nodyx (and the other alternatives we respect).
The fight isn't between us. It's between locked silos and communities that actually own themselves. Pick the tool that fits you. We'll cheer either way.
A tool that doesn't have to worry about the moods of a board of directors or the whims of an investor.
🌍 Translations (click to expand)
| Language | Translation |
|---|---|
| Français | Un outil qui n'a pas à craindre les humeurs d'un conseil d'administration ni les caprices d'un investisseur. |
| Deutsch | Ein Werkzeug, das sich nicht um die Launen eines Vorstands oder die Einfälle eines Investors kümmern muss. |
| Español | Una herramienta que no tiene que preocuparse por los humores de un consejo de administración ni por los caprichos de un inversor. |
| Italiano | Uno strumento che non deve preoccuparsi degli umori di un consiglio di amministrazione o dei capricci di un investitore. |
| Nederlands | Een tool die zich geen zorgen hoeft te maken over de stemmingen van een raad van bestuur of de grillen van een investeerder. |
| Português | Uma ferramenta que não precisa se preocupar com os humores de um conselho de administração ou com os caprichos de um investidor. |
| Polski | Narzędzie, które nie musi się martwić nastrojami zarządu ani kaprysami inwestora. |
| Русский | Инструмент, которому не нужно беспокоиться о настроениях совета директоров или капризах инвестора. |
| 中文 | 一个不必担心董事会情绪或投资者心血来潮的工具。 |
| 日本語 | 取締役会の気分や投資家の気まぐれを気にする必要のないツール。 |
- Most communities don't own where they live. Years of history, knowledge, and memories sit on platforms that can change rules, ban accounts, or disappear. That's not malice, that's how closed systems work by default.
- Self-hosting today is fragmented. Forum, real-time chat, voice, and a public homepage usually mean stitching five separate tools together.
- Nodyx ships them in one install so a community can fully own its presence — text, voice, and homepage — on hardware its admins control.
One command. Your server. Forever.
| Layer | Technology |
|---|---|
| Backend API | TypeScript + Fastify v5 + Socket.IO — nodyx-core/ |
| Frontend | SvelteKit 5 + Tailwind v4 + TipTap editor — nodyx-frontend/ |
| Database | PostgreSQL 16 (FTS, migrations) + Redis 7 (sessions, presence) |
| Voice relay | nodyx-turn — Rust STUN/TURN (replaces coturn, 2.9 MB binary) |
| P2P tunneling | nodyx-relay — Rust TCP tunnel (home server, no open ports) |
| Real-time | WebRTC P2P mesh + Socket.IO fallback |
| Auth (optional) | Nodyx Signet — ECDSA P-256 passwordless PWA — nodyx-authenticator/ |
| Process manager | PM2 under a dedicated nodyx system user |
| Reverse proxy | Caddy — automatic Let's Encrypt TLS |
No Docker required. The installer deploys Node.js + PostgreSQL + Redis + Caddy + PM2 natively.
docker-compose.ymlis provided for local development only.
Closed platforms ended up holding more conversations than the open web ever did. Not by malice — by default. They were free, easy, and everyone was already there.
But ten years of discussions, tutorials, and collective knowledge now sit behind login walls. Invisible to search engines. Bound to terms of service written in a Delaware courtroom. 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 | bashWorks on a Raspberry Pi behind a home router. No domain. No open ports. No cloud account.
The community-tools landscape isn't a battle. Each project optimizes for different things, and the right pick depends on what you're building. Here's how we'd recommend it to a friend:
| Project | What it does best | Where it fits |
|---|---|---|
| Discord | Real-time voice + chat for closed groups, mobile-first, 10+ years of bot ecosystem | If your community is private and ad-hoc |
| Matrix (Element) | Federated protocol with bridges to almost everything (Discord, Slack, Telegram, IRC, ...) | If interoperability is non-negotiable |
| Discourse | Indexed, searchable forums and knowledge bases | If long-form async discussion is your core |
| Mattermost / Rocket.Chat | Enterprise compliance, Slack-replacement at scale | If you have a procurement team |
| Haven | Privacy-first chat, zero cloud, native Windows/Linux/Android clients, no telemetry | If keeping every byte on your own machine matters most |
| Stoat (ex-Revolt) / Fluxer | Discord-shaped UI, easy migration | If your members already know Discord |
| Lemmy | Federated, Reddit-style threaded forums | If you want a fediverse-native presence |
| Nodyx | Forum + chat + voice + canvas + homepage builder, in one self-hosted install with a P2P relay for home servers | If you want to fully own a multi-format community on your own hardware |
Nodyx is the only project combining all of those formats in a single install — but if you only need one or two, another tool above may fit you better.
Read our honest take, including the alternatives we respect →
- Indexed forum (canonical URLs, JSON-LD, sitemap, Google-friendly)
- Real-time chat with replies, pins, reactions, unfurls
- P2P voice channels — zero Big Tech relay
- Collaborative P2P canvas (whiteboard)
- WebRTC DataChannels for instant typing/reactions
- Home server support — no port forwarding, no domain required
- Federated community directory + cross-instance global search
- Asset library (frames, badges, banners, profile themes)
- Ephemeral whisper rooms
- Passwordless login (ECDSA P-256 PWA — Nodyx Signet)
- Collaborative jukebox (YouTube queue)
- Event calendar (OSM maps, RSVP, SEO)
- Homepage Builder with 11 layout zones, drag & drop
- Widget Store — install external widgets via .zip
- Widget SDK — build custom widgets, no framework needed
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
- Automatic reconnection with exponential backoff (1s → 30s max)
- JWT authentication per instance
- Routing by slug:
yourclub.nodyx.org→ proxied to the Pi behind your router - Validated on a real Raspberry Pi 4 with zero open ports ✅
Messages between peers that never touch the server.
- Instant typing indicators — < 5ms local latency (vs 80–200ms via server)
- Optimistic emoji reactions — appear instantly, server confirms in background
- P2P file transfer — assets shared directly between peers
- Graceful fallback — if DataChannel unavailable (strict NAT), Socket.IO takes over transparently
Draw, annotate, and build together in real time — directly inside voice channels. Synced via Socket.IO CRDT. Every op is persistent (PostgreSQL JSONB snapshot).
CRDT Last-Write-Wins per element (UUID + timestamp)
canvas:op / canvas:clear / canvas:cursor / canvas:chat → Socket.IO
Voice-aware cursors: peer cursor pulses when they're speaking
Real-time participants panel with live tool + avatar
Board-scoped chat (independent from the voice channel chat)
Tools (v2.2):
| Tool | Key | Description |
|---|---|---|
| Select | V | Move + resize with 8 handles (corners + midpoints) |
| Pen | P | Freehand drawing — color, width, opacity |
| Text | T | Rich inline text — bold/italic/underline/strike, align, font, size |
| Sticky | N | Post-it note — 8 colors, multiline |
| Rect / Circle | R / C | Fill + stroke with independent colors and width |
| Shape | S | Advanced shapes — triangle, diamond, star, hexagon, cloud |
| Arrow | A | Styled arrows — solid/dashed/dotted, 3 cap types |
| Connector | X | Smart connectors — straight/bezier/elbow, independent start+end caps |
| Image | I | Drag & drop or file picker → uploaded to /assets, rendered on canvas |
| Frame | F | Named section — label + dashed border, groups elements visually |
| Eraser | E | Point eraser |
Canvas features:
- Undo / Redo — 50-op stack per session, Ctrl+Z / Ctrl+Y / Ctrl+Shift+Z
- Snap to grid — 28px world grid, toggleable (G)
- Zoom — Ctrl+Scroll, pinch, or toolbar buttons (5% → 1000%)
- Pan — Space+drag or middle-click drag
- Minibar bottom — zoom %, grid toggle, snap toggle
- Export PNG — downloads full canvas, posts recap to chat channel
| Homepage — Grid Builder | Forum |
![]() |
![]() |
| Real-time Chat | Voice Channels — P2P WebRTC |
![]() |
![]() |
— Homepage Builder —
Drag-and-drop grid editor — 11 layout zones, live preview, per-widget audience rules and scheduling
| Widget Store — install via .zip | Module Management |
![]() |
![]() |
| Cross-Instance Search | Polls — Forum & Chat |
![]() |
![]() |
| Wiki | Asset Library |
![]() |
![]() |
The installer handles everything automatically. Your system only needs curl and git to get started.
# Ubuntu / Debian
apt-get install -y git curlPM2 memory limits are automatically tuned to your machine:
| Total RAM | nodyx-core | nodyx-frontend | Auto-swap | Works on |
|---|---|---|---|---|
| < 1.5 GB | 256 MB | 192 MB | 2 GB created | Raspberry Pi 1 GB |
| 1.5 – 3 GB | 384 MB | 256 MB | 1 GB if needed | RPi 4 / small VPS |
| ≥ 3 GB | 512 MB | 512 MB | 1 GB if needed | Standard VPS ⭐ |
Raspberry Pi: use a 64-bit OS (Raspberry Pi OS 64-bit or Ubuntu ARM64). 32-bit is not supported.
curl -fsSL https://nodyx.org/install.sh | bashOr clone first:
git clone https://github.com/Pokled/Nodyx.git && cd Nodyx && sudo bash install.shThe 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 20, PostgreSQL 16, Redis 7, Caddy (HTTPS), PM2, nodyx-turn (Rust STUN/TURN).
Generates secrets, runs all DB migrations, creates your admin account. No Docker. 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-frontendDatabase migrations are applied automatically on startup — no manual SQL needed.
nodyx/
├── nodyx-core/ → Fastify v5 + TypeScript REST API, Socket.IO, DB migrations
├── nodyx-frontend/ → SvelteKit 5 + Tailwind v4 SPA (SSR + client hydration)
├── nodyx-p2p/ → Rust workspace: nodyx-relay (TCP tunnel) + nexus-turn (STUN/TURN)
├── nodyx-authenticator/ → Nodyx Signet — ECDSA P-256 passwordless auth PWA (SvelteKit 5)
├── nodyx-hub/ → Olympus Hub — internal admin dashboard (SvelteKit 5)
├── nodyx-docs/ → nodyx.dev documentation site (SvelteKit 5)
├── docs/ → Markdown docs (EN + FR) — served by nodyx-docs
├── install.sh → One-click installer (Node + PG + Redis + Caddy + PM2, no Docker)
├── ecosystem.config.js → PM2 process config (production)
└── docker-compose.yml → Local development only — not used in production installs
Each Nodyx instance runs a Gossip Protocol scheduler that periodically pings the central directory (nodyx.org/api/directory). Instances share their public metadata (name, slug, URL, member count) and are discoverable via the /discover page on any instance. Events (calendar) federate across instances through the same gossip mechanism. There is no dependency on ActivityPub — the protocol is intentionally minimal and self-contained.
┌─────────────────────────────────────────────────────────────┐
│ 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 — nodyx-core/ |
| Database | PostgreSQL 16 · 53 migrations — automatic on startup |
| Cache / Sessions | Redis 7 — JWT sessions, presence, rate-limiting |
| Full-text search | PostgreSQL FTS (tsvector + GIN) — cross-instance via Gossip |
| Frontend | SvelteKit 5 + Tailwind v4 — nodyx-frontend/ |
| Editor | TipTap (WYSIWYG) |
| Real-time | Socket.IO (polling-first, WebSocket upgrade) |
| Voice | WebRTC P2P mesh — no central audio relay |
| TURN relay | nodyx-turn — Rust 2.9 MB, replaces coturn |
| P2P relay | nodyx-relay — Rust TCP tunnel, runs on home servers |
| Collaborative canvas | NodyxCanvas — CRDT LWW, Socket.IO sync, 11 tools, resize handles, undo/redo |
| Homepage | Homepage Builder — 11 zones, drag & drop, visibility rules |
| Widgets | Widget Store — .zip install + Widget SDK (Web Components) |
| Passwordless auth | Nodyx Signet — ECDSA P-256 PWA — nodyx-authenticator/ |
v0.1 → v1.3 — Foundation
| 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 |
v1.4 → v1.9 — Security & Polish
| 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 |
v2.0 — Private & Sovereign Communications 🔒
| 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 |
v2.4 — Backup System + Live Maintenance Mode 💾
| Feature | Version |
|---|---|
Backup admin UI — /admin/backups page with storage indicator, table of archives, per-row Download / Verify / Restore / Delete actions, sidebar shortcut 💾 |
v2.4 |
Create backup — pg_dump --format=custom --compress=9 + tar -czf, SHA-256 checksum, manifest with stats. Toggle to include or exclude uploaded files |
v2.4 |
Restore with safety net — atomic pg_restore --single-transaction --clean --if-exists, automatic pre-restore snapshot protected for 24h (rollback in one click), type-to-confirm slug + 5s countdown, ordered list of steps shown in the modal |
v2.4 |
Dry-run — verify checksum + format-version compat + tar structure without touching DB or filesystem. Result inline (✓ restorable / ✗ exact error). Audited as metadata.dry_run = true |
v2.4 |
| Verify — recompute SHA-256 + check archive structure on demand, badge visible on the row | v2.4 |
Audit log — every sensitive action (create / restore / download / delete / verify / settings) logged with user + IP + user-agent. Standalone /admin/backups/audit page, indexed for post-compromise forensics |
v2.4 |
Reindex — POST /admin/backups/reindex scans the directory, parses each .tar.gz manifest in-memory, INSERTs missing rows. Recovery for orphan archives |
v2.4 |
Live Maintenance Mode — Redis flag nodyx:maintenance:meta set during create/restore. Global onRequest hook returns 503 on writes (registration, posts, uploads) with a structured payload. Reads, admin endpoints and Socket.IO stay open. Auto-clear with safety belt (30 min create, 60 min restore) |
v2.4 |
| Maintenance banner — sticky amber banner at the top of every page when active, polled every 15 s. "🛠️ Sauvegarde en cours, les nouvelles inscriptions et publications sont temporairement désactivées" | v2.4 |
System tables excluded from dump — backups, backup_audit_log, backup_settings, schema_migrations are never inside an archive, so a restore can't wipe its own safety net. Discovered live during the first prod test (see The Yannick Story in CHANGELOG) |
v2.4 |
Redis lock with Lua release — backup:lock (NX EX 3600) prevents concurrent backups or backup-during-restore. Released atomically via Lua so a process can never delete a lock owned by someone else |
v2.4 |
path.basename() on download — defuses path traversal attempts on the filename param |
v2.4 |
| 13 vitest tests — service-level invariants (path traversal, retention clamps, format-version refusal, protected-bypass), 194 total, 0 regression | v2.4 |
Spec promoted to docs/specs/014-backup-system/SPEC.MD, indexed by nodyx.dev |
v2.4 |
v2.3 — Universal Media Player + Builder Catalog Fusion 🎬
| Feature | Version |
|---|---|
Universal Media Player — auto-detects YouTube, Vimeo, Dailymotion, Twitch (live / VOD / clip), SoundCloud, Spotify, plus direct .mp4 / .webm / .mp3 hosted files. Single URL field, platform inferred at render time |
v2.3 |
Builder catalog fusion — installed widgets now appear in the Grid Builder picker next to native plugins. New CatalogEntry aggregation layer with checkbox → boolean field type canonicalization |
v2.3 |
Tunnel installer hardening (#23) — 12 fixes for Pangolin mode: Caddy site-address :80 { bind ... } rewrite (Host filter root cause), atomic Caddyfile regen on --repair, UFW RFC1918 rules, doctor false-positive gate |
v2.3 |
nodyx-doctor — Method A (--network host) no longer triggers a misleading "LAN IP not bound" warning |
v2.3 |
| nodyx-relay v0.1.4 — TCP keepalive + read deadline to detect dead sessions | v2.3 |
| Doc search rewrite — heading-aware index with deep-link anchors, scrollspy TOC sidebar, slug correctness pass (108 broken TOC links + 60 leading-dash ids cleaned) | v2.3 |
| Why-Nodyx posture — new positioning page listing alternative platforms (Matrix, Stoat, Fluxer, Haven, ...), README aligned, "silos vs liberty, not Nodyx vs X" framing | v2.3 |
i18n — German (de.json) + Spanish (es.json) translations, native review for both |
v2.3 |
Homepage Builder polish — Twitch stream + Articles showcase widgets, clickable (?) info panel on field labels |
v2.3 |
| Voice kick — owners, admins and moderators can remove a user from a voice channel | v2.3 |
| Community Pulse — co-presence trail and wave visualization page | v2.3 |
| Nodyx Stars — proper recognition system for external contributors with public CONTRIBUTORS.md, avatar block in README, polish-trail transparency | v2.3 |
v2.2 — NodyxCanvas major upgrade 🎨
| Feature | Version |
|---|---|
| Canvas UI refactor — 4 dedicated components: CanvasLeftToolbar, CanvasTopBar (contextual per tool), CanvasBottomBar, CanvasRightPanel | v2.2 |
| Undo / Redo — 50-op stack, Ctrl+Z/Y/Shift+Z, buttons with active/disabled state. Fixed CRDT LWW timestamp so undo always applies | v2.2 |
| Snap to grid — 28px world grid, toggle (G key), visual grid overlay | v2.2 |
| Rich text — bold, italic, underline, strikethrough, alignment (left/center/right), 3 font families (sans/serif/mono), 12 font sizes | v2.2 |
| Advanced shapes — triangle, diamond (losange), star, hexagon, cloud — rendered via Path2D, fill + stroke + label | v2.2 |
| Connectors — straight / bezier / elbow lines, independent start & end caps (arrow/dot/none), solid/dashed/dotted style, 2-click creation | v2.2 |
| Frames / Sections — named rectangular regions with dashed border, label rendered above, inline name input on creation | v2.2 |
Image insertion — drag & drop from desktop or file picker, uploaded to /api/v1/assets, cached and rendered on canvas, proportional sizing |
v2.2 |
| Resize handles — 8 handles (corners + midpoints) on selected rect/circle/shape/frame/image/sticky elements, live preview, snap-aware | v2.2 |
| Real user avatars — participant panel shows real user avatars (with initials fallback) and their active tool | v2.2 |
| Board chat — real-time chat scoped to the canvas board, independent from the voice channel chat | v2.2 |
| Full keyboard shortcuts — V P T N R C S A X I F E (tools) + G (grid) + Ctrl+Z/Y/Shift+Z (undo/redo) + Delete + Escape | v2.2 |
Portal rendering — canvas mounted on document.body via portal action, bypasses CSS transform ancestors that break position:fixed |
v2.2 |
v2.1 — Homepage Builder + Widget SDK 🧩
| 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 |
|---|---|
| Canvas — Ghost Mode — anonymous brainstorming: contributions appear under random pseudonyms, author revealed at end | Sprint D |
| Canvas — Audio Stickies — voice note recorded directly on the canvas, waveform rendered as post-it | Sprint D |
| Canvas — Contextual Chat — threaded discussion anchored to a canvas zone, spatially indexed | Sprint D |
| 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.dev — Full documentation wiki
- Create a Widget — Step-by-step Widget SDK guide
- Manifesto — Why Nodyx exists
- Architecture — How it's built
- Roadmap — Where we're going
- Audio Engine — Broadcast EQ, RNNoise, full audio chain
- Neural Engine — Local AI with Ollama
- NODYX-ETHER — The physical layer vision (LoRa / HF radio / ionosphere)
Nodyx belongs to its community.
- Browse open Issues or open a Discussion
- Read CONTRIBUTING.md before opening a PR
- Commits follow Conventional Commits, written in English
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.
Every external contribution earns a star. Every Star goes on our Hall of Fame — with avatar, profile link, and rank.
Recognition is not optional here. Open source without recognition is just free labor, and that's not how we roll.
Pranto Goswamee : 🌟 × 1, added Ctrl/Cmd + D canvas duplication (PR #11).
First external contribution to Nodyx ever. Thank you 🙏
waazaa-fr : 🌟 × 2, found and reported two installer bugs back to back (#14, #15), both fixed within hours.
Reliable bug hunters keep the installer honest. Merci waazaa 🙏
naranco66 : 🌟 × 3, brought Spanish (es-ES) to Nodyx via PR #16 (719 strings, full key + placeholder parity), came back with PR #19 for a native review of the community pulse strings, then jumped from i18n to ops with PR #22 : fixed orphaned nexus-* references in docker-compose.yml and an Alpine font path mismatch that broke the frontend Docker build.
Third locale, third bridge to the world, and a Docker setup that actually works out of the box. Gracias naranco 🙏
forke24x7 : 🌟 × 5, brought German (de) to Nodyx by attaching a hand-reviewed de.json (741 strings, native review) on issue #5, triggered the Pangolin / alternative-tunnel support work via issue #18, caught a frontend build regression in install_tunnel.sh on day-one Pangolin testing (#21), ran a meticulous second-pass test of PR #24 that surfaced two remaining tunnel-installer issues (#23), and ultimately pinned the blank-page root cause with a byte-count diagnostic that revealed the rendered Caddy site address was a Host filter, not a bind (5445e8b).
Fourth locale, a feature request that made the installer better for the whole self-hosting community, two consecutive regression hunts on the tunnel installer, and a clean root-cause diagnosis on a non-obvious Caddy bug. Danke forke 🙏
Lukáš Melega : 🌟 × 2, reported that the docs search couldn't find "minimum requirements" (discussion #12) which triggered a heading-aware index rewrite (882099d), then came back with a one-line precision report : "clicking the search input requires a second click", which surfaced a focus bug + 108 broken TOC links + 60 leading-dash heading ids that nobody else had noticed. The full audit pass landed in a429fa3.
The kind of careful observation that turns a vague annoyance into a five-minute fix, twice in a row. Děkuji Lukáš 🙏
Nodyx is built by one developer, with no VC money and no strings attached. If the project is useful to you, consider supporting it:
Your support helps cover server costs and keeps Nodyx 100% free and open-source.
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."
English
Français
















