English · Русский · Playground — try the whole thing with no router
A LuCI theme for OpenWrt 24.10 and newer. No framework, luci-base is the only dependency.
Browsers: Chrome 108, Firefox 101, Safari 15.4 and newer. Older ones render a plainer page
rather than a broken one; the floor is derived from the stylesheet by a gate and written down in
docs/css.md.
23.05 is end-of-life and the theme stops there: 0.14.2 is the last version that runs on it. The installer serves that release to a 23.05 router — pinned, signed and verified like any other — and says so. Newer versions need 24.10 or later, where
ui.RangeSliderexists.
wget -qO- https://raw.githubusercontent.com/VizzleTF/luci-theme-footstrap/main/install.sh | shThe script adds its own package feed and installs from it. After that the theme upgrades with the
router: apk update && apk upgrade (or opkg). Running it again upgrades the theme and prints what
it did — installed, upgraded from which version, or already current.
raw.githubusercontent.com is rate-limited per address, so if it answers 429 (a shared exit, CGNAT),
the same script is attached to every release and served from a CDN with no such budget — signed, so
it can be checked before it is run:
wget -qO- https://github.com/VizzleTF/luci-theme-footstrap/releases/latest/download/install.sh | shThen pick Footstrap in System → System → Language and Style, field "Design".
- Styles every page, stock or not — but never overwrites what an app styles itself
- Works on a phone, and installs to its home screen — icon, own window, no address bar
- Faster than bootstrap — the numbers are below
- Upgrades with the router, from the package feed
- Twenty-one appearance axes, applied instantly, in one tab
Time to first paint, same router, same pages.
| Page | bootstrap | footstrap |
|---|---|---|
| Wireless status | 271 ms | 54 ms |
| Interfaces | 374 ms | 111 ms |
| DNS | 329 ms | 108 ms |
| Firewall zones | 311 ms | 79 ms |
| 38-page run | 11 306 ms | 4933 ms |
| Requests/page | 15–47 | 0–7 |
Median page 3.03× faster, the whole run 2.29×. Router CPU for the same tour: 37.3 s against 18.4 s. Measured on real hardware, five runs — method and full data in docs/benchmark.md.
Developer documentation is in docs/ — architecture, the design system, the stylesheet build, the SPA router, packaging, the release runbook. Start with architecture.md for what the theme is, or conventions.md for the rules a patch has to follow.
Writing a luci-app? Read
how to style it so it works under any theme, and paste your CSS
into the devkit — token grid, component markup,
style checker.
