← All Workshops

MudEngine Part 10: Desktop with Blitz

Step 7 / 12

Understanding Blitz rendering

Blitz differs from both the browser and the WebView approach in fundamental ways. Understanding these differences helps you debug issues.

The rendering pipeline

When your component renders, this is what happens inside Blitz:

  1. Virtual DOM diff — Dioxus computes the new virtual DOM tree (standard Dioxus behaviour)
  2. DOM tree construction — Blitz converts the virtual DOM into its own BaseDocument tree
  3. Style resolution — Stylo (Servo's CSS engine) resolves all CSS rules against the tree
  4. Layout — Taffy computes positions using Flexbox and CSS Grid rules
  5. Painting — blitz-paint converts the laid-out tree into draw commands for Vello
  6. Rendering — Vello issues GPU draw calls via WGPU (Vulkan/Metal/DX12)

What's missing

Compare this to a browser engine like WebKit or Chromium, which have had decades of development. Blitz is building everything from scratch in Rust:

The important thing: you don't need a browser to render your Dioxus app. Blitz handles everything from the rsx! tree to the final pixel on screen, all in Rust.

🔍 Feature comparison
FeatureBrowserWebView (wry)Blitz
CSSCompleteCompleteFlexbox + Grid + basics
Text shapingHarfBuzzSystemParley (Rust)
ImagesFull supportFull supportBasic
Canvas/WebGLYesYesNot yet
AccessibilityFullFullVia AccessKit
JavaScriptV8/SpiderMonkeySystem engineNone needed (Rust)
rsx! components Dioxus VirtualDom blitz-dom BaseDocument style + layout tree stylo (Servo CSS) taffy (flexbox/grid layout) blitz-paint → anyrender Vello GPU commands WGPU backend Vulkan / Metal / DX12 🖥️ Screen
Step 7 / 12