{"id":26754930,"url":"https://github.com/temporalio/sdk-core","last_synced_at":"2026-02-19T23:08:03.128Z","repository":{"id":37067998,"uuid":"329126613","full_name":"temporalio/sdk-core","owner":"temporalio","description":"Core Temporal SDK that can be used as a base for language specific Temporal SDKs","archived":false,"fork":false,"pushed_at":"2025-05-13T22:48:33.000Z","size":5582,"stargazers_count":321,"open_issues_count":55,"forks_count":85,"subscribers_count":17,"default_branch":"master","last_synced_at":"2025-05-14T00:33:45.702Z","etag":null,"topics":["rust","rust-lang","rust-sdk","temporal","workflow-automation","workflow-engine","workflow-tool"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/temporalio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-01-12T22:16:31.000Z","updated_at":"2025-05-13T22:48:36.000Z","dependencies_parsed_at":"2023-10-30T23:23:08.067Z","dependency_job_id":"8f248941-633d-48fc-8e94-dfe6209e0da1","html_url":"https://github.com/temporalio/sdk-core","commit_stats":{"total_commits":347,"total_committers":23,"mean_commits":15.08695652173913,"dds":"0.26224783861671475","last_synced_commit":"ee82f43a668e9476631783ab6d100a65f8a55692"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/temporalio%2Fsdk-core","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/temporalio%2Fsdk-core/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/temporalio%2Fsdk-core/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/temporalio%2Fsdk-core/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/temporalio","download_url":"https://codeload.github.com/temporalio/sdk-core/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254227611,"owners_count":22035669,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["rust","rust-lang","rust-sdk","temporal","workflow-automation","workflow-engine","workflow-tool"],"created_at":"2025-03-28T14:17:09.344Z","updated_at":"2026-02-19T23:08:03.123Z","avatar_url":"https://github.com/temporalio.png","language":"Rust","readme":"# Temporal Core SDK\n\nCore SDK that can be used as a base for other Temporal SDKs. It is currently used as the base of:\n\n- [TypeScript SDK](https://github.com/temporalio/sdk-typescript/)\n- [Python SDK](https://github.com/temporalio/sdk-python/)\n- [.NET SDK](https://github.com/temporalio/sdk-dotnet/)\n- [Ruby SDK](https://github.com/temporalio/sdk-ruby/)\n\n# Temporal Rust SDK\n\nCurrently prerelease, see more in the [SDK README.md](crates/sdk/README.md)\n\n# Documentation\n\nCore SDK documentation can be generated with `cargo doc`, output will be placed in the\n`target/doc` directory.\n\n[Architecture](ARCHITECTURE.md) doc provides some high-level information about how Core SDK works\nand how language layers interact with it.\n\nFor the reasoning behind the Core SDK, see blog post:\n\n- [Why Rust powers Temporal’s new Core SDK](https://temporal.io/blog/why-rust-powers-core-sdk).\n\n# Development\n\nYou will need the `protoc` [protobuf compiler](https://grpc.io/docs/protoc-installation)\ninstalled to build Core.\n\nThis repo is composed of multiple crates:\n\n- temporalio-client `./crates/client` - Defines client(s) for interacting with the Temporal gRPC service.\n- temporalio-common `./crates/common` - Common code \u0026 protobuf definitions\n- temporalio-sdk-core `./crates/core` - The Core implementation.\n- temporalio-sdk-core-c-bridge `./crates/core-c-bridge` - Provides C bindings for Core.\n- temporalio-macros `./crates/macros` - Implements procedural macros used by core and the SDK.\n- temporalio-sdk `./crates/sdk` - A (currently prototype) Rust SDK built on top of Core. Used for testing.\n\nVisualized (dev dependencies are in blue):\n\n![Crate dependency graph](./arch_docs/diagrams/deps.svg)\n\nAll the following commands are enforced for each pull request:\n\n## Building and testing\n\nYou can build and test the project using cargo:\n`cargo build`\n`cargo test`\n\nRun integ tests with `cargo integ-test`. By default it will start an ephemeral server. You can also\nuse an already-running server by passing `-s external`.\n\nRun load tests with `cargo test --test heavy_tests`.\n\nNOTE: Integration tests should pass locally, if running on MacOS and you see integration tests consistently failing\nwith an error that mentions `Too many open files`, this is likely due to `ulimit -n` being too low. You can raise\nit temporarily (current shell) with `ulimit -n 65535`, or add it to your `~/.zshrc` file to apply to all shells.\n\n## Formatting\n\nTo format all code run:\n`cargo fmt --all`\n\n## Linting\n\nWe are using [clippy](https://github.com/rust-lang/rust-clippy) for linting.\nWe have a couple aliases for linting that make sure various targets are hit:\n`cargo lint` and `cargo test-lint`.\n\n## Debugging\n\nThe crate uses [tracing](https://github.com/tokio-rs/tracing) to help with debugging. To enable it\nglobally for tests, insert the below snippet at the start of the test. By default, tracing data is\noutput to stdout in a (reasonably) pretty manner.\n\n```rust\ncrate::telemetry::telemetry_init_fallback();\n```\n\nThe passed in options to initialization can be customized to export to an OTel collector, etc.\n\nTo run integ tests with OTel collection on, you can use `etc/integ-with-otel.sh`. You will want to\nmake sure you are running the collector via docker, which can be done like so:\n\n`docker-compose -f etc/docker/docker-compose.yaml -f etc/docker/docker-compose-telem.yaml up`\n\nIf you are working on a language SDK, you are expected to initialize tracing early in your `main`\nequivalent.\n\n## Proto files\n\nThis repo uses a subtree for upstream protobuf files. The path `crates/common/protos/api_upstream`\nis a subtree. To update it, use:\n\n`git pull --squash --rebase=false -s subtree -X subtree=crates/common/protos/api_upstream ssh://git@github.com/temporalio/api.git master --allow-unrelated-histories`\n\nDo not question why this git command is the way it is. It is not our place to interpret git's ways.\nThis same approach can be taken for updating `crates/common/protos/api_cloud_upstream` from the\n`api-cloud` repo.\n\nThe java testserver protos are also pulled from the sdk-java repo, but since we only need a\nsubdirectory of that repo, we just copy the files with read-tree:\n\n```bash\n# add sdk-java as a remote if you have not already\ngit remote add -f -t master --no-tags testsrv-protos git@github.com:temporalio/sdk-java.git\n# delete existing protos\ngit rm -rf crates/common/protos/testsrv_upstream\n# pull from upstream \u0026 commit\ngit read-tree --prefix crates/common/protos/testsrv_upstream -u testsrv-protos/master:temporal-test-server/src/main/proto\ngit commit\n```\n\n## Fetching Histories\n\nTests which would like to replay stored histories rely on that history being made available in\nbinary format. You can fetch histories in that format like so (from a local docker server):\n\n`cargo run --bin histfetch {workflow_id} [{run_id}]`\n\nYou can change the `TEMPORAL_SERVICE_ADDRESS` env var to fetch from a different address.\n\n## Style Guidelines\n\n### Error handling\n\nAny error which is returned from a public interface should be well-typed, and we use\n[thiserror](https://github.com/dtolnay/thiserror) for that purpose.\n\nErrors returned from things only used in testing are free to use\n[anyhow](https://github.com/dtolnay/anyhow) for less verbosity.\n","funding_links":[],"categories":["Rust"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftemporalio%2Fsdk-core","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftemporalio%2Fsdk-core","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftemporalio%2Fsdk-core/lists"}