Marble.js - functional reactive HTTP middleware framework built on top of Node.js platform, TypeScript and RxJS library.
Clone or download
Latest commit 978d147 Nov 5, 2018

README.md

Marble.js logo

Travis-CI status npm version Codecov coverage Maintained with lerna

Functional reactive HTTP middleware framework built on top of Node.js platform, TypeScript and RxJS library.

Philosophy

If you don't have any experience with functional reactive programming, we strongly recommend to gain some basic overview first with ReactiveX intro or with The introduction to Reactive Programming you've been missing written by @andrestaltz.

If we think closely how typical HTTP API works we can quickly recognize that it deals with streams of asynchronous events also called as HTTP requests. Describing it very briefly - typically each request needs to be transformed into response that goes back to the client (which is our event initiator) using custom middlewares or designated endpoints. In reactive programming world, all those core concepts we can translate into very simple marble diagram:

Marble.js core concept

In this world everything is a stream. The core concept of Marble.js is based on the event flow of marble diagrams which are used to visually express time based behavior of HTTP streams. Ok, but why the heck we need those observables? Trends come and go, but asynchronously nature of JavaScript and Node.js platform constantly evolves. With reactive manner we can deliver complex features faster by providing the ability to compose complex tasks with ease and with less amount of code. If you have ever worked with libraries like Redux Observable, @ngrx/effects or other libraries that leverages functional reactive paradigm, you will feel like at home. Still there? So lets get started!

Documentation

For the latest updates, documentation, change log, and release information visit marblejs.com and follow @marble_js on Twitter.

Examples

To view the example project structure, visit the example repository.

Contributing

We strongly believe that open source is all about the people. Thats why we are looking for brave passionates of RxJS and Node.js who can help us with creating new middlewares for Marble.js. There are many things that you can help us with! We've got a list of middlewares that we would like to see in future releases, but we are open for new cool ideas!

So, how can I contribute to Marble.js middlewares? 🤔

  • Read the CONTRIBUTING guideance first!
  • We use monorepo architecture for entire framework-related packages - each middleware resides in main Marble.js repository
  • For reference code structure just look at example middleware implementation.
  • Each middleware package should follow the naming convention: @marblejs/middleware-{example_name}
  • If you have an idea and would like to contribute, just open an issue and describe the middelware idea that you would like to work on. We'll discuss the internals and proposed features there.
  • Open a Pull Request and... 🚀

Authors

Józef Flakus

contact: hello@jflakus.com

twitter: @jozflakus

Contributors

Sebastian Musial

Patryk Domałeczny

Lúcio Rubens

Krzysztof Miemiec

License

marble.js is MIT licensed