---
title: Combine
framework: Combine
role: collection
role_heading: Framework
platforms: [iOS 13.0+, iPadOS 13.0+, Mac Catalyst 13.0+, macOS 10.15+, tvOS 13.0+, visionOS 1.0+, watchOS 6.0+]
path: combine
---

# Combine

Customize handling of asynchronous events by combining event-processing operators.

## Overview

Overview The Combine framework provides a declarative Swift API for processing values over time. These values can represent many kinds of asynchronous events. Combine declares publishers to expose values that can change over time, and subscribers to receive those values from the publishers. The Publisher protocol declares a type that can deliver a sequence of values over time. Publishers have operators to act on the values received from upstream publishers and republish them. At the end of a chain of publishers, a Subscriber acts on elements as it receives them. Publishers only emit values when explicitly requested to do so by subscribers. This puts your subscriber code in control of how fast it receives events from the publishers it’s connected to. Several Foundation types expose their functionality through publishers, including Timer, NotificationCenter, and URLSession. Combine also provides a built-in publisher for any property that’s compliant with Key-Value Observing. You can combine the output of multiple publishers and coordinate their interaction. For example, you can subscribe to updates from a text field’s publisher, and use the text to perform URL requests. You can then use another publisher to process the responses and use them to update your app. By adopting Combine, you’ll make your code easier to read and maintain, by centralizing your event-processing code and eliminating troublesome techniques like nested closures and convention-based callbacks.

## Topics

### Essentials

- [Receiving and Handling Events with Combine](combine/receiving-and-handling-events-with-combine.md)

### Publishers

- [Publisher](combine/publisher.md)
- [Publishers](combine/publishers.md)
- [AnyPublisher](combine/anypublisher.md)
- [Published](combine/published.md)
- [Cancellable](combine/cancellable.md)
- [AnyCancellable](combine/anycancellable.md)

### Convenience Publishers

- [Future](combine/future.md)
- [Just](combine/just.md)
- [Deferred](combine/deferred.md)
- [Empty](combine/empty.md)
- [Fail](combine/fail.md)
- [Record](combine/record.md)

### Connectable Publishers

- [Controlling Publishing with Connectable Publishers](combine/controlling-publishing-with-connectable-publishers.md)
- [ConnectablePublisher](combine/connectablepublisher.md)

### Subscribers

- [Processing Published Elements with Subscribers](combine/processing-published-elements-with-subscribers.md)
- [Subscriber](combine/subscriber.md)
- [Subscribers](combine/subscribers.md)
- [AnySubscriber](combine/anysubscriber.md)
- [Subscription](combine/subscription.md)
- [Subscriptions](combine/subscriptions.md)

### Subjects

- [Subject](combine/subject.md)
- [CurrentValueSubject](combine/currentvaluesubject.md)
- [PassthroughSubject](combine/passthroughsubject.md)

### Schedulers

- [Scheduler](combine/scheduler.md)
- [ImmediateScheduler](combine/immediatescheduler.md)
- [SchedulerTimeIntervalConvertible](combine/schedulertimeintervalconvertible.md)

### Combine Migration

- [Routing Notifications to Combine Subscribers](combine/routing-notifications-to-combine-subscribers.md)
- [Replacing Foundation Timers with Timer Publishers](combine/replacing-foundation-timers-with-timer-publishers.md)
- [Performing Key-Value Observing with Combine](combine/performing-key-value-observing-with-combine.md)
- [Using Combine for Your App’s Asynchronous Code](combine/using-combine-for-your-app-s-asynchronous-code.md)

### Observable Objects

- [ObservableObject](combine/observableobject.md)
- [ObservableObjectPublisher](combine/observableobjectpublisher.md)

### Asynchronous Publishers

- [AsyncPublisher](combine/asyncpublisher.md)
- [AsyncThrowingPublisher](combine/asyncthrowingpublisher.md)

### Encoders and Decoders

- [TopLevelEncoder](combine/toplevelencoder.md)
- [TopLevelDecoder](combine/topleveldecoder.md)

### Debugging Identifiers

- [CustomCombineIdentifierConvertible](combine/customcombineidentifierconvertible.md)
- [CombineIdentifier](combine/combineidentifier.md)
