Githook
Control Plane for Git Events

Route GitHub, GitLab, and Bitbucket events into one reliable stream.

Githook normalizes webhooks, syncs namespaces, and dispatches events to your worker pipelines so you can ship automations without maintaining three different webhook stacks.

3

Providers

1

Webhook endpoints

All core events

Event coverage

Event flow
live

GitHub App

installation

GitLab OAuth

merge_request

Bitbucket

pullrequest

topic: pr.opened.readyworker queue
{
  "provider": "github",
  "repo": "acme/launchpad",
  "actor": "octocat",
  "event": "pull_request.opened"
}

Built for automation teams

One webhook surface for every Git provider.

Keep onboarding, namespace sync, and routing in one control plane, then run workers wherever your pipelines live.

Control plane + data plane

Keep config centralized, run workers anywhere.

Githook hosts your provider configs, installation metadata, and routing rules. Workers pull normalized events from the API and deliver them to your infrastructure with the driver you choose.

Control plane

Provider instances, tenants, rules, namespaces, and onboarding flows in one place.

Data plane

Worker SDK receives events, runs match rules, and publishes to your drivers.

What you get

Everything you need to operate webhook infrastructure at scale.

Unified webhook ingestion

One endpoint to ingest GitHub, GitLab, and Bitbucket events with consistent payloads.

Namespace sync

Automatically keep repos, projects, and workspaces in sync after onboarding.

Rules + routing

Express match rules once and publish to the right topics and drivers.

Multi-tenant isolation

Every request is scoped by tenant, ready for SaaS control planes.

Event observability

Track emitted topics, failures, and retries with a single log stream.

Provider flexibility

Support both OAuth apps and GitHub App flows with the same API surface.

Open source

Use the open source githook server as your foundation.

Run the same control plane that powers Githook 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

Plans that scale with event volume and tenants.

Start free, then step into production-ready routing, longer retention, and priority support when you need it.

Free
Kickstart
Free plan to get started with core routing.
$0.00/month
Lifetime
  • 1 driver
  • 5 rules
  • 24-hour log retention
  • Community support
Early stage
Startup
Cloud plan for early teams shipping automations.
$49.00/month
Billed monthly
  • 100k events/month per tenant
  • 7-day log retention
  • Unlimited drivers
  • Unlimited rules
Popular
Scale
Production routing and higher throughput.
$199.00/month
Billed monthly
  • 1M events/month per tenant
  • All-time log access
  • Advanced analytics + filters
  • Unlimited drivers
  • Unlimited rules
  • Priority routing + retries
  • Slack + email support

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.

How it works

Onboard once, route everywhere.

Githook keeps your onboarding and webhook lifecycle together so your team can focus on automations, not provider plumbing.

01

Create a provider instance

Configure a GitHub App, GitLab OAuth app, or Bitbucket consumer in the dashboard.

02

Sync namespaces

Pull repos into your tenant and enable webhooks in one action.

03

Route to workers

Match rules against payloads and publish to the drivers your workers already run.

Worker SDK

Write the worker logic once, deploy anywhere.

Workers connect to the control plane, stream events, and publish to your drivers with minimal setup. You stay focused on the core logic while Githook handles auth, retries, and routing.

Latest updates
worker/main.gogo
package main

import (
	"context"
	"log"
	"os"
	"os/signal"
	"syscall"

	worker "githook/sdk/go/worker"
)

func main() {

	ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
	defer cancel()

	wk := worker.New(
		worker.WithEndpoint("https://githook-app.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)
	}
}

FAQ

Questions teams ask before switching.

Get quick clarity on onboarding, security, and how your workers consume events.

Read all FAQs

Do I need to host separate webhook endpoints?

No. Githook exposes one endpoint per provider, with tenant isolation and routing handled in the control plane.

How do workers receive events?

Workers use the SDK to pull normalized events from the API and publish them to your configured drivers.

Can I bring my own drivers?

Yes. Use the built-in drivers or register your own to publish into any message bus or queue.

What happens when a repo is removed?

Namespaces are synced automatically. Removed repositories are disabled and events stop flowing.

Ready to ship webhook automation?

Spin up a tenant, connect your providers, and start routing events to your workers in minutes.