Resources
Guides
Documentation
Videos & Conference Talks
Community & Support
Gitter for support, advice, showing off your Laminar projects, etc.
Github discussions for how-tos, whys, and any questions or discussions that other people would benefit from easily finding.
Github issues for bugs and feature requests
Please consider sponsoring Laminar development on Github.
Useful Tools
Laminar ScalaFiddle to try things on the flyLaminext Scribble to try things on the fly. Example: Hello World.
Html to Scala Converter can convert HTML strings to Laminar code.
Open Source Laminar Apps
Twotm8 – Twitter clone. See demo and also the detailed tutorial.
Laika-Laminar – converts Markdown and ReStructuredText to HTML using Laika. Demo
Hippo – web-based heap dump viewer.
Starter Kits & More Examples
Live examples on this website
keynmol/http4s-laminar-stack – Laminar setup with http4s, sttp, docker, and other niceties
sherpal/full-scala-scala-heroku – Laminar setup with Play & Heroku
keynmol/laminar-static-gh-pages – Template for publishing a static site with Laminar
keynmol/scalajs-tauri-example – Example of using Laminar with Tauri to build a Desktop application, similar to Electron
Quafadas/cask-laminar – Laminar with Cask setup, based on keynmol/http4s-laminar-stack
vic/laminar_cycle/examples – Examples of Cycle.js style apps in Laminar
raquo/laminar-examples – an old repo with some Laminar examples, most of which you can see on this website already.
Examples without Scalajs-bundler
sjrd/scalajs-sbt-vite-laminar-chartjs-example – Setup with Vite, Laminar and Chart.js (via ScalablyTyped)
lolgab/scala-fullstack – Laminar setup with Akka HTTP, Mill, Sloth
yurique/scala-js-laminar-starter.g8 – Laminar setup with Akka HTTP, Tailwind CSS, Waypoint, and a pure webpack config instead of scalajs-bundler
kitlangton/zio-app – Quickly create apps with ZIO and Laminar
yurique/laminar-vite2-example – Example of a Vite build for a Scala.js + Laminar + frontroute app.
yurique/laminar-snowpack-example - Laminar setup with Snowpack (instead of Webpack) and frontroute
Warning: Using ModuleKind.ESModule
(e.g when using Vite or Snowpack) results in bigger JS bundle sizes than usual because Scala.js is unable to use gcc in this case. Scala.js #3893
- keynmol/scalajs-tauri-example – Example of using Laminar with Tauri and Vite to build a Desktop application, similar to Electron
Addons & Extensions
Laminext – A collection of useful extensions, utilities and components for Laminar and Airstream
Waypoint – URL router for Laminar
frontroute – Alternative router for Laminar with API inspired by Akka HTTP
Formula – Derive functional, reactive, Laminar forms at compile-time with this type-safe, composable form combinator library
Laminar.cycle – Cycle.js dialogue abstraction in Laminar
purgecss-laminar-webpack-plugin – Removes unused CSS from your webpack bundle
Component Libraries
Or, easily make your own interfaces: runnable example
Tutorials, Videos & Blog Posts
My Four Year Quest For Perfect Scala.js UI Development – the history and ideological foundations of Laminar
[VIDEO] Laminar – Smooth UI Development with Scala.js – the why and the how of building with Laminar
[VIDEO] Stockholm Syndrome Escape Velocity – Kit Langton sets an impossible standard in conference talk delivery
[VIDEO] Deriving the Frontend – Form Combinator Fun with Scala.js
- See updated repo for safe management of Owner-s
Twotm8 – Building the Frontend walks you through creating a twitter clone in full stack Scala. The chapter on frontend explains how to use Laminar, implement routing with Waypoint, and styling with ScalaCSS. See also the source code and demo.
SoftwareMill's Hands-on Laminar article includes form validation, and integration with ScalaCSS and Monocle
Alvin Alexander's Laminar 101, 102, and 103 tutorials take you from setting up a static Laminar page to implementing a basic router.
Other Related Projects
Scala DOM Types – Type definitions that we use for all the HTML tags, attributes, properties, and styles
ew – Scala.js interfaces to native JavaScript data structures (such as arrays and maps) that offer sometimes significant performance advantages by sacrificing Scala semantics (such as structural equality of case classes).