Download Latest Version 1.9.0 source code.tar.gz (285.2 kB)
Email in envelope

Get an email when there's a new version of miso

Home / 1.9.0
Name Modified Size InfoDownloads / Week
Parent folder
1.9.0 source code.tar.gz 2026-04-02 285.2 kB
1.9.0 source code.zip 2026-04-02 347.8 kB
README.md 2026-04-02 63.3 kB
Totals: 3 Items   696.3 kB 0

🍜 1.9.0

See the haddocks, miso repo and org for more information.

✨ Highlights

The major feature added in 1.9 is React-style components (VComp). Isolated Component can now be created and communicate with each other via message-passing. The original DSL has been extended to support this feature using an existential encoding (shown below). This feature allows type-safe embedding of Component in View. See the +> combinator to nest Component (this combinator unifies Component along the parent-child relationship, creating a typesafe Component hierarchy).

The JavaScript runtime has been extended to handle recursive mounting during diffing (FFI mounting calls recursively between Haskell and JS to mount Component). Delegation and hydration have also been extended to support Components.

:::haskell
-- ^ New 'VComp' case added
data View model action
   = VNode Namespace Tag [Attribute action] [View model action]
   | VText (Maybe Key) MisoString
   | VComp (Maybe Key) (SomeComponent model) -- new

:::haskell
-- Existential to create isolated 'Component'
data SomeComponent parent 
   = forall model action . Eq model
  => SomeComponent (Component parent model action)

:::haskell
-- 'App' is now a synonym for 'Component'
type App model action = Component ROOT model action

-- Component is now parameterized by 'parent'.
data Component parent model action 
  = Component
  { model :: model  
  , ...
  }

🎁 Features added (non-exhaustive)

  • miso is now recursive, Component can now be embedded in other Component using the mount (+>) combinator
  • We have a GitHub org now that features many examples.
  • We've added a scheduler (like React) to process all events for all components in FIFO order, and to facilitate Component communication.
  • Preliminary documentation has been added here
  • Support for Web Assembly and GHC WASM browser mode
  • 0 dependency (only rely on boot packages, no more jsaddle), necessary for MicroHs integration.
  • inline-js, a QuasiQuoter` for JavaScript. See Miso.FFI.QQ (haddocks.haskell-miso.org)
  • App is now a synonym for Component ROOT
  • Event delegation now virtualizes both the capture and bubble phases
  • All JS has been ported to TypeScript, and is on npm
  • Component communication has been added (e.g. broadcast)
  • Experimental support for reactivity through data bindings (see reactivity)
  • Transition is now Effect and has become the default interface for updating state, introducing effects.
  • We've added a Miso.Style module with our own style DSL.
  • Playwright integration tests (200+) were added and run in CI for both JS and WASM.
  • Copious unit tests added along with increased code coverage. See coverage.
  • Serverless (dropped NixOps).
  • Added flake.nix (github.com)
  • 2D / 3D Canvas support has been added. See canvas-2d.
  • Subscriptions, WebSockets, SSE have all been upgraded
  • Miso.Fetch (haddocks.haskell-miso.org) has replaced XHR.
  • Replaced aeson w/ Miso.JSON (haddocks.haskell-miso.org) (for performance reasons due to JSString).
  • Custom renderers were added, this allows experimental support for mobile phones as seen in miso-lynx
  • Added our own lens library Miso.Lens (haddocks.haskell-miso.org)
  • Experimental hot reload support in Miso.Reload (haddocks.haskell-miso.org)
  • Support for the audio / video media APIs in Miso.Media (haddocks.haskell-miso.org)
  • Exported our own lexer and parser in Miso.Util.Parser (haddocks.haskell-miso.org)
  • Added new effect primitives for perform IO (io / withSink / sync).
  • Added a new router in Miso.Router (haddocks.haskell-miso.org)
  • Component lifecycle hooks mount / unmount
  • Node lifecycle hooks onCreated , onDestroyed

🚀 2.0.0 plans

💝 Special thanks

A special thank you to everyone involved in this release.

  • @terrorjack for adding synchronous callbacks to the WASM backend, enabling the Component mounting feature in 1.9.
  • @colinaaa for encouraging the miso-lynx integration.
  • @huxpro for the mention at ReactConf, and the entire Lynx family for LynxJS.
  • @juliendehos for three.hs, canvas games, flake support, docker integration, mdbook, etc. other improvements too numerous to mention.
  • @ners for GraphQL, implementing the JSON spec., and much more.
  • @hunvreus for Basecoat CSS.
  • @Zer0- for extending and testing hydration support, HTML escaping and adding SSR, etc.
  • @fanshi1028 for testing out every single new feature.
  • @georgefst for general API and DX improvements, lens / reactivity support.
  • @amesgen for servant-client support and template-haskellsplices to load miso's JS in the WASM backend 💐
  • @brakubraku for encouraging the implementation of React-style components.
  • @jhrcek for documentation.
  • @fizruk for lens API design.
  • @augustss for making MicroHs.
  • @Reijix for help w/ async. / sync. callbacks across WASM / JS backends and Drag n' Drop.
  • @Deku-nattsu for Lynx support
  • @maybetonyfu for general support

What's Changed

New Contributors

Full Changelog: https://github.com/dmjio/miso/compare/1.8.7...1.9.0

Source: README.md, updated 2026-04-02