Cookbook
Ship your package
For someone who wrote a LuCI app or theme and wants people to install it. Three stages, each its own page, each useful without the next.
1 · Develop and test
Throwaway routers in Docker. Sync on save, assert in one command.
2 · Build and release
Both release lines, signed with your own key, in CI.
3 · Get into a feed
So users get apk upgrade, not a download link.
The whole path, in eight commands
# 1 — while you work owlab up owlab sync --watch owlab test --release 25.12.5 --release 24.10.8 --install 'dist/*/my-app-*' # 2 — when you tag owlab build --release 25.12.5 owlab build --release 24.10.8 owfeed sign --key env:OWFEED_AUTHOR_KEY owfeed release # 3 — once, to join a feed # open an issue with your repository, a tag and your public keys
Where to stop
Stop after 1 if the package is not released yet. owlab holds no keys and publishes nothing; it exists to answer "does this actually work on 24.10".
Stop after 2 if your package is installed occasionally, by people who can paste a command. A signed release asks your users for nothing but a signature check, and it does not make anyone's key a trust anchor on their router.
Go to 3 when you want apk upgrade to work. That is the one thing
a feed does that a release cannot — and the overview argues the case for not
running a feed where a release would do.
What each stage needs
| Stage | Requires |
|---|---|
| Develop and test | Docker. Nothing else. |
| Build and release | Two keys, made once. No toolchain to install: the apk tools are fetched from the OpenWrt SDK and verified against a pinned key. |
| Get into a feed | A signed release, and a feed willing to carry it. |