# reactivex/rxjava architecture

> Architecture diagram of the GitHub repository reactivex/rxjava, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-09). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/reactivex/rxjava
- Repository: https://github.com/reactivex/rxjava

## Overview

RxJava is a JVM reactive-programming library for composing asynchronous and event-based sequences. Users assemble a flow from a source and operators, subscribe a consumer, then receive items or terminal signals; Flowable adds backpressure, while Streamable provides blocking handoff and natural backpressure. The graph preserves the documented flow types, scheduling, parallel processing, replay, and plugin hooks. Relationships are limited to the README’s workflow statements and explicit source references; unsampled implementations are represented only where the tree supports their paths.

Main entry points: [`src/main/java/io/reactivex/rxjava4/internal/operators`](https://github.com/reactivex/rxjava/tree/4.x/src/main/java/io/reactivex/rxjava4/internal/operators) (Operator Implementations), [`src/main/java/io/reactivex/rxjava4/core/Flowable.java`](https://github.com/reactivex/rxjava/blob/4.x/src/main/java/io/reactivex/rxjava4/core/Flowable.java) (Flowable), [`src/main/java/io/reactivex/rxjava4/plugins/RxJavaPlugins.java`](https://github.com/reactivex/rxjava/blob/4.x/src/main/java/io/reactivex/rxjava4/plugins/RxJavaPlugins.java) (Global Hooks), [`src/main/java/io/reactivex/rxjava4/core/Maybe.java`](https://github.com/reactivex/rxjava/blob/4.x/src/main/java/io/reactivex/rxjava4/core/Maybe.java) (Maybe)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["Flow APIs"]
  node_flowable["Flowable<br/>[Flowable.java]"]
  node_observable["Observable<br/>[Observable.java]"]
  node_single["Single<br/>[Single.java]"]
  node_maybe["Maybe<br/>[Maybe.java]"]
  node_completable["Completable<br/>[Completable.java]"]
  node_streamable["Streamable<br/>[Streamable.java]"]
  node_operators["Operator Implementations"]
end

subgraph group_execution["Execution and Flow Control"]
  node_scheduler_api["Scheduler API<br/>[Scheduler.java]"]
  node_schedulers["Scheduler Factory<br/>[Schedulers.java]"]
  node_parallel["Parallel Flows"]
end

subgraph group_state["Replay and Hooks"]
  node_replay_processor["Replay Processor"]
  node_replay_subject["Replay Subject<br/>[ReplaySubject.java]"]
  node_plugins["Global Hooks<br/>[RxJavaPlugins.java]"]
end

subgraph group_internals["Shared Runtime"]
  node_disposable["Disposal<br/>[Disposable.java]"]
  node_functions["Callback Helpers<br/>[Functions.java]"]
  node_exceptions["Composite Errors"]
  node_scheduler_support["Scheduler Metadata"]
end

node_developer(("Application Developer"))
node_consumer(("Subscriber / Consumer"))

node_developer -->|"assembles flow"| node_flowable
node_developer -->|"assembles flow"| node_observable
node_developer -->|"assembles flow"| node_single
node_developer -->|"assembles flow"| node_maybe
node_developer -->|"assembles flow"| node_completable
node_developer -->|"assembles flow"| node_streamable
node_flowable -->|"composes with"| node_operators
node_observable -->|"composes with"| node_operators
node_single -->|"composes with"| node_operators
node_maybe -->|"composes with"| node_operators
node_completable -->|"composes with"| node_operators
node_streamable -->|"hands off items"| node_consumer
node_operators -->|"delivers signals"| node_consumer
node_flowable -->|"subscribes to"| node_consumer
node_flowable -.->|"supports parallel"| node_parallel
node_developer -->|"selects scheduler"| node_schedulers
node_schedulers -->|"provides schedulers"| node_scheduler_api
node_scheduler_api -->|"decorates tasks"| node_plugins
node_flowable -->|"assembly hooks"| node_plugins
node_replay_processor -->|"uses hooks"| node_plugins
node_maybe -->|"assembly hooks"| node_plugins
node_completable -->|"assembly hooks"| node_plugins
node_disposable -->|"uses helpers"| node_functions

click node_flowable "https://github.com/reactivex/rxjava/blob/4.x/src/main/java/io/reactivex/rxjava4/core/Flowable.java"
click node_observable "https://github.com/reactivex/rxjava/blob/4.x/src/main/java/io/reactivex/rxjava4/core/Observable.java"
click node_single "https://github.com/reactivex/rxjava/blob/4.x/src/main/java/io/reactivex/rxjava4/core/Single.java"
click node_maybe "https://github.com/reactivex/rxjava/blob/4.x/src/main/java/io/reactivex/rxjava4/core/Maybe.java"
click node_completable "https://github.com/reactivex/rxjava/blob/4.x/src/main/java/io/reactivex/rxjava4/core/Completable.java"
click node_streamable "https://github.com/reactivex/rxjava/blob/4.x/src/main/java/io/reactivex/rxjava4/core/Streamable.java"
click node_operators "https://github.com/reactivex/rxjava/tree/4.x/src/main/java/io/reactivex/rxjava4/internal/operators"
click node_scheduler_api "https://github.com/reactivex/rxjava/blob/4.x/src/main/java/io/reactivex/rxjava4/core/Scheduler.java"
click node_schedulers "https://github.com/reactivex/rxjava/blob/4.x/src/main/java/io/reactivex/rxjava4/schedulers/Schedulers.java"
click node_parallel "https://github.com/reactivex/rxjava/blob/4.x/src/main/java/io/reactivex/rxjava4/parallel/ParallelFlowable.java"
click node_replay_processor "https://github.com/reactivex/rxjava/blob/4.x/src/main/java/io/reactivex/rxjava4/processors/ReplayProcessor.java"
click node_replay_subject "https://github.com/reactivex/rxjava/blob/4.x/src/main/java/io/reactivex/rxjava4/subjects/ReplaySubject.java"
click node_plugins "https://github.com/reactivex/rxjava/blob/4.x/src/main/java/io/reactivex/rxjava4/plugins/RxJavaPlugins.java"
click node_disposable "https://github.com/reactivex/rxjava/blob/4.x/src/main/java/io/reactivex/rxjava4/disposables/Disposable.java"
click node_functions "https://github.com/reactivex/rxjava/blob/4.x/src/main/java/io/reactivex/rxjava4/internal/functions/Functions.java"
click node_exceptions "https://github.com/reactivex/rxjava/blob/4.x/src/main/java/io/reactivex/rxjava4/exceptions/CompositeException.java"
click node_scheduler_support "https://github.com/reactivex/rxjava/blob/4.x/src/main/java/io/reactivex/rxjava4/annotations/SchedulerSupport.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_flowable,node_observable,node_single,node_maybe,node_completable,node_streamable,node_operators toneBlue
class node_scheduler_api,node_schedulers,node_parallel toneAmber
class node_replay_processor,node_replay_subject,node_plugins toneMint
class node_disposable,node_functions,node_exceptions,node_scheduler_support toneRose
class node_developer,node_consumer toneIndigo
```

## Components

### Flow APIs

- [Flowable](https://github.com/reactivex/rxjava/blob/4.x/src/main/java/io/reactivex/rxjava4/core/Flowable.java): `src/main/java/io/reactivex/rxjava4/core/Flowable.java`
- [Observable](https://github.com/reactivex/rxjava/blob/4.x/src/main/java/io/reactivex/rxjava4/core/Observable.java): `src/main/java/io/reactivex/rxjava4/core/Observable.java`
- [Single](https://github.com/reactivex/rxjava/blob/4.x/src/main/java/io/reactivex/rxjava4/core/Single.java): `src/main/java/io/reactivex/rxjava4/core/Single.java`
- [Maybe](https://github.com/reactivex/rxjava/blob/4.x/src/main/java/io/reactivex/rxjava4/core/Maybe.java): `src/main/java/io/reactivex/rxjava4/core/Maybe.java`
- [Completable](https://github.com/reactivex/rxjava/blob/4.x/src/main/java/io/reactivex/rxjava4/core/Completable.java): `src/main/java/io/reactivex/rxjava4/core/Completable.java`
- [Streamable](https://github.com/reactivex/rxjava/blob/4.x/src/main/java/io/reactivex/rxjava4/core/Streamable.java): `src/main/java/io/reactivex/rxjava4/core/Streamable.java`
- [Operator Implementations](https://github.com/reactivex/rxjava/tree/4.x/src/main/java/io/reactivex/rxjava4/internal/operators): `src/main/java/io/reactivex/rxjava4/internal/operators`

### Execution and Flow Control

- [Scheduler API](https://github.com/reactivex/rxjava/blob/4.x/src/main/java/io/reactivex/rxjava4/core/Scheduler.java): `src/main/java/io/reactivex/rxjava4/core/Scheduler.java`
- [Scheduler Factory](https://github.com/reactivex/rxjava/blob/4.x/src/main/java/io/reactivex/rxjava4/schedulers/Schedulers.java): `src/main/java/io/reactivex/rxjava4/schedulers/Schedulers.java`
- [Parallel Flows](https://github.com/reactivex/rxjava/blob/4.x/src/main/java/io/reactivex/rxjava4/parallel/ParallelFlowable.java): `src/main/java/io/reactivex/rxjava4/parallel/ParallelFlowable.java`

### Replay and Hooks

- [Replay Processor](https://github.com/reactivex/rxjava/blob/4.x/src/main/java/io/reactivex/rxjava4/processors/ReplayProcessor.java): `src/main/java/io/reactivex/rxjava4/processors/ReplayProcessor.java`
- [Replay Subject](https://github.com/reactivex/rxjava/blob/4.x/src/main/java/io/reactivex/rxjava4/subjects/ReplaySubject.java): `src/main/java/io/reactivex/rxjava4/subjects/ReplaySubject.java`
- [Global Hooks](https://github.com/reactivex/rxjava/blob/4.x/src/main/java/io/reactivex/rxjava4/plugins/RxJavaPlugins.java): `src/main/java/io/reactivex/rxjava4/plugins/RxJavaPlugins.java`

### Shared Runtime

- [Disposal](https://github.com/reactivex/rxjava/blob/4.x/src/main/java/io/reactivex/rxjava4/disposables/Disposable.java): `src/main/java/io/reactivex/rxjava4/disposables/Disposable.java`
- [Callback Helpers](https://github.com/reactivex/rxjava/blob/4.x/src/main/java/io/reactivex/rxjava4/internal/functions/Functions.java): `src/main/java/io/reactivex/rxjava4/internal/functions/Functions.java`
- [Composite Errors](https://github.com/reactivex/rxjava/blob/4.x/src/main/java/io/reactivex/rxjava4/exceptions/CompositeException.java): `src/main/java/io/reactivex/rxjava4/exceptions/CompositeException.java`
- [Scheduler Metadata](https://github.com/reactivex/rxjava/blob/4.x/src/main/java/io/reactivex/rxjava4/annotations/SchedulerSupport.java): `src/main/java/io/reactivex/rxjava4/annotations/SchedulerSupport.java`

### Other components

- **Application Developer**
- **Subscriber / Consumer**

## Connections

- Application Developer → Flowable: assembles flow (evidence: `README.md`)
- Application Developer → Observable: assembles flow (evidence: `README.md`)
- Application Developer → Single: assembles flow (evidence: `README.md`)
- Application Developer → Maybe: assembles flow (evidence: `README.md`)
- Application Developer → Completable: assembles flow (evidence: `README.md`)
- Application Developer → Streamable: assembles flow (evidence: `README.md`)
- Flowable → Operator Implementations: composes with (evidence: `README.md`)
- Observable → Operator Implementations: composes with (evidence: `README.md`)
- Single → Operator Implementations: composes with (evidence: `README.md`)
- Maybe → Operator Implementations: composes with (evidence: `README.md`)
- Completable → Operator Implementations: composes with (evidence: `README.md`)
- Streamable → Subscriber / Consumer: hands off items (evidence: `README.md`)
- Operator Implementations → Subscriber / Consumer: delivers signals (evidence: `README.md`)
- Flowable → Subscriber / Consumer: subscribes to (evidence: `README.md`)
- Flowable → Parallel Flows: supports parallel (evidence: `src/main/java/io/reactivex/rxjava4/parallel/ParallelFlowable.java`)
- Application Developer → Scheduler Factory: selects scheduler (evidence: `README.md`)
- Scheduler Factory → Scheduler API: provides schedulers (evidence: `src/main/java/io/reactivex/rxjava4/schedulers/Schedulers.java`)
- Scheduler API → Global Hooks: decorates tasks (evidence: `src/main/java/io/reactivex/rxjava4/core/Scheduler.java`)
- Flowable → Global Hooks: assembly hooks (evidence: `src/main/java/io/reactivex/rxjava4/plugins/RxJavaPlugins.java`)
- Replay Processor → Global Hooks: uses hooks (evidence: `src/main/java/io/reactivex/rxjava4/processors/ReplayProcessor.java`)
- Maybe → Global Hooks: assembly hooks (evidence: `src/main/java/io/reactivex/rxjava4/core/Maybe.java`)
- Completable → Global Hooks: assembly hooks (evidence: `src/main/java/io/reactivex/rxjava4/core/Completable.java`)
- Disposal → Callback Helpers: uses helpers (evidence: `src/main/java/io/reactivex/rxjava4/disposables/Disposable.java`)
