{"id":46496031,"url":"https://github.com/tactors/sdk","last_synced_at":"2026-03-06T12:02:53.553Z","repository":{"id":324531283,"uuid":"1097544666","full_name":"tactors/sdk","owner":"tactors","description":"Typed, builder-first actor SDK for Go built on Temporal.io: describe stateful workflows, commands, queries, and activities with fluent APIs, then run them deterministically across Temporal workers and testsuite scenarios.","archived":false,"fork":false,"pushed_at":"2025-11-27T12:06:07.000Z","size":300,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-28T01:13:19.366Z","etag":null,"topics":["actors","builder-pattern","distributed-systems","go","golang","robust","temporal","testkit","typed","workflow-automation"],"latest_commit_sha":null,"homepage":"","language":"Go","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/tactors.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-16T11:42:59.000Z","updated_at":"2025-11-27T12:05:14.000Z","dependencies_parsed_at":"2025-11-27T14:03:08.711Z","dependency_job_id":null,"html_url":"https://github.com/tactors/sdk","commit_stats":null,"previous_names":["tactors/sdk"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/tactors/sdk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tactors%2Fsdk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tactors%2Fsdk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tactors%2Fsdk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tactors%2Fsdk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tactors","download_url":"https://codeload.github.com/tactors/sdk/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tactors%2Fsdk/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30175901,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-06T11:48:51.886Z","status":"ssl_error","status_checked_at":"2026-03-06T11:48:51.460Z","response_time":250,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["actors","builder-pattern","distributed-systems","go","golang","robust","temporal","testkit","typed","workflow-automation"],"created_at":"2026-03-06T12:02:48.764Z","updated_at":"2026-03-06T12:02:53.539Z","avatar_url":"https://github.com/tactors.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Tactors SDK\n\nTactors is a typed, builder-first actor SDK for Go. You describe state, handlers, activities, and\nruntime knobs in one fluent API and receive a deterministic actor description that every runtime can\nconsume—no code generation or `interface{}` plumbing. We still touch Go’s `%T` formatting to label\ntypes, but handler routing stays strongly typed.\n\n## What you get\n\n- Typed actor builders: fix state with `actors.NewStateful`, get typed commands/queries/activities\n  via helper embeds, and build once for every runtime consumer.\n- Declarative knobs: retries, timeouts, caches, queue overrides, snapshots, and validators live on\n  the builder so intent is obvious.\n- Temporal-first runtime: one `actors.Description` powers worker registration, Ask/Query plumbing,\n  and the deterministic testsuite—no alt runtimes or codegen.\n- Ops hooks: spans/metrics around commands and cross-actor calls; rotation/versioning via\n  `WithSnapshot` and `actors.Patch`.\n\n## Quick start\n\n1) New to the ecosystem? Read [`docs/NEW_TO_TEMPORAL.md`](docs/NEW_TO_TEMPORAL.md) and\n   [`docs/NEW_TO_ACTORS.md`](docs/NEW_TO_ACTORS.md) for the quick primers.\n2) Build the smallest actor in [`docs/GETTING_STARTED.md`](docs/GETTING_STARTED.md) and run it\n   against the Temporal testsuite (`go test`).\n3) Browse runnable samples in [`docs/EXAMPLES.md`](docs/EXAMPLES.md) (code lives at\n   https://github.com/tactors/samples).\n\n## Docs map\n\n- Builder reference: [`docs/ACTOR_BUILDER.md`](docs/ACTOR_BUILDER.md).\n- Runtime/worker behavior: [`docs/RUNTIME_TEMPORAL.md`](docs/RUNTIME_TEMPORAL.md).\n- Advanced topology: [`docs/CROSS_NAMESPACE.md`](docs/CROSS_NAMESPACE.md) (opt-in routing across Temporal namespaces).\n- Temporal-first map: [`docs/INDEX.md`](docs/INDEX.md) and [`docs/TEMPORAL_MENTAL_MODEL.md`](docs/TEMPORAL_MENTAL_MODEL.md).\n- Ops \u0026 maintenance: [`docs/DIAGNOSTICS.md`](docs/DIAGNOSTICS.md) and [`docs/CONTROL_WORKFLOWS.md`](docs/CONTROL_WORKFLOWS.md).\n- Orchestration pattern: [`docs/ACTIVITY_FLOW_PATTERN.md`](docs/ACTIVITY_FLOW_PATTERN.md) for “actor is the graph” guidance.\n- Contributing: [`docs/CONTRIBUTING.md`](docs/CONTRIBUTING.md).\n\n## Testkit quick use\n\n- `testkit.ActorTemporalScenario` runs actors against Temporal’s testsuite. Stub activities inline\n  with `WhenActivity(...)`; it infers names from typed signatures or accepts explicit names.\n- Inspect merged activity options with `ExpectActivityOptions` helpers before execution.\n\n## Temporal runtime at a glance\n\n- `runtime` registers workflows/activities from an actor description and wires Ask/Query/Spawn to\n  Temporal signals, queries, and child workflows.\n- `runtime.NewWorkerSet` reuses workers per queue and rotates histories automatically when\n  `WithSnapshot` or `GetContinueAsNewSuggested()` triggers.\n- Queue defaults match the actor kind (`\u003ckind\u003e-workflow` / `\u003ckind\u003e-activity`), and workers\n  auto-disable the unused role so activity-only or workflow-only actors do not need extra flags.\n  If you explicitly point both roles at the same queue and register both, one worker serves both.\n- Activity calls get safe defaults: a StartToClose of 30s and ScheduleToClose of 2m are applied if\n  you don’t set either. Override with `actors.WithActivityStartToClose` or\n  `actors.WithActivityScheduleToClose` per-call or via `WithActivityDefaults`.\n\n## Repository guide\n\n- `actors/` – builder, typed helpers, and shared primitives.\n- `runtime/` – Temporal runner plus typed client utilities.\n- `testkit/` – deterministic harnesses (Temporal scenario and testing helpers).\n- `observability/` – pluggable tracing/metrics hooks; `internal/` – supporting packages as we flesh\n  out tooling.\n- Samples now live in the sibling repo: https://github.com/tactors/samples.\n\n## Testing\n\nRun the full suite (unit tests and Temporal testsuite scenarios) with:\n\n```bash\nGOCACHE=$(pwd)/.gocache go test ./...\n```\n\nNo external Temporal server is required—the testsuite handles registration, fake time, and cleanup.\n\n## License\n\nReleased under the [MIT License](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftactors%2Fsdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftactors%2Fsdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftactors%2Fsdk/lists"}