lemonfiber is one binary with one subcommand at a time. Run it with no
subcommand at all on a machine that is already set up and you get
the terminal interface instead.
Every subcommand below accepts the same six global flags,
and every one of them has a machine-readable form. The tables here say what each
command is for; the full generated reference, with every argument and flag,
is the complete command reference — generated from the
binary at the revision this site pins, which that page names at its foot.
Global flagsThe six flags every subcommand takes, and the ones that only look global.
You want the lines. --follow keeps reading; --watch opens the scrollable viewer
trace
Follows one show or film across the services
You are asking “where is my show?” and want the answer step by step
household
Shows what the household asked for, and where each request stands
You want the queue grouped by whoever asked for it
held
Shows what one member can actually watch, read from the media server as them
You want to see what an age limit or a library restriction comes to, as the list it produces rather than the setting
playing
Shows what the media server is playing now: who is watching what, and where
You want to know who is watching before you restart something. --member narrows it to one person’s sessions
stuck
Lists the items whose downloads are stuck
Something reported a count of stuck items and you want them named
front-door
Names the one address to send somebody who lives here
Somebody in the house asks where to go, and you want one answer rather than a list of ports
news
Lists lemonfiber’s releases, what the household asked for, and the checks found wrong, each newest first
You want what is new in one list. Each entry carries what names it, so a screen can mark what came after the newest it showed; the stack keeps nothing of what anybody has seen
Says what each service in this stack is for, and what became of any it dropped
The service names convey nothing on their own and you want a sentence for each: what it does for you, what you lose while it is down, and how much that costs
provenance
Says where each service comes from: its licence, its project, and the version pinned
You want to check that what is bundled here is open source rather than take it on faith. It reads the stack description, so it answers with the containers down
outbound
Lists everything that leaves this machine, and what refusing each of it costs
You want to know what lemonfiber asks the internet for, what the services ask for on their own account, and what switching each off would stop
stored
Lists what lemonfiber keeps on this machine, where it is, and why
You want to know what is on your disk because of lemonfiber, and to be sure your library is not part of it
credentials
Says which credentials this stack holds, or acts on one of them
You want to know what secrets exist, what each is for and where it stands. Values are never printed by a read
forget
Removes everything lemonfiber keeps on this machine
You are done with it. Your library, your downloads and the containers are never touched; it lists what would go and does nothing until --confirm
uninstall
Takes lemonfiber off this machine, at one of four removals
You are removing it and want to choose how far that goes. It lists what each removal would take before it takes anything
outbound says what would leave. What actually left is written down as it goes,
in outbound.log beside your settings: when, which kind of request, where it
went, and what came back. Never a header, never a body, and the address arrives
with its query stripped off, because a search term, a title or an indexer key
ends up there — a record kept to reassure you should not be a file full of your
own keys. It holds the last five hundred lines, oldest dropped, and stored
lists it with everything else.
Serves the web interface and its JSON API for as long as you leave it running, printing the address and a token minted for that run
You are driving lemonfiber from a browser, a client or a script rather than a terminal. The web app built into the binary is served unless --assets <PATH> names a build of your own; --lan offers it to your network, once --set-password has set one; --tls serves it encrypted, on a port you name
companion
Pairs a phone with this stack, or replaces the certificate a paired phone pins
You want a phone to reach this stack. pair makes the material it reads — a code for its camera, and the same text to type — and carries no credential; certificate replaces what a paired phone pins, which every paired phone then refuses until it is paired again
key
Mints, lists or revokes the keys another program reaches the web interface with
A program — Home Assistant, an assistant, a script — should reach this stack under a key of its own. mint gives it one scope, read, act or member:<account>, and shows the secret once; revoke refuses it from its next request
Installs, updates and removes plugins, and reads what one may declare
You are adding a service the stack does not bundle, or writing one. install, update and remove change the machine and take --dry-run; installed lists what is here; capabilities, extension-points, schema, claims and provenance are for an author
install takes a source: the plugin’s name in the catalogue, its directory, the
plugin.toml inside it, or a git repository at the branch, tag or commit named
after its last @. update takes the new version’s directory, or the
plugin.toml inside it. Neither is kept unless the plugin’s own proofs hold
against its running service and the stack’s checks still pass afterwards; if
either fails, the install is put back. There is no disable: a plugin is
installed or it is not, and remove takes its id. The author’s reads need no
network, no catalogue and no running stack, and each names the generation it
reports — except provenance, the one read that asks a registry about an
image’s signature. Plugins is the whole of it.
The global flags apply to all of the above, and
the terminal interface is what you get when you run none of
them. If you are following what a command told you rather than choosing one,
when something is wrong starts with the doctor. If you are writing a
script against the output rather than reading it,
the API and the SDKs describe the shape it arrives in.