# How LuCI renders a theme What LuCI expects from a theme on OpenWrt 24.10 and 25.12+, and where footstrap plugs into it. Read this first if you are new to the codebase. > Verified against `openwrt/luci` at the commit pinned in > `luci-theme-footstrap/luci-upstream.pin`, against the `openwrt-24.10` branch, and on a live > OpenWrt 25.12 router. ## A theme is a server shell plus client assets LuCI runs on ucode, not Lua, since 23.05: dispatcher in `/usr/share/ucode/luci/dispatcher.uc`, templates as `*.ut` under `/usr/share/ucode/luci/template/`. **Page content is rendered on the client.** The server sends a shell — header, an empty `