Repository navigation
Roadmap #119
Copy link
Copy link
Open
Description
Milestones
0.1 Alpha (June 2025)
Initial crates.io release representing 18 months of work.
- Support for calc() values in CSS styles.
-
object-fitandobject-positionproperties. -
background-size,background-position, andbackground-repeatproperties. - Move DOM updating logic into
blitz-dom - Event handling refactor
- WGPU texture rendering (
<canvas>support) - Grid layout: named lines and areas
0.2 Alpha (Oct 2025)
- Incremental box tree construction (and other performance improvements)
- CSS Animations and Transitions
- WGPU 26
- Run WPT tests on every PR
0.3 Beta (Estimated August 2026)
- Nested documents (enables: browser UI, iframes)
- Initial imperative DOM access (Dioxus
onmounted) - Text selection +
user-selectstyle (desktop platforms) -
touch-actionstyle -
pointer-eventsstyle - Winit 0.31 upgrade
- Mobile (Android/iOS) support #323
- Image cache
- Fix rendering CJK fonts on Apple platforms
- Delay rendering until critical assets have loaded (Fix FOUC)
- Custom Widget API
-
<details>/<summary>support -
<iframe>elements - Scrollable text inputs #339
- Overlay scrollbars
- Transparent window backgrounds (all renderers)
- Android
- Back button support
- App icon support (cli)
- Scrollbar styling:
scrollbar-widthandscrollbar-color - Scrolling behaviour:
scroll-behaviorandoverscroll-behaviour - Implement standard scrollTo, scrollBy, and scrollIntoView #703
- Events
-
use_window_eventhook for access to raw WinitWindowEvents -
<body>and<html>events - Mouse events (dblclick, auxclick, mouseover, mouseout, mouseenter, mouseleave)
- Scroll events (scroll, wheel)
- Focus events (focus, blur, focusin, focusout)
- Pointer events (pointerdown, pointerup, pointermove, pointerover, pointerout, pointerenter, pointerleave, pointercancel)
- Touch events (touchstart, touchend, touchmove, touchcancel)
- Drag & Drop
(blocked on Winit release)
-
- Rendering
- WGPU 29 upgrade
-
clip-pathSupport theclip-pathproperty #211 -
mask -
filter -
backdrop-filter - Font embolden (stem darkening)
-
border-style+ fixes forborder-radiusedge cases - Backgrounds for inline spans
- Text decoration styles:
text-decoration-thickness/text-decoration-inset/text-underline-style/text-underline-offset/text-underline-position
- Layout
- Support for non-local z-index
- Floats (Implements CSS Floats (
floatandclearproperties) #265) - Box-level
direction: rtl -
border-collapse: collapse - Sizing keywords:
-
width/heightnow supportmin-content/max-content/fit-content()/fit-content/stretch -
flex-basisnow supports all of the above andcontent
-
- Integrate Taffy's and Parley's baseline support #477
-
position:staticandposition:fixed - Box-level
writing-mode
- Text/inline layout
- Better white space collapsing
-
vertical-align -
text-overflow
1.0
- Devtools (Chrome Devtool Protocol)
- Element tree + element picker
- View layout metrics
- View specified styles
- View computed style
- Layout
-
position:sticky -
min-content/max-content/fit-content()formin-andmax-size styles - Improve Flow layout (Block/Float)
- Improve aspect-ratio handling
- Table layout
-
contain: sizeandcontain: inline-size
-
- Text/inline layout
-
line-clamp -
text-wrap-style
-
- Font enumeration / fallback
- More reliable
font-fallback - Ability to match against fonts that aren't loaded yet
-
font-display -
@font-facedescriptors-
unicode-range - Ranges for weight/width/style
-
- More reliable
- Rendering
-
background-clip: text - Text shadow
-
mix-blend-mode - Better filter support on Vello backends
-
-
transform-box - Shadow DOM & Custom Elements
- Shadow DOM
- Style encapsulation
- Slots
- Declarative shadow DOM
- Custom element registry
- Built-in elements
-
<meta>refresh -
<base>(base url) -
<picture>and<img srcset>support -
<select>(drop down) - Range input (+ output/meter/progress)
- Color picker
- Password input (Password masking #482)
-
- Events
- Trigger events in response to programmatic DOM manipulation
- Animation events
- Clipboard? (cut, copy, paste)
- Composition / IME?
- beforeinput event
- Custom Widgets
-
layoutmethod -
accessibilitymethod - Smarter paint invalidation (request_redraw)
- Pointer capture
-
- Accessibility
- Richer accessibility tree
- Text layout / text input
- Handling accessibility events
Backlog
- Devtools
- Network
- Console
- Edit/override styles
- Test automation
- Webdriver? Playright?
- System compositor integration
- "actually native" font rendering
- JavaScript suport
- C bindings
- Dylib compiliation mode (for faster iteration)
- 3D transforms
- First-party SVG (stylable/animatable)
- Layout
- Table layout (not emulated with CSS Grid)
- Subgrid layout
- Grid Lanes layout
- Anchor Positioning
- Fragmented (paginated) layout
- multi-column layout
- Text/inline layout
- Vertical text (
writing-mode) - Padding/border/margin on inline spans
- Better
text-transform - Ruby
- Vertical text (
- Custom Widgets
- Network / resource integration
- WGPU-specific API
- Elements
- Lottie widget?
- Video playback
- Top layer and Popover API
- Multi-window support
- Better component library support
- Merge with Dioxus Desktop?
- Low-level DOM access
- RcDocument
- Ref-counted node handles?
- Read data from dirty document (requiring extra resolves)?
- Custom event handlers?
- Abstraction?
More tasks are tracked in individual issues for each area of the engine:
- Tracking: Rendering #238
- Tracking: Layout and Text #256
- Tracking: Optimizations #255
- Tracking: Event handling #257
- Tracking: Form controls #258
- Tracking: Images and media (excl. SVG) #259
- Tracking: SVG support #260
- Tracking: Devtools & Automation #261
- Tracking: Accessibility #262
- Tracking: Architecture #263
- Tracking: Networking #273
HTML/Markdown renderer ("readme")
- Packaged/published binaries
- List bullets rendering
- Checkbox rendering
- Live reload
- Clickable links
- Syntax highlighting
- LaTeX / math rendering
Archived Roadmap Items
Architecture
- Rename crates
- Split "wrappers" out of dioxus-blitz crate
DOM
- Non-root viewport scrolling
-
netcrate for faster/async networking - Web font loading (needs: net crate + fontique improvements)
- Background images (loading + rendering)
- Text input
- Mouse selection
- More hotkeys
- Multiline input
-
<title> - Details/Summary
Dioxus Native integration
- Integrate with CLI
- Better event handling (prevent default, generated events)
- Low-level access to DOM
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels
Activity
savanesoff commentedon Mar 10, 2025
Hi 👋
Really interesting project! 🚀
Very silly question: Does the browser run JS?
This would be very useful for running web apps on an embedded devices, like STBs, Vehicle Infotainment systems etc... where browser bloat is a HUGE issue!
Many companies take off-the-shelf Browsers like
Chromium(bloated) orCobalt(out of date entirely, but trimmed down) to develop Web apps (react, svelt based) with a heavy use of JS.If not, is it in the cards?
nicoburns commentedon Mar 10, 2025
@savanesoff It's not a silly question. The answer is that no it doesn't, but that it might be on the cards.
Architecturally we are setup for a JS engine (or engines!) to slot in (and we do already implement event handling and dynamic DOM updates) It's not a development priority for us in 2025 (we are prioritising the "core" renderer and the dioxus and rust APIs), but it could become one later (or sooner if there is an interested party that could bring development resources to work on the feature).
Aworldc commentedon Mar 30, 2025
I am looking at doing this with boa, but I'm very new to the project and am having a hard time locating the rust apis that I could build it on. Like I found
blitz_html::HtmlDocument.as_mut<BaseDocument>andblitz_dom::BaseDocument.query_selectorbut that's it.nicoburns commentedon Mar 30, 2025
You could take a look at the dioxus-native crate. That's the code we currently have that does the most around dynamic updates and interactivity. But yes, there's a lot that would need to be built out to make this work. Including, I believe, reference counting for DOM nodes.
Aworldc commentedon Mar 30, 2025
Ah cool, will have a look at.
guivieiras commentedon Jul 17, 2025
Hey!
I'm currently using Dioxus to build a desktop app that uses <video> tags, but on linux the overall webkit2gtk experience is very underwhelming. Plus having different webviews between OSes wll always lead to inconsistencies.
I spotted this project and was wondering about the current plan for media elements:
Roadmap timing: Is built-in <video> / media playback targeted for the 0.3 Beta or more likely post-Beta?
blitz-mediacrate: The backlog mentions splitting media decoding into ablitz-mediacrate. Should we understand that as the path toward supporting <video> / <audio> elements?Interim guidance: If full <video> support is still a ways out, what's the recommended workaround today (custom native player, decoded frames to <canvas>, platform video widget, etc.)?
Thanks! Amazing progress so far!
nicoburns commentedon Jul 20, 2025
@guivieiras I think the issue to track here is gfx-rs/wgpu#4386. You could also look at this Bevy issue (bevyengine/bevy#5221) which links a few possible solutions. Audio is easier. You shouldn't need Blitz support at all for that. You can just use a Rust library for playing audio (e.g. https://github.com/RustAudio/rodio).
Your options today are:
cody-herbst commentedon Nov 28, 2025
@nicoburns Hello, I'm interested in helping out if you need an extra pair of hands. Happy to take on smaller or larger tasks depending on what you need. The events issue seems pretty cool if you need any help there?
umajho commentedon Dec 29, 2025
Hello.
The
0.4 Betamilestone listed the Composition Event for IME support.Since there is now a better API called the EditContext API, would you also consider implementing that API?
Data carried with a
CompositionEventare very limited. You can only extract a single string representing the whole editable text from the IME with it.With the new
EditContextAPI, you can get much more information. (such as where the cursor should be, how the editable text should be partitioned and what style each part should have)nicoburns commentedon Dec 29, 2025
@umajho It will probably be a case of as well of, rather than instead. The composition event API is much simpler to implement and will probably still be the short-term target. I'd love the implement the EditContext API, but I think the Rust layer (Winit etc) likely needs more work before that will be possible.
I would also note that the path for implementing a custom text editing control in Blitz / Dioxus Native may look more like implementing a custom Blitz widget that uses Rust-level system APIs directly rather than using a web API for that purpose. That is, Blitz isn't sandboxed like the web is, so in some cases we don't need to expose an API ourselves, we just expose the underlying system APIs (or abstraction from Rust crates).
akongG commentedon Jan 23, 2026
This is truly a great project. I'm looking forward to using it in future projects to enable the use of Dioxus on mobile devices without relying on webview
examples: add text-overflow fixture
paint: plumb TextTruncation struct into stroke_text
examples: add text-overflow fixture
paint: plumb TextTruncation struct into stroke_text
shao-kang commentedon Jul 29, 2026
I am building a project that provides rquickjs bindings for Blitz. It currently supports only basic DOM creation. As Blitz continues to evolve, I hope we can work together to expand and improve the project. The project uses QuickJS as its JavaScript engine and Blitz as its DOM rendering and layout engine. A layered bridge between Rust and JavaScript is used to incrementally provide compatibility with commonly used browser Web APIs. Its key difference from traditional Web runtimes is that QuickJS and Blitz run on separate threads: JavaScript computation and task execution do not directly block the rendering main thread, preventing expensive JavaScript work from stalling layout, painting, and user interaction.
jellybobbin commentedon Oct 14, 2026
This is truly a magnificent innovation