renar v0.1.0

Single binary · Rust · self-hosted

Your machine,
rendered.

Point one binary at a directory. Get a live, themed web console: every file rendered on the fly, every action behind a capability grant, every mutation in a hash-chained ledger. Server-rendered HTML — no SPA, no CDN, no third-party crypto.

13.5 MB stripped libc and nothing else 13 themes 75 language grammars zero telemetry
https://box.tailnet.ts.net/
A renar directory listing: breadcrumb, filename search, theme picker, and a table of files with size, modified time, and rename, move and delete actions on each row.
An actual screenshot — default dark theme, nothing retouched.
1,217
tests in the workspace
107k
lines of Rust
229
file extensions highlighted
0
third-party crypto crates
0
outbound requests
01

Not another dashboard

Every web console you have used is hand-built: each feature manually constructed, each one aging the day it ships. Renar takes the other road.

A rendering engine

Today that means the filesystem: markdown with footnotes and syntax-highlighted fences, JSON as structured panels an operator can title and order, CSV as a grid, 75 language grammars with line numbers. The raw bytes are always one ?raw=1 away. Processes, services and command output are reachable through the terminal and the exec API — rendering those as first-class pages is the roadmap, not a shipped feature.

The terminal is the fallback

tmux-backed sessions mean every tool is already reachable — vim, htop, anything — with zero per-tool work. Close the browser and the session survives. Hand-built panels become opt-in refinements rather than blockers, which turns an impossible scope into a tractable one.

The security model is the product

A tool that edits files and runs processes is remote code execution by design. Renar does not amputate the dangerous rungs — it makes them accountable: capability grants, step-up re-proof, sandboxed plugins, recorded sessions, and a hash-chained ledger.

02

The interface, unretouched

fourteen screenshots of the running engine — arrow keys, or swipe

Light too. Every shot above was captured twice, and the one you are looking at follows the theme in the top bar — flip it and they all change with the page. Thirteen themes ship in the binary — nine dark, four light, Catppuccin and Solarized and Gruvbox and friends — applied pre-paint, so there is no flash on load. This website wears the same palette the engine does.
03

Every request is a capability question

Not a role. Not a global permission bit. Renar answers Account × Root × capability on every single request, and re-answers it after the path resolves.

Roots & grants

A Root is a directory the engine serves. A Grant is the capability set — read, write, exec, pty — an Account holds on that specific Root. Subtree .renar.toml files can only ever restrict further.

Step-up re-proof

The dangerous rungs — PTY, exec, delete, minting a share — demand a fresh credential proof when the session is older than fifteen minutes. A stolen cookie is not a shell.

Confinement, not string checks

Path resolution goes through openat2 with RESOLVE_BENEATH and a proof token the operations layer demands. Escaping a Root is not something a clever ../ accomplishes.

Shell is its own grant

Exec is an argv vector matched against an operator allowlist — never a shell string. Submitting sh -c requires a separately named Shell grant, and no other code path in the engine constructs a shell invocation.

Hash-chained ledger

Append-only JSONL outside every served root, each record chained to the last, each carrying the ledger's own scope mode — so a reduced ledger is self-declaring and never mistakable for a full one.

Plugins in a cage

Sidecars in any language over JSON-RPC on a Unix socket, default-deny capabilities, shipped as ed25519-signed packages, and held by Landlock plus a seccomp filter on the child.

04

Running in about a minute

no database, no reverse proxy required, no container needed

# serve a directory, right now
$ renar /srv/notes --port 8080

# there is no unauthenticated mode — make the first operator
$ printf 'a-long-password' | renar bootstrap-admin op \
      --config /etc/renar.toml --password-stdin

# then run it for real
$ renar --config /etc/renar.toml
# /etc/renar.toml — the whole thing
schema = 1

[[roots]]
path  = "/srv/notes"
label = "notes"

[stores]
dir = "/var/lib/renar"

# tier presets pick every security default;
# each one stays admin-tunable afterwards.
[posture]
tier = "t1"
One file, one process. The binary links libc, libm and libgcc_s — nothing else. No runtime, no interpreter, no sidecar database. Terminal sessions want tmux on the host; everything else is in the binary.
05

Open core, honestly drawn

The free core is genuinely the product. The paid edition sells what a rebuild cannot reproduce — signed builds, updates, support — never a patchable license field.

OSS core
AGPL-3.0-only · free forever
  • Rendering, editors, upload, rename, delete with trash
  • Accounts, per-root grants, sessions, step-up
  • Hash-chained ledger, expiring share links, WebDAV mount
  • tmux terminal, argv exec, content search, disk usage
  • In-binary TLS 1.3 with hybrid post-quantum key exchange
Enterprise
from €29 /install/mo · billed per install, not per seat
  • Everything in the core, plus the gated capability catalog
  • Signed release builds and an update channel
  • SSO breadth: OIDC, SAML, LDAP, Kerberos, trusted proxy
  • Fleet view: signed status envelopes across your boxes
  • Support, and the ceremony docs for issuing your own keys

Same codebase, one binary, one feature flag. Pro €29 and Team €99 per install per month, a €349/year small-business licence, Enterprise from €6,000/year — all excluding VAT. See the full ladder and what the OSS core includes.

06

Where it actually is

the part most landing pages leave out

This is v0.1.0

It runs, it is tested hard, and it is not battle-scarred yet. The author's own tailnet box is the first real deployment. If you need something that a thousand shops have already broken in, that is a completely reasonable thing to want, and it is not this — yet.

What we do claim

1,217 tests across the workspace. Twenty-two rounds of adversarial review by several independent models, each finding recorded and fixed with a regression test. Clippy at deny-warnings, a dependency audit, and a licence gate in the pipeline.

What we do not

No third-party security audit yet. The Kerberos verifier is RFC-conformant by construction but has not met a production KDC. Some capability ceilings are enforced at one door and not another. Those are written down, not buried.

Zero telemetry, and we mean the boring version. The engine makes no outbound request you did not configure. No analytics, no phone-home, no licence ping. This website loads no font, no script, and no image from anywhere but itself.

Point it at a directory.

Then read the ledger and see exactly what it did.