Skip to main content

Introduction

In addition to the official Go and Java SDKs, the Cadence community has developed client libraries for other popular programming languages. These SDKs are maintained by community members and provide varying levels of feature support.
Community SDKs may have limited features compared to official SDKs and may not be production-ready. Evaluate carefully before using in critical applications.

Available Community SDKs

Python SDK

cadence-python

Community-maintained Python client for Cadence workflows

Overview

The Python SDK provides a Pythonic interface for building Cadence workflows and activities. It’s suitable for prototyping, internal tools, and non-critical workflows.

Installation

pip install cadence-client

Quick Example

from cadence.workflow import workflow_method, Workflow
from cadence.activity_method import activity_method

@activity_method(task_list="python-tasks", schedule_to_close_timeout_seconds=300)
async def greet(name: str) -> str:
    return f"Hello, {name}!"

class HelloWorkflow:
    @workflow_method(execution_start_to_close_timeout_seconds=600, task_list="python-tasks")
    async def say_hello(self, name: str) -> str:
        return await greet(name)

Features

  • Basic workflow and activity definitions
  • Workflow execution and completion
  • Signal and query support
  • Child workflows
  • Timer operations
  • Basic error handling
  • Limited production testing
  • Fewer built-in retry mechanisms
  • Less comprehensive documentation
  • May lag behind official SDK features
  • Community support only

Use Cases

  • Internal automation tools
  • Data processing pipelines
  • Prototyping and experimentation
  • Integration with Python data science libraries
  • Lightweight orchestration tasks

Ruby SDK

cadence-ruby

Community-maintained Ruby client developed by Coinbase

Overview

The Ruby SDK was developed by Coinbase for their internal use. It provides a Ruby-native interface for Cadence workflows and has been battle-tested in Coinbase’s production environment.

Installation

Add to your Gemfile:
Gemfile
gem 'cadence-ruby'
Then install:
bundle install

Quick Example

require 'cadence/workflow'
require 'cadence/activity'

class GreetingActivity < Cadence::Activity
  def execute(name)
    "Hello, #{name}!"
  end
end

class HelloWorkflow < Cadence::Workflow
  def execute(name)
    workflow.execute_activity(
      GreetingActivity,
      name,
      options: {
        start_to_close_timeout: 60,
        retry_policy: {
          initial_interval: 1,
          maximum_attempts: 3
        }
      }
    )
  end
end

Features

  • Workflow and activity execution
  • Signals and queries
  • Child workflows
  • Activity retries with exponential backoff
  • Rails integration helpers
  • Production-tested at Coinbase
  • Actively used at Coinbase
  • Battle-tested in financial services
  • Good documentation and examples
  • Active maintenance (though not official)

Use Cases

  • Ruby on Rails applications
  • Background job orchestration
  • Complex business process automation
  • Financial transaction workflows
  • Integration with existing Ruby services

Other Community Projects

iWF Framework

iWF

Domain-specific language (DSL) framework built on top of Cadence
Developed by Indeed, iWF provides a simplified interface for building workflows with Cadence. It offers:
  • Simplified workflow definition syntax
  • Multi-language support through HTTP API
  • State machine-based workflow modeling
  • Built-in best practices and patterns
  • Reduced boilerplate code

Example

from iwf import workflow, state

@workflow
class OrderWorkflow:
    @state(start=True)
    def submit_order(self, context):
        # Submit order logic
        return "process_payment"
    
    @state
    def process_payment(self, context):
        # Payment processing
        return "fulfill_order"
    
    @state(end=True)
    def fulfill_order(self, context):
        # Order fulfillment
        return "completed"

TypeScript/JavaScript

While there’s no official TypeScript/JavaScript SDK for Cadence, developers looking for TypeScript support may consider:
Temporal (a fork of Cadence) has excellent TypeScript support:
import { proxyActivities } from '@temporalio/workflow';

const { greet } = proxyActivities({
  startToCloseTimeout: '1 minute',
});

export async function helloWorkflow(name: string): Promise<string> {
  return await greet(name);
}
Note: Temporal and Cadence are not wire-compatible.

Comparing Community vs Official SDKs

Advantages:
  • Full feature support
  • Regular updates and bug fixes
  • Comprehensive documentation
  • Official support channels
  • Production-ready guarantees
  • Performance optimizations
  • Extensive testing
Best for:
  • Production applications
  • Mission-critical workflows
  • Long-term maintenance
  • Enterprise deployments

Contributing to Community SDKs

How to Contribute

1

Choose a Project

Select a community SDK that aligns with your skills and interests.
2

Understand the SDK

Review the existing codebase, documentation, and open issues.
3

Start Small

Begin with documentation improvements or bug fixes before major features.
4

Follow Guidelines

Adhere to the project’s contributing guidelines and code style.
5

Engage with Maintainers

Communicate with maintainers before starting significant work.

Building a New SDK

Interested in creating an SDK for a new language?
  • Deep understanding of Cadence concepts
  • Familiarity with the target language
  • Understanding of RPC frameworks (Thrift/gRPC)
  • Knowledge of async/concurrent programming
  • Access to Cadence IDL definitions
  1. Service Client: Connection to Cadence server
  2. Workflow Runtime: Deterministic execution engine
  3. Activity Runtime: Non-deterministic task execution
  4. Worker: Task polling and execution
  5. State Management: Workflow state persistence
  6. Retry Logic: Configurable retry policies
  7. Testing Framework: Unit testing support
  • Study official SDK implementations
  • Start with core features (workflow, activity, worker)
  • Ensure deterministic execution
  • Implement comprehensive tests
  • Document all public APIs
  • Provide working examples
  • Engage with Cadence community

Community Resources

Slack

Join #cadence-users on CNCF Slack for discussions

GitHub Discussions

Ask questions and share ideas

Stack Overflow

Find answers to common questions

Contributing Guide

Learn how to contribute to Cadence

Migration Paths

From Community SDK to Official SDK

If you start with a community SDK and later need to migrate to an official SDK:
1

Audit Existing Workflows

Document all workflows, activities, and their dependencies.
2

Map Features

Identify equivalent features in the target official SDK.
3

Incremental Migration

Migrate one workflow at a time, starting with the simplest.
4

Parallel Deployment

Run both SDK workers simultaneously during transition.
5

Testing

Thoroughly test migrated workflows before decommissioning old workers.
6

Monitor

Track metrics and errors during and after migration.

Next Steps

Go SDK

Explore the official Go client SDK

Java SDK

Learn about the official Java client SDK

Core Concepts

Understand Cadence fundamentals

CLI

Manage workflows with Cadence CLI

Build docs developers (and LLMs) love