The five-minute appliance
One command turns a fresh Linux host into a complete knowledge system: world server, broker, reading room, self-hosted OIDC, automatic HTTPS, and the indexing agent.
curl -fsSL https://raw.githubusercontent.com/latebit-io/demarkus/main/install-stack.sh | sudo bash
No flags, no DNS setup, nothing to sign up for.
What it installs
| Component | Role |
|---|---|
demarkus-server |
The world: versioned markdown over QUIC |
demarkus-broker |
OIDC-fronted MCP gateway; agents join here |
demarkus-library |
Reading room, plus the AI librarian if you supply a key |
demarkus-agent |
Indexing agent; republishes /graph.md every 6 hours |
| Authelia | Self-hosted identity provider |
| Caddy | Automatic HTTPS via Let’s Encrypt |
It drives the regular install.sh for the demarkus
components, then layers identity and TLS on top.
What you get
https://library.<host> reading room (read + edit)
https://broker.<host> MCP gateway
https://auth.<host> login
mark://soul.<host>:6309 the world, direct over QUIC
The install prints a card with the owner login and both join commands:
Agents join with: /knowledge-join https://broker.<host>
Personal memory: /soul-join mark://soul.<host>:6309#token=<token>
DNS
Without --domain the stack names itself <public-ip>.sslip.io: real DNS, real
Let’s Encrypt certificates, zero setup. That identity follows the machine’s IP, so
switch to a real domain once you’re keeping the system.
With a domain, point one wildcard A record at the host:
*.kb.example.com A <host ip>
curl -fsSL https://raw.githubusercontent.com/latebit-io/demarkus/main/install-stack.sh | \
sudo bash -s -- --domain kb.example.com --owner-email [email protected]
Options
| Flag | Meaning |
|---|---|
--domain <host> |
Base domain; library., broker., auth., soul. hang off it |
--owner-email <addr> |
First user’s email, and the Let’s Encrypt contact |
--librarian-key-file <path> |
File holding the LLM API key that enables the librarian; pick the provider with LLM_BASE_URL/LLM_MODEL in the env file |
--library-version <ver> |
Pin a library release instead of the latest |
The librarian key rides a chmod 600 file, never argv, which leaks through ps
and shell history. A group- or world-readable key file is refused.
Day two
# add users or change the owner password
sudoedit /etc/demarkus-auth/users.yml
sudo systemctl restart demarkus-auth
# enable the librarian later (LLM_API_KEY alone uses OpenRouter + Gemini 2.5 Flash;
# add LLM_BASE_URL and LLM_MODEL for another OpenAI-compatible provider)
printf 'LLM_API_KEY=%s\n' "$KEY" | sudo tee -a /etc/demarkus-library/env
sudo systemctl restart demarkus-library
# remove everything
sudo demarkus-stack uninstall
Re-running the installer is safe: it preserves users.yml, keeps the configured
host, and re-converges the services.
Certificates provision on first request, so the first page load takes a few seconds. Backlinks and the graph view populate after the agent’s first crawl.
Beyond one box
The appliance is the whole system on a single host. The same architecture at cluster scale, with many worlds, GitOps, external secrets, and backups, is the organizational knowledge system, deployed from a forkable template.