Installation
GitLab Self-Hosted
Connect MergeMe to your own GitLab instance. MergeMe cannot reach your GitLab server inbound - your instance sends webhook events outbound to https://api.mergeme.dev. Register webhooks in GitLab either once per group that owns your projects (recommended) or once per project individually.
Prerequisites
- A MergeMe account (sign in at mergeme.dev with Google)
- Maintainer or Owner access on the GitLab groups or projects you want to track
- A Slack workspace where notifications should appear
- Outbound HTTPS from your GitLab instance to
api.mergeme.devon port 443 (see network requirements)
Setup
Create a workspace
Sign in and create a workspace from onboarding. You can pick Self-hosted GitLab as your starting provider (MergeMe enables self-hosted credentials automatically), or choose GitHub/GitLab.com and enable self-hosted later from the dashboard.
Connect Slack
In the sidebar, open Sources > Slack and click Connect Slack. Authorise the MergeMe bot in your Slack workspace.
Enable self-hosted GitLab and copy credentials
Open Sources > Self-hosted. If this is your first time, click Yes, use self-hosted GitLab (owners and admins only). MergeMe generates:
- Webhook URL -
https://api.mergeme.dev/webhooks/gitlab/<workspaceId> - Signing token (recommended, GitLab 19.0+)
- Secret token (fallback for GitLab 18.x and earlier)
Use Regenerate tokens if you need new values - you must update every GitLab webhook that uses them.
Register webhooks in GitLab
Paste the same MergeMe URL and tokens into GitLab. The dashboard setup checklist assumes a group webhook; per-project webhooks work too if you prefer.
- Per group (GitLab Premium or Ultimate, recommended): group > Settings > Webhooks. Events from projects in that group and its subgroups are sent to MergeMe. Map only the project IDs you need in Channel Mappings. See GitLab group webhooks.
- Per project: each project > Settings > Webhooks. Repeat for every project you want to track.
For each webhook you add:
- Paste the Webhook URL into the URL field (must start with
https://) - Paste the Signing token (GitLab 19.0+) or Secret token (older GitLab)
- Enable Merge request events and Comments (on some GitLab versions this appears as Note events)
- Leave SSL verification enabled
- Click Add webhook
Add channel mappings
Open Routing > Channel mappings. For each self-hosted project, enter the GitLab project ID (under Settings > General in GitLab), pick a Slack channel, and save. Events from unmapped projects are ignored.
Map users (optional)
Open Routing > User mappings. For each GitLab username, select the corresponding Slack user for @-mention resolution.
Network requirements
Your self-hosted GitLab instance cannot be fully air-gapped. When GitLab delivers a webhook, it makes an outbound HTTPS POST to https://api.mergeme.dev/webhooks/gitlab/<workspaceId> on port 443. MergeMe never connects inbound to your GitLab server - traffic is always GitLab > MergeMe. Allow outbound HTTPS to api.mergeme.dev through your firewall or proxy.
Signing token vs secret token
GitLab 19.0 introduced signing tokens - an HMAC-SHA256 signature over the request body, with a timestamp to prevent replays. This is more secure than the older secret token, which sends a plain value in a header with no body integrity check.
| Signing token | Secret token | |
|---|---|---|
| GitLab version | 19.0+ | All versions |
| What's sent | HMAC-SHA256 signature | Plain secret value |
| Body integrity | Yes | No |
| Replay protection | Yes (5 min window) | No |
Use the signing token if your GitLab version is 19.0 or later. Use the secret token as a fallback for older instances. MergeMe checks for the signing token first and falls back to the secret token automatically.
Troubleshooting
Webhook test fails in GitLab - Confirm your GitLab instance can reach https://api.mergeme.dev on port 443. Check firewall, proxy, and SSL verification settings. Some self-hosted instances block outbound HTTPS.
No Slack message after merging an MR - Confirm Merge request events are enabled on the GitLab webhook and the project ID in Channel Mappings matches GitLab exactly.
Comments not appearing in Slack - Confirm Comments (or Note events on older GitLab) is enabled on the webhook.