Knowledge that stays yours.
An open-source, self-hosted knowledge base. One Postgres-backed core, a swappable interface, and modules you switch on per deployment.

One backend. Any interface.
ARKIVEL_SITE_MODE picks the shell an instance presents. These three are the built-in examples; every mode shares the same articles, accounts, permissions, editor, and database.
Configurable in four layers.
New needs reach for the lowest layer that covers them. Tables scale with engines, not with features.
- Core
Articles, wiki links, spaces, tags, search, revisions, users, sessions, audit, admin. Every deployment has it.
- Collections
One generic engine: a typed property schema, items, and views. Tasks and trackers are templates, not tables.
- Modules
First-party code paths a deployment switches on or off: graph, assets, import, export, API, feeds, share, media.
- Kits
A preset of modules, a skin, and seeded collections, applied idempotently from /admin/kits.
Every route is scriptable.
Personal access tokens act as their owner with the owner's role. The frozen /api/v1 read contract ships with a generated OpenAPI document.
curl https://wiki.example.com/api/v1/search?q=deploy \
-H "Authorization: Bearer ark_…"One container, one database.
Compose builds the image, starts PostgreSQL, and applies pending migrations before serving. Owners are created by an operator command, never by public sign-up.
git clone https://github.com/mohammed-alsalhi/arkivel.git && cd arkivel
cp .env.example .env # site mode, base url, modules
docker compose up --build -d
docker compose exec -T app node scripts/bootstrap-owner.mjs \
--username owner --email owner@example.comDeliberately small.
Arkivel is a place to write things down and find them again. It intentionally leaves out:
- Third-party plugins or a marketplace
- Live collaboration
- AI assistants (the one optional use is the media mood pick)
- Social feeds and gamification
- Canvases, maps, and presentation tools