{"id":30178103,"url":"https://github.com/mrsimonemms/temporal-serverless-workflow","last_synced_at":"2025-08-12T05:17:27.636Z","repository":{"id":308401698,"uuid":"1030452575","full_name":"mrsimonemms/temporal-serverless-workflow","owner":"mrsimonemms","description":"Build Temporal workflows with Serverless Workflow","archived":false,"fork":false,"pushed_at":"2025-08-05T18:02:13.000Z","size":81,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-05T19:31:01.750Z","etag":null,"topics":["dsl","serverless-workflow","temporal","workflow-management-system","workflows"],"latest_commit_sha":null,"homepage":"https://temporal.io","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/mrsimonemms.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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},"funding":{"github":["mrsimonemms"]}},"created_at":"2025-08-01T17:01:42.000Z","updated_at":"2025-08-05T18:02:05.000Z","dependencies_parsed_at":"2025-08-05T19:31:09.292Z","dependency_job_id":"72aa1756-fd7e-49f3-a690-7e1241095e4a","html_url":"https://github.com/mrsimonemms/temporal-serverless-workflow","commit_stats":null,"previous_names":["mrsimonemms/temporal-serverless-workflow"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/mrsimonemms/temporal-serverless-workflow","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrsimonemms%2Ftemporal-serverless-workflow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrsimonemms%2Ftemporal-serverless-workflow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrsimonemms%2Ftemporal-serverless-workflow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrsimonemms%2Ftemporal-serverless-workflow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mrsimonemms","download_url":"https://codeload.github.com/mrsimonemms/temporal-serverless-workflow/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrsimonemms%2Ftemporal-serverless-workflow/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270005591,"owners_count":24510939,"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","status":"online","status_checked_at":"2025-08-12T02:00:09.011Z","response_time":80,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["dsl","serverless-workflow","temporal","workflow-management-system","workflows"],"created_at":"2025-08-12T05:17:26.595Z","updated_at":"2025-08-12T05:17:27.626Z","avatar_url":"https://github.com/mrsimonemms.png","language":"Go","funding_links":["https://github.com/sponsors/mrsimonemms"],"categories":[],"sub_categories":[],"readme":"# Temporal Serverless Workflow\n\n\u003c!-- markdownlint-disable-next-line MD013 MD034 --\u003e\n[![Go Report Card](https://goreportcard.com/badge/github.com/mrsimonemms/temporal-serverless-workflow?cache-control=no-cache)](https://goreportcard.com/report/github.com/mrsimonemms/temporal-serverless-workflow)\n\nBuild [Temporal](https://temporal.io) workflows with [Serverless Workflow](https://serverlessworkflow.io)\n\n\u003c!-- toc --\u003e\n\n* [Loom](#loom)\n* [Why?](#why)\n* [Architecture](#architecture)\n  * [Goals](#goals)\n* [Getting started](#getting-started)\n  * [Define your workflow](#define-your-workflow)\n  * [Start your Temporal server](#start-your-temporal-server)\n  * [Run](#run)\n    * [Running examples](#running-examples)\n* [Schema](#schema)\n  * [Variables](#variables)\n* [Future developments](#future-developments)\n  * [Implementation roadmap](#implementation-roadmap)\n* [Contributing](#contributing)\n  * [Open in a container](#open-in-a-container)\n  * [Commit style](#commit-style)\n\n\u003c!-- Regenerate with \"pre-commit run -a markdown-toc\" --\u003e\n\n\u003c!-- tocstop --\u003e\n\n## Loom\n\nHere's a Loom video explaining the idea\n\n[![Video thumbnail](https://cdn.loom.com/sessions/thumbnails/ebd04b2eeda645bab5ad4426ba6f636a-18b80f0119063d98-full-play.gif)](https://www.loom.com/share/ebd04b2eeda645bab5ad4426ba6f636a)\n\n## Why?\n\nWe regularly get asked about using a domain-specific language (DSL) to make Temporal\nworkflows in a no/low-code format. For very good reasons, this is outside the scope\nof the Temporal project. [But still they come](https://www.youtube.com/watch?v=Poii8JAbtng\u0026t=441s).\n\n[Serverless Workflow](https://serverlessworkflow.io) is a [CNCF](https://www.cncf.io/)-sponsored\nproject to create a vendor-neutral method of defining a workflow.\n\n## Architecture\n\nThis application is designed to replace the Temporal worker by generating the\nworkflows and activities defined. This will be a long-running application.\n\nTriggering workflows defined by this application will be done in the normal\nTemporal way - see [examples](./examples) for more information.\n\nConceptually, the items in the `do` array of the schema are things that a Temporal\nworkflow can do. Sometimes these will be invoked by the [workflow](https://docs.temporal.io/workflows),\nbut most will be [activities](https://docs.temporal.io/activities).\n\n### Goals\n\nThis project has a number of goals:\n1. _Can_ a Temporal workflow be configured by a DSL?\n1. _Should_ a Temporal workflow be configured by a DSL?\n1. Would this be a useful addition to the Temporal ecosystem?\n\nFrom a deployment point of view, this is designed as a standalone application.\nThis allows for it to be run in multiple different ways, such as in Kubernetes\nor on bare metal.\n\n## Getting started\n\n### Define your workflow\n\nCreate a workflow in the [Serverless Workflow](https://serverlessworkflow.io)\nschema.\n\nAn [example workflow is provided](./workflow.example.yaml).\n\n### Start your Temporal server\n\nThis can be any flavour of Temporal (Cloud or self-hosted). To start a local\ndevelopment server, run:\n\n```sh\ntemporal server start-dev\n```\n\n### Run\n\nThere are many options available so it's best to look at the available options\nin the application's `help`.\n\n```sh\ngo run . -h\n```\n\nAt it's simplest, this will be:\n\n```sh\ngo run . --temporal-address localhost:7233 --files ./workflow.example.yaml\n```\n\nIt's now ready for all your workflow needs\n\n#### Running examples\n\nSee [examples](./examples) directory\n\n## Schema\n\n### Variables\n\nEach call receives the input and output from previous calls, so that can be\nused in calls. This is done using the [Go template](https://pkg.go.dev/text/template)\nvariable methods - if you set an `userId` variable, this can be retrieved by\nadding `{{ .userId }}` in your schema definition.\n\nEnvironment variables are also used, provided that the match the prefix - by default,\nthis is `TSW_`. These can also be parsed - the variable `TSW_EXAMPLE_ENVVAR`\nwould be retrieved by adding `{{ .TSW_EXAMPLE_ENVVAR }}` to your schema definition.\n\n## Future developments\n\nThis is largely dependent upon how much interest there in the community, so please\nadd stars and [raise pull requests](#contributing).\n\nThis is a very basic implementation, with only support for the basic Temporal\nworkflow. Things that will be needed to make this a production-grade system (not\nexhaustive):\n* [Temporal worker versioning](https://docs.temporal.io/production-deployment/worker-deployments/worker-versioning)\n* Custom tasks, especially to call user-defined activities\n* Published release/Helm chart\n\n### Implementation roadmap\n\nThe table below lists the current state of this implementation. This table is a\nroadmap for the project based on the\n[DSL Reference doc](https://github.com/serverlessworkflow/specification/blob/v1.0.0/dsl-reference.md).\n\nThis project currently only supports DSL `1.0.0`.\n\n| Feature | State |\n| --- | --- |\n| Workflow Document | ✅ |\n| Workflow Use | 🟡 |\n| Workflow Schedule | ❌ |\n| Task Call | 🟡 |\n| Task Do | ✅ |\n| Task Emit | ❌ |\n| Task For | ❌ |\n| Task Fork | 🟡 |\n| Task Listen | 🟡 |\n| Task Raise | ❌ |\n| Task Run | ❌ |\n| Task Set | ✅ |\n| Task Switch | ✅ |\n| Task Try | ❌ |\n| Task Wait | ✅ |\n| Lifecycle Events | ❌ |\n| External Resource | ❌ |\n| Authentication | ❌ |\n| Catalog | ❌ |\n| Extension | ❌ |\n| Error | ❌ |\n| Event Consumption Strategies | ❌ |\n| Retry | ❌ |\n| Input | ❌ |\n| Output | ❌ |\n| Export | ❌ |\n| Timeout | ❌ |\n| Duration | ❌ |\n| Endpoint | ❌ |\n| HTTP Response | ❌ |\n| HTTP Request | ❌ |\n| URI Template | ❌ |\n| Container Lifetime | ❌ |\n| Process Result | ❌ |\n| AsyncAPI Server | ❌ |\n| AsyncAPI Outbound Message | ❌ |\n| AsyncAPI Subscription | ❌ |\n| Workflow Definition Reference | ✅ |\n| Subscription Iterator | ❌ |\n\n## Contributing\n\n### Open in a container\n\n* [Open in a container](https://code.visualstudio.com/docs/devcontainers/containers)\n\n### Commit style\n\nAll commits must be done in the [Conventional Commit](https://www.conventionalcommits.org)\nformat.\n\n```git\n\u003ctype\u003e[optional scope]: \u003cdescription\u003e\n\n[optional body]\n\n[optional footer(s)]\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrsimonemms%2Ftemporal-serverless-workflow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmrsimonemms%2Ftemporal-serverless-workflow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrsimonemms%2Ftemporal-serverless-workflow/lists"}