CHANGELOG.md 4.1 KB

Dioxus v0.1.0

Welcome to the first iteration of the Dioxus Virtual DOM! This release brings support for:

  • Web via Wasm
  • Desktop via webview integration
  • Server-rendering with custom ToString implementation
  • State management
  • Build CLI
  • Foundational hooks
  • Context API
  • Basic suspense
  • Controlled components

Project: Initial VDOM support (TBD)

Get the initial VDom + Event System + Patching + Diffing + Component framework up and running Get a demo working using just the web

  • x Migrate virtual node into new VNode type
  • x Arena allocate VNodes
  • x Allow VNodes to borrow arena contents
  • x Introduce the VDOM and patch API for 3rd party renderers
  • x Implement lifecycle
  • x Implement an event system
  • x Implement child nodes, scope creation
  • x Implement dirty tagging and compression

Project: QOL

Make it easier to write components

  • x Tweak event syntax to not be dependent on wasm32 target (just return regular closures which get boxed/alloced)
  • x Tweak component syntax to accept a new custom element
  • Allow components to specify their props as function args

Project: Hooks + Context + Subscriptions (TBD)

Implement the foundations for state management

  • Implement context object
  • Implement use_state (rewrite to use the use_reducer api like rei)
  • Implement use_ref
  • Implement use_context (only the API, not the state management solution)
  • Implement use_reducer (WIP)

Project: String Render (TBD)

Implement a light-weight string renderer with basic caching

  • x Make VText nodes automatically capture and format IE allow "Text is {blah}"
  • x Implement stateful 3rd party string renderer

Project: Web_sys renderer (TBD)

  • WebSys edit interpreter
  • Event system using async channels
  • Implement conversion of all event types into synthetic events

Project: Web-View 🤲 🍨

Proof of concept: stream render edits from server to client

  • Prove that the diffing and patching framework can support patch streaming

Project: Examples

Get all the examples

  • Tide example with templating

Project: State management

Get some global state management installed with the hooks + context API

Project: Concurrency (TBD)

Ensure the concurrency model works well, play with lifetimes to check if it can be multithreaded + halted ?

Project: Mobile exploration

Project: Live-View 🤲 🍨

Combine the server and client into a single file :)

Project: Sanitization (TBD)

Improve code health

  • Clippy sanity for html macro
  • Error sanitization

Outstanding todos:

anything missed so far

  • keys on components
  • Allow paths for components
  • todo mvc
  • Tweak macro parsing for better errors
  • dirty tagging, compression
  • code health
  • static str slice optimization
  • name spacing so svg works
    • A handful of svg elements are automatically namespaced
    • Allow hierarchical namespacing (all children share a parent's namespace) - TBD in macro impl
  • fix keys on elements
  • controlled components (kinda tuff since we need all these different platforms)
    • Their own crate
    • Re-exported through the dioxus crate (not core)
  • Hooks
    • Re-exported through the dioxus crate (not essential to core virtualdom)
  • fragments
  • pass-thru components

Less-essential todos

  • HTML doesn't require strings between elements (copy-paste from internet)
  • Beef up the dioxus CLI tool to report build progress
  • Extract arena logic out for better safety guarantees
  • Extract BumpFrame logic out for better safety guarantees
  • make SSR follow HTML spec
  • MIRI tests
  • all synthetic events filled out
  • double check event targets and stuff
  • Documentation overhaul
  • Website

lower priority features

  • Attributes on elements should implement format_args instead of string fmt
  • node refs (postpone for future release?)
  • styling built-in (future release?)
  • key handler?
  • FC macro?