Skip to content

apple/swift-temporal-sdk

Temporal Swift SDK

Temporal is a distributed, scalable, durable, and highly available orchestration engine used to execute asynchronous, long-running business logic in a scalable and resilient way.

  • πŸš€ Swift package for authoring Temporal workflows and activities
  • πŸ“¦ Compatible with Swift Package Manager
  • πŸ“± Supports Linux and macOS
  • πŸ”§ Built with Swift 6.2+ and Xcode 26+

πŸ”— Jump to:

πŸ“– Overview

The Temporal Swift SDK provides a package for building distributed, durable workflows and activities using Swift's modern concurrency features. Temporal enables you to build reliable applications that recover from failures, scale dynamically, and maintain long-running business processes with confidence.

Key Features:

  • πŸ”„ Durable Workflows: Build fault-tolerant workflows that survive infrastructure failures
  • πŸ—οΈ Scalable Architecture: Distribute workflow execution across multiple workers
  • ⚑ Swift Concurrency: Native integration with Swift Structured Concurrency
  • 🎯 Type Safety: Compile-time type checking for workflow and activity definitions
  • πŸ“Š Observability: Built-in support for logging, metrics and tracing
  • πŸ”§ Macro-based APIs: Simple @Workflow and @Activity macros to avoid boilerplate
  • πŸ§ͺ Testing Support: Easily test your workflows and activities

βš™οΈ Use Cases

The Temporal Swift SDK excels in scenarios requiring reliable, long-running business processes such as:

πŸ›’ E-commerce & Payment Processing

  • Order fulfillment workflows with inventory, payment, and shipping coordination
  • Multi-step payment processing with automatic retry and rollback capabilities
  • Subscription billing and recurring payment management

πŸ”„ Data Processing & ETL

  • Large-scale data transformation pipelines with fault tolerance
  • Event-driven data processing with guaranteed delivery
  • Batch processing jobs with progress tracking and resumption

🏒 Business Process Automation

  • Approval workflows with human-in-the-loop interactions
  • Multi-system integration and orchestration
  • Document processing and compliance workflows

πŸ“Š Monitoring & Operations

  • Health check orchestration across distributed systems
  • Automated incident response and remediation
  • Scheduled maintenance and cleanup tasks

🏁 Getting Started

Prerequisites

  • Swift version: Swift 6.2+

To install/upgrade Swift, see https://www.swift.org/install/

Adding as a dependency

To use the Swift Temporal SDK in your Swift project, add it as a dependency in your Package.swift file:

dependencies: [
    .package(url: "https://github.com/apple/swift-temporal-sdk.git", upToNextMinor: "0.1.0")
]

Running the project

  1. Clone the repository

    git clone [email protected]/apple/swift-temporal-sdk.git
  2. Build the package

    swift build
  3. Run tests

    swift test
  4. Run an example

    # Install Temporal CLI from https://temporal.io/setup/install-temporal-cli
    temporal server start-dev
    cd Examples/Greeting
    swift run GreetingExample

Usage

Here's a simple example showing how to create a workflow and activity:

import Temporal
import Logging

// Define an activity
@ActivityContainer
struct GreetingActivities {
    @Activity
    func sayHello(input: String) -> String {
        "Hello, \(input)!"
    }
}

// Define a workflow
@Workflow
final class GreetingWorkflow {
    func run(input: String) async throws -> String {
        let greeting = try await Workflow.executeActivity(
            GreetingActivities.Activities.sayHello.self,
            options: ActivityOptions(startToCloseTimeout: .seconds(30)),
            input: input
        )
        return greeting
    }
}

// Create worker and client
@main
struct MyApp {
    static func main() async throws {
        let worker = try TemporalWorker(
            configuration: .init(
                namespace: "default",
                taskQueue: "greeting-queue"
            ),
            target: .ipv4(address: "127.0.0.1", port: 7233),
            transportSecurity: .plaintext,
            activityContainers: GreetingActivities(),
            workflows: [GreetingWorkflow.self],
            logger: Logger(label: "worker")
        )
        
        let client = try TemporalClient(
            target: .ipv4(address: "127.0.0.1", port: 7233),
            transportSecurity: .plaintext,
            logger: Logger(label: "client")
        )
        
        // Execute workflow
        let result = try await client.executeWorkflow(
            GreetingWorkflow.self,
            options: .init(id: "greeting-1", taskQueue: "greeting-queue"),
            input: "World"
        )
        
        print(result) // "Hello, World!"
    }
}

πŸ“˜ Documentation

🧰 Release Info

Note

This SDK is currently under active development.

  • Release Cadence: Ad-hoc whenever changes land on main
  • Version Compatibility: Swift 6.2+ and macOS 15.0+ only

πŸ› οΈ Support

If you have any questions or need help, feel free to reach out by opening an issue.

About

Swift SDK for Temporal

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Languages