Assets¶
The admin ships a vendored frontend bundle and serves it through the engine, so it works with no external requests and no CDN dependency.
The bundle¶
| Component | Version | Logical paths |
|---|---|---|
| Bootstrap | 5.3.3 | bootstrap/bootstrap.min.css, bootstrap/bootstrap.bundle.min.js |
| Bootstrap Icons | 1.11.3 | bootstrap-icons/bootstrap-icons.min.css |
| htmx | 2.0.4 | htmx/htmx.min.js |
The files ship as distribution resources, so they resolve whether the admin runs
from a source checkout or an install. They are pinned in
tools/vendored-assets.json (versions, source URLs, and checksums); run
raku tools/vendor-assets.raku to refetch or upgrade them.
Serving and fingerprinting¶
The engine serves the bundle under <mount>/admin-assets/<path>. Each URL
carries a content digest as a query string, and responses are sent with
Cache-Control: public, max-age=31536000, immutable. When a file's content
changes its digest changes, so the URL changes and caches refresh on their own.
MVC::Keayl::Admin::Assets.asset-url('bootstrap/bootstrap.min.css') returns the
fingerprinted URL. The layout renders the stylesheet, script, and import-map
tags for the bundle. htmx and Bootstrap are also pinned in an import map.
Overriding styles¶
A host application can layer its own stylesheet after the bundle:
1 | |
The override is emitted after the vendored stylesheets, so its rules win.
Licensing¶
The vendored assets are separate works under their own licenses (Bootstrap and
Bootstrap Icons are MIT, htmx is Zero-Clause BSD), distinct from this
distribution's Artistic-2.0 license. Each component's LICENSE is bundled next
to its files, and NOTICES.md
records the versions, licenses, and sources.