signal box · any ci

Never merge a
broken main again.

mergequeue batches your ready PRs, tests the combined result against the latest base, and lands them together — or bisects to eject the one that broke. Works with any CI. Self-hosted. Any plan.

batch · test · land — or eject

One queue, four moves.

From approved to landed without a human in the loop — and without a red main.

  1. 01

    Queue

    PRs board the train the moment they're approved and green — no babysitting, no manual rebases.

  2. 02

    Batch

    The next N cars couple together onto the very latest base on a throwaway staging branch.

  3. 03

    Test

    Your CI runs against the combined result — the exact code that's about to land.

  4. 04

    Land — or eject

    Green fast-forwards base in one move. Red bisects to the breaker, ejects it, and re-couples the rest.

The two moves nobody else makes.

A wedged queue and a half-merged restart are the failure modes that bite. Both are designed out.

bisect to eject

One bad PR never wedges the train.

When the combined batch fails, mergequeue splits it and re-tests until the breaker is isolated. It derails off the line, gets ejected with a comment, and the survivors re-couple and land. No babysitting, no manual rebases.

crash-safe by design

A restart picks up exactly where it left off.

Every batch is an explicit, persisted state machine. State is written before each GitHub side effect, so a redeploy or a crash mid-merge can't double-push or wedge a branch — the worker reads the FSM and continues.

Built to land code, not babysit it.

Instrument-grade specs — every guarantee, spelled out.

ANY CI
Works with any CIWoodpecker, GitHub Actions, Buildkite, CircleCI — mergequeue just reads your repo's required checks. No CI lock-in.
SELF-HOSTED
Self-hostedOne small service plus Postgres. Your App keys and source never leave your infrastructure.
ANY PLAN
Any plan, private reposRuns on any GitHub plan, public or private repos. Install the App and go — nothing else to enable.
BISECT-TO-EJECT
Bisect to ejectOne bad PR never wedges the train. The batch is split until the culprit is found, ejected, and commented.
CRASH-SAFE
Crash-safe by designEvery batch is an explicit, persisted FSM. State is written before each GitHub side effect, so a restart resumes mid-flight.
OPTIMISTIC
Optimistic batchingLand several PRs per base move. Throughput scales with batch size while main stays always-green.

Where mergequeue wins.

The wedge: any CI, self-hosted, private repos on any plan.

mergequeueGitHub nativebors
Works with any CIyesnoyes
Self-hostedyesnoyes
Private repos on any planyesnoyes
Bisect to eject the breakeryesnopartial
Crash-safe persisted FSMyesyesno
Maintainedyesyesno

Install the App. Point it at a repo.
Stop watching CI.