Skip to content

hyperstart/frapp

Repository files navigation

Frapp

npm Travis CI Codecov gzip size

Frapp is a tiny front-end framework that allows to write web applications a as set of indepented modules that get composed in interesting ways.

Design goals & principles:

  • fully featured: VDOM, state management, routing, immutability helpers
  • Opinioniated architecture, half way between functional programming and OOP
  • Simple, no magic
  • Easy & fast to learn
  • Tiny size

Each module manages its own state and exposes an public interface for other modules to call.

Modules are simple javascript objects containing:

  • state: primitive types or arrays
  • functions that operate on this state, referred as methods
  • other modules

Basic example:

import { frapp, h } from "frapp" frapp({ /** State */ name: "World", /** Methods */ /**  * frapp() inject (app, update) for you, so that this method becomes (event) => { ... } when accessed by other methods.  * This process is refered as "wiring" in other parts of the documentation.  *   * app always contains the latest state as well as all the wired methods.  * update() takes an updated value and applies it to the current module (it may update state, methods or even modules!).  *   * In this case, the name is updated with the value of the input.  */ setName: (app, update) => event => update({ name: event.target.value }) /**  * This is just another method, frapp() expects the root module to have a View() method that  * returns the content of the view.  * Note the callback: onchange={app.setName} refers to the "injected"   */ View: (app) => { return ( <h1>Hello {app.name}!</h1> Name: <input type="text" value={app.name} onchange={app.setName}> ) } })

License

Frapp is licensed as MIT. See LICENSE

About

Tiny fractal app framework written in typescript

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published