Hero OS — Dioxus Bootstrap Migration: Status & Merge Plan #28
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Complete migration of Hero OS from Bootstrap/Askama server-rendered templates + JavaScript to pure Dioxus WASM using
dioxus-bootstrap-css. Zero iframes, zero JavaScript, zero custom CSS overriding Bootstrap. Single WASM binary, offline-first, type-safe.Status: Component conversion COMPLETE. Awaiting merge with
development_mik_6_1before final merge todevelopment.Continues from home#26 (original migration plan).
Live demo: https://herodevbootstrap.gent04.grid.tf
What Was Achieved
100% Pure dioxus-bootstrap-css
All 16 service UIs and 44 archipelago islands (60 UI crates total) now use dioxus-bootstrap-css components exclusively:
<div class="btn/card/alert/table/row/col/badge/spinner">patterns remainingComponents Used Throughout
Button { color, outline, size, href, target, download }<button class="btn">and<a class="btn" href>Card { header_class, body_class, header, body, footer }<div class="card">with sub-divsAlert { color, dismissible, on_dismiss }<div class="alert">Table { size, bordered, hover, responsive }<table class="table">+<div class="table-responsive">Row { }/Col { xs, sm, md, lg, xl }<div class="row">/<div class="col-*">Container { fluid }<div class="container">Badge { color, pill }<span class="badge">Spinner { size, color }<div class="spinner-border">Nav { tabs, pills, vertical }+NavItem+NavLink<ul class="nav">Navbar { expand, brand }<nav class="navbar">TabList { active, tabs }<ul class="nav-tabs">+<div class="tab-content">Modal { }<div class="modal">Toast { show, color, on_dismiss }+ToastContainer<div class="toast">Breadcrumb+BreadcrumbItem<nav class="breadcrumb">ListGroup+ListGroupItem<ul class="list-group">InputGroup<div class="input-group">Progress/ProgressBar<div class="progress">Accordion+AccordionItem<div class="accordion">dioxus-bootstrap-css Improvements (0.2.1 → 0.2.5)
We own the library and improved it during this migration:
Button { href }— renders<a>for link-buttonsButton { target, download }— complete anchor attribute supportAlert { on_dismiss }— callback for external state managementon_dismissShell Fixes (hero_os)
.desktopbottom gap: 112px → 130px (prevents dock overlap with window content)py-3top padding on all service UIs for proper spacing in hero_os windowsoverflow: autoon island content wrapper divs (enables scrolling)Technical Approach
The Gold Standard Pattern
Every service UI follows this pattern (proven with the Embedder test example):
Key principles:
small,py-2,btn-sm,form-control-sm) instead of custom CSS font-size overridesheader_class,body_class,responsive: true) instead of wrapper divsBranches and PRs
All work is on
development_dioxus_bootstrapbranches. DO NOT MERGE — see merge plan below.hero_os + hero_archipelagos (branch:
development_dioxus_bootstrap_2)15 Service UIs (branch:
development_dioxus_bootstrap)Merge Plan
Our
development_dioxus_bootstrapbranches were forked fromdevelopment. Meanwhile,development_mik_6_1has newer UI improvements (hero_compute nicer UI, foundry rename, etc.) not yet merged todevelopment. This is what runs on herodev2.Steps
development_mik_6_1intodevelopmentacross all repos — brings herodev2's latest UI to the base branchdevelopmentINTOdevelopment_dioxus_bootstrapbranches (not the other way) — preserves our work while pulling in new UI changesdevelopment_mik_6_1to pure dioxus-bootstrap (same proven patterns)development_dioxus_bootstrapPRs intodevelopment— the final mergeWhy merge (not rebase)
Expected conflict areas
app.rsfiles (both branches modified)Cargo.toml(dependency versions)What Remains After Merge
After steps 1-4, any new UI code from
development_mik_6_1needs the same dioxus-bootstrap conversion. This should be straightforward — we've established the exact patterns for every Bootstrap component type. The conversion is mechanical.Progress Log
<a class="btn">converted toButton { href }Alert { dismissible, on_dismiss }smallclass (no custom CSS)Build & Deploy Notes
Prerequisites
All local repos must be on
development_dioxus_bootstrap(or_2for hero_os/archipelagos) branches. The build system mounts local source code into Docker — it uses whatever is on disk.Build Command
HERO_OS_FEATURESis needed becausehero_os_appdefault features don't includebootstrap-islands. After the WIP branches merge todevelopment, the default features should be updated and this env var becomes unnecessary.Package & Push to Registry
Deploy to TFGrid
Post-Deploy Patches (issue #25)
Several services need manual zinit config patches after deploy:
servesubcommand addedKnown Build Considerations
hero_cloud→hero_compute,hero_forge_ui→hero_foundry_ui. Local directory names may still use old names —build-local.shreferences old names (lines 195-196).build-wasm.shclones from git if not found locally. Sincebuild-local.shmounts the local checkout, the clone should not trigger. If it does, setHERO_ARCHIPELAGOS_BRANCH=development_dioxus_bootstrap_2.forge.ourworld.tf/lhumina_code/hero_zero:base(pre-built with Rust toolchain, dx CLI, wasm32 target). Falls back torust:1.93-bookwormif not available.Next Steps & Dependencies
Current Status
forge.ourworld.tf/lhumina_code/hero_zero:devbootstrap. Parked ondevelopment_dioxus_bootstrapbranches until merge prerequisites are met.development_mik_6_1. Running on herodev2.Execution Order
Fix #25 (service TOML configs / deploy fixes) — work on
development_mik_6_1branch across repos. This fixes the deploy configuration gap that preventsherodevbootstrapfrom serving after a clean container start.Merge
development_mik_6_1→development— brings both #23 (UI enhancements) and #25 (deploy fixes) into the base branch.Merge
developmentINTOdevelopment_dioxus_bootstrap— preserves all #28 work while pulling in new changes from #23 and #25.Convert any new/changed UI from #23 to pure dioxus-bootstrap (same proven patterns).
Test on herodevbootstrap — fresh deploy with working configs.
Final merge
development_dioxus_bootstrap→development— #28 is complete.Dependency Chain