Skip to content
Marble.js - functional reactive HTTP framework built on top of Node.js platform, TypeScript and RxJS library.
TypeScript JavaScript Other
Branch: master
Clone or download
Pull request Compare This branch is 511 commits behind marblejs:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

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.


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!


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


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


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


Józef Flakus


twitter: @jozflakus


Sebastian Musial

Patryk Domałeczny

Lúcio Rubens

Krzysztof Miemiec


marble.js is MIT licensed

You can’t perform that action at this time.