# Why not raw RxJS?

RxJS can power any sync or async experience, and has a tremendous installation base, with more monthly installs than React and Angular combined. It is a great tool for building things - such as powering the Angular templating system. But, without a great interface to it—like Angular templates—its API and 'everything is a stream' philosophy is just not easy to learn or remember.

People who work with RxJS routinely surface the same kinds of questions:

* What operator do I use to do X?
* When do I subscribe?
* What do I do with my subscription objects?
* What is the different between mergeMap and exhaustMap? Is flatMap still a thing?
* How do i decompose an app into units that RxJS can work with

> **RxFx:&#x20;*****RxJS The Good Parts™️***

Sure you could do the RxJS thing of modeling the entire app as one stream with many operators in its pipe, and call `subscribe()` on a single object... But I think it's cleaner, more decoupled, and more like the Actor model, if listeners can be in separate files, and only indirectly connected via pub-sub messages. Imagine growing an application strictly by adding new files, hardly ever re-opening files, since each new piece of logic can be a new agent processing the event stream. It's really quite an elegant architecture!\
\
In RxFx, the most commonly used RxJS concepts are available in a simpler API that looks like returning Promises or Observables from Event Listeners. Each listener can be put into a different concurrency mode — via .listenBlocking for example.\
\
This all allows you to bring the power of RxJS into a particular corner of your application, or structure your whole application as services/listeners. Either way, you don't need to model any part of your application as a single stream, saving the refactoring time.

Now, let's see how building apps with RxFx compares to raw RxJS with a few examples:


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://rxfx.gitbook.io/docs/why-observables-not-just-promises/why-not-raw-rxjs.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
