Ferp is the easiest, functional-reactive, zero dependency javascript app framework for nodejs and modern browsers.
- Presentation Agnostic - Tie this into your favorite front-end libraries like React and Vue, or commandline tasks like an interactive prompt or sever.
- Functional+Reactive - Makes it easy to test, control side effects, and keep things immutable.
- Simple - Everything is standard javascript, there is no misdirection or magic.
- A vdom implementation - You have to provide your own presentation layer. But the good news is, you can basically pick any one you want.
- A new language - This isn't like Elm, in the sense of the language. You can always bring this into typescript, but I don't plan on supporting any other languages out of the box.
Like any great idea, it's based on other (much smarter) people's work, namely:
- Evan Czaplicki's Elm, the language that made me see the power of the
dark sidefunctional reactive programming. - Jorge Bucaran's hyperapp, a tiny but powerful functional front-end framework.
npm install --save ferp
Or grab it from unpkg
<script src="https://unpkg.com/ferp"></script>
<script>
const { ferp } = window;
</script>
// es6
import { app, effects } from 'ferp';
// unpkg
import { app, effects } from 'https://unpkg.com/ferp?module=1';
// from a script tag
// <script src="https://unpkg.com/ferp"></script>
const { app, effects } = window.ferp;
// es5/node
const { app, effects } = require('ferp');
See this handy migration guide!
Here's an app that infinitely adds a counter, and logs it.
const ferp = require('ferp');
const initialState = 0;
const incrementAction = (state) => [state + 1, ferp.effects.act(incrementAction)];
ferp.app({
init: [initialState, ferp.effects.act(incrementAction)],
});
Every app needs an init
tuple, with the initial state, and initial side effect (or ferp.effects.none()
if there isn't one).
There is also a subscribe
method for managing long-term side-effects, like intervals or websocket communication, and observe
to watch for application changes.
You can read more about setting up an application here in the docs.
- Testing Guide
- Testing Reference
- The (git) book
- Some examples (their dependencies may occasionally be outdated)
- Open an issue, we're happy to answer any of your questions, or investigate how to fix a bug.
- Chat with us on gitter, we'll try to be quick to respond.