Skip to content

Take control of your data, connect with anything, and expose it anywhere through protocols such as HTTP, GraphQL, and gRPC.

License

Notifications You must be signed in to change notification settings

jexia/semaphore

Repository files navigation

Maestro GoDev Go CI Go report

Maestro is a tool to orchestrate requests inside your microservice architecture. A request could be manipulated passed branched to different services to be returned as a single output.

The key features of Maestro are:

  • Call branching: All calls within a flow are executed concurrently from one another. Dependencies between calls are created through references or when specified.

  • SAGA patterns: Rollbacks are easily implemented and automatically executed when an unexpected error is thrown during execution. Rollbacks could reference data received from other services.

Getting started

  1. ⚡ CLI
  2. 🚀 Examples
  3. 📚 Documentation

You could download the CLI from source or most commonly used package managers. Or pull one of the available docker images.

docker pull docker.pkg.github.com/jexia/maestro/cli:latest

All data streams inside Maestro are called flows. A flow can manipulate, deconstruct and forwarded data in between calls and services. Flows are exposed through endpoints. Flows are generic and could handle different protocols and codecs within a single flow. All flows are strictly typed through schema definitions. These schemas define the contracts provided and accepted by services.

endpoint "checkout" "http" {
    method = "POST"
    endpoint = "/checkout"
    codec = "json"
}

endpoint "checkout" "graphql" {
    name = "data"
}

flow "checkout" {
    input "schema.Object" {
    }

    call "shipping" {
        request "package.warehouse" "Send" {
            user = "{{ input:id }}"
        }
    }

    output "schema.Object" {
        status = "{{ shipping:status }}"
    }
}

Contributing

Thank you for your interest in contributing to Maestro! ❤ Check out the open projects and/or issues and feel free to join any ongoing discussion.

Everyone is welcome to contribute, whether it's in the form of code, documentation, bug reports, feature requests, or anything else. We encourage you to experiment with the project and make contributions to help evolve it to meet your needs!

See the contributing guide for more details.