Your files.
Your server.
Zero compromise.

Nexora is a private, self-hosted file workspace. It combines a fast React interface, a Go API, SQLite metadata, and one or more local storage roots in a single deployable service — so your data never leaves your hands.

docker pull ghcr.io/suryaprakash251201/nexora:latest-8141398
Self-hosted & private Single container 1-command deploy SQLite · optional PostgreSQL
Upload Download Stream Share Search Tag Archive Protect
localhost — Nexora
Nexora file workspace interface
Encrypted sessionsArgon2id · CSRF protected
Transfers panelUploads & downloads in one place
0
Features shipped
0
File operations
Scalable storage roots
0
% Data ownership
Features

Everything a file server should be.
Nothing it shouldn't.

Browse, organize, preview, share, and play — a complete private workspace with the features you expect and the privacy you demand.

Core
File workspace

Browse, upload, download, create, rename, move, copy, delete, restore, and archive files with a fluid, keyboard-friendly interface.

Storage
Multiple storage roots

Manage named locations from one UI — with per-user read or write access on every root. Your disk, your rules.

Search
Search & organization

Indexed search, tags, favorites, recents, checksums, metadata, and duplicate-file discovery keep everything findable.

Media
Previews & media

Images, video, audio, PDFs, Markdown, and code. Video supports range streaming, subtitles, theater mode, and fullscreen.

Sharing
Revocable sharing

Create public links with optional expiry, password protection, and download limits — then revoke them anytime.

Playlists
Audio playlists

Create and manage playlists — including public and collaborative playlists — with a lossless-friendly player.

Admin
Administration

Users, roles, root access, storage settings, audit history, and search reindexing — full control from one panel.

UX
Responsive & beautiful

Light and dark themes, density control, command palette, keyboard shortcuts, and mobile navigation.

Analytics
Storage analytics

Live dashboards for storage usage, capacity, and file composition — plus bulk operations and file versioning.

Gallery

Built for speed.
Polished for humans.

Real screenshots from a running Nexora instance. Click any shot to view it full size.

Tech Stack

Modern tools, boring reliability.

A pragmatic stack that is fast to run, easy to reason about, and simple to deploy anywhere.

React 18 + TypeScriptVite · Tailwind · Zustand
Go APIChi router · embedded migrations
SQLiteOptional PostgreSQL backend
Single containerMulti-stage Docker build
FFmpegThumbnails & transcoding
Argon2idTOTP · server-side sessions
PrometheusOptional /metrics endpoint
Embedded assetsOne binary serves API + UI
Architecture

One container, three moving parts.

A request path short enough to reason about in your head — browser, API, storage.

Browser

React / Vite interface with instant search, media playback and a command palette.

Frontend
Go API

Auth, files, search, previews, shares, playlists and jobs behind /api/v1.

Backend
SQLite + Roots

Metadata, settings and audit data — backed by your mounted filesystem roots.

Storage
Downloads

Take Nexora everywhere.

Desktop apps for Windows and Linux, an Android client, and the Docker server — all from one project.

Windows
x64 · installer & MSI
v1.9.0
Android
APK · arm64 / armv7
v1.9.0
macOS
Apple silicon & Intel
Soon
A native macOS build is on the roadmap — sign-up-free, just watch the releases page.
iOS
iPhone & iPad
Soon
An iOS client is in development. Meanwhile, the web app works great in Safari.
Server & checksums
Headless Linux tarballs · SHA-256s
v1.9.0
Installation

Up and running in under a minute.

Pull the official image from GitHub Container Registry, or use Docker Compose for the recommended one-command deploy. Prefer source? That works too.

terminal — bash
# 1. Configure the instance
cp .env.example .env
openssl rand -hex 32  # session secret

# 2. Start Nexora
docker compose up -d --build
docker compose ps

# 3. Verify it's healthy
curl -f http://localhost/healthz
 {"service":"nexora","status":"ok"}

# 4. Open your browser
open http://localhost
Docker Compose mounts ./data/files, ./data/media, ./data/backups and ./data/shared into the container and exposes Nexora on port 80. Full guide in the documentation.
terminal — bash
# 1. Pull the official image
docker pull ghcr.io/suryaprakash251201/nexora:latest-8141398

# 2. Run it — the web UI is served on http://localhost:8080
docker run -d --name nexora \
  -p 8080:80 \
  -v nexora-data:/app/data \
  -v ./data/files:/mnt/files \
  -e NEXORA_LISTEN_ADDR=:80 \
  -e NEXORA_SESSION_SECRET=$(openssl rand -hex 32) \
  ghcr.io/suryaprakash251201/nexora:latest-8141398

# 3. Verify
curl -f http://localhost:8080/healthz
docker logs -f nexora
Image: ghcr.io/suryaprakash251201/nexora:latest-8141398 — hosted on GitHub Container Registry. The single container serves both the compiled web app and the Go API.
terminal — bash
# 1. Clone the repository
git clone https://github.com/suryaprakash251201/nexora.git
cd nexora

# 2. Run the API (Go 1.26+, SQLite)
go run ./cmd/nexora

# 3. In a second terminal — web app on http://localhost:5173
cd web && npm install && npm run dev
Prerequisites: Go 1.26+, Node.js 20+, and npm. The Vite dev server proxies /api and /healthz to the Go API on port 8080.
Configure

Copy the environment template, generate a session secret, and set your public URL for HTTPS deployments.

Deploy

One command pulls the official image and starts the whole service — a single container serves the compiled web app and the Go API.

Own your data

SQLite, the thumbnail cache, and archive workspace live in a named volume. Mount your storage folders and go.

Security

Hardened by default.
Private by design.

Nexora takes the boring-but-essential approach to security, so you don't have to.

Argon2id passwordsModern password hashing with server-side sessions, HTTP-only cookies, and CSRF validation on every state-changing request.
Permission-scoped storagePath validation prevents traversal outside an authorized root; read and write access is granted per user, per root.
Hardened containerRuns as an unprivileged user with a read-only root filesystem, dropped capabilities, and a temporary /tmp.
Login protectionRate-limited login attempts with account lockout, plus optional TOTP two-factor authentication.
Full audit trailAudit records cover authentication, administration, and file activity — know exactly what happened, and when.
Revocable sharesPublic links support expiry, password protection, and download limits — and can be revoked at any moment.
FAQ

Questions? Answered.

Everything people usually ask before self-hosting Nexora.

Yes. Nexora is fully self-hosted — the database, thumbnails, and files all live on your hardware, in your own containers and volumes. There are no telemetry services, no third-party cloud sync, and no account required with anyone. Your data never leaves your server.

Nexora works with any number of local filesystem roots — just mount folders into the container and register them as named roots with per-user read or write access. SQLite is the default metadata store, with PostgreSQL available for larger deployments.

Yes — create a public share link with optional expiry, password protection, and download limits. Links are revocable at any time, and the shared page works for anyone, no login required.

Yes. Video is served with HTTP Range streaming so seeking is instant, and optional FFmpeg integration adds thumbnails and transcoding. Subtitles, theater mode, and fullscreen are built in — plus a lossless-friendly audio player for your playlists.

Back up the named nexora-data volume (SQLite, thumbnails, archive workspace) alongside your mounted storage folders. Migrations run forward at startup, so restoring the database and the previous image is the safe rollback method.

Simple: docker compose up -d --build rebuilds and rolls the new image, or docker pull ghcr.io/suryaprakash251201/nexora:latest-8141398 followed by recreating the container. Back up before upgrading — the full upgrade path is in the documentation.

Nexora is self-hosted software — but a public instance is running at pms2.tail58d7ea.ts.net so you can try it before you deploy it.

Take back control of your files.

Self-host Nexora today and keep your data where it belongs — on your own hardware.

docker pull ghcr.io/suryaprakash251201/nexora:latest-8141398