{"id":19308471,"url":"https://github.com/marblejs/docs","last_synced_at":"2026-07-04T02:30:16.851Z","repository":{"id":39794700,"uuid":"183896940","full_name":"marblejs/docs","owner":"marblejs","description":"GitBook documentation source code","archived":false,"fork":false,"pushed_at":"2024-04-09T15:47:52.000Z","size":9658,"stargazers_count":15,"open_issues_count":2,"forks_count":22,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-01-06T01:28:31.106Z","etag":null,"topics":["docs","gitbook","marblejs"],"latest_commit_sha":null,"homepage":"https://docs.marblejs.com","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/marblejs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-04-28T11:04:05.000Z","updated_at":"2022-12-17T09:01:47.000Z","dependencies_parsed_at":"2024-04-09T17:05:23.718Z","dependency_job_id":null,"html_url":"https://github.com/marblejs/docs","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marblejs%2Fdocs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marblejs%2Fdocs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marblejs%2Fdocs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marblejs%2Fdocs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marblejs","download_url":"https://codeload.github.com/marblejs/docs/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240409852,"owners_count":19796797,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docs","gitbook","marblejs"],"created_at":"2024-11-10T00:14:58.464Z","updated_at":"2026-07-04T02:30:16.801Z","avatar_url":"https://github.com/marblejs.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"---\ndescription: \u003e-\n  Marble.js is a functional reactive Node.js framework for building server-side\n  applications, based on TypeScript and RxJS.\n---\n\n# Marble.js\n\n![](.gitbook/assets/wallpaper.jpg)\n\n## Philosophy\n\nThe core concept of **Marble.js** assumes that almost everything is a stream. The main building block of the whole framework is an Effect, which is just a function that returns a stream of events. With the big popularity of [RxJS](http://rxjs.dev) Observable, you can create a referential transparent program specification made up of functions that may produce side effects like network, logging, database access, etc. Using its monadic nature we can map I/O operations over effects and flat them to bring in other sequences of operations. RxJS is used as a hammer for expressing asynchronous flow with monadic manner.\n\n![](.gitbook/assets/effect.jpg)\n\nMarble.js doesn't operate only over basic [HTTP](http/effects.md) protocol but can be used also for general MDA \\(Message-Driven Architecture\\) solutions, including [WebSocket](messaging/websockets.md), [microservices](messaging/microservices/) or [CQRS](messaging/cqrs.md), where the multi-event nature fits best. Don't be scared of the complexity and abstractions — Marble.js framework, in general, is incredibly simple. For more details about its specifics, please visit the next chapters that will guide you through the framework environment and implementation details.\n\n\u003e _For those who are curious about the framework name - it comes from a popular way of visually expressing the time-based behavior of event streams, aka marble diagrams. This kind of domain-specific language is a popular way of testing asynchronous streams, especially in RxJS environments._\n\n{% hint style=\"success\" %}\n👉 If you have ever worked with libraries like [Redux Observable](https://redux-observable.js.org), [@ngrx/effects](https://github.com/ngrx/platform/blob/master/docs/effects/README.md) or other libraries that leverage functional reactive paradigm, you will feel at home.\n{% endhint %}\n\n{% hint style=\"info\" %}\n👉 If you don't have any experience with functional reactive programming, we strongly recommend to gain some basic overview first with [ReactiveX intro](http://reactivex.io/intro.html) or with [The introduction to Reactive Programming you've been missing](https://gist.github.com/staltz/868e7e9bc2a7b8c1f754) written by [@andrestaltz](https://twitter.com/andrestaltz).\n{% endhint %}\n\n## Previous articles\n\n{% embed url=\"https://medium.com/@jflakus/announcing-marble-js-3-0-a-marbellous-evolution-ba9cdc91d591\" caption=\"\" %}\n\n{% embed url=\"https://medium.com/@jflakus/marble-2-reactive-better-functional-stronger-5924119d3098\" caption=\"\" %}\n\n{% embed url=\"https://medium.com/@jflakus/marble-js-when-node-js-meets-rxjs-da2764b7ca9b\" caption=\"\" %}\n\n## Examples\n\nIf you would like to get a quick glimpse of a simple RESTful API built with Marble.js, visit the following link:\n\n{% page-ref page=\"other/how-does-it-glue-together.md\" %}\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarblejs%2Fdocs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarblejs%2Fdocs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarblejs%2Fdocs/lists"}