Fact-checked by Grok 2 weeks ago

ReactiveX

ReactiveX is a programming paradigm and library specification for composing asynchronous and event-based programs using observable sequences, extending the observer pattern to support data and event streams over time. It provides a declarative approach to handling sequences of events through operators that enable filtering, transforming, and combining streams, while abstracting concerns like concurrency, synchronization, and error handling. Originating from the Reactive Extensions (Rx) project at in 2008, ReactiveX evolved from efforts in the Cloud Programmability team to address challenges in cloud-based asynchronous programming, building on concepts from and the . Unlike (FRP), which focuses on continuous values, ReactiveX deals with discrete events emitted asynchronously, making it suitable for real-world applications like user interfaces, networking, and . The core abstraction is the , which represents a push-based collection of future values or events that an Observer can subscribe to, allowing for flexible handling of single items, finite sequences, or infinite streams across various concurrency models such as thread pools or event loops. ReactiveX has been implemented as open-source libraries in over a dozen programming languages, each tailored to the language's idioms, including for and , for , for C#, for , and for , among others. These implementations share a common set of operators—such as map, filter, merge, and debounce—for composing observables, promoting code reusability and predictability in reactive systems. Widely adopted in industry, ReactiveX powers applications at companies like and , with alone downloaded over 150 million times, underscoring its impact on modern asynchronous programming.

Introduction

Definition and Principles

ReactiveX is an specification for composing asynchronous programs using observable sequences, which serve as the central for representing of and events. It extends the traditional Observer —originally designed for handling single events—into a more versatile model that supports sequences of multiple items, enabling reactive handling of asynchronous flows. This approach allows developers to build complex, event-driven applications by treating as first-class citizens, much like collections in synchronous programming. At its core, ReactiveX adheres to several foundational principles that emphasize , , and the unification of models. Composability is achieved through a suite of functional operators that allow sequences to be transformed, filtered, and combined in a modular fashion, promoting reusable and maintainable code without imperative loops or callbacks. The declarative style shifts focus from specifying "how" to process streams (e.g., via explicit threading) to defining "what" the desired outcome should be, abstracting away low-level concurrency concerns. Additionally, ReactiveX unifies the push-based model of pattern with the pull-based model of the , bridging asynchronous event emission with synchronous sequence consumption to handle both real-time events and batched data seamlessly. ReactiveX further integrates principles from by applying higher-order functions for sequence transformations, extending pattern for event handling, and the for data sequences, thereby creating a cohesive for asynchronous composition.

Scope and Implementations

ReactiveX serves as a cross-language specification for , featuring independent open-source implementations tailored to various programming languages and platforms. These implementations adhere to core ReactiveX principles while adapting to language-specific idioms, enabling developers to build asynchronous and event-driven applications across diverse ecosystems. Major libraries include RxJava for , Scala, and Android development; RxJS for and TypeScript in web and Node.js environments; Rx.NET for C# and the .NET ; RxSwift for on iOS, macOS, and other Apple platforms (with RxCocoa providing Cocoa-specific extensions); RxPY for ; and RxKotlin for Kotlin, which builds on RxJava with idiomatic extensions. Most ReactiveX implementations are released under permissive open-source licenses, such as Apache License 2.0 for RxJava, RxJS, RxKotlin, and Rx.NET, or for RxSwift, RxCocoa, and RxPY, which facilitate widespread adoption and community contributions without restrictive terms. Interoperability across implementations is achieved through shared patterns and abstractions, such as the as a core data stream primitive, allowing concepts and operator chains to be ported between languages with minimal adjustment. Language-specific adaptations enhance usability, for instance, RxJava's compatibility with Java Streams for seamless integration in JVM-based applications. The scope of ReactiveX has evolved from its origins in Rx.NET, initially focused on .NET ecosystems, to a broad, multi-platform framework supporting , , , and server-side development across numerous languages. This expansion has fostered an interconnected ecosystem where developers can apply reactive patterns consistently, regardless of the target environment.

Core Concepts

Observables

In ReactiveX, an is the fundamental unit representing a push-based collection that asynchronously emits zero or more items, errors, or a completion signal to one or more subscribers. This design enables by treating streams of data or events as first-class citizens, allowing for non-blocking and composable asynchronous operations across various programming languages and platforms. Unlike pull-based collections such as iterators, where consumers request items on demand, Observables push notifications to subscribers as they become available, supporting scenarios like real-time updates or network responses. Observables are distinguished by their subscription behavior into hot and cold types. A hot Observable begins emitting items as soon as it is created, regardless of subscribers, and shares the emission sequence among all observers that subscribe, even if they join mid-stream; this is ideal for scenarios such as live broadcasts or shared sources where subscribers receive only ongoing emissions. Conversely, a cold Observable remains dormant until an observer subscribes, at which point it generates and replays the entire sequence from the beginning for each independent subscriber; this suits or data flows, like HTTP requests or database queries, ensuring each consumer gets a fresh execution. Creation of Observables occurs through dedicated factory methods that adapt diverse data sources into the reactive model. For instance, just() produces an emitting a single item or a fixed set of items synchronously. The from() method converts existing structures such as arrays, iterables, , or futures into Observables, transforming synchronous or asynchronous sources into push-based streams—for example, from([1, 2, 3]) emits each array element sequentially. Custom Observables are built with create(), which allows developers to define emission logic manually by invoking observer methods within a subscriber-provided callback, offering fine-grained over asynchronous behaviors like handling. Event-based creation, such as from DOM events or timers, and promise integration further extend these methods to bridge imperative code with reactive paradigms. The emission lifecycle of an adheres to a strict , delivering notifications serially to ensure ordered processing. It may issue zero or more onNext notifications, each carrying an individual item to subscribers, representing the core data flow. Following these, the Observable terminates with exactly one of either an onError notification, which conveys a reason and prevents further emissions, or an onCompleted signal, indicating successful finalization without errors. This sequence—items optionally followed by error or completion—guarantees that subscribers receive a complete and predictable stream, with no interleaving of terminal states, and emissions halt irrevocably upon termination.

Observers and Subscriptions

In ReactiveX, the Observer interface defines the for consuming emissions from an , enabling reactive handling of asynchronous streams. It consists of three primary methods: onNext(item), which is invoked each time the emits a item; onError(throwable), which signals an error condition and terminates the stream with the provided exception; and onComplete(), which indicates successful completion of the stream without errors. These methods ensure that Observers react predictably to the sequence of zero or more items followed by a terminal event, adhering to the that prohibits further emissions after onError or onComplete. The Subscription serves as the binding contract between an Observable and an Observer, established through the subscribe method, which initiates the flow of emissions. Upon subscription, the Observable begins notifying the Observer via the defined methods, and the Subscription object returned allows for explicit management of this connection. In particular, the unsubscribe() or equivalent method (such as dispose() in some implementations) enables the Observer to cease receiving emissions, potentially halting upstream processing and releasing associated resources. This mechanism is crucial for preventing resource exhaustion in long-lived applications. ReactiveX incorporates the Disposable pattern to standardize subscription cleanup across implementations, treating Subscriptions as disposables that implement a disposal for deterministic . For instance, in RxJava, Subscriptions are represented as Disposable objects with a dispose() method, while other libraries like RxJS use Subscription with unsubscribe(). Composite disposables extend this pattern by allowing multiple Subscriptions to be grouped into a single container, which can be disposed collectively to simplify cleanup in complex scenarios involving multiple streams. This approach facilitates the use of language features like using blocks in .NET or try-with-resources in for automatic disposal. The lifecycle of a Subscription begins at the point of subscription, triggering emission flow from the , and progresses through active notification until termination via onComplete, onError, or explicit disposal. Disposal during the active phase interrupts emissions and mitigates risks such as memory leaks from retained references or ongoing computations, ensuring efficient resource utilization in reactive systems. Observers are not required to unsubscribe after terminal notifications, as the guarantees no further activity, but proactive disposal remains a for intermediate cancellation.

Operators

ReactiveX operators form the core functional toolkit for manipulating observable sequences, enabling developers to process asynchronous data streams in a declarative manner. Unlike , where code explicitly controls the flow of execution, ReactiveX operators define what transformations or operations should occur on data emissions without specifying how they are implemented, such as through side-effect-free functions that return new s. This approach promotes compositionality, allowing complex pipelines to be built by operators together, where each operator takes an as input and produces a new as output, preserving the reactive chain without mutating the original source. Operators in ReactiveX are broadly categorized into several types, each serving distinct purposes in stream manipulation. Creation operators generate new observables from various sources, such as converting existing data structures or producing timed emissions. For instance, the from operator transforms arrays, promises, or iterables into an observable sequence that emits items sequentially, while interval creates an observable that periodically emits incremental integers at a specified time delay, useful for tasks like polling or animations. Transformation operators modify the items emitted by an observable, often applying functions to reshape data. The map operator applies a projection function to each emitted item, transforming it into a new value—for example, converting strings to uppercase or extracting properties from objects—while producing a new observable with the modified emissions. In contrast, flatMap (also known as concatMap or switchMap in some variants) not only projects each item to a new observable but also flattens the resulting nested observables into a single stream, which is particularly effective for handling asynchronous operations like API calls within a stream. Filtering operators selectively emit items based on conditions, reducing noise in data streams. The filter operator includes only those emissions that satisfy a provided predicate function, such as emitting even numbers from a sequence of integers. For time-sensitive scenarios, debounce suppresses rapid successive emissions, only passing the most recent item after a specified time interval has elapsed without further emissions, which helps manage user inputs like search queries to avoid overwhelming backend services. Combination operators enable the integration of multiple observables into unified streams, facilitating reactive coordination. The merge operator interleaves emissions from several observables as they occur, regardless of timing, creating a combined sequence that preserves the original order within each source. Zip pairs emissions from multiple observables by index, applying a combining function only when all sources have emitted the corresponding item, ideal for synchronizing parallel data sources like user profiles and preferences. Meanwhile, combineLatest continuously combines the latest emissions from each observable using a function whenever any source emits, supporting real-time updates such as dashboard widgets that aggregate current values from various feeds. Utility operators provide supporting functionality for , , and lifecycle management without altering the primary data flow. The do operator (or tap in some implementations) allows side-effect actions, such as emissions or side computations, to be performed at various points in the observable's lifecycle without affecting the emitted items. For , retry automatically resubscribes to the source a specified number of times upon encountering an , enabling fault-tolerant streams like network requests that recover from transient failures. Operator chaining in ReactiveX leverages syntax, where operators are invoked sequentially on an instance to construct processing pipelines declaratively. This enhances readability and maintainability, as each step in the chain builds upon the previous , culminating in a subscription that triggers the entire flow— for example, creating an , its values, filtering results, and combining with another all in a single expression.

Reactive Programming Model

Data Flows and Chaining

In ReactiveX, data flows are constructed by chaining operators together, where each operator takes an as input and returns a new as output, enabling the composition of complex asynchronous streams in a fluent manner. This chaining allows developers to transform, , and combine data streams declaratively, building pipelines that process emissions sequentially from source to consumer. The execution of these chained flows follows a lazy evaluation model, meaning the operators do not activate until an observer subscribes to the final Observable in the chain. Upon subscription, the chain executes on demand, pulling data from upstream sources as needed and propagating emissions downstream through each operator in sequence. For instance, in a typical pipeline, an Observable created from an array—such as Observable.from([1, 2, 3, 4, 5])—can be chained with map to transform each value (e.g., doubling it) and filter to retain only those exceeding a threshold, before subscribing an observer to receive the results: Observable.from([1, 2, 3, 4, 5]).map(x -> x * 2).filter(x -> x > 3).subscribe(observer). This results in the observer receiving only the transformed values 8 and 10, demonstrating how data flows unidirectionally downstream during normal operation, with upstream sources responding to downstream demand. To enable sharing of a single data flow across multiple observers—avoiding redundant upstream computations—ReactiveX supports through mechanisms like . A acts as both an and an Observer, allowing it to multicast emissions from one source to multiple subscribers; for example, the publish operator internally uses a to convert an ordinary into a connectable one, where emissions are shared only after an explicit connect() call. This ensures efficient propagation for scenarios requiring fan-out, such as broadcasting events to multiple components, while maintaining the lazy chaining model.

Error Handling and Lifecycle

In ReactiveX, errors are propagated through the reactive stream via the onError notification from an , which immediately terminates the sequence and notifies all downstream Observers, preventing further emissions of data or completion signals. This design ensures that errors are treated as first-class events, allowing developers to handle exceptional conditions explicitly rather than letting them propagate silently. To recover from such errors without terminating the entire stream, operators like onErrorResumeNext or catchError (also known simply as catch) can be applied, which subscribe to an alternative upon receiving an onError signal, effectively resuming the flow with fallback data or behavior. Completion in ReactiveX occurs through the onComplete notification, which signals the successful end of the stream's normal data flow without any errors, after which no further events are emitted. For building resilience, the retry operator automatically resubscribes to the source a specified number of times upon an onError event, attempting to achieve error-free , while repeat restarts the sequence indefinitely or a set number of times after onComplete, useful for periodic or looped emissions. These mechanisms promote fault-tolerant designs by enabling automatic recovery or repetition without manual intervention in the observer logic. Lifecycle management in ReactiveX emphasizes resource cleanup to prevent leaks, achieved through disposables (or subscriptions in some implementations) that can be disposed upon onError or onComplete signals, ensuring associated resources like timers, connections, or threads are released promptly. The using operator facilitates this by pairing an Observable with a resource factory and a disposal action, automatically invoking cleanup when the stream terminates via error or completion. Best practices for error handling include using operators like doOnError (part of the do family) to perform side effects such as or without altering the error propagation or breaking the chain, allowing errors to continue downstream for further handling if needed. This approach maintains observability while preserving the stream's integrity, and it is recommended to combine it with recovery operators for robust applications.

Schedulers and Concurrency

In ReactiveX, schedulers provide an for controlling the execution context of asynchronous operations, allowing developers to specify which or handle the emission, transformation, and observation of without directly managing low-level threading details. This enables non-blocking concurrency by distributing work across appropriate resources, such as CPU-intensive tasks or I/O-bound operations. Common scheduler implementations include the immediate scheduler, which executes work synchronously on the current ; the scheduler, which uses a fixed sized to the number of CPU cores for tasks like event loops or callbacks; the I/O scheduler, which employs a dynamic for blocking I/O activities; and the newThread scheduler, which spawns a dedicated for each . These abstractions ensure that ReactiveX sequences can leverage parallelism while maintaining the declarative nature of . The subscribeOn operator integrates schedulers by designating the on which an 's subscription and upstream operations execute, effectively shifting the entire chain's execution context from the calling to the specified scheduler, regardless of its position in the operator . In contrast, the observeOn operator shifts the for downstream notifications—such as onNext, onError, and onCompleted—to the target scheduler, allowing fine-grained control over where observers receive emissions without altering upstream processing. For instance, a request can use subscribeOn(Schedulers.io()) to perform the I/O on a dedicated , preventing the main from blocking, while observeOn(Schedulers.computation()) can then route results to a computation for processing. This separation facilitates efficient concurrency patterns, such as offloading asynchronous operations like calls or file reads to background , ensuring responsive user interfaces in applications. Backpressure in ReactiveX addresses scenarios where producers emit items faster than consumers can process them, leading to potential memory overflow in unbounded ; schedulers play an indirect role by enabling consumption to mitigate this imbalance. Strategies include (), which collects emissions into batches over a specified timespan or count—defaulting to the computation scheduler—to smooth out rapid data flows and prevent overwhelming observers. Another approach is onBackpressureDrop(), which discards excess items when the downstream exceeds a , allowing the pipeline to continue without errors by prioritizing recent data over accumulated queues. These mechanisms, particularly useful in hot Observables like , ensure scalable handling of producer-consumer disparities by integrating with schedulers for concurrent buffering or dropping.

History and Evolution

Origins at

ReactiveX originated within as the Reactive Extensions (Rx) library, spearheaded by computer scientist Erik Meijer and his colleagues on the Cloud Programmability Team. Development began in 2008, with initial public efforts around 2010, driven by the need to simplify asynchronous and in cloud-based applications, where traditional callback-heavy approaches often led to complex, error-prone code. The team sought to extend the success of (Language Integrated Query) by introducing a dual paradigm for handling streams of events, drawing inspiration from (FRP) concepts to enable composable, declarative operations on asynchronous data flows. The core motivation stemmed from the challenges of building scalable services, such as those requiring non-blocking interactions with remote APIs or real-time event processing. addressed these by formalizing the observer pattern through the IObservable and IObserver interfaces in .NET 4.0, providing a "LINQ to Events" model that treated asynchronous sequences symmetrically to synchronous collections via IEnumerable. This duality allowed developers to query and transform event streams using familiar LINQ operators, reducing boilerplate and improving composability without sacrificing performance in distributed environments. Early prototypes emerged from Microsoft's project, which aimed to split application tiers for cloud deployment, highlighting the limitations of imperative asynchronous patterns. Rx.NET 1.0, the first stable release of Reactive Extensions for .NET, was made available on June 21, 2011, marking the library's transition from experimental builds to a production-ready with comprehensive for filtering, combining, and scheduling observables. This version emphasized virtual time testing and completeness to support robust programmability. Building on this foundation, the team quickly expanded Rx to other languages; by 2012, RxJS for was developed internally at , while RxCpp for C++ emerged from community efforts to facilitate reactive patterns across web, desktop, and contexts.

Open-Sourcing and Community Adoption

In late 2012, Open Technologies announced the open-sourcing of the Reactive Extensions () libraries, making the code available on with plans for broader community access. The code was subsequently donated to under the organization, enabling collaborative development. Initial libraries such as for and RxJava for the quickly gained traction, with RxJava becoming a staple for asynchronous programming on the JVM. The open-source model fostered significant community growth, with contributors porting ReactiveX to new languages to extend its reach. Notable examples include RxSwift, released in 2015 as a implementation for and macOS development, and RxPY, a port that adapted the observable model for event-based scripting. To promote consistency across these implementations, the community developed shared specifications for core operators and patterns, ensuring and uniform behavior in composing asynchronous streams. Adoption milestones highlighted ReactiveX's integration into major frameworks, with RxJS becoming a foundational component of starting from version 2 in 2016, enabling reactive data binding in web applications. Similarly, RxJava was widely adopted in development, powering asynchronous operations in apps at companies like by 2014. Community efforts further amplified growth through conferences, such as Ben Christensen's 2014 GOTO talk on RxJava at , and dedicated documentation initiatives. The launch of the ReactiveX.io website served as a central hub for , offering unified tutorials, references, and language-specific guides to support developers across implementations.

Recent Developments

Since 2020, ReactiveX libraries have seen targeted updates to enhance performance, compatibility, and integration with modern language features. In 2023, Rx. released version 6.0, introducing support for .NET 6 and .NET 7, along with significant performance optimizations such as improved trimming support and reduced allocation overhead in high-throughput scenarios. This update addressed long-standing maintenance gaps, marking the first major release since 2020. Similarly, RxJava advanced to version 3.1.12 in September 2025, primarily resolving module descriptor issues like empty version strings in module-info.class files to better align with Java's modular system. RxJS entered its v8 series by mid-2025, emphasizing tree-shakable s through refined types and modular exports, enabling smaller bundle sizes in applications by eliminating unused code during build processes. Integrations with contemporary frameworks have also evolved. RxSwift introduced initial support for Swift Concurrency in 2023, with further enhancements in subsequent years including optimized support for async/await patterns and improved to facilitate seamless transitions from traditional callbacks to models. In the Android ecosystem, maintains a prominent role despite competition from Kotlin Flows, valued for its mature operator ecosystem and backpressure handling in complex event streams, even as coroutines gain traction for simpler asynchronous tasks. Community contributions remain robust, evidenced by the 2024 update to the Introduction to Rx.NET book, now in its second edition and freely available in multiple formats, which incorporates examples aligned with Rx.NET v6.0 and modern .NET practices. The ReactiveX organization continues active development across repositories, with frequent commits, issue resolutions, and releases in 2025, including updates to RxJS v8 and RxJava, fostering ongoing collaboration among contributors. Looking ahead, challenges include adapting to prevalent async/await paradigms without duplicating functionality, prompting adapters and layers in libraries like Rx.NET. Plans for Rx.NET v7.0, outlined in 2025 discussions, prioritize resolving package bloat—such as excessive dependencies in scenarios—through refined packaging strategies and evidence-based prototypes to improve adoption in resource-constrained environments.

Applications and Impact

Real-World Use Cases

In , RxJS has been employed to manage user interactions, API polling, and in complex user interfaces. For instance, integrates RxJS within its React-based architecture to handle declarative updates and real-time data flows, enabling efficient performance in streaming applications without compromising responsiveness. In mobile development, ReactiveX variants address asynchronous events and UI synchronization across platforms. RxSwift facilitates iOS event handling in complex asynchronous UIs. Similarly, RxJava powers applications by managing network retries and updates; 's Android app, for example, uses RxJava in older parts for asynchronous code and streams, supporting seamless content loading and error recovery in its mobile client. On the backend, Rx.NET supports in cloud services, particularly for data aggregation. Developers leverage Rx.NET with services like Event Hubs and Service Bus to build scalable reactive architectures, where observables combine incoming data streams for tasks such as log processing and event-driven workflows in distributed systems. Beyond traditional domains, ReactiveX principles extend to game development and . In game development, UniRx—a Unity-specific implementation of Reactive Extensions—handles event streams for player inputs and game state changes, as seen in reactive architectures for managing asynchronous updates in titles developed with , improving synchronization in multiplayer scenarios. For , ReactiveX enables sensor data flows by composing observables from device streams; frameworks like RxFusion process edge-to-cloud data in industrial applications, such as in sensor networks using and Rx for reliable stream handling. As of , ReactiveX libraries continue to be relevant in modern applications, with RxJava still valued in for handling complex asynchronous streams alongside Kotlin Coroutines.

Advantages and Limitations

ReactiveX offers significant advantages in managing complex asynchronous data flows through its composable sequences, which allow developers to operators declaratively, reducing the complexity associated with nested callbacks often referred to as "callback hell." This expressiveness enables the treatment of asynchronous events as collections, facilitating transformations and combinations that mirror synchronous , thereby improving and . Additionally, ReactiveX natively supports backpressure mechanisms, allowing consumers to regulate the flow of data from producers, which prevents overwhelming systems in high-throughput scenarios. Another key strength is its testability, exemplified by marble diagrams that visually represent the timing and values of emissions, completions, and errors in streams, making it easier to verify in unit tests without dealing with actual asynchronous execution. These features collectively abstract away low-level concerns like threading and via schedulers, promoting more robust concurrent programming. Despite these benefits, ReactiveX has notable limitations, including a steep due to its functional and declarative paradigm, which requires familiarity with concepts like , , and reactive extensions that differ markedly from imperative styles. Debugging long chains can be challenging, as tracing propagation and side effects across asynchronous flows often demands specialized tools or mental models to identify glitches or leaks. Furthermore, for simple asynchronous tasks, ReactiveX may introduce unnecessary overhead and complexity, making it an overkill compared to lighter alternatives. In comparisons, ReactiveX excels over Promises or Futures for handling streams of multiple values, as the latter struggle with nested compositions and can lead to blocking behaviors, whereas observables support and cancellation. Relative to pure (FRP) libraries, ReactiveX adopts a more imperative, discrete-event approach, which is easier to integrate into object-oriented codebases but less suited for modeling continuous signals. Against language-native constructs like Kotlin Flows or async/await, ReactiveX provides broader support for intricate manipulations but is more verbose and less idiomatic in specific ecosystems, where Flows offer conciseness at the cost of platform specificity. ReactiveX is particularly ideal for event-driven systems, such as applications or processing, where asynchronous streams dominate, but it should be avoided for purely synchronous code to prevent introducing undue abstraction layers.

References

  1. [1]
    Intro - ReactiveX
    ReactiveX is a library for composing asynchronous and event-based programs by using observable sequences. It extends the observer pattern to support sequences ...Missing: official | Show results with:official
  2. [2]
    Introduction to Reactive Extensions for .NET
    Rx.NET originated back in 2008 in the Cloud Programmability team at Microsoft. · Microsoft put considerable effort into developing and verifying the theory that ...Why Rx? · From Events to Insights · Getting pragmatic · Classic IO Streams Problems
  3. [3]
    Observable - ReactiveX
    In ReactiveX an observer subscribes to an Observable. Then that observer reacts to whatever item or sequence of items the Observable emits.Missing: official | Show results with:official
  4. [4]
    Languages - ReactiveX
    Languages · Java: RxJava · JavaScript: RxJS · C#: Rx.NET · C#(Unity): UniRx (no further developments) · Scala: RxScala · Clojure: RxClojure · C++: RxCpp · Lua: RxLua ...
  5. [5]
    Operators - ReactiveX
    The Operators of ReactiveX. This page first lists what could be considered the “core” operators in ReactiveX, and links to pages that have more in-depth ...Debounce · FlatMap · Merge · BufferMissing: official | Show results with:official
  6. [6]
    ReactiveX
    ReactiveX is a combination of the best ideas from the Observer pattern, the Iterator pattern, and functional programming.Intro · Languages · Observable · Tutorials
  7. [7]
    RxJava – Reactive Extensions for the JVM - GitHub
    RxJava is a Java VM implementation of Reactive Extensions: a library for composing asynchronous and event-based programs by using observable sequences.Wiki · Releases · Getting Started · GitHub IssuesMissing: official | Show results with:official
  8. [8]
  9. [9]
    GitHub - dotnet/reactive: The Reactive Extensions for .NET
    ### Rx.NET Licensing and C#/.NET Support Summary
  10. [10]
    GitHub - ReactiveX/RxSwift: Reactive Programming in Swift
    ### RxSwift Licensing and Swift/iOS Support Summary
  11. [11]
    GitHub - ReactiveX/RxPY: ReactiveX for Python
    ### RxPY Licensing and Python Support
  12. [12]
    GitHub - ReactiveX/RxKotlin: RxJava bindings for Kotlin
    ### Summary of RxKotlin Licensing and Kotlin Support
  13. [13]
  14. [14]
  15. [15]
    The MIT License — reactivex Documentation
    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in ...
  16. [16]
  17. [17]
  18. [18]
    Create operator - ReactiveX
    The Create operator creates an Observable from scratch using a function, and it does not operate on any particular Scheduler by default.Missing: launch | Show results with:launch
  19. [19]
    The Observable Contract - ReactiveX
    The Observable Contract is a formal definition of an Observable. It uses notifications like OnNext, OnCompleted, and OnError, and may emit zero or more items.Notifications · Observable Termination · Subscribing And...Missing: principles | Show results with:principles
  20. [20]
    Subscribe operator - ReactiveX
    The Subscribe operator connects an observer to an Observable, allowing it to receive emissions, errors, and completion notifications. It uses onNext, onError, ...Missing: multiple | Show results with:multiple
  21. [21]
    ReactiveX - Defer operator
    ### Summary of Lazy Evaluation in ReactiveX (Defer Operator)
  22. [22]
    Publish operator - ReactiveX
    Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the ...
  23. [23]
  24. [24]
  25. [25]
  26. [26]
  27. [27]
  28. [28]
    Scheduler - ReactiveX
    The TestScheduler allows you to exercise fine-tuned manual control over how the Scheduler's clock behaves.
  29. [29]
    ReactiveX - SubscribeOn operator
    ### Summary of `subscribeOn` Operator in ReactiveX
  30. [30]
    ReactiveX - ObserveOn operator
    ### Summary of `observeOn` Operator in ReactiveX
  31. [31]
    backpressure operators - ReactiveX
    There are a variety of strategies with which you can exercise flow control and backpressure in ReactiveX in order to alleviate the problems caused when a ...Missing: official | Show results with:official
  32. [32]
    Reactive Extensions for .NET (Rx) with Erik Meijer - Scott Hanselman
    Feb 4, 2010 · I sit down with Erik Meijer from the Cloud Programmability Team to hear about the Reactive Extensions for .NET (Rx). Rx is a library for composing asynchronous ...Missing: origins | Show results with:origins
  33. [33]
    Reactive extensions (Rx): curing your asynchronous programming ...
    Reactive extensions (Rx): curing your asynchronous programming blues. Author: Erik Meijer. Erik Meijer. Microsoft. View Profile. Authors Info & Claims. CUFP '10 ...Missing: origins | Show results with:origins
  34. [34]
    None
    ### Summary of Rx Design Guidelines (Version 1.0, October 2010)
  35. [35]
    Modernizing Reactive Extensions for .NET - Endjin
    Nov 18, 2023 · Now, .NET's design was copied into other languages, and it's been particularly widely used in JavaScript, and this kind of highlights Rx's basic ...
  36. [36]
    Reactive Extensions (Rx) is now Open Source - Scott Hanselman
    Nov 7, 2012 · Rx.NET: The Reactive Extensions (Rx) is a library for composing asynchronous and event-based programs using observable sequences and LINQ-style ...
  37. [37]
    ReactiveX - GitHub
    A library for composing asynchronous and event-based programs using observable sequences for the Java VM.
  38. [38]
    DroidConSE: Tackling Complexity in Android Apps with RxJava at ...
    Nov 11, 2014 · We adopted RxJava at version 0.5, and had to deal with many breaking API changes on its way to the 1.0 stable release. It is crucial as well to ...
  39. [39]
    Functional Reactive Programming with RxJava • Ben Christensen
    Apr 8, 2014 · This presentation was recorded at GOTO Aarhus 2013. #gotocon #gotoaar http://gotocon.com Ben Christensen - Software Engineer at Netflix ...Missing: community documentation
  40. [40]
    Rx.NET v6.0 Now Available - endjin
    May 19, 2023 · For the first time since 2020, a new release of Rx.NET is available, supporting .NET 6 and .NET 7.
  41. [41]
    Rx.NET v6.0: Enhancing Compatibility, Trimming Support, and Many ...
    At the end of last month, the team behind Reactive Extensions for .NET announced the release of Rx.NET major version 6.0.
  42. [42]
  43. [43]
    State of RxJS Wrap-up - This Dot Labs
    May 22, 2023 · The team is currently trying to figure out a way to show people how they develop operators by giving them the means of developing operators.
  44. [44]
    Update SwiftConcurrency.md #2635 - ReactiveX/RxSwift - GitHub
    This PR adds a note about the async throws overload availability. Hopefully, it'll save everyone from trying to use it on version 6.5.0 .
  45. [45]
    RxJava in 2025: Why It Still Matters for Android Developers
    Jan 12, 2025 · RxJava excels at simplifying complex workflows, like chaining multiple network calls or handling real-time data streams.
  46. [46]
    Learn Reactive Programming for FREE: Introduction to Rx.NET 2nd ...
    Jan 15, 2024 · Learn Reactive Programming with our free book, Introduction to Rx.NET 2nd Edition (2024), available in PDF, EPUB, online, and GitHub.
  47. [47]
    Introduction to Rx.NET 2nd Edition (2024) book is available for FREE
    Feb 5, 2024 · We've written a FREE book about Reactive Extensions for .NET called Introduction to Rx.NET 2nd Edition (2024), which is available in PDF, EPUB, Online, and on ...Future Rx.NET Packaging · dotnet reactive · Discussion #2038Rx.NET v6.0 & v7.0 high-level plan · dotnet reactive - GitHubMore results from github.com
  48. [48]
    Activity · ReactiveX/RxJava - GitHub
    RxJava – Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM.
  49. [49]
    Rx.NET v6.0 & v7.0 high-level plan · dotnet reactive - GitHub
    Below is our high-level backlog covering the v6.0 and v7.0 releases, and we will flesh out each item with associated links to issues / discussions / PRs.
  50. [50]
    The State of Reactive Extensions for .NET in 2025 - endjin
    Jun 2, 2025 · Ian Griffiths discusses the current state of Rx.NET, its challenges, and plans for v7.0 in this hour-long talk.
  51. [51]
    Packaging Plans July 2025 · dotnet reactive · Discussion #2211
    Aug 2, 2025 · Our previous announcement that we were going to be moving forward with a new packaging plan for Rx.NET turned out to be premature.Rx.NET v6.0 & v7.0 high-level plan · dotnet reactive - GitHubFuture Rx.NET Packaging · dotnet reactive · Discussion #2038More results from github.com
  52. [52]
    Performance without Compromise. Netflix JavaScript Talks
    Mar 23, 2016 · Netflix uses a declarative, React-based architecture with principles like no refs, and a new RxJS version built with performance and debugging ...<|separator|>
  53. [53]
    The Ultimate Guide to Rx Swift for iOS App Development - DhiWise
    Aug 5, 2024 · Rx Swift (Reactive Extensions for Swift) is a dynamic framework that developers utilize for writing mobile apps with Swift language.What is RxSwift? · Understanding Reactive... · Advantages of Using RxSwift...
  54. [54]
    Reactive Programming in the Netflix API with RxJava
    Feb 4, 2013 · Reactive programming with RxJava has enabled Netflix developers to leverage server-side concurrency without the typical thread-safety and ...
  55. [55]
    neuecc/UniRx: Reactive Extensions for Unity - GitHub
    Feb 16, 2024 · Rx represents events as reactive sequences which are both easily composable and support time-based operations by using LINQ query operators.
  56. [56]
    RxFusion - A ReactiveX platform for IoT from edge to cloud - GitHub
    RxFusion. A dataflow framework for programming the IoT from edge to cloud. New release available.
  57. [57]
    Reactive Stream Processing in Industrial IoT using DDS and Rx | PDF
    This document discusses using reactive stream processing with Data Distribution Service (DDS) and Reactive Extensions (Rx) for industrial Internet of Things ...<|control11|><|separator|>
  58. [58]
  59. [59]
    Asynchronous Flow | Kotlin Documentation
    Feb 16, 2022 · A suspending function asynchronously returns a single value, but how can we return multiple asynchronously computed values? This is where Kotlin Flows come in.Missing: ReactiveX limitations