Laminar & Airstream are now published directly for Scala 3. This required an internal refactoring of Airstream to satisfy Scala 3's stricter variance checks.
No breaking changes unless you extended / subclassed Airstream observable types.
New video: First Zymposium – Building an App with ZIO (and Laminar).
New tutorial: Hands-on Laminar, including form validation and integration with ScalaCSS and Monocle.
New project: kitlangton/zio-app – Quickly create apps with ZIO and Laminar
Kit published the first alpha of Animus, an animation library for Laminar.
Build: Laminar and Airstream are now published directly for Scala 3.0.0-RC3 and RC2 (update: and now Scala 3.0.0). The codebase is shared between Scala 2 and Scala 3.
Sinktype aliases are now available in when importing
API: Refactor the class hierarchy to support stricter variance checks in Scala 3 (thanks, @yurique!)
Migration: If you manually extend Airstream traits
Observable, you should now extend
Other than that, everything should work as before.
API: Allow third party packages to extend Observable types
- Migration: We changed access modifiers on some members. If you are already extending Airstream observables, read the new docs section.
Build: Upgrade to URL DSL 0.4.0
New: Base path and fragment matching
You can now match routes like
basePath = Route.fragmentBasePathto
Routeconstructors. This lets you build a routing frontend without the cooperation of the backend.
You can also use hash routing on a
file://URL now (see e.g. laminar-examples)
New: Basic route helpers to match URL fragments (text after #)
- Routes like
(root / "page" / endOfSegments) withFragmentlet you capture the whole fragment as one String
- Routes like
Fix: When initializing the router, do not update the initial URL to the canonical URL of the initial page
Keep the original URL with whatever extraneous query params it might have, to give any third party tools you might be using a chance to look at them
Migration: If you are relying on previous behaviour, call
router.replaceState(router.$currentPage.now())on page load (after initializing the router) to accomplish the same in the new version.
Fix: Respond to
Laminar & Airstream development is sponsored by people like you.
GOLD sponsors supporting this release:
Thank you for supporting me! ❤️