Goal: make dioxus-ui match the Leptos app architecture and file responsibilities as closely as possible.
Constraint:
- this is not "rough parity"
- this is not "same behavior, different structure"
- Dioxus should copy the Leptos architecture, module split, naming, and ownership boundaries as literally as possible
- a difference is acceptable only when Dioxus creates a real technical constraint
This file intentionally keeps only the remaining mismatches.
Rule for maintaining this file:
- remove completed items immediately as work lands
- do not keep "done" cleanup tasks in the plan
- if a mismatch is resolved, delete it from this file instead of marking it done
Decision already made:
- keep
workflowsin Dioxus - but keep it clearly isolated from the Leptos-parity path instead of letting it distort the Leptos-matching structure
When there is a design choice:
- prefer the same file split as Leptos
- prefer the same module naming as Leptos
- prefer the same ownership boundaries as Leptos
- do not keep a Dioxus-specific structure just because it already works
Leptos exposes:
all_blocksdemos_sidenavmy_command_bar_constantsstatic_md_registry
Dioxus still has extra modules in src/__registry__/:
all_workflows.rssidenav_get_started.rssidenav_hooks.rssource_map.rs
Required work:
- reduce
dioxus-ui/src/__registry__/mod.rstoward the exact Leptos role - rename or collapse helper modules when Leptos keeps that responsibility elsewhere
- isolate Dioxus-only registry extras from the Leptos-parity path
Leptos app/src/registry/ contains only:
mod.rsmd_docs/mod.rsmd_docs/docs_installation_cli_tree_view.rs
Dioxus still keeps one extra module:
src/registry/types.rs
Required work:
- decide whether
src/registry/types.rsshould move intosrc/__registry__/or another Leptos-matching owner - make
dioxus-ui/src/registry/as close as possible to the Leptos tree
Leptos app_crates/registry/src/ contains:
blocks/charts/constants/demos/hooks/ui/utils/
Dioxus currently differs:
- missing
constants/ - missing
utils/ - has Dioxus-only
workflows/
Required work:
- add
dioxus-ui/app_crates/registry/src/constants/if that ownership should mirror Leptos - add
dioxus-ui/app_crates/registry/src/utils/if that ownership should mirror Leptos - keep
app_crates/registry/src/workflows/, but isolate it as a Dioxus-only surface that does not redefine the Leptos-parity target
Leptos app_crates/app_domain/src/ contains:
constants/icons/markdown_config/themes/utils/
Dioxus currently differs:
- missing
markdown_config/ - missing
utils/
Required work:
- add
dioxus-ui/app_crates/app_domain/src/markdown_config/or move equivalent logic there - add
dioxus-ui/app_crates/app_domain/src/utils/or move equivalent logic there - audit whether logic currently under
src/markdown/belongs in the Leptos-style crate boundary
Leptos top-level src/ includes:
app.rslib.rsshell.rsdomain/tests/
Dioxus currently differs:
- has
main.rsinstead of the Leptos-style split - has no
shell.rs - uses
domain/test/instead ofdomain/tests/ - still exposes top-level
src/markdown/
Required work:
- port the entry layout toward the closest Dioxus equivalent of Leptos
app.rs/lib.rs/shell.rs - rename
src/domain/test/tosrc/domain/tests/if Dioxus does not block it - decide whether
src/markdown/should be folded into Leptos-style ownership boundaries instead of staying top-level - add
dioxus-ui/app_crates/app_components/if Leptos responsibilities require that literal split
Leptos currently exposes these page responsibilities:
- home page
- download page
- docs layout under
domain/docs/routing/ - all-demos overview pages for components and hooks
- shared demo page flow for components and hooks
- icons page under
domain/icons/ - views route shell under
domain/views/ - bug-report page
Current Dioxus mismatches:
/downloadis linked from the home page but no Dioxus route serves it- there is no all-demos overview equivalent for components/hooks
- docs page responsibilities live in top-level
src/routes/instead ofsrc/domain/docs/routing/ - component/hook/docs pages are split differently from Leptos shared route ownership
- icons page is routed from top-level
src/routes/instead of a Leptos-likedomain/icons/ - Dioxus has
view/block/:idbut not the sameview/:nameshell shape as Leptos - bug-report surface is absent
Required work:
- add a Dioxus download page and route equivalent to Leptos
page_download.rs - add all-demos overview page equivalents for components and hooks
- move docs-routing ownership closer to Leptos
src/domain/docs/routing/ - decide whether component/hook/docs page rendering should be re-converged toward a Leptos-style shared route owner
- move icons page ownership closer to Leptos
src/domain/icons/ - move views routing closer to Leptos
domain/views/views_layout.rs+view_router.rs - decide whether the bug-report page should be ported literally or explicitly treated as intentionally omitted
Confirmed remaining gaps versus the Leptos app shape:
/downloadexists as a Dioxus route constant and home-page CTA target, but no Dioxus route currently serves it- Leptos has
page_download.rs - Dioxus still lacks the matching page/route
Other remaining support-page gaps:
-
public/docs/workflow.mdif we want the same support-page set as Leptos - all-demos overview page equivalent
- download page and route equivalent
Leptos src/domain/mod.rs currently exposes:
blocksbug_reportchartscreatedocsiconsmarkdown_uiteststhemesviews
Dioxus currently differs:
- missing
bug_report - missing
docsas a domain owner - missing
iconsas a domain owner - missing
themesas a domain owner - uses
testinstead oftests - adds
workflows
Required work:
- add back the missing Leptos-style domain owners where Dioxus should mirror them literally
- rename
testtotestsif no Dioxus constraint blocks it - keep
workflows, but treat it as an explicit Dioxus extension rather than part of the Leptos-parity target
Decision already made:
- cleanup items already removed should stay out of this plan
- keep
maskas an intentional retained Dioxus surface - keep
imageas an intentional retained Dioxus surface - keep
toolbaras an intentional Dioxus-only exception because we want to keep it
Required work:
- keep
components/toolbar.md, but mark it as an explicit Dioxus-only exception outside the Leptos-parity target
Leptos keeps shared app-level UI pieces in app_crates/app_components/src/.
Dioxus still keeps analogous responsibilities in top-level src/components/, including things like:
- footer layout
- newsletter/signup surface
- doc header
- table of contents
- sidenav
- app footer
Required work:
- add
dioxus-ui/app_crates/app_components/ - decide which current
src/components/*files should move into the Leptos-styleapp_componentscrate - leave only genuinely app-shell-specific Dioxus wiring in top-level
src/components/if needed
Required work:
- review
public/docs/**frontmatter completeness forimage/image_dark - enrich
public/docs/figma.mdonly if we want the same content depth as Leptos
Do not expand tests before the remaining architecture gaps above are settled.
Required work:
- add Dioxus hook e2e coverage
- port Leptos component specs where DOM and behavior truly match
- validate markdown wrappers, tags, and install blocks through e2e coverage
These should not stay in this file anymore as active plan items:
- central markdown registry exists in
src/__registry__/static_md_registry.rs - shared markdown wrappers already exist
MarkdownTypealready exists in Dioxusget_static_registry_entry(...)already exists in Dioxus- old per-component docs registry files are already gone
- docs/component/hook rendering already goes through the central markdown path
src/registry/md_docs/docs_installation_cli_tree_view.rsalready exists
- Tighten
src/__registry__/andsrc/registry/until they match the Leptos responsibility split as literally as possible. - Restore Leptos page surfaces and docs-route ownership, including
/downloadand all-demos pages. - Close the crate-boundary mismatches in
app_crates/registry,app_crates/app_domain, andapp_crates/app_components. - Move the top-level
src/andsrc/domain/*layout closer to the Leptos split where Dioxus allows it. - Keep
workflows, but isolate it clearly from the Leptos-parity path. - Separate Dioxus-only docs from the Leptos-parity docs surface.
- Finish docs frontmatter cleanup.
- Expand e2e parity only after the structure is stable.