RxSwift 0,7,29,0,8,12,0,20 travis-ci ruby SwiftPM CocoaPods

Reactive Programming in Swift

Miss Electric Eel 2016 RxSwift: ReactiveX for Swift

Travis CI platforms pod Carthage compatible Swift Package Manager compatible

About Rx

:warning: This readme describes RxSwift 3.0 version that requires Swift 3.0.

:warning: If you are looking for Swift 2.3 compatible version, please take a look at RxSwift ~> 2.0 versions and swift-2.3 branch.

Rx is a generic abstraction of computation expressed through Observable<Element> interface.

This is a Swift version of Rx.

It tries to port as many concepts from the original version as possible, but some concepts were adapted for more pleasant and performant integration with iOS/macOS environment.

Cross platform documentation can be found on ReactiveX.io.

Like the original Rx, its intention is to enable easy composition of asynchronous operations and event/data streams.

KVO observing, async operations and streams are all unified under abstraction of sequence. This is the reason why Rx is so simple, elegant and powerful.

I came here because I want to ...

... understand
... install
... hack around
... interact
... compare
... find compatible
... see the broader vision
  • Does this exist for Android? RxJava
  • Where is all of this going, what is the future, what about reactive architectures, how do you design entire apps this way? Cycle.js - this is javascript, but RxJS is javascript version of Rx.


Here's an example In Action
Define search for GitHub repositories ...
let searchResults = searchBar.rx.text.orEmpty
    .throttle(0.3, scheduler: MainScheduler.instance)
    .flatMapLatest { query -> Observable<[Repository]> in
        if query.isEmpty {
            return .just([])
        return searchGitHub(query)
... then bind the results to your tableview
    .bind(to: tableView.rx.items(cellIdentifier: "Cell")) {
        (index, repository: Repository, cell) in
        cell.textLabel?.text = repository.name
        cell.detailTextLabel?.text = repository.url
    .disposed(by: disposeBag)


  • Xcode 8.0
  • Swift 3.0


Rx doesn't contain any external dependencies.

These are currently the supported options:


Open Rx.xcworkspace, choose RxExample and hit run. This method will build everything and run the sample app


Tested with pod --version: 1.1.1

# Podfile

target 'YOUR_TARGET_NAME' do
    pod 'RxSwift',    '~> 3.0'
    pod 'RxCocoa',    '~> 3.0'

# RxTests and RxBlocking make the most sense in the context of unit/integration tests
    pod 'RxBlocking', '~> 3.0'
    pod 'RxTest',     '~> 3.0'

Replace YOUR_TARGET_NAME and then, in the Podfile directory, type:

$ pod install


Tested with carthage version: 0.18.1

Add this to Cartfile

github "ReactiveX/RxSwift" ~> 3.0
$ carthage update

Swift Package Manager

Tested with swift build --version: 3.0.0 (swiftpm-19)

Create a Package.swift file.

import PackageDescription

let package = Package(
    name: "RxTestProject",
    targets: [],
    dependencies: [
        .Package(url: "https://github.com/ReactiveX/RxSwift.git", majorVersion: 3)
$ swift build

To build or test a module with RxTest dependency, set TEST=1. (RxSwift >= 3.4.2)

$ TEST=1 swift test

Manually using git submodules

  • Add RxSwift as a submodule
$ git submodule add [email protected]:ReactiveX/RxSwift.git
  • Drag Rx.xcodeproj into Project Navigator
  • Go to Project > Targets > Build Phases > Link Binary With Libraries, click + and select RxSwift-[Platform] and RxCocoa-[Platform] targets


Related Repositories



The introduction to RxSwift you've been missing ...



ObjectMapper bindings for Moya and RxSwift ...



:memo: RxSwift文档的中文翻译 ...



A collection of wrapper classes that allow you to use RxSwift Observers in place ...



:dash:100 days and 40 project of RxSwift ...

Top Contributors

kzaher yury mohsenr bontoJR scotteg sergdort carlosypunto solidcell jamiepinkham tarunon thanegill stack yoshinorisano vodovozovge nanoxd tottakai orta JegnuX Nirma dtartaglia DouglasHeriot ikesyo garethknowles devxoul gregpardo hsoi ishkawa kumapo mrahmiao 53ningen


-   3.0.0.alpha.1 zip tar
-   3.0.0-beta.1 zip tar
-   2.6.0 zip tar
-   2.5.0 zip tar
-   2.4 zip tar
-   2.3.1 zip tar
-   2.3.0 zip tar
-   2.2.0 zip tar
-   2.1.0 zip tar
-   2.0.0 zip tar
-   2.0.0-rc.0 zip tar
-   2.0.0-beta.4 zip tar
-   2.0.0-beta.3 zip tar
-   2.0.0-beta.2 zip tar
-   2.0.0-beta.1 zip tar
-   2.0.0-alpha.4 zip tar
-   2.0.0-alpha.3 zip tar
-   2.0.0-alpha.2 zip tar
-   2.0-alpha.1 zip tar
-   1.9.1 zip tar
-   1.9 zip tar
-   1.8.1 zip tar
-   1.8 zip tar
-   1.7 zip tar
-   1.6 zip tar
-   1.5 zip tar
-   1.4 zip tar
-   1.3.1 zip tar
-   1.3 zip tar
-   1.2.1 zip tar