Streams of values over time
Swift Other
Latest commit 579155f May 28, 2017 @andersio andersio committed on GitHub Merge pull request #416 from ReactiveCocoa/gardening-signal
[Gardening] Signal.Core.
Failed to load latest commit information.
.github Create a PR template. [skip ci] May 27, 2017
Carthage/Checkouts Update Nimble to 6.1.0 Mar 30, 2017
Documentation Break README into multiple documents. May 15, 2017
Logo Maintain a docset feed alongside docs generation. Apr 15, 2017
ReactiveSwift-UIExamples.playground Update the validating property playground. May 5, 2017
ReactiveSwift.playground Nest `Observer` inside `Signal`. May 13, 2017
ReactiveSwift.xcodeproj Addressed warnings of the test targets. May 15, 2017
ReactiveSwift.xcworkspace Move the ActionProperty into a separated playground. Dec 26, 2016
Sources [Gardening] Signal.Core. May 28, 2017
Tests Merge branch 'master' into signal-self-retain May 22, 2017
script Force Ruby 2.3 in the CI docs worker. May 22, 2017
.gitignore Update .gitignore May 11, 2017
.gitmodules Switch back to Quick/Nimble Sep 3, 2016
.jazzy.yaml Merge pull request #384 from ReactiveCocoa/readme-split May 15, 2017
.swift-version Update `.swift-version` to 3.1. Mar 30, 2017
.travis.yml [Travis] Remove `JOB` env from `carthage` stage to share cache May 18, 2017 Merge remote-tracking branch 'origin/master' into promoteerror May 26, 2017 Fixed typos. Moved internal docs out of the Documentation folder. Dec 26, 2016
Cartfile Update Result to 3.2.1 for Swift 3.1 compatibility on Linux Mar 4, 2017
Cartfile.private Update Nimble to 6.1.0 Mar 30, 2017
Cartfile.resolved Update Nimble to 6.1.0 Mar 30, 2017 Replace the placeholder in the code of conduct. Dec 29, 2016 Update Feb 7, 2016
Package.pins SwiftPM 3.1 Apr 4, 2017
Package.swift [Package.swift] Add `isSwiftPackagerManagerTest` computed variable Apr 4, 2017 Update the release roadmap. [skip ci] May 20, 2017
ReactiveSwift.podspec 1.1.1. Mar 30, 2017


Streams of values over time. Tailored for Swift.

Latest ReactiveSwift Documentation Join the ReactiveSwift Slack community.

Carthage compatible CocoaPods compatible SwiftPM compatible GitHub release Swift 3.0.x platforms

☕️ Looking for Cocoa extensions? 🎉 Getting Started ⚠️ Still using Swift 2.x?

🚄 Release Roadmap

What is ReactiveSwift?

ReactiveSwift offers composable, declarative and flexible primitives that are built around the grand concept of streams of values over time.

These primitives can be used to uniformly represent common Cocoa and generic programming patterns that are fundamentally an act of observation, e.g. delegate pattern, callback closures, notifications, control actions, responder chain events, futures/promises and key-value observing (KVO).

Because all of these different mechanisms can be represented in the same way, it’s easy to declaratively compose them together, with less spaghetti code and state to bridge the gap.

Getting Started

  1. Core Reactive Primitives

    An overview of the semantics and example use cases of the ReactiveSwift primitives, including Signal, SignalProducer, Property and Action.

  2. Basic Operators

    An overview of the operators provided to compose and transform streams of values.

  3. How does ReactiveSwift relate to RxSwift?

    An overview of how ReactiveSwift differs from RxSwift for Swift idiomaticity.


  1. Interactive Form UI

    ReactiveSwift includes a UI Examples playground, which demonstrates:

    • how to build an interactive form UI with bindings, properties and Actions, with a live view in action.
    • how to use reactive primitives to implement the Model-View-ViewModel architectural pattern, with the View Model being the source of truth for the View.
  2. Online Searching

Advanced Topics

  1. ReactiveCocoa

    Bindings and reactive extensions for Cocoa and Cocoa Touch frameworks are offered separately as ReactiveCocoa.

  2. API Reference

  3. API Contracts

    Contracts of the ReactiveSwift primitives, Best Practices with ReactiveSwift, and Guidelines on implementing custom operators.

  4. Debugging Techniques


ReactiveSwift supports macOS 10.9+, iOS 8.0+, watchOS 2.0+, tvOS 9.0+ and Linux.


If you use Carthage to manage your dependencies, simply add ReactiveSwift to your Cartfile:

github "ReactiveCocoa/ReactiveSwift" ~> 1.1

If you use Carthage to build your dependencies, make sure you have added ReactiveSwift.framework, and Result.framework to the "Linked Frameworks and Libraries" section of your target, and have included them in your Carthage framework copying build phase.


If you use CocoaPods to manage your dependencies, simply add ReactiveSwift to your Podfile:

pod 'ReactiveSwift', '~> 1.1'

Swift Package Manager

If you use Swift Package Manager, simply add ReactiveSwift as a dependency of your package in Package.swift:

.Package(url: "", majorVersion: 1)

Git submodule

  1. Add the ReactiveSwift repository as a submodule of your application’s repository.
  2. Run git submodule update --init --recursive from within the ReactiveCocoa folder.
  3. Drag and drop ReactiveSwift.xcodeproj and Carthage/Checkouts/Result/Result.xcodeproj into your application’s Xcode project or workspace.
  4. On the “General” tab of your application target’s settings, add ReactiveSwift.framework, and Result.framework to the “Embedded Binaries” section.
  5. If your application target does not contain Swift code at all, you should also set the EMBEDDED_CONTENT_CONTAINS_SWIFT build setting to “Yes”.


We also provide a great Playground, so you can get used to ReactiveCocoa's operators. In order to start using it:

  1. Clone the ReactiveSwift repository.
  2. Retrieve the project dependencies using one of the following terminal commands from the ReactiveSwift project root directory:
    • git submodule update --init --recursive OR, if you have Carthage installed
    • carthage checkout
  3. Open ReactiveSwift.xcworkspace
  4. Build Result-Mac scheme
  5. Build ReactiveSwift-macOS scheme
  6. Finally open the ReactiveSwift.playground
  7. Choose View > Show Debug Area

Have a question?

If you need any help, please visit our GitHub issues or Stack Overflow. Feel free to file an issue if you do not manage to find any solution from the archives.

Release Roadmap

Current Stable Release:
GitHub release

In Development

ReactiveSwift 2.0

It targets Swift 3.1. The estimated schedule is WWDC 2017.

The primary goal of ReactiveSwift 2.0 is to take advantage of concrete same-type requirements introduced in Swift 3.1. As a result:

  1. A few single-implementation protocols were removed; and
  2. Signal and SignalProducer operators were moved from the protocols to the concrete types.

These changes are source breaking, but are automatically or trivially migratable.

ReactiveSwift 2.0 have also continued the work in cleaning up its APIs, preparing for the eventual API freeze for library resilience.

Plan of Record

ReactiveSwift 3.0

It targets Swift 4.0. The estimated schedule is late 2017.

The release is expected to be source breaking. For the moment, ReactiveSwift 3.0 is expected to:

  1. Adpot new Swift 4 language features;
  2. Complete annontation of the Swift memory ownership model; and
  3. Complete annotation of the Swift library evolution model.