Since I don't really like Bootstrap, so I started making a Material 3 theme for LuCI that aims to replace the default Bootstrap-based UI.
The goal of this project is to keep LuCI fully compatible while modernizing its appearance.
Almost every page keeps the same layout and functionality as the default Bootstrap theme. I intentionally avoid changing page structure or workflows so existing LuCI applications continue to work without modifications.
The only page that has been significantly redesigned is System Log (inspired by ChesterGoodiny's luci-theme-proton2025 ). Instead of a plain <textarea>, it has been rebuilt into a searchable and filterable log viewer with:
Log level counters
Filtering by facility and severity
Copy/download actions
Better readability for long logs
Functionally it provides the same information as the original page, but is much easier to use.
Looks very nice and interesting, great job , how to compile it from source?, after running "bun build:css" and putting the whole folder in luci/themes folder it still doesn't shows up in make menuconfig
Getting error when switching into Material3Dark from luci :
Unable to compile 'themes/material3-dark/header' as Lua template:
/usr/lib/lua/luci/ucodebridge.lua:14: /usr/lib/lua/luci/template.lua:108: Failed to load template 'themes/material3-dark/header'.
Error while parsing template '/usr/lib/lua/luci/view/themes/material3-dark/header.htm':
No such file or directory
In h(), file [C]
called from function t (/usr/lib/lua/luci/ucodebridge.lua:14)
called from function [anonymous function] (/usr/lib/lua/luci/ucodebridge.lua:20)
And the same for Material3Light
Unable to compile 'themes/material3-light/header' as Lua template:
/usr/lib/lua/luci/ucodebridge.lua:14: /usr/lib/lua/luci/template.lua:108: Failed to load template 'themes/material3-light/header'.
Error while parsing template '/usr/lib/lua/luci/view/themes/material3-light/header.htm':
No such file or directory
In h(), file [C]
called from function t (/usr/lib/lua/luci/ucodebridge.lua:14)
called from function [anonymous function] (/usr/lib/lua/luci/ucodebridge.lua:20)
In [anonymous function](), file /usr/share/ucode/luci/runtime.uc, line 106, byte 62:
called from function [anonymous function] (/usr/share/ucode/luci/runtime.uc:158:65)
called from function [anonymous function] (/usr/share/ucode/luci/dispatcher.uc:924:3)
called from anonymous function (/www/cgi-bin/luci:39:13)
` vm.get('_G', 'luci', 'ucodebridge', 'compile').call(path);`
Near here ------------------------------------------------------------------^