Skip to content

jwstegemann/fritz2

master
Switch branches/tags
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
www
 
 
 
 
 
 
 
 
 
 
 
 

fritz2

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

fritz2 is an extremely lightweight, well-performing, independent library to build 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 that are bound to an underlying model and automatically change whenever the model data changes:

val model = storeOf("init value")

render {
    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")
  • backend-repositories (Rest APIs, WebSockets, LocalStorage, etc.)
  • 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, ...)
  • make 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!