Home

Awesome

<p align="center"> <img src="./assets/images/transparent_logo.png" height="350px" alt="Synapse Logo"/> </p>

Publish Release Release Commits since latest Commits since latest License

About

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.

<p align="center"> <img src="./assets/images/preview.gif" alt="Synapse Preview"/> </p>

Features

Architecture

Synapse is composed of several specialized applications, allowing for atomic scalability, resilience, and ease of maintenance:

<p align="center"> <img src="./assets/images/architecture-c4-l2.png" alt="Synapse Architecture C4 Diagram - Container Layer"/> </p>

For more information about the Synapse architecture, please refer to the wiki. 📖

Getting Started

Prerequisites

Docker or Kubernetes, depending on the container platform you wish to use.

Installation

The simplest way to get started is by using the provided Docker Compose setup.

  1. Clone the Synapse repository:

    git clone https://github.com/serverlessworkflow/synapse.git
    
  2. Navigate to the Docker Compose directory:

    cd synapse/deployments/docker-compose
    
  3. Build the Docker images:

    docker-compose build
    
  4. 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. 📖

Run using synctl Command-line Interface

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. 📖

Community

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.

Code of Conduct

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. 🛡️