packages feed

front-0.0.0.2: README.md

# 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. 

3. Import `Shared` module.
4. Choose proper communication model (Only session, Broadcast, etc.).
5. 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.