MergeMeMergeMe/Docs

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.dev on port 443 (see network requirements)

Setup

1

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.

2

Connect Slack

In the sidebar, open Sources > Slack and click Connect Slack. Authorise the MergeMe bot in your Slack workspace.

3

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.

4

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
5

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.

6

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 tokenSecret token
GitLab version19.0+All versions
What's sentHMAC-SHA256 signaturePlain secret value
Body integrityYesNo
Replay protectionYes (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.