Synapse is a vendor-neutral, open-source, and community-driven Workflow Management System (WFMS) designed to implement the Serverless Workflow specification.
It enables developers and organizations to define and execute workflows effortlessly using a high-level, intuitive Domain Specific Language (DSL).
With Synapse, you can create powerful workflows that are cloud vendor-agnostic, easily scalable, and highly customizable.
- Easy to Use: The Serverless Workflow DSL is designed for universal understanding, enabling users to quickly grasp workflow concepts and create complex workflows effortlessly.
- Event Driven: Seamlessly integrate events into workflows with support for various formats, including CloudEvents, allowing for event-driven workflow architectures.
- Service Oriented: Integrate seamlessly with service-oriented architectures, allowing workflows to interact with various services over standard application protocols like HTTP, gRPC, OpenAPI, AsyncAPI, and more.
- FaaS Centric: Invoke functions hosted on various platforms within workflows, promoting a function-as-a-service (FaaS) paradigm and enabling microservices architectures.
- Timely: Define timeouts for workflows and tasks to manage execution duration effectively.
- Fault Tolerant: Easily define error handling strategies to manage and recover from errors that may occur during workflow execution, ensuring robustness and reliability.
- Schedulable: Schedule workflows using CRON expressions or trigger them based on events, providing control over workflow execution timing.
- Interoperable: Integrates seamlessly with different services and resources.
- Robust: Offers features such as conditional branching, event handling, and looping constructs.
- Scalable: Promotes code reusability, maintainability, and scalability across different environments.
- Cross-Platform: Runs on various operating systems, providing flexibility and ease of integration.
Synapse is composed of several specialized applications, allowing for atomic scalability, resilience, and ease of maintenance:
- API Server: Serves an HTTP API to manage Synapse resources, and optionally serves the Dashboard, which is Synapse's Graphical User Interface.
- Operator: Controls workflows and workflow instances, and starts workflow runners.
- Runner: Executes a single instance of a workflow.
- Correlator: Performs Complex Event Processing (CEP) and correlates ingested events.
- CLI: Allows interaction with the Synapse API via the command line interface.
For more information about the Synapse architecture, please refer to the wiki. π
Docker or Kubernetes, depending on the container platform you wish to use.
The simplest way to get started is by using the provided Docker Compose setup.
-
Clone the Synapse repository:
git clone https://github.com/serverlessworkflow/synapse.git
-
Navigate to the Docker Compose directory:
cd synapse/deployments/docker-compose
-
Build the Docker images:
docker-compose build
-
Start the services using Docker Compose:
docker-compose up
This will pull the necessary Docker images and start the Synapse services as defined in the docker-compose.yml
file. You can then access the Synapse API and dashboard as configured.
For more information about installing Synapse, please refer to the wiki. π
First, set up the Synapse API server to use with synctl
:
synctl config set-api default -server=http://localhost:8080
Then, create a new file with the definition of the workflow to create:
# greeter.yaml
document:
dsl: '1.0.0'
name: greeter
namespace: default
version: '0.1.0'
do:
greet:
set:
greetings: '${ "Hello \(.user.firstName) \(.user.lastName)!" }'
Next, run the following command to create the workflow on the API:
synctl workflow create -f greeter.yaml
Finally, run the following command to run the workflow with the specified JSON input:
synctl workflow run greeter --namespace default --version 0.1.0 --input '{\"user\":{\"firstName\":\"John\",\"lastName\":\"Doe\"}}'
The command above will provide the fully qualified name of the created workflow instance. You can utilize this name to inspect its output once the execution is finished, as demonstrated below:
synctl workflow-instance get-output greeter-uk58h3dssqp620a --namespace default --output yaml
For more information about synctl
, please refer to the wiki. π
The Synapse project has a vibrant and growing community dedicated to building a community-driven and vendor-neutral workflow runtime ecosystem. Contributions from the community are encouraged and essential to the continued growth and success of the project.
A list of community members who have contributed to Synapse can be found here. π₯
To learn how to contribute to Synapse, please refer to the contribution guidelines. π
For any copyright-related questions when contributing to a CNCF project like Synapse, please refer to the Ownership of Copyrights in CNCF Project Contributions document.
As contributors and maintainers of Synapse, and in the interest of fostering an open and welcoming community, we commit to respecting all individuals who contribute through activities such as reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other forms of participation.
The project is committed to making participation in Synapse a harassment-free experience for everyone, regardless of experience level, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, or nationality.
For more detailed information, please see the full project Code of Conduct here. π‘οΈ