{"id":46780995,"url":"https://github.com/zigflow/zigflow","last_synced_at":"2026-04-01T22:22:08.788Z","repository":{"id":308401698,"uuid":"1030452575","full_name":"zigflow/zigflow","owner":"zigflow","description":"Define durable workflows in YAML, powered by Temporal","archived":false,"fork":false,"pushed_at":"2026-03-27T22:19:25.000Z","size":29144,"stargazers_count":110,"open_issues_count":20,"forks_count":10,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-03-27T23:58:39.534Z","etag":null,"topics":["developer-tools","dsl","durable-execution","low-code","orchestration","serverless-workflow","temporal","temporal-dsl","workflow-management-system","workflow-orchestration","workflows","yaml","zigflow"],"latest_commit_sha":null,"homepage":"http://zigflow.dev/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zigflow.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["mrsimonemms"],"buy_me_a_coffee":"mrsimonemms"}},"created_at":"2025-08-01T17:01:42.000Z","updated_at":"2026-03-27T13:34:30.000Z","dependencies_parsed_at":"2025-08-05T19:31:09.292Z","dependency_job_id":"72aa1756-fd7e-49f3-a690-7e1241095e4a","html_url":"https://github.com/zigflow/zigflow","commit_stats":null,"previous_names":["mrsimonemms/temporal-serverless-workflow","mrsimonemms/temporal-dsl","mrsimonemms/zigflow","zigflow/zigflow"],"tags_count":43,"template":false,"template_full_name":null,"purl":"pkg:github/zigflow/zigflow","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zigflow%2Fzigflow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zigflow%2Fzigflow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zigflow%2Fzigflow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zigflow%2Fzigflow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zigflow","download_url":"https://codeload.github.com/zigflow/zigflow/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zigflow%2Fzigflow/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31292639,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T21:15:39.731Z","status":"ssl_error","status_checked_at":"2026-04-01T21:15:34.046Z","response_time":53,"last_error":"SSL_read: 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":["developer-tools","dsl","durable-execution","low-code","orchestration","serverless-workflow","temporal","temporal-dsl","workflow-management-system","workflow-orchestration","workflows","yaml","zigflow"],"created_at":"2026-03-10T00:01:30.665Z","updated_at":"2026-04-01T22:22:08.780Z","avatar_url":"https://github.com/zigflow.png","language":"Go","funding_links":["https://github.com/sponsors/mrsimonemms","https://buymeacoffee.com/mrsimonemms"],"categories":[],"sub_categories":[],"readme":"# Zigflow\n\n[![Zigflow](./designs/zigflow.png \"Zigflow\")](https://zigflow.dev?utm_source=github\u0026utm_medium=readme\u0026utm_campaign=header)\n\n[![Contributions Welcome](https://img.shields.io/badge/Contributions-Welcome-green.svg?style=flat)](https://github.com/zigflow/zigflow/issues)\n[![Licence](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://github.com/zigflow/zigflow/blob/master/LICENSE)\n[![GitHub Release](https://img.shields.io/github/v/release/zigflow/zigflow?label=Release)](https://github.com/zigflow/zigflow/releases/latest)\n[![Go Report Card](https://goreportcard.com/badge/github.com/zigflow/zigflow)](https://goreportcard.com/report/github.com/zigflow/zigflow)\n\n**Declarative YAML workflows on Temporal. No SDK boilerplate.**\n\nZigflow lets you define and run [Temporal](https://temporal.io) workflows using\nYAML, built on the [CNCF Serverless Workflow](https://serverlessworkflow.io)\nspecification. You write a workflow definition; Zigflow compiles it into a\nfully-featured Temporal workflow with retries, state management and\ndeterministic execution. No Go, Java or TypeScript workflow code required.\n\n\u003e If this looks useful, a ⭐ helps others find the project.\n\n---\n\n## Why Zigflow exists\n\nWriting Temporal workflows in code is powerful, but it comes with overhead:\nyou need to learn the SDK, wire up workers, manage serialisation and keep\nworkflow code deterministic. That friction slows down teams who just need\nreliable, observable workflow execution without owning a custom engine.\n\nZigflow removes that overhead by providing an opinionated declarative layer on\ntop of Temporal. Workflow definitions are data, not code. They can be validated,\nversioned, stored and even generated by a UI, without anyone writing SDK\nboilerplate.\n\n---\n\n## Quick start\n\n1. **Download Zigflow**\n   - [Download the latest release](https://github.com/zigflow/zigflow/releases/latest)\n   - or [pull the Docker image](https://github.com/zigflow/zigflow/pkgs/container/zigflow)\n\n2. **Download the hello world workflow**\n\n   Save this [file](https://raw.githubusercontent.com/zigflow/zigflow/main/examples/hello-world/workflow.yaml)\n   as `workflow.yaml`.\n\n3. **Run it**\n\n   ```bash\n   zigflow run -f ./workflow.yaml\n   ```\n\n4. **Read the documentation**\n   - [zigflow.dev/docs](https://zigflow.dev/docs?utm_source=github\u0026utm_medium=readme\u0026utm_campaign=help)\n\n5. **Deploy to Kubernetes (optional)**\n   - [Helm chart](./charts/zigflow)\n\n6. **Join the community**\n   - [slack.zigflow.dev](https://slack.zigflow.dev)\n\n7. **⭐ Star the repo**\n\n   It helps other people find the project.\n\n---\n\n## Who is Zigflow for?\n\nZigflow is designed for teams who value speed, consistency and declarative\norchestration over maximum SDK flexibility.\n\n- **Teams who want to ship workflows faster**: Zigflow removes SDK boilerplate\n  and worker wiring, so you can define, validate and run workflows in minutes.\n- **Platform teams building an internal orchestration layer**: centralise workflow\n  execution without requiring every team to learn or embed a Temporal SDK.\n- **Teams who prefer opinionated, declarative guardrails**: Zigflow constrains\n  workflow structure in useful ways, reducing accidental complexity.\n- **Workflow-as-configuration adopters**: store, version and review workflow\n  definitions as data rather than application code.\n- **Organisations already using Temporal** who want a simpler path for\n  straightforward orchestration without sacrificing reliability.\n- **Tool builders and automation platforms** that need a spec-compliant\n  execution engine behind a UI or higher-level abstraction.\n\n---\n\n## When not to use Zigflow\n\n- **You need advanced Temporal workflow APIs and fine tuning**: if you rely on\n  nuanced child workflow behaviour, rich per-call options, or patterns that are\n  easier to express directly in code, the Temporal SDK gives you the most\n  flexibility.\n- **You are building a deeply customised Temporal platform layer**: if your\n  architecture depends heavily on SDK-level interceptors, custom middleware, or\n  tight framework integrations, an SDK-first approach provides the broadest\n  control surface.\n- **Your workflows are highly dynamic at runtime**: if the structure of the\n  workflow is generated as it runs, or you are effectively building an execution\n  engine for arbitrary user logic, a code-first workflow is often a better fit.\n- **Your team prefers workflow development as application code**: if stepping\n  through workflow logic in a debugger, refactoring with compiler guarantees,\n  and unit testing workflow functions directly are central to your development\n  process, the SDK model may feel more natural.\n- **Your workflow contains substantial domain logic rather than orchestration**:\n  Zigflow excels at the declarative orchestration of activities and services. If\n  most of your business logic lives inside the workflow itself, with complex\n  in-memory decision making or algorithmic behaviour, writing workflows directly\n  in an SDK may be clearer.\n\nIn those cases, use Temporal directly. Zigflow is an opinionated layer on top of\nTemporal, not a replacement for its full SDK capabilities.\n\n---\n\n## How it works\n\n1. You define a workflow using YAML based on the Serverless Workflow spec.\n2. Zigflow validates the definition before execution.\n3. Zigflow compiles the definition into a Temporal workflow implementation.\n4. A worker is started for the configured namespace and task queue.\n5. Activities are executed by your existing Temporal workers.\n\nZigflow handles orchestration. Your services handle the work.\n\n---\n\n## How it compares\n\nZigflow is an opinionated, declarative layer on top of Temporal. It trades some\nSDK-level flexibility for faster development and structural guardrails.\n\n| Capability | \u003cimg src=\"./designs/temporal.png#gh-light-mode-only\" alt=\"Temporal SDKs\" height=\"50px\" /\u003e\u003cimg src=\"./designs/temporal-dark.png#gh-dark-mode-only\" alt=\"Temporal SDKs\" height=\"50px\" /\u003e | Custom DSL | \u003cimg src=\"./designs/zigflow.png \" alt=\"Zigflow\" height=\"50px\" /\u003e |\n| --- | :--: | :--: | :--: |\n| **Workflow definition model** | Imperative code | Declarative | Declarative |\n| **Control and flexibility** | Maximum | Depends on implementation | Opinionated and constrained |\n| **Retries and durability** | ✅ Native Temporal | ⚠️ You build it | ✅ Native Temporal |\n| **Continue-as-new** | ✅ Supported (you implement and tune it) | ⚠️ You build it | ✅ Automatic (Zigflow continues as new for you) |\n| **CNCF spec alignment** | ❌ | ❌ Usually bespoke | ✅ Serverless Workflow v1.0+ |\n| **Validation before execution** | Manual or custom | Depends on implementation | ✅ Built-in validation |\n| **Boilerplate and worker setup** | Required | Depends on implementation | Minimal |\n| **Kubernetes deployment** | Manual | Manual | ✅ Helm chart included |\n| **Multi-language activities** | ✅ | Depends on implementation | ✅ Any Temporal SDK |\n\nUse the SDK when you need maximum flexibility. Use Zigflow when you want\nconsistent, declarative orchestration with less boilerplate.\n\n---\n\n## Examples\n\n### Hello World\n\n\u003e Runnable version: [examples/hello-world](./examples/hello-world)\n\n```yaml\ndocument:\n  dsl: 1.0.0\n  namespace: zigflow # Mapped to the Temporal task queue\n  name: hello-world  # Workflow type\n  version: 0.0.1\ndo:\n  - set:\n      output:\n        as:\n          data: ${ . }\n      set:\n        message: Hello from Ziggy\n```\n\n```bash\nzigflow run -f ./examples/hello-world/workflow.yaml\n```\n\nZigflow starts the worker. You can then trigger the workflow from any\n[Temporal SDK](https://docs.temporal.io/encyclopedia/temporal-sdks), the\n[Temporal UI](https://docs.temporal.io/web-ui#workflow-actions) or the\n[Temporal CLI](https://docs.temporal.io/cli/workflow#start).\n\n- [**Task Queue**](https://docs.temporal.io/task-queue): `zigflow`\n- [**Workflow Type**](https://docs.temporal.io/workflows#intro-to-workflows): `hello-world`\n\n---\n\n### Activity call\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eActivity call example (click to expand)\u003c/strong\u003e\u003c/summary\u003e\n\n\u003e Runnable version: [examples/activity-call](./examples/activity-call)\n\nCall external Temporal activities from a declarative definition. Input is\nvalidated against a JSON Schema before the workflow runs.\n\n```yaml\ndocument:\n  dsl: 1.0.0\n  namespace: zigflow\n  name: activity-call\n  version: 0.0.1\ninput:\n  schema:\n    format: json\n    document:\n      type: object\n      required:\n        - userId\n      properties:\n        userId:\n          type: string\ntimeout:\n  after:\n    minutes: 1\ndo:\n  - captureInput:\n      set:\n        requestedUserId: ${ $input.userId }\n        requestId: ${ uuid }\n  - fetchProfile:\n      call: activity\n      with:\n        name: activitycall.FetchProfile\n        arguments:\n          - ${ $data.requestedUserId }\n          - ${ $data.requestId }\n        taskQueue: activity-call-worker\n  - generateWelcome:\n      call: activity\n      with:\n        name: activitycall.GenerateWelcome\n        arguments:\n          - ${ $data.fetchProfile }\n        taskQueue: activity-call-worker\n  - finalize:\n      set:\n        workflowId: ${ $data.requestId }\n        profile: ${ $data.fetchProfile }\n        message: ${ $data.generateWelcome.message }\n```\n\nActivity workers can be written in any language with a Temporal SDK: Go,\nPython, TypeScript, Java and more. Zigflow handles the workflow orchestration;\nyour existing services handle the work.\n\n\u003e If you find these examples useful, consider giving the repo a ⭐. It helps\n\u003e the project grow.\n\n\u003c/details\u003e\n\n---\n\nMore examples (child workflows, fork/fan-out, signals, queries, try-catch,\nschedules and more) are in [examples/](./examples).\n\n---\n\n## Features\n\n- **Temporal DSL**: declarative YAML definitions that compile to Temporal workflows\n- **CNCF standard**: aligned with Serverless Workflow v1.0+\n- **Validation first**: definitions are validated before execution; invalid or\n  unsupported constructs are rejected with actionable errors\n- **Multi-language activities**: activity workers can use any Temporal SDK\n- **Low-code and visual-ready**: suitable for UI workflow builders and\n  orchestration tools\n- **Kubernetes-native**: Helm chart included for cluster deployments\n- **Open source**: Apache 2.0 licence, contributions welcome\n\n---\n\n## ⚡ What's with the name?\n\nZigflow is named after Ziggy, [Temporal's official mascot](https://temporal.io/blog/temporal-in-space).\n\nZiggy is a tardigrade, a microscopic animal that is\n[basically indestructible](https://en.wikipedia.org/wiki/Environmental_tolerance_in_tardigrades).\nSound familiar?\n\nAlso, the colours are based on the Ziggy Stardust lightning bolt.\n\n---\n\n## Telemetry\n\nTelemetry helps the maintainers understand whether Zigflow is being used in\nreal production environments. No personal data is collected.\n\nWhen a worker starts, Zigflow sends:\n\n- an anonymous installation ID (generated locally on first run, or derived from\n  the container hostname)\n- the Zigflow version\n- basic runtime information (OS, architecture, container detection)\n\nWhen workflows are executed, Zigflow sends a periodic heartbeat (once per minute)\ncontaining:\n\n- the total number of workflow runs since the worker started\n- the worker uptime in seconds\n\nHeartbeats are only sent when the run count changes. Idle workers do not\nemit repeated telemetry.\n\nZigflow does **not** collect:\n\n- workflow definitions\n- workflow inputs or outputs\n- execution IDs\n- task names\n- hostnames\n- environment variable values\n- organisation identifiers\n\nTelemetry exists solely to understand real-world adoption and usage.\n\n**Opting out** is straightforward:\n\n```sh\n# Environment variable\nDISABLE_TELEMETRY=true\n\n# CLI flag\n--disable-telemetry\n```\n\n---\n\n## Project status\n\nZigflow is under active development and evolving steadily.\n\n- The core execution engine and validation pipeline are stable.\n- The DSL schema follows semantic versioning.\n- Kubernetes deployment via Helm is supported.\n- Backwards compatibility is maintained within major versions.\n- Zigflow is actively used in internal tooling and early adopter environments.\n\nZigflow is designed for long-term use as the declarative orchestration layer on\ntop of Temporal.\n\nBug reports, feedback and contributions are welcome.\n\n---\n\n## Related projects\n\n- [Temporal](https://temporal.io)\n- [CNCF Serverless Workflow](https://serverlessworkflow.io)\n- [Helm chart](./charts/zigflow)\n\n---\n\n## Contributing\n\nContributions are welcome. See [CONTRIBUTING.md](./CONTRIBUTING.md) for\nguidelines on naming conventions, dev setup and commit style.\n\n---\n\n## Contributors\n\n\u003ca href=\"https://github.com/zigflow/zigflow/graphs/contributors\"\u003e\n  \u003cimg alt=\"Contributors\"\n    src=\"https://contrib.rocks/image?repo=zigflow/zigflow\u0026v=1769433596\" /\u003e\n\u003c/a\u003e\n\nMade with [contrib.rocks](https://contrib.rocks/preview?repo=zigflow%2Fzigflow).\n\n[![Star History Chart](https://api.star-history.com/svg?repos=zigflow/zigflow\u0026type=date\u0026legend=top-left)](https://www.star-history.com/#zigflow/zigflow\u0026type=date\u0026legend=top-left)\n\n---\n\n## Licence\n\nDistributed under the [Apache-2.0](./LICENSE) licence.\n\n© 2025 - 2026 [Zigflow authors](https://github.com/zigflow/zigflow/graphs/contributors)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzigflow%2Fzigflow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzigflow%2Fzigflow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzigflow%2Fzigflow/lists"}