Skip to content

lemonfiber — the Rust workspace

lemonfiber

Lemonfiber

The lemonfiber binary: one tool that sets up your media stack, runs it in slices, and proves it's working.
CLI and TUI over one core, and the API the web surface draws. Rust.

build codeql quality gate coverage OpenSSF Scorecard


Status: shipping (0.10.0). The core, compose driver, CLI, setup wizard, trust checks, seed and lifecycle work are built and released. Every request reaches all three surfaces: the command line, a terminal dashboard that acts rather than only watching, and a web API a browser is served from. See IMPLEMENTATION-STATUS.md for built-vs-roadmap and the roadmap (this repo is milestones M2–M10).

lemonfiber orchestrates a fully open-source media stack — the *arr ecosystem, Jellyfin, Seerr — and does the parts that are usually manual: guided setup, wiring services together, and verifying things work rather than assuming they do (is the VPN actually isolating traffic? are imports hardlinking?).

Run it two ways, one core behind both:

lemonfiber up tv # scriptable
lemonfiber # a terminal dashboard

A third surface, the web UI, is its own repository (ADR-0011): a single-page app that speaks to a local HTTP API this binary serves.

lemonfiber-core cannot render. It has no UI dependency of any kind — no terminal, no HTTP server. A surface (CLI, TUI, web) is a rendering, never a capability, which is what lets the web surface live in another repository at all. This is enforced by the crate graph, not by review. See spec ARCH-R11.

crates/
├── lemonfiber/ bin — the only crate that draws a terminal (CLI, TUI)
├── lemonfiber-core/ lib — all logic, no UI
├── lemonfiber-api/ lib — the HTTP endpoints, and serving the web app
├── lemonfiber-ports/ lib — the boundary and its vocabulary
├── lemonfiber-manifest/ lib — parses stack.toml
└── lemonfiber-fixtures/ lib — shared test fixtures
.docs/ repo-local technical docs (Rust-specific HOW)
cargo build --workspace # or: just build
just ci # everything CI runs

just ci also turns on this repository’s pre-push hook, which refuses a push that would leave a branch carrying no commit origin/main does not — what pushing the trunk over a feature branch looks like. It is git config core.hooksPath .githooks, per clone, and just hooks does only that. A clone where neither has run has no hook: git cannot read .githooks/ on its own.

This project’s spec is canonical: every change cites a spec identifier that already exists. Before your first PR, read AGENTS.md and the contributing guide.

Hippocratic License 3.0 — ethical-source, source-available, deliberately not OSI-approved. See the rationale.


NightWorks.io  · Discord

This page lives in another repository Rendered from lemonfiber/lemonfiber at a2ac9bf, 2026-09-09. Read the source of this page