This document compares navigation systems across platforms and frameworks, identifies what each gets right and wrong, and proposes what a ground-up replacement for MAUI navigation would look like. The goal is to design the ideal system first, then layer backward compatibility on top — not the other way around.
Shell's current architecture conflates navigation structure (tabs, flyout, modals) with navigation operations (pushing pages with parameters). This creates five interrelated pain points that push developers toward workarounds or away from Shell entirely:
-
Split registration model — Tab roots must be declared in
AppShell.xaml; pushed pages must useRouting.RegisterRoute. Restructuring your app (promoting a pushed page to a tab) requires refactoring both XAML and startup code. -
No scoped parameters for repeated routes — Shell's flat
ShellRouteParametersdictionary means you can't push the same page type twice with different state (e.g.,/product/apple/compare/product/banana). Path parameters compound this by making the pattern more tempting without delivering scoped delivery.
Auto-generated by
python3 scripts/infra/caching/generate-dep-graph.pyExplore: paste the mermaid block into mermaid.live
flowchart TBContext: This is a research-driven response to a thought experiment proposing that SkiaSharp should evolve from a 1:1 Skia mirror into a "Skia-inspired but independently versioned" API. Five parallel research agents investigated the actual codebase, tooling, consumer impact, and creative alternatives.
| <!DOCTYPE html> | |
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| <title>Skia Analyst — m147 (full, 2026-04-29)</title> | |
| <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> | |
| <style> | |
| :root{--bg:#f6f8fa;--border:#d8dee4;--row-hover:#f0f4f8;--muted:#656d76;} | |
| body{background:var(--bg);color:#1f2328;font-size:14px;} |
| <!DOCTYPE html> | |
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| <title>Release Notes — v3.119.4-preview.1.1..origin/main (2026-04-28)</title> | |
| <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> | |
| <style> | |
| :root{--bg:#f6f8fa;--border:#d8dee4;--row-hover:#f0f4f8;--muted:#656d76;} | |
| body{background:var(--bg);color:#1f2328;font-size:14px;} |
| <!DOCTYPE html> | |
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| <title>Release Notes — v3.119.2..origin/main (2026-04-27)</title> | |
| <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> | |
| <style> | |
| :root{--bg:#f6f8fa;--border:#d8dee4;--row-hover:#f0f4f8;--muted:#656d76;} | |
| body{background:var(--bg);color:#1f2328;font-size:14px;} |
| <!DOCTYPE html> | |
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| <title>Skia GM Sample Scout</title> | |
| <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> | |
| <style> | |
| :root{--bg:#f6f8fa;--border:#d8dee4;--muted:#656d76;} | |
| body{background:var(--bg);color:#1f2328;font-size:14px;} |