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.
Nodyx brings them together. 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.
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, 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:
| 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 curl
PM2 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 | 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 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-frontend
Database 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/ |
| 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 |
|---|---|
| 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 |
| 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 — Brainwave Sync — host broadcasts pan+zoom to all participants in real time, followers stay synchronized | Sprint C |
| Canvas — Ghost Mode — anonymous brainstorming: contributions appear under random pseudonyms, author revealed at end | Sprint C |
| Canvas — Minimap — 160×120 thumbnail in bottom-right, click to navigate | Sprint C |
| Canvas — Multi-selection — Shift+click or lasso to select + move + delete multiple elements | Sprint C |
| 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 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.
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 : 🌟 × 3, 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, and caught a frontend build regression in install_tunnel.sh on day-one Pangolin testing (#21).
Fourth locale, a feature request that made the installer better for the whole self-hosting community, and a same-day regression hunt. Danke forke 🙏
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."