Vibeleaderboard
Index / tool

Semaphore

semaphore.io
Visit semaphore.io
Category
Developer Tools
Rank
No. 1005Tools index
Pricing
Freemium
Type
TOOL
Use case
Deployment & Operations
Latest release
v1.6.0
Date

About

Fast hosted CI/CD. Performance-focused hosted CI/CD with pay-per-use compute. Free cloud tier, a self-hostable Community Edition, and sales-quoted Enterprise.

What it does

Semaphore is a continuous integration and delivery platform distributed as a monorepo of independently deployable services rather than one program. Pipelines are written in YAML and run through internal services for job execution, artifact storage, log archiving, and self-hosted runner coordination, all reachable through a single public API gateway. The codebase splits cleanly into three offerings built from the same source: a freely licensed core, a separately licensed paid extension, and a hosted cloud version the vendor operates itself.

Why it's ranked here

The unusual thing here is how much of the commercial product actually sits in the open repository: the same services that run the hosted platform, not a stripped-down teaser, ship under a permissive license, with only the enterprise pieces walled off in their own directory under different terms. Governance keeps the roadmap and merge decisions with the vendor, not a neutral foundation, so calling it fully community-run would overstate things. What is verifiable, though, is that self-hosting gets you the real thing, not a crippled trial.

What's good

The project is split into narrow, single-purpose services instead of one large application: a dedicated log-archiving service, a separate artifact store with its own object-cleanup worker, and a standalone envelope-encryption service that keeps secret handling isolated from everything else. Version control extends to the client side too. The authentication service checks a connecting command-line client's reported version and rejects anything too old outright, rather than leaving compatibility to chance. Docker-based build and test targets are consistent across the Elixir, Go, and JavaScript pieces of the codebase, which matters in a project built from this many separate services.

Tradeoffs

The public API surface is deliberately narrow: a single gateway service forwards a fixed set of internal calls outward, so a capability that isn't already wired through it stays out of reach for anyone outside the project, regardless of what the internal services can already do. The paid extension lives in its own directory under a different license, and the repository gives no account of what has been moved there instead of the free edition, so evaluating the free tier alone means evaluating a deliberately incomplete picture of the product.

How to use it well

This fits a team that wants to run its own pipelines on infrastructure it controls, and that is comfortable operating several independent services together rather than one deployable binary: a message queue, an object store, and a cache all need to be stood up and kept running. Start with the single-machine install to evaluate it, move to the Kubernetes path once you need the workers split apart, and expect to write pipelines by hand in YAML rather than through a hosted no-code builder. It is not the choice for a team that wants CI it never has to operate.

Technical notes+

public-api-gateway/main.go wires a grpc-gateway HTTP mux to six internal gRPC services (secrets, project secrets, dashboards, jobs, notifications, artifacts) over insecure in-cluster connections, sets a default 15MB max receive message size, and starts its StatsD connection in a background goroutine so a slow metrics backend cannot block the HTTP server from serving. artifacthub/cmd/server/main.go runs a bucket-cleaner scheduler and worker plus separate job-, pipeline-, and workflow-deletion workers, each started independently based on environment variables, all against one shared storage client. loghub2/cmd/server/main.go writes job logs to Redis and a separate cloud storage backend, then drains finished jobs through a RabbitMQ consumer bound to the job_teardown_finished routing key rather than polling. self_hosted_hub/cmd/server/main.go and repohub/cmd/server/main.go follow the same environment-variable-gated worker pattern, for self-hosted runner quotas and agent cleanup in one and repository fetching and cleanup in the other. auth/lib/auth/cli.ex enforces a minimum CLI version server-side: it parses a SemaphoreCLI user-agent header and returns a 400 to any client below version 0.30.0. Makefile drives Docker-based build, lint, test, and security targets uniformly across the Elixir, Go, and JS services, including Trivy image scans and cosign image signing. LICENSE and CONTRIBUTING.md both draw the same boundary: Apache 2.0 for everything outside ee/, a separate commercial license for the code inside it, a split GOVERNANCE.md confirms by keeping enterprise feature decisions with the vendor rather than the maintainer community.

Observed

License
Apache License 2.0 for the repository outside the ee directory; a separate commercial license governs the ee directory
Language / stack
Polyglot monorepo: Elixir for core services, Go for infrastructure services, TypeScript/React for the frontend, Ruby for webhook processing
Packaging
Ships as a multi-service monorepo built into per-service Docker images rather than one distributable binary
Install surface
Documented install paths for a single machine or a Kubernetes cluster, with a Minikube path for local development
Interfaces
A public HTTP/JSON gateway in front of internal gRPC services, plus a dedicated command-line client with server-checked version compatibility
Messaging
Inter-service coordination over RabbitMQ (AMQP) for job, pipeline, and workflow deletion workers
Structural observation
Enterprise-only code is isolated in a single ee directory rather than mixed throughout the rest of the codebase

Read from README.md, Makefile, bootstrapper/main.go, public-api-gateway/main.go, artifacthub/cmd/server/main.go, encryptor/cmd/server/main.go, repohub/cmd/server/main.go, self_hosted_hub/cmd/server/main.go, loghub2/cmd/server/main.go, auth/lib/auth/cli.ex, CONTRIBUTING.md, LICENSE, ROADMAP.md, GOVERNANCE.md, SECURITY.md.

Tags

CI/CDSemaphore

Media

Semaphore

Comments (0)

No comments yet

Editorially curated, with community endorsements as a secondary signal. Corrections welcome.