Back to all tools
Temporal logo

Temporal

Durable workflow execution — workflows survive crashes and resume exactly where they left off.

0Open Source
Workflow Engines
Share:XLinkedInWhatsApp

Overview

Temporal is a durable workflow execution platform that runs business logic as fault-tolerant workflows — automatically persisting state and replaying execution history so workflows survive process crashes, network failures, and server restarts without any application-level retry logic.

Key Features

  • Durable execution — workflow state persisted automatically, resumes after any failure
  • Language-native SDKs for Go, Python, Java, TypeScript, and .NET
  • Activities for encapsulating unreliable external calls with configurable retries
  • Signals and queries for real-time interaction with running workflows
  • Timers that work across process restarts — schedule events days or weeks into the future
  • Temporal Cloud fully managed service with 99.99% SLA

Real-World Workflows

Long-running order fulfillment workflow

  1. 1Define a workflow that: reserves inventory → charges payment → ships → sends confirmation
  2. 2Each step is an Activity with automatic retry on transient failures
  3. 3Workflow pauses and waits for a Signal from the shipping system
  4. 4If any step fails after retries, compensation logic rolls back previous steps

User onboarding sequence with wait steps

  1. 1Start a workflow when a user signs up
  2. 2Send welcome email, wait 1 day, check if the user completed setup
  3. 3If not, send a reminder — wait 3 more days before escalating
  4. 4Workflow state is preserved across all waits — no cron jobs or queues needed

Getting Started

# Start Temporal server locally
brew install temporal
temporal server start-dev

# Install Python SDK
pip install temporalio

# Define a workflow
from temporalio import workflow, activity

@workflow.defn
class MyWorkflow:
    @workflow.run
    async def run(self, name: str) -> str:
        return await workflow.execute_activity(
            greet, name, start_to_close_timeout=timedelta(seconds=10)
        )

Compare Alternatives

See how Temporal stacks up against similar tools.