Relaymesh unifies provider events, syncs namespaces, and delivers a single event stream to your workers so teams can ship automation without maintaining three separate stacks.
3
Providers
1
Webhook endpoints
All core events
Event coverage
GitHub App
installation
GitLab OAuth
merge_request
Bitbucket
pullrequest
{ "provider": "github", "repo": "acme/launchpad", "actor": "octocat", "event": "pull_request.opened"}Enterprise foundation
Built for platform teams that need auditability, tenant isolation, and consistent policy enforcement across GitHub, GitLab, and Bitbucket.
Policy-aware routing
Enforce tenant policies, allowed topics, and provider scopes.
Event normalization at scale
Normalize payloads into a consistent contract for every worker.
Driver-ready delivery
Publish to AMQP, NATS, Kafka, or HTTP with one config layer.
Before and after
Without Relaymesh
With Relaymesh
Architecture
Relaymesh hosts provider configs and installation metadata. Workers pull normalized events from the API and deliver them to your infrastructure with the driver you choose.
Provider instances, tenants, rules, namespaces, and onboarding flows in one place.
Worker SDK receives events, runs match rules, and publishes to your drivers.
Worker SDK
Workers connect to the control plane, stream events, and publish to your drivers with minimal setup. Stay focused on core logic while Relaymesh handles auth, retries, and routing.
Provider-aware clients
SDKs ship with GitHub/GitLab/Bitbucket helpers.
Retry + backoff built in
Failures are queued and retried safely.
Typed event payloads
Normalized payloads align with your policies.
Driver ready
Publish to AMQP, NATS, Kafka, or HTTP.
SDK Examples
Drop-in snippets for your workers.
package main
import ( "context" "log" "os" "os/signal" "syscall"
worker "github.com/relaymesh/relaymesh/sdk/go/worker")
func main() {
ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM) defer cancel()
wk := worker.New( worker.WithEndpoint("https://relaymesh.vercel.app/api/connect"), )
wk.HandleRule("85101e9f-3bcf-4ed0-b561-750c270ef6c3", func(ctx context.Context, evt *worker.Event) error { if evt == nil { return nil } log.Printf("topic=%s provider=%s type=%s installation=%s", evt.Topic, evt.Provider, evt.Type, evt.Metadata["installation_id"]) if len(evt.Payload) > 0 { log.Printf("payload bytes=%d", len(evt.Payload)) } return nil })
if err := wk.Run(ctx); err != nil { log.Fatalf("worker run failed: %v", err) }}What you get
One endpoint to ingest GitHub, GitLab, and Bitbucket events with consistent payloads.
Automatically keep repos, projects, and workspaces in sync after onboarding.
Express match rules once and publish to the right topics and drivers.
Every request is scoped by tenant, ready for SaaS platforms.
Track emitted topics, failures, and retries with a single log stream.
Support both OAuth apps and GitHub App flows with the same API surface.
Open source
Run the same control plane that powers Relaymesh Cloud. The OSS stack ships with the CLI, worker SDK, and provider integrations so you can self-host or prototype quickly.
Self-hosted server
Deploy the Go control plane with Postgres, drivers, and OAuth.
CLI + provisioning
Create providers, sync namespaces, and generate onboarding links.
Worker SDK
Consume normalized events with provider-aware clients.
Pricing
Start free, then step into production-ready routing, longer retention, and priority support when you need it.
Enterprise
Need enterprise support?
SSO/SAML, audit exports, private networking, and dedicated onboarding tailored to your rollout.
Usage-based add-ons
Extra events, retention, and tenant seats are billed as you scale.
What counts as an event?
Any webhook payload processed and routed through rules.
Security first
Per-tenant isolation, secure secrets, and configurable audit trails.
FAQ
Get quick clarity on onboarding, security, and how your workers consume events.
How does Relaymesh handle multi-tenant isolation?
Every API request is scoped by tenant ID. Provider instances, rules, namespaces, and logs never cross tenant boundaries.
Do I need to host three different webhook endpoints?
No. You configure a single endpoint per provider and route everything through the control plane.
What happens when a repo is added or removed?
Namespaces are synced automatically during onboarding and updated by provider webhooks.
How do workers receive events?
Workers use the SDK to fetch normalized events and publish them to the drivers you configure.
Can I bring my own drivers?
Yes. You can use built-in drivers or register your own for custom pipelines.
Is there a free plan?
Yes. The Starter plan includes a single provider instance with core webhook routing.
Spin up a tenant, connect your providers, and start delivering events to your workers in minutes.