Skip to content
This repository was archived by the owner on Dec 17, 2025. It is now read-only.

jwstegemann/fritz2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Important

This repository is no longer actively maintained! The official fritz2-framework's development has been moved to a dedicated organization and therefore a new repository: https://www.github.com/fritztwo/fritz2

Read more about the reasons for this change, some dedicated words form the original project creator and some outlook to the future developments in this blog article.

fritz2

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 {
            value(model.data)
            changes.values() handledBy model.update 
        }
        p {
            +"model value = "
            model.data.renderText()
        }
    }
}

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

Inspiration

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!

About

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

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Contributors 27