{"id":13412644,"url":"https://github.com/jexia/semaphore","last_synced_at":"2025-03-14T18:32:01.198Z","repository":{"id":39019422,"uuid":"238498486","full_name":"jexia/semaphore","owner":"jexia","description":"Take control of your data, connect with anything, and expose it anywhere through protocols such as HTTP, GraphQL, and gRPC.","archived":false,"fork":false,"pushed_at":"2023-03-06T22:38:55.000Z","size":22706,"stargazers_count":92,"open_issues_count":32,"forks_count":16,"subscribers_count":13,"default_branch":"master","last_synced_at":"2024-07-31T20:51:14.301Z","etag":null,"topics":["api-gateway","cloud-native","docker","gateway-api","go","microservice","microservices","orchistrator"],"latest_commit_sha":null,"homepage":"https://jexia.github.io/semaphore/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jexia.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":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2020-02-05T16:39:39.000Z","updated_at":"2024-04-25T03:43:09.000Z","dependencies_parsed_at":"2024-01-30T04:55:13.381Z","dependency_job_id":null,"html_url":"https://github.com/jexia/semaphore","commit_stats":null,"previous_names":["jexia/maestro"],"tags_count":22,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jexia%2Fsemaphore","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jexia%2Fsemaphore/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jexia%2Fsemaphore/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jexia%2Fsemaphore/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jexia","download_url":"https://codeload.github.com/jexia/semaphore/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243625161,"owners_count":20321247,"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","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":["api-gateway","cloud-native","docker","gateway-api","go","microservice","microservices","orchistrator"],"created_at":"2024-07-30T20:01:27.225Z","updated_at":"2025-03-14T18:31:59.673Z","avatar_url":"https://github.com/jexia.png","language":"Go","funding_links":[],"categories":["Distributed Systems","分布式系统","Go","Relational Databases"],"sub_categories":["Search and Analytic Databases","检索及分析资料库","SQL 查询语句构建库","Advanced Console UIs"],"readme":"# Semaphore [![CI](https://github.com/jexia/semaphore/workflows/Go%20CI/badge.svg)](https://github.com/jexia/semaphore/actions?query=workflow%3A%22Go+CI%22)\n\n----\n\n- Chat: [Discord](http://chat.jexia.com/)\n- Documentation: [Github pages](https://jexia.github.io/semaphore/)\n- Go package documentation: [GoDev](https://pkg.go.dev/github.com/jexia/semaphore)\n\n\u003e Take control of your data, connect with anything, and expose it anywhere through protocols such as HTTP, GraphQL, and gRPC!\n\nCreate advanced and high performing data flows and expose them through endpoints over multiple protocols such as HTTP, GraphQL, and gRPC.\nCreate custom extensions or use the availability of custom functions and protocol implementations.\n\n**Key features of Semaphore are:**\n\n* **🔗 Connect with anything** Use the right tool for the job.\n  Semaphore supports various protocols out of the box with\n  the ability to supporting additional protocols through\n  modules. Endpoints could be created to expose a single\n  flow through multiple protocols.\n\n* **🚀 Blazing fast** Semaphore scales up to your needs. Branches\n  are created to execute resources concurrently. Branches are\n  based on dependencies between resources made through\n  references or hard coded values. Creating high-performance\n  flows is almost boringly easy.\n\n* **✅ Transactional flows** Make sure that your data stays consistent.\n  Rollback data when an unexpected response is returned from\n  one of your services. References to returned values could be\n  made allowing to ensure that your customers have the best experience\n  possible.\n\n* **⛩️ Conditional logic** Only call services when needed.\n  Conditional expressions ensure that resources are only\n  executed when needed. Conditions grow to your needs.\n  Whether you want to keep things simple or need to achieve\n  complex goals.\n\n* **🌍 Adapts to your environment** Semaphore integrates\n  with your existing system(s). Define flows through\n  simple and strict typed definitions. Use your already\n  existing schema definitions such as Protobuffers. Or\n  extend Semaphore with custom modules and proprietary\n  software. Integrate services through flow definitions\n  and create a great experience for your customers and\n  your teams.\n  \n----\n\n[![asciicast](https://asciinema.org/a/344280.svg)](https://asciinema.org/a/344280)\n\n## Enterprise\n\nWant to take your systems to the next level?\nSemaphore Enterprise allows users to fully embrace the power their data flows.\nAdditional modules and tooling allows users to build more complex environments and helps running Semaphore in production.\n\nFeel free to request for more information or a demo by sending us a email at:\nsupport@jexia.com\n\n## Documentation and Getting Started\n\nDocumentation is available at [Github pages](https://jexia.github.io/semaphore/).\n\nIf you are new to Semaphore and want to get started with building flows, please\ncheck out the available [🚀 Examples](https://github.com/jexia/semaphore/tree/master/examples).\nFeel free to reach out to the community on [Discord](http://chat.jexia.com/) or by opening a new issue.\n\nData streams inside Semaphore are defined as flows. A flow could manipulate,\ndeconstruct, and forwarded data in between resources. Flows are exposed through\nendpoints. Flows are generic and could handle different protocols and codecs\nfrom a single flow. All flows are strictly typed through schema definitions.\nThese schemas define the contracts provided and accepted by services.\n\nCurrently, are only protobuffers supported but more schema definitions are\nplanned to be supported in the future. Feel free to open a new issue to discuss\nwhich schema definition you require.\n\n```hcl\nendpoint \"checkout\" \"http\" {\n\tendpoint = \"/cart/checkout\"\n\tmethod = \"POST\"\n}\n\nendpoint \"checkout\" \"grpc\" {\n\tpackage = \"webshop.cart\"\n\tservice = \"Payment\"\n\tmethod = \"Checkout\"\n}\n\nflow \"checkout\" {\n\tinput \"services.Order\" {}\n\n\tresource \"product\" {\n\t\trequest \"services.Warehouse\" \"GetProduct\" {\n\t\t\tproduct = \"{{ input:product }}\"\n\t\t}\n\t}\n\n\tresource \"shipping\" {\n\t\trequest \"services.Warehouse\" \"Send\" {\n\t\t\tuser = \"{{ input:user }}\"\n\t\t}\n\t}\n\n\toutput \"services.OrderResult\" {\n\t\tstatus = \"{{ shipping:status }}\"\n\t\tproduct = \"{{ product:. }}\"\n\t}\n}\n```\n\n### Installing Semaphore\n\nThere are variouse sources available to download and install the [⚡ Semaphore CLI](https://github.com/jexia/semaphore/tree/master/cmd/semaphore). For more information and install methods please check out the [installing section](https://github.com/jexia/semaphore/tree/master/cmd/semaphore#installing).\n\n```sh\n$ curl https://raw.githubusercontent.com/jexia/semaphore/master/install.sh | sh\n```\n\n![Install Semaphore](https://user-images.githubusercontent.com/3440116/88109404-bf256800-cbaa-11ea-964e-55b089e57cd7.gif)\n\n## Developing Semaphore\n\nIf you wish to work on Semaphore itself or any of its built-in systems, you'll\nfirst need [Go](https://www.golang.org) installed on your machine. Go version\n1.13.7+ is *required*.\n\nFor local dev first make sure Go is properly installed, including setting up a\n[GOPATH](https://golang.org/doc/code.html#GOPATH). Ensure that `$GOPATH/bin` is in\nyour path as some distributions bundle old version of build tools. Next, clone this\nrepository. Semaphore uses [Go Modules](https://github.com/golang/go/wiki/Modules),\nso it is recommended that you clone the repository ***outside*** of the GOPATH.\nYou can then download any required build tools by bootstrapping your environment:\n\n```sh\n$ make bootstrap\n...\n```\n\nTo compile a development version of Semaphore, run `make` or `make dev`. This will\nput the Semaphore binary in the `bin` folders:\n\n```sh\n$ make dev\n...\n$ bin/semaphore\n...\n```\n\nTo run tests, type `make test`. If\nthis exits with exit status 0, then everything is working!\n\n```sh\n$ make test\n...\n```\n\n## Contributing\n\nThank you for your interest in contributing to Semaphore! ❤\nCheck out the open projects and/or issues and feel free to join any ongoing discussion.\n\nEveryone 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!\n\nSee the [contributing guide](https://github.com/jexia/semaphore/blob/master/CONTRIBUTING.md) for more details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjexia%2Fsemaphore","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjexia%2Fsemaphore","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjexia%2Fsemaphore/lists"}