Forge Providers
Hibou supports connecting to multiple Git forges simultaneously. You can even connect multiple instances of the same forge type (e.g., two separate Forgejo servers).
Supported Forges
Section titled “Supported Forges”| Type | Value | Notes |
|---|---|---|
| GitHub | github |
GitHub.com or GitHub Enterprise |
| Forgejo | forgejo |
Forgejo instances (v7+) |
| Gitea | gitea |
Gitea instances (uses same provider as Forgejo) |
| GitLab | gitlab |
GitLab.com or self-hosted |
Indexed Configuration Pattern
Section titled “Indexed Configuration Pattern”Each forge is configured via environment variables using a zero-based index:
HIBOU_FORGE_{N}_TYPEHIBOU_FORGE_{N}_IDHIBOU_FORGE_{N}_URLHIBOU_FORGE_{N}_CLIENT_IDHIBOU_FORGE_{N}_CLIENT_SECRETHIBOU_FORGE_{N}_WEBHOOK_SECRETWhere {N} is 0, 1, 2, etc. Hibou reads indexes sequentially and stops at the first gap.
Multiple Instances
Section titled “Multiple Instances”You can configure multiple instances of the same forge type. For example, connecting both a staging and production Forgejo:
# Staging ForgejoHIBOU_FORGE_0_TYPE=forgejoHIBOU_FORGE_0_ID=forgejo-stagingHIBOU_FORGE_0_URL=https://git.staging.example.comHIBOU_FORGE_0_CLIENT_ID=...HIBOU_FORGE_0_CLIENT_SECRET=...HIBOU_FORGE_0_WEBHOOK_SECRET=...
# Production ForgejoHIBOU_FORGE_1_TYPE=forgejoHIBOU_FORGE_1_ID=forgejo-prodHIBOU_FORGE_1_URL=https://git.example.comHIBOU_FORGE_1_CLIENT_ID=...HIBOU_FORGE_1_CLIENT_SECRET=...HIBOU_FORGE_1_WEBHOOK_SECRET=...Provider Setup
Section titled “Provider Setup”1. Create an OAuth2 Application
Section titled “1. Create an OAuth2 Application”In your Forgejo instance:
- Go to Site Administration → Applications
- Click Create a new OAuth2 Application
- Set:
- Application Name:
Hibou - Redirect URI:
http://YOUR_HIBOU_URL/auth/callback
- Application Name:
- Save and copy the Client ID and Client Secret
2. Configure Webhook Secret
Section titled “2. Configure Webhook Secret”Choose a random string for webhook signature verification:
openssl rand -hex 323. Environment Variables
Section titled “3. Environment Variables”HIBOU_FORGE_0_TYPE=forgejoHIBOU_FORGE_0_ID=my-forgejoHIBOU_FORGE_0_URL=https://git.example.comHIBOU_FORGE_0_CLIENT_ID=<client-id>HIBOU_FORGE_0_CLIENT_SECRET=<client-secret>HIBOU_FORGE_0_WEBHOOK_SECRET=<webhook-secret>API Compatibility
Section titled “API Compatibility”Forgejo and Gitea share the same API. Use type forgejo for Forgejo instances and gitea for Gitea instances — both use the same underlying provider implementation.
1. Create an OAuth App
Section titled “1. Create an OAuth App”- Go to Settings → Developer settings → OAuth Apps
- Click New OAuth App
- Set:
- Application name:
Hibou - Homepage URL:
http://YOUR_HIBOU_URL - Authorization callback URL:
http://YOUR_HIBOU_URL/auth/callback
- Application name:
- Save and copy the Client ID and Client Secret
2. Configure Webhook Secret
Section titled “2. Configure Webhook Secret”openssl rand -hex 323. Environment Variables
Section titled “3. Environment Variables”HIBOU_FORGE_0_TYPE=githubHIBOU_FORGE_0_ID=github-comHIBOU_FORGE_0_CLIENT_ID=<client-id>HIBOU_FORGE_0_CLIENT_SECRET=<client-secret>HIBOU_FORGE_0_WEBHOOK_SECRET=<webhook-secret>1. Create an Application
Section titled “1. Create an Application”- Go to Admin Area → Applications (or user settings for non-admin)
- Click New Application
- Set:
- Name:
Hibou - Redirect URI:
http://YOUR_HIBOU_URL/auth/callback - Scopes:
read_user,read_api
- Name:
- Save and copy the Application ID and Secret
2. Environment Variables
Section titled “2. Environment Variables”HIBOU_FORGE_0_TYPE=gitlabHIBOU_FORGE_0_ID=gitlab-comHIBOU_FORGE_0_URL=https://gitlab.comHIBOU_FORGE_0_CLIENT_ID=<application-id>HIBOU_FORGE_0_CLIENT_SECRET=<secret>HIBOU_FORGE_0_WEBHOOK_SECRET=<webhook-secret>Webhook Verification
Section titled “Webhook Verification”Each forge provider validates incoming webhook payloads using HMAC signatures:
| Forge | Header | Algorithm |
|---|---|---|
| GitHub | X-Hub-Signature-256 |
HMAC-SHA256 |
| Forgejo/Gitea | X-Gitea-Signature |
HMAC-SHA256 |
| GitLab | X-Gitlab-Token |
Token comparison |
Requests with invalid or missing signatures are rejected with HTTP 401.