Trunk Merge Queue vs GitHub Merge Queue

GitHub’s queue is a feature. Trunk’s queue is a product.

With 14 days data for free

If you’re reading this, you’ve probably already experienced GitHub’s native merge queue and run into its limits. This comparison explains where those limits come from and how Trunk’s architecture addresses them.

Faire
Brex
Gusto
Zillow
Cockroach Labs
Google
Metabase
How Trunk Merge Queue compares to GitHub Merge Queue

Last updated: May 2026

GitHub

Features

Works with any CI

Both work with any CI provider that reports status checks to GitHub — Actions, CircleCI, Buildkite, Jenkins, and more.

Merge integrity

✅ Standard merge, optimizations around it

❌ Queue constructs merged state directly

Trunk runs all queue optimizations around the merge, not inside it. Temp branches are test-only scaffolding; the commit landing on main is a normal merge — the same one a developer would run by hand. GitHub’s queue constructs the merged state itself, which is how the April 2026 incident silently reverted thousands of lines of already-shipped code.

Flaky test protection

✅ Native detection, quarantine, and recovery

⚠️ Delay-ejection setting only

Trunk holds failed PRs while downstream PRs continue to test. If a downstream PR’s passing result proves the earlier failure was a flake, both PRs merge automatically with no manual requeue. GitHub has an opt-in setting that delays ejection but offers no detection or quarantine — you still need to figure out which test is flaky and what to do about it.

Dynamic parallel queues

✅ Dependency-aware, automatic

⚠️ Concurrent CI, single FIFO merge order

Trunk infers parallel lanes dynamically from the targets a PR actually impacts, so unrelated changes test concurrently and merge independently. GitHub validates up to 100 PRs concurrently in CI but merges them in a single FIFO order — a slow check on one PR still blocks everything queued behind it.

Batching

✅ Bisects with cache, integrates with parallel mode

⚠️ Validates merge groups; rebuilds on failure

Both group PRs into batches and run CI on combined merge groups. The differences: Trunk integrates batching with parallel queue mode and bisects with test caching on failure, so prior passing results aren’t re-run. GitHub validates merge_groups but on failure rebuilds the queue and re-tests the surviving PRs from scratch.

Speculative / predictive testing

✅ Self-healing on flake

⚠️ Ejects on flake

Both test the projected state of main ahead of time. The meaningful difference: when a speculative check fails due to a flake, Trunk recovers automatically while GitHub ejects the PR and rebuilds the queue.

Optimistic merging

✅ Merges when downstream check passes

❌ Not offered

If a later speculative check that includes a PR passes before the earlier ones complete, Trunk merges without waiting. Fewer CI runs, lower latency, same correctness guarantee. At high PR volume this compounds into significant throughput gains.

Stacked PRs

✅ /trunk stack

❌ Not offered

Trunk’s /trunk stack command combines a chain of dependent PRs into a single stacked PR that moves through the merge queue together. GitHub’s native queue treats each PR independently, so stacks have to be merged one at a time and re-tested with every step.

Force merge

✅ Trunk Sudo App, admin-verified bypass

⚠️ Manual admin override of branch protection

Trunk’s Sudo App is a dedicated GitHub App that handles emergency-bypass merges. Trunk verifies admin identity via the GitHub comment authorship that triggered the bypass, so the action is recorded against a specific user. GitHub itself requires a repo admin to override branch protection through GitHub’s UI, with no Trunk-side gating.

PR prioritization

✅ Granular priority + Direct Merge

⚠️ “Jump queue” rebuilds the entire queue

Trunk supports granular priority levels and Direct Merge for PRs landing on a tip-of-main with an empty queue. GitHub offers a binary “jump queue” option; using it triggers a full rebuild of all in-progress PRs, which slows overall merge velocity.

Bazel integration

✅ Native, target-aware

❌ None

Trunk’s parallel queue mode reads which Bazel targets a PR actually affects and tests only the relevant lanes. In a large Bazel monorepo this is the difference between a working queue and a queue that’s constantly bottlenecked on unrelated changes.

Health metrics + drill-down

✅ Time in Queue + Conclusion Count, drill-down to PRs

⚠️ Per-PR timeline events only

When your queue backs up at 4pm on release day you need to know why. Trunk’s health page surfaces Time in Queue (P50/P95/P99) and Conclusion Count over time, with drill-down from any chart point to the specific PRs in that bucket — which passed, which failed, which were cancelled, and why. GitHub’s PR timeline shows the reason a PR was removed from the queue, but no aggregated metrics.

API + Webhooks

✅ REST API + lifecycle/batch webhooks

⚠️ GraphQL PR ops + minimal webhook

Trunk ships a full REST management API for queue configuration and PR operations, plus lifecycle and batch webhooks with detailed failure reasons. GitHub exposes a limited GraphQL surface for PR enqueue/dequeue and a minimal merge_group webhook focused on triggering CI.

Support

✅ 24/7 on-call (Enterprise)

⚠️ Standard plan tiers

Trunk includes 24/7 PagerDuty on-call for system-critical issues on Enterprise. GitHub support follows standard plan tiers; queue-specific incidents do not have a dedicated SLA.

Trunk’s Merge Queue Features
Predictive merging diagram
Predictive Testing
Every PR tests against the projected state of main after all preceding queue items land - not the current state. Catch integration failures before they reach main, not after.
Anti-flake protection in the merge queue
Anti-Flake Protection
Trunk’s queue detects flaky failures inline. If a downstream PR’s passing result proves an earlier failure was transient, both PRs merge automatically - no manual requeue required.
Dynamic parallel queues
Dynamic Parallel Queues
Trunk analyzes your build graph (Bazel, Nx, or custom) and automatically creates parallel testing lanes for non-overlapping changes. Frontend and backend PRs test simultaneously without configuration.
Optimistic merging
Optimistic Merging
PRs merge as soon as their projected merge state passes, even if earlier PRs are still testing. Pending failure depth keeps the queue moving and self-healing rather than stalling on transient failures.
Batching with test caching
Batching with Test Caching
Group PRs into batches and run CI once for the group. On failure, Trunk bisects with test caching - prior passing results are reused to cut CI cost during failure isolation.
Fits Into Your Stack
Trunk Merge Queue integrates with any CI provider that reports to GitHub. Queue activity flows into Slack with personal DMs and channel routing, Prometheus-compatible endpoints for Grafana and Datadog, and a public REST API for custom automation.
Trunk integrations

Manage the queue without leaving GitHub

The Trunk Chrome extension adds queue controls directly to the GitHub PR page. Add to queue with priority, cancel in one click, and watch PRs move from Queued → Testing → Merged in real time.

Get the extension →

“It was a material sore point for us. So much so that we actually had to implement a war room to figure out how to mitigate the issues we were facing.”

Amir Toole
Amir Toole
VP Platform Engineering, Caseware

“Trunk Merge was a winner for us because something that used to take 30 minutes can be replaced with something that takes two.”

George Jacob
George Jacob
Senior Software Engineer, Faire

Security Overview

Your code is your IP, that’s why security and privacy are core to our design. We minimize data collection, storage, and access whenever possible. We operate using the principle of least privilege at all levels of our product and processes.

Compliance
We ensure Trunk meets industry-standard compliance.
Infrastructure and Data Security
We use industry best practices to provide Trunk’s services.
Corporate Security
At Trunk, we believe that good security practices start with our own team.
Application and Development Security
Our product is built with security in mind.

Try Trunk’s Merge Queue for Free

See how anti-flake protection, parallel queues, and a merge architecture that protects main can replace GitHub’s native queue.