Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 2 additions & 9 deletions .github/workflows/build-samples.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ jobs:
uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6
with:
dotnet-version: "10.x"
dotnet-quality: "preview"

# Durable Task SDK samples (net10.0)
- name: Build DTS - FunctionChaining
Expand Down Expand Up @@ -93,9 +92,6 @@ jobs:
- name: Build DF - Saga
run: dotnet build samples/durable-functions/dotnet/Saga/DurableFunctionsSaga.csproj

- name: Build DF - PdfSummarizer
run: dotnet build samples/durable-functions/dotnet/PdfSummarizer/pdf-summarizer-dotnet.csproj

- name: Build DF - AiAgentTravelPlanOrchestrator
run: dotnet build samples/durable-functions/dotnet/AiAgentTravelPlanOrchestrator/TravelPlannerFunctions.csproj

Expand Down Expand Up @@ -222,9 +218,6 @@ jobs:
- name: Install DF - fan-out-fan-in
run: pip install -r samples/durable-functions/python/fan-out-fan-in/requirements.txt

- name: Install DF - pdf-summarizer
run: pip install -r samples/durable-functions/python/pdf-summarizer/requirements.txt

- name: Install DF - work-item-filtering
run: pip install -r samples/durable-functions/python/work-item-filtering/requirements.txt

Expand All @@ -248,7 +241,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7
with:
node-version: "20"
node-version: "22"

# Durable Functions samples
- name: Build DF JS - HelloCities
Expand All @@ -267,7 +260,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7
with:
node-version: "20"
node-version: "22"

# Durable Functions samples
- name: Build DF TS - HelloCities
Expand Down
8 changes: 4 additions & 4 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,12 +51,12 @@ chances of your issue being dealt with quickly:
* **Suggest a Fix** - if you can't fix the bug yourself, perhaps you can point to what might be
causing the problem (line of code or commit)

You can file new issues by providing the above information at the corresponding repository's issues link: https://github.com/Azure/Durable-Task-Scheduler/issues/new.
You can file new issues by providing the above information at the corresponding repository's issues link: https://github.com/Azure-Samples/Durable-Task-Scheduler/issues/new.

### <a name="submit-pr"></a> Submitting a Pull Request (PR)
Before you submit your Pull Request (PR) consider the following guidelines:

* Search the repository (https://github.com/Azure/Durable-Task-Scheduler/pulls) for an open or closed PR
* Search the repository (https://github.com/Azure-Samples/Durable-Task-Scheduler/pulls) for an open or closed PR
that relates to your submission. You don't want to duplicate effort.

* Make your changes in a new git fork:
Expand All @@ -69,7 +69,7 @@ Before you submit your Pull Request (PR) consider the following guidelines:
* Rebase your fork and force push to your GitHub repository (this will update your Pull Request):

```shell
git rebase master -i
git rebase main -i
git push -f
```

Expand All @@ -80,5 +80,5 @@ That's it! Thank you for your contribution!
- Each sample should have its own directory under the appropriate framework/language folder.
- Include a `README.md` following a consistent structure: description, prerequisites, how to run, and expected output.
- Use the Durable Task Scheduler emulator as the default development experience.
- Include a `requirements.txt` (Python) or project file (`.csproj`/`.sln` for .NET, `build.gradle` for Java).
- Include a `requirements.txt` (Python) or project file (`.csproj`/`.sln` for .NET, `build.gradle` for Java, `package.json` for JavaScript/TypeScript).
- Test your sample with the emulator before submitting.
39 changes: 24 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@

Workflows can run for hours, days, or even months, reliably resuming from the last completed step after any crash, restart, or redeployment. Common use cases include distributed transactions, multi-agent AI orchestration, data processing pipelines, and infrastructure management.

Durable Task encompasses the Durable Task SDKs for self-hosted applications, [Durable Functions](https://learn.microsoft.com/azure/azure-functions/durable/durable-functions-overview) for serverless hosting on Azure Functions, and the [Durable Task Scheduler](https://learn.microsoft.com/azure/azure-functions/durable/durable-task-scheduler/durable-task-scheduler) - a fully managed backend service purpose-built for durable workloads.
Durable Task encompasses the Durable Task SDKs for self-hosted applications, [Durable Functions](https://learn.microsoft.com/azure/azure-functions/durable/durable-functions-overview) for serverless hosting on Azure Functions, and the [Durable Task Scheduler](https://learn.microsoft.com/azure/durable-task/scheduler/durable-task-scheduler) - a fully managed backend service purpose-built for durable workloads.

#### What is Durable Execution?

Expand All @@ -39,12 +39,12 @@ Durable execution is an industry-wide approach to making ordinary code fault-tol

- 🏗️ **Fully managed** - no storage accounts to configure, no infrastructure to maintain
- ⚡ **Purpose-built & fast** - optimized compute+memory; push-model gRPC streaming (no polling)
- 📊 **Built-in dashboard** - monitor orchestrations, drill into history, pause/terminate/restart instances ([Learn more](https://learn.microsoft.com/azure/azure-functions/durable/durable-task-scheduler/durable-task-scheduler-dashboard))
- 📊 **Built-in dashboard** - monitor orchestrations, drill into history, pause/terminate/restart instances ([Learn more](https://learn.microsoft.com/azure/durable-task/scheduler/durable-task-scheduler-dashboard))
- 🛡️ **Fault isolation** - runs as a separate Azure resource; failures don't cascade to your app
- 📈 **Independent scaling** - scheduler scales separately from your app; multiple apps can share one scheduler
- 🗂️ **Multiple task hubs** - isolate workloads by environment, team, or project ([Learn more](https://learn.microsoft.com/azure/azure-functions/durable/durable-task-scheduler/durable-task-scheduler#multiple-task-hubs))
- 🗂️ **Multiple task hubs** - isolate workloads by environment, team, or project ([Learn more](https://learn.microsoft.com/azure/durable-task/scheduler/durable-task-scheduler#multiple-task-hubs))
- 🐳 **Emulator for local dev** - Docker-based emulator with dashboard included, zero Azure dependency
- 🔐 **Identity-based auth** - Microsoft Entra ID / managed identity, no secrets in connection strings ([Learn more](https://learn.microsoft.com/azure/azure-functions/durable/durable-task-scheduler/durable-task-scheduler-identity))
- 🔐 **Identity-based auth** - Microsoft Entra ID / managed identity, no secrets in connection strings ([Learn more](https://learn.microsoft.com/azure/durable-task/scheduler/durable-task-scheduler-identity))
- 🌍 **Run anywhere** - Azure Functions, Container Apps, AKS, App Service, VMs

![Architecture](./media/images/durable-task-sdks/dts-in-all-computes.png)
Expand All @@ -71,12 +71,16 @@ docker run -d -p 8080:8080 -p 8082:8082 mcr.microsoft.com/dts/dts-emulator:lates

### Step 2: Pick your language and run a sample

| Language | Quickstart Sample | Run Command |
|----------|-------------------|-------------|
| .NET | Function Chaining | `cd samples/durable-task-sdks/dotnet/FunctionChaining/Worker && dotnet run` |
| Python | Function Chaining | `cd samples/durable-task-sdks/python/function-chaining && pip install -r requirements.txt && python worker.py` |
| Java | Function Chaining | `cd samples/durable-task-sdks/java/function-chaining && ./gradlew runChainingPattern` |
| JavaScript | Function Chaining | `cd samples/durable-task-sdks/javascript/function-chaining && npm install && node worker.mjs` |
Run the worker first, then run the client in a separate terminal to schedule orchestrations. Start each command at the repository root. The Java sample runs both in one process.

See the [quickstart guide](./docs/quickstart.md) for runtime prerequisites (.NET 10, Python 3.9+, Java 21, or Node.js 22+) and Python virtual environment setup.

| Language | Quickstart Sample | Worker Command | Client Command |
|----------|-------------------|----------------|----------------|
| .NET | [Function Chaining](./samples/durable-task-sdks/dotnet/FunctionChaining) | `cd samples/durable-task-sdks/dotnet/FunctionChaining/Worker && dotnet run` | `cd samples/durable-task-sdks/dotnet/FunctionChaining/Client && dotnet run` |
| Python | [Function Chaining](./samples/durable-task-sdks/python/function-chaining) | `cd samples/durable-task-sdks/python/function-chaining && pip install -r requirements.txt && python worker.py` | `cd samples/durable-task-sdks/python/function-chaining && python client.py` |
| Java | [Function Chaining](./samples/durable-task-sdks/java/function-chaining) | `cd samples/durable-task-sdks/java/function-chaining && ./gradlew runChainingPattern` | Included in the same process |
| JavaScript (preview) | [Function Chaining](./samples/durable-task-sdks/javascript/function-chaining) | `cd samples/durable-task-sdks/javascript/function-chaining && npm install && npm run worker` | `cd samples/durable-task-sdks/javascript/function-chaining && npm run client` |

### Step 3: Open the dashboard

Expand All @@ -92,15 +96,17 @@ Navigate to **[http://localhost:8082](http://localhost:8082)** to view orchestra
| **Hosting** | Azure Functions | Any host (ACA, AKS, App Service, VMs) |
| **Triggers** | HTTP, Timer, Queue, etc. | Self-managed |
| **Scaling** | Built-in auto-scale | Bring your own scaling |
| **Languages** | .NET, Python, Java, JavaScript | .NET, Python, Java, JavaScript |
| **Languages** | .NET, Python, Java, JavaScript/TypeScript, PowerShell | .NET, Python, Java, JavaScript/TypeScript (preview), Go (beta) |

Go samples in this repository are coming soon. The [Go SDK repository](https://github.com/microsoft/durabletask-go) contains the beta SDK and its own samples.

📖 [Choosing an orchestration framework →](https://learn.microsoft.com/azure/azure-functions/durable/durable-task-scheduler/choose-orchestration-framework)
📖 [Choosing an orchestration framework →](https://learn.microsoft.com/azure/durable-task/common/choose-orchestration-framework)

---

## Samples

Explore production-ready examples across languages and frameworks.
Explore examples across languages and frameworks.

📂 [**Full Sample Catalog →**](./samples/README.md)

Expand Down Expand Up @@ -131,7 +137,8 @@ The Durable Task Scheduler provides a **built-in dashboard** for monitoring orch
- [.NET](https://learn.microsoft.com/dotnet/api/microsoft.durabletask?view=durabletask-dotnet-1.x)
- [Python](https://github.com/microsoft/durabletask-python)
- [Java](https://learn.microsoft.com/java/api/com.microsoft.durabletask?view=durabletask-java-1.x)
- JavaScript (coming soon)
- [JavaScript / TypeScript (preview)](https://github.com/microsoft/durabletask-js) - [JavaScript samples](./samples/durable-task-sdks/javascript/)
- [Go (beta)](https://github.com/microsoft/durabletask-go) - samples in this repository coming soon

### Durable Functions

Expand All @@ -151,7 +158,9 @@ This repository includes specialized skills for AI coding assistants ([GitHub Co
| **durable-functions-dotnet** | Durable Functions with .NET isolated worker - orchestrations, activities, entities, and all workflow patterns | [Skill →](.github/skills/durable-functions-dotnet/SKILL.md) |
| **durable-task-dotnet** | Durable Task SDK for .NET - portable orchestrations without Azure Functions dependency | [Skill →](.github/skills/durable-task-dotnet/SKILL.md) |
| **durable-task-java** | Durable Task SDK for Java - orchestrations, activities, and common workflow patterns | [Skill →](.github/skills/durable-task-java/SKILL.md) |
| **durable-task-js** | Durable Task SDK for JavaScript/TypeScript - orchestrations, activities, entities, and common workflow patterns | [Skill →](.github/skills/durable-task-js/SKILL.md) |
| **durable-task-python** | Durable Task SDK for Python - orchestrations, activities, entities, and stateful agents | [Skill →](.github/skills/durable-task-python/SKILL.md) |
| **migrate-backend-to-dts** | Migrate Durable Functions apps from Azure Storage, Netherite, or MSSQL to Durable Task Scheduler | [Skill →](.github/skills/migrate-backend-to-dts/SKILL.md) |

**Usage:** Reference a skill file in your AI assistant (e.g., `#file:.github/skills/durable-task-dotnet/SKILL.md` in Copilot Chat) or ask it to read the skill before generating code. Skills are automatically detected by Claude Code when working on relevant files.

Expand All @@ -166,7 +175,7 @@ We welcome contributions! Please see [CONTRIBUTING.md](./CONTRIBUTING.md) for gu
## Community & Support

- 📖 [Official Documentation](https://aka.ms/dts-documentation)
- 💬 [GitHub Issues](https://github.com/Azure/Durable-Task-Scheduler/issues) - bugs and feature requests
- 💬 [GitHub Issues](https://github.com/Azure-Samples/Durable-Task-Scheduler/issues) - bugs and feature requests
- 📧 Contact: [nicholas.greenfield@microsoft.com](mailto:nicholas.greenfield@microsoft.com), [jiayma@microsoft.com](mailto:jiayma@microsoft.com)

---
Expand Down
14 changes: 7 additions & 7 deletions docs/FAQ.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,16 @@
## General

**Q: What is the Durable Task Scheduler?**
A: The Durable Task Scheduler is a fully managed Azure service for durable execution — running fault-tolerant code that handles failures through automatic retries and state persistence. It serves as the backend for Durable Functions and the Durable Task SDKs. [Learn more →](https://learn.microsoft.com/azure/azure-functions/durable/durable-task-scheduler/durable-task-scheduler)
A: The Durable Task Scheduler is a fully managed Azure service for durable execution - running fault-tolerant code that handles failures through automatic retries and state persistence. It serves as the backend for Durable Functions and the Durable Task SDKs. [Learn more →](https://learn.microsoft.com/azure/durable-task/scheduler/durable-task-scheduler)

**Q: What's the difference between Durable Functions and Durable Task SDKs?**
A: Durable Functions is an extension of Azure Functions — best for serverless, event-driven apps with built-in triggers and auto-scaling. Durable Task SDKs are lightweight client libraries that work on any compute (Container Apps, AKS, VMs, etc.) — best when you need portability or already have a hosting environment. Both use the same Durable Task Scheduler backend. [See comparison →](https://learn.microsoft.com/azure/azure-functions/durable/durable-task-scheduler/choose-orchestration-framework)
A: Durable Functions is an extension of Azure Functions - best for serverless, event-driven apps with built-in triggers and auto-scaling. Durable Task SDKs are lightweight client libraries that work on any compute (Container Apps, AKS, VMs, etc.) - best when you need portability or already have a hosting environment. Both use the same Durable Task Scheduler backend. [See comparison →](https://learn.microsoft.com/azure/durable-task/common/choose-orchestration-framework)

**Q: What languages are supported?**
A: Durable Task SDKs: .NET, Python, Java (JavaScript coming soon). Durable Functions: .NET, Python, Java, JavaScript/TypeScript.
A: Durable Task SDKs: .NET, Python, Java, [JavaScript/TypeScript (preview)](https://github.com/microsoft/durabletask-js), and [Go (beta)](https://github.com/microsoft/durabletask-go). [JavaScript samples](../samples/durable-task-sdks/javascript/) are available here; Go samples in this repository are coming soon. Durable Functions: .NET, Python, Java, JavaScript/TypeScript, and PowerShell. Go is a standalone SDK language, not a Durable Functions language.

**Q: How much does it cost?**
A: The Durable Task Scheduler offers a Dedicated SKU (reserved capacity) and a Consumption SKU (preview, pay-per-use). The emulator is free for local development. [See pricing details →](https://learn.microsoft.com/azure/azure-functions/durable/durable-task-scheduler/durable-task-scheduler-dedicated-sku)
A: The Durable Task Scheduler offers a Dedicated SKU (reserved capacity) and a Consumption SKU (pay-per-use). Both are generally available. The emulator is free for local development. [See pricing details →](https://learn.microsoft.com/azure/durable-task/scheduler/durable-task-scheduler-billing)

## Development

Expand All @@ -23,10 +23,10 @@ A: Yes! The Durable Task Scheduler emulator runs in Docker and provides the full
A: A task hub is a logical container for orchestration and entity instances. You can create multiple task hubs within a single scheduler to isolate workloads by environment (dev/test/prod), team, or project. Each task hub gets its own monitoring dashboard. [Learn more →](https://learn.microsoft.com/azure/azure-functions/durable/durable-functions-task-hubs)

**Q: How does authentication work?**
A: The Durable Task Scheduler uses identity-based authentication only (Microsoft Entra ID / managed identity). No shared keys or connection string secrets. For local development with the emulator, no authentication is required. [Learn more →](https://learn.microsoft.com/azure/azure-functions/durable/durable-task-scheduler/durable-task-scheduler-identity)
A: The Durable Task Scheduler uses identity-based authentication only (Microsoft Entra ID / managed identity). No shared keys or connection string secrets. For local development with the emulator, no authentication is required. [Learn more →](https://learn.microsoft.com/azure/durable-task/scheduler/durable-task-scheduler-identity)

**Q: Can I use the Durable Task Scheduler with existing Durable Functions apps?**
A: Yes! The Durable Task Scheduler is a backend provider for Durable Functions. You can switch from Azure Storage or other providers to the Durable Task Scheduler by updating your configuration. [Migration guide →](https://learn.microsoft.com/azure/azure-functions/durable/durable-task-scheduler/develop-with-durable-task-scheduler-functions)
A: Yes! The Durable Task Scheduler is a backend provider for Durable Functions. You can switch from Azure Storage or other providers to the Durable Task Scheduler by updating your configuration. [Configuration guide →](https://learn.microsoft.com/azure/durable-task/scheduler/quickstart-durable-task-scheduler#understand-the-durable-task-scheduler-configuration)

## Monitoring & Observability

Expand All @@ -42,4 +42,4 @@ A: Yes. Durable Functions supports distributed tracing V2 with Application Insig
A: Ensure Docker is running and ports 8080/8082 are free. Try: `docker pull mcr.microsoft.com/dts/dts-emulator:latest` to get the latest image. If ports conflict, map to different ports: `docker run -d -p 9080:8080 -p 9082:8082 mcr.microsoft.com/dts/dts-emulator:latest`

**Q: Where do I report bugs or request features?**
A: For issues with the Durable Task Scheduler service, use the [Azure/Durable-Task-Scheduler repo](https://github.com/Azure/Durable-Task-Scheduler/issues). For sample issues, open an issue in this repository.
A: For Durable Task Scheduler service issues and sample issues, use [this repository's issue tracker](https://github.com/Azure-Samples/Durable-Task-Scheduler/issues). The former Azure/Durable-Task-Scheduler repository is archived.
Loading
Loading