front: A reactive frontend web framework

[ bsd3, library, web ] [ Propose Tags ]

A reactive frontend web framework. See haskell-front.org for more details.


[Skip to Readme]
Versions [faq] 0.0.0.1, 0.0.0.2
Change log ChangeLog.md
Dependencies aeson, async, base (<5), base-compat (>=0.9.1), base64-bytestring, blaze-html (==0.9.*), blaze-markup (>=0.8 && <0.10), bytestring (==0.10.*), cereal (>=0.5), conduit, cryptonite (>=0.14), data-default, directory, exceptions, fay (>=0.24.0.2), fay-dom, fay-websockets, filepath, front, http-media, http-types (>=0.9), mtl, random, servant (>=0.5), servant-auth-cookie, servant-blaze (>=0.5), servant-server (>=0.5), stm, stm-lifted, text (==1.2.*), time, transformers (>=0.4), unordered-containers, wai (>=3.0), wai-websockets, warp (>=3.0), websockets, yesod-core, yesod-static, yesod-websockets [details]
License BSD-3-Clause
Author Andrey Prokopenko
Maintainer persiantiger@yandex.ru
Category Web
Home page haskell-front.org
Source repo head: git clone https://github.com/swamp-agr/front.git
Uploaded by swamp_agr at Mon Apr 22 23:14:01 UTC 2019
Distributions NixOS:0.0.0.2
Executables todo-yesod-example, todo-servant-example
Downloads 257 total (45 in the last 30 days)
Rating (no votes yet) [estimated by rule of succession]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs uploaded by user [build log]
All reported builds failed as of 2019-04-22 [all 2 reports]

Modules

[Index] [Quick Jump]

Flags

NameDescriptionDefaultType
examples

Builds front's examples

DisabledAutomatic

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info

Downloads

Maintainer's Corner

For package maintainers and hackage trustees


Readme for front-0.0.0.2

[back to package description]

front (work-in-progress)

A front-end web framework which aim is to bring the power of GHC on client side with as less JavaScript as possible by the Fay.

The goal is to have a tiny websockets-based bridge between client and server to propagate client events on server for further handling.

Features

  • Server-side rendering.
  • both SPA and regular webapp (sharing state across multiple routes).
  • Several communication models (single session, broadcast, etc.).
  • Virtual DOM with full/partial rendering.
  • "blaze-html" like extended markup tree for handling both DOM and JS events.

Usage

  1. Add front as a dependency to your project using preferred build tool.
  2. Obtain bundle.js by
curl https://raw.githubusercontent.com/swamp-agr/front/master/examples/todo/static/bundle.js

and include it as static resource in your application server.

  1. Import Shared module.
  2. Choose proper communication model (Only session, Broadcast, etc.).
  3. That's it.

Examples

  • TODO

    • Installation with Stack (servant-auth-cookie should be fixed to allow build with cabal):
    stack install --flag="front:examples"
    
    • usage:
    cd examples/todo
    # for servant-based:
    todo-servant-example
    # for yesod-based:
    todo-yesod-example
    # open web browser:
    open http://localhost:3000
    

Developer Installation (Contribution)

For server:

cabal new-build

or

stack build

For client (issue: faylang/fay#459):

cabal sandbox init
cabal install # fay executable and libraries will be loaded
export HASKELL_PACKAGE_SANDBOX=`echo .cabal-sandbox/*-packages.conf.d/`
.cabal-sandbox/bin/fay \
  --package fay-dom,fay-websockets \
  --include shared,fay \
  -o bundle.js fay/Client.hs

Please do not hesitate to open Issue to discuss your questions or use cases.

Acknowledgement

This ongoing framework would not have happened without these people and technologies:

  • @5HT for inspiration by N2O framework. The idea of transfer both data and events over websockets.
  • @jaspervdj for blaze-html.
  • @meiersi for blaze-react and the approach how to handle events in the same markup with html.
  • @snoyberg for yesod-fay and the way how to embed generated assert into server and to trigger dependent Fay compilation from Haskell code.
  • @bergmark for Fay compiler.