dioxus/notes/CHANGELOG.md
2021-06-17 18:00:32 -04:00

4.1 KiB

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

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

Project: QOL

Make it easier to write components

  • (Macro) Tweak event syntax to not be dependent on wasm32 target (just return regular closures which get boxed/alloced)
  • (Macro) Tweak component syntax to accept a new custom element
  • (Macro) 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

  • (Macro) Make VText nodes automatically capture and format IE allow "Text is {blah}"
  • (SSR) 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

  • (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

  • (Macro) Clippy sanity for html macro
  • (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?