Skip to content

Easily build reactive web-apps in Kotlin based on flows and coroutines.


Notifications You must be signed in to change notification settings


Repository files navigation


Actions Status Awesome Kotlin Badge Download IR Examples API Docs Slack chat

fritz2 is an extremely lightweight, well-performing, independent library for building reactive web apps in Kotlin, heavily depending on coroutines and flows.

fritz2 includes an intuitive way to build and render HTML elements using a type-safe dsl. You can easily create lightweight reactive HTML components which are bound to an underlying model and automatically change whenever the model data changes:

render {
    val model = storeOf("init value")
    div("some-css-class") {
        input {
            changes.values() handledBy model.update 
        p {
            +"model value = "

fritz2 implements precise data binding. This means that when parts of your data model change, exactly those and only those DOM-nodes depending on the changed parts will automatically change as well. No intermediate layer (like a virtual DOM) is needed. fritz2 requires no additional methods to decide which parts of your component have to be re-rendered. fritz2 also supports two-way data binding out-of-the-box to update your model by listening on events:

State management in fritz2

Utilizing Kotlin's multiplatform-abilities, you'll write the code of your data classes only once and use it on your client and server (i.e. in a SpringBoot- or Ktor-Backend). This is also true for your model-validation-code, which can quickly become far more complex than your data model.

Key Features

  • easy reactive one- and two-way data binding (even for lists and deep nested structures)
  • hassle-free state-handling
  • model-validation and message handling
  • http and websockets
  • hash-based routing
  • history / undo
  • processing state ("spinning wheel")
  • webcomponents
  • easy to learn
  • documentation
  • examples i.e. implementing the specification of TodoMVC

How to try it?

Overall Goals

  • staying lightweight
  • keeping dependencies as low as possible
  • providing tags, attributes, events for HTML from specification (w3c, mozilla, ...)
  • making it as easy as possible to write reactive web-apps in pure kotlin


fritz2 is hugely inspired by the great Binding.scala framework. Later we discovered that a lot of those concepts are described independently in Meiosis. Also, fritz2 relies heavily on the great Kotlin coroutines library.

Leave us a star...

If you like the idea of a lightweight pure Kotlin implementation for building reactive web-apps, please give us a star. Thank you!