Nodus
Getting Started

Run the web client

Start the Next.js web app and connect it to a Relay.

The web client is a Next.js App Router application in apps/web. It talks to the Relay through server-side route handlers under /api/*, so the browser never holds a bearer token — the session is an HttpOnly cookie.

Start it

cd apps/web
pnpm dev        # http://localhost:3000

For a production-style build:

pnpm build && pnpm start

Configure it

Environment variables are read from apps/web/.env.local (see .env.example):

VariableScopePurpose
RELAY_URLserver-onlyInternal Relay base URL used by route handlers. Default http://localhost:8080.
PUBLIC_RELAY_URLserver-onlyPublic Relay origin shown to users in the Storage Node pairing command (e.g. https://relay.nodus.example.com). Required for the “+ Add Storage Node” dialog.
NEXT_PUBLIC_RELAY_URLbrowser (build)WebSocket origin for the Relay. Set it to the Relay subdomain in the split deployment; leave unset (or http://localhost) for the local single-origin flow.
NEXT_PUBLIC_VAPID_PUBLIC_KEYbrowserVAPID public key for browser push. Must match the Relay; unset disables the opt-in.

NEXT_PUBLIC_RELAY_URL is inlined into the browser bundle at build time, so changing it requires rebuilding the web image. In production the browser connects to wss://relay.<domain>/ws; the session cookie is shared through SESSION_COOKIE_DOMAIN.

Routes overview

RoutePurpose
/authSign in, create an account, or recover with a phrase
/pairPair this browser with a Storage Node (incl. LAN discovery)
/overviewTopology, stat cards, recent files/activity
/files (Backups)Upload, download, folders, rename, move, delete
/downloadsActive, failed, and historical downloads
/activityAccount-wide activity feed
/conflictsConflict inbox (ADR-0003)
/devicesStorage nodes + client devices
/securityRecovery key, key envelopes, device revocation
/settingsTheme, notifications, sync preferences, password
/tombstonesSoft-deleted files/folders

Next step

Pair a browser: Devices and pairing.

On this page