Lemonade
The Lemonade extension adds the Lemonade local LLM server, with GPU and NPU acceleration, to a Frostyard bootc image. Use it to run language models on this machine. Every image carries the extension’s definition, switched off. The extension itself is not in the image: Updex turns it on and downloads it.
Before you start
Section titled “Before you start”You need:
- A Frostyard bootc image. Every image built on Base has
systemd-sysextandfrostyard-updex. - Root access to enable, update, and remove the extension.
- Network access to
https://repository.frostyard.org/ext/lemonade/. - Free space in
/varfor the image.
Lemonade has no published test results on Frostyard images yet. Try it on a machine you can spare first.
Enable Lemonade
Section titled “Enable Lemonade”See what Updex found, then enable the feature and download it now:
updex features list --component=lemonadesudo updex features enable lemonade --nowlemonade appears as a component, with its feature disabled. The enable command
downloads the image, checks its checksum and signature, links it, and refreshes
the merge.
Check the merge and the commands and the service:
systemd-sysext statuscommand -v lemonade lemondsystemctl status lemond.servicesystemd-sysext status lists lemonade, both names print a path, and lemond.service is active.
If enable --now exits with a refresh error (refresh_error in JSON), the
download worked, but the activation did not. If the output says
activation did not finish, the extension is merged, but users and groups can
be missing: reboot. Otherwise the merge state is unknown: reboot. A
sudo systemd-sysext refresh by hand does not create users and groups. Then run
the checks above again.
Use Lemonade
Section titled “Use Lemonade”lemond.service is a system service. It starts at boot. Its web UI listens on port 13305.
The service reads /etc/default/lemond as an optional environment file. The merge places the file there from /usr/share/factory/etc/default/lemond. It holds a commented template and no secrets. Your edits are never overwritten. After an edit, restart the service:
sudo systemctl restart lemond.serviceThe service runs as the lemonade user. The extension puts that user in the systemd-journal and render groups, for journal and GPU access.
The package also ships a per-user lemond.service. The extension keeps it off, so it never starts a second instance next to the system service.
Update, roll back, and remove
Section titled “Update, roll back, and remove”Check for an update, then install it:
updex features check --component=lemonadesudo updex features update --component=lemonadeUpdex downloads and verifies the new image, switches the link, deletes older versions, and refreshes the merge. See Manage system extensions for --no-vacuum, --dry-run, and the update timer. The refresh swaps /usr under the running system.
Roll back with sudo updex features rollback lemonade. It takes effect at the next boot. See Roll back.
Remove Lemonade:
sudo updex features disable lemonade --now --forceUpdex unmerges all extensions on the host, deletes the image, and merges the rest again. The service and its commands go. Your /etc/default/lemond file stays. Reboot when the command finishes. Without --force, Updex refuses while the image is merged.
What ships
Section titled “What ships”| Item | What you get |
|---|---|
| Package | lemonade-server, from the upstream release, installed into the image with dpkg. The build checks the download against a pinned checksum |
| Support packages | libcpp-httplib0.41 (from trixie-backports), libmbedcrypto16, libwebsockets19t64, fonts-katex, libatomic1, unzip |
| Commands | /usr/bin/lemonade and /usr/bin/lemond |
| Settings file | /etc/default/lemond, from /usr/share/factory/etc/default/lemond |
| User | lemonade, in systemd-journal and render |
| Version | The image file name carries the lemonade-server package version, plus a +rN snosi revision when one is set |
| Image file | lemonade_<version>_<os>_<arch>.raw.zst; .raw.xz, .raw.gz, and .raw also work |
| Download | From https://repository.frostyard.org/ext/lemonade/, signature required (Verify=true), into /var/lib/extensions.d/ |
| Services | lemond.service, on at boot |
Each build checks the two commands, the service unit, the sysusers files, the libcpp-httplib library, the factory settings file, and the tmpfiles, preset, and activation files. A build that is missing one fails.
See also
Section titled “See also”Sources
Section titled “Sources”Reviewed 2026-10-27; Updex facts reviewed 2026-10-30. snosi commit
b2858ca0222814c395cf8248db98f3e096d57dc9;
Updex v2.1.3 commit
2661e987faac986f2594d1d9bbbadf1bf3053f5b.
-
mkosi.images/lemonade/mkosi.extra/usr/lib/systemd/system-preset/40-lemonade.preset -
mkosi.images/lemonade/mkosi.extra/usr/lib/systemd/system/multi-user.target.d/10-lemonade.conf -
mkosi.images/lemonade/mkosi.extra/usr/lib/systemd/user-preset/40-lemonade.preset -
mkosi.images/lemonade/mkosi.extra/usr/lib/sysusers.d/lemonade-groups.conf -
mkosi.images/lemonade/mkosi.extra/usr/lib/tmpfiles.d/lemonade.conf -
mkosi.images/base/mkosi.extra/usr/lib/sysupdate.lemonade.d/lemonade.feature -
mkosi.images/base/mkosi.extra/usr/lib/sysupdate.lemonade.d/lemonade.transfer -
Updex
docs/adr/0019-apply-merged-sysusers-and-tmpfiles-on-a-live-refresh.md(a live refresh runssystemd-sysusersandsystemd-tmpfiles --create; when the last refresh fails, the merge state is unknown; a refresh by hand does not runsystemd-sysusers)