Nexora

A self-hosted wiki small enough to forget about

Nested pages in a block editor, [[links]] that produce backlinks on the other side, a knowledge graph over everything, versions, comments, attachments and real full text search. A Go service, a React interface, PostgreSQL. Two containers plus a database, with no Redis, no search cluster, no message queue.

Open the live demo Code on GitHub Install it

Demo sign-in: gast@nexora.demo · GastNexora2026. A real instance with example content that resets itself every night.

Half a minute: open a space, follow a [[link]], search, see which pages link here, and the graph over everything.

Two things the others do not have

Both come from the same idea: a wiki is worth more when it shows how its pages hang together.

The knowledge graph: pages as dots, links as lines, coloured per space
The knowledge graph. Every page and every link, coloured by space. Drag it, zoom it, click a dot to open the page.
Search results in the sidebar with matching text
Search that reads the text. PostgreSQL full text search over titles and content, and, if you switch it on, inside the attached files. Every page also lists who links to it.

Installing takes one file

Published images for amd64 and arm64, so a Raspberry Pi works too. Nothing to build, no account needed to pull them.

curl -O https://raw.githubusercontent.com/Dschonas04/Nexora/main/docker-compose.stack.yml
# change POSTGRES_PASSWORD and JWT_SECRET in it
docker compose -f docker-compose.stack.yml up -d

Open http://localhost:3000; the first account that registers becomes the administrator. Running PostgreSQL already? Then take the repository with docker-compose.abbild.yml and set DATABASE_URL: the README has both ways.

What is in it

Pages that nest

An infinite hierarchy in a collapsible sidebar, drag to reorder, autosave while you type.

Backlinks without bookkeeping

[[Page title]] links both ways. The target page lists who points at it, and the graph draws the line.

Spaces and roles

Separate areas per team or topic, opened for reading or writing per account. Anonymous access only through a share link.

Versions and a trash

A snapshot before every content change, restorable. Deleting is reversible for 30 days, then the sweep takes the attachment bytes too.

Attachments anywhere

Local disk or any S3-compatible bucket: MinIO, Garage, Ceph, AWS. With a viewer for images, PDFs and text.

The way in

Import an Obsidian vault, a Notion export, a Confluence HTML export or a folder of Markdown. A preview shows the tree before anything is created.

The way out

Markdown export of every page, free for good, because the way out must never sit behind a licence. PDF, Word and whole-space archives come with Pro.

Operating it

Two containers and PostgreSQL. Encrypted between the containers as well, backups with pg_dump, metrics for Prometheus.

It holds more than a homelab needs

Measured on one 12-core host, backend and PostgreSQL on the same machine, against 2,000 pages and 40 accounts. An operation is a user action, not a request.

4,600/soperations at saturation
39 msp95 at 100 concurrent
0errors up to 3,200 concurrent
2containers plus a database

Take the paper part seriously: loopback, no TLS, a database that fits in cache. What it does support is the modest claim: several hundred people working at once are unremarkable. The method is written down.

Next to the others

The short version. The long one says where each of them wins.

 NexoraNotionOutlineDocmostWiki.js
Self-hostedyesnoyesyesyes
Sign in without an identity provideryes—noyesyes
Knowledge graphyesnononono
Backlinksyesyesyesyesno
Several people in one page at oncenoyesyesyesno
Extra services to operatenone—RedisRedisvaries

What it is not

Better to know now than after the migration.