Trunk vs Aviator

Two merge queues. One never falls behind - even at 3000+ PRs/day.

With 14 days data for free

Tired of breaking main and wasting CI time? These teams were too

Faire
Brex
Gusto
Zillow
Cockroach Labs
Google
Retool
How Trunk Merge Queue compares to Aviator MergeQueue

Last updated: July 2026

Aviator

Features

Works with any CI

Both work with any CI provider that reports status checks to GitHub - Actions, CircleCI, Buildkite, Jenkins, and more. Both queues manage GitHub repositories; neither supports GitLab-hosted repos.

Flaky test protection

✅ Detection + quarantine in the queue

⚠️ Recovery capped at depth 3

Both queues can use a downstream PR's passing result as proof that an earlier failure was a flake and merge both PRs. The differences are in the limits and the inputs. Aviator's optimistic validation is hard-capped at a depth of 3 and works from CI signals alone. Trunk's pending failure depth is configurable, and Trunk Flaky Tests quarantines known-flaky tests inside queue CI runs - any language, any test runner - so known flakes never fail a queue run in the first place. Aviator's flaky test product (TestDeck) is in beta, supports auto-rerun for pytest only, and is not integrated with queue decisions.

Bisection

✅ Bisects with test caching

⚠️ Requeue-based, no caching

Both batch PRs into one CI run and bisect on failure. The difference is what a bisection costs. Aviator handles a failed batch by closing it and requeuing the PRs into two smaller batches, which re-test from scratch. Trunk bisects in place with test caching - combinations already known to fail are never re-run - and uses dedicated bisection concurrency, so failure isolation doesn't consume queue throughput or send PRs back to the end of the line.

Dynamic parallel merge queues

✅ First-party Bazel/Nx actions, all plans

⚠️ Requires build-your-own targets, Scale plan

Both products can split a monorepo into dynamic, independent queues based on the targets a PR affects - disjoint changes test and merge independently, overlapping changes stack. The differences are in getting there. Aviator's parallel mode alone is still a single logical queue with concurrent CI; independent queues require affected targets, where your team implements the target computation (bazel-diff, Nx CLI, or directory rules) and wires it to their API - available on their Scale plan. Trunk ships first-party Bazel and Nx actions that compute and upload impacted targets, and parallel mode is included in standard pricing.

Direct merge to main

✅ Safe, on by default

⚠️ Manual break-glass label

When a PR is based on the tip of main, its lane is empty, and its checks are already green, Trunk merges in seconds without re-running CI - the speculative run would test the exact state the PR's own CI already validated, so nothing is skipped. It's on by default and requires no special permissions. Aviator's instant merge covers a different need: a manual, label-triggered break-glass that skips queue validation regardless of queue state - and skipping the PR's own CI as well requires a branch-protection bypass for the Aviator app.

PR prioritization

✅ Granular, no cascade rebuilds

⚠️ Binary, resets parallel queue

Trunk supports granular priority levels (urgent, high, medium, low, or 0-255); anything below urgent reorders the queue without restarting in-flight tests. Aviator's skip_line label is binary, and in parallel mode their docs note it resets all parallel PRs behind it - a full cascade rebuild - unless affected targets is configured.

GitHub outage resilience

✅ Automatic reconciliation

⚠️ Manual

A merge queue depends on webhooks, status checks, and the merge API simultaneously - making it uniquely sensitive to GitHub instability. When a webhook goes missing, Trunk catches up on its own: stuck queue entries and externally merged PRs are reconciled automatically, with no human in the loop. Aviator handles the same situation with a manual, per-PR /aviator refresh command - someone has to notice the stuck PR and comment on it before the queue re-examines it.

Free tier with merge queue

✅ Full queue, up to 5 committers

❌ Paid plans only

Trunk's free tier includes the full merge queue - parallel mode included - for teams up to 5 committers. Aviator's free plan does not include MergeQueue; it starts on the Team plan at $20/dev/month, with monorepo affected targets on the Scale plan at $40/dev/month.

SOC 2

Both Trunk and Aviator are SOC 2 Type II certified.

SSO

Both support SAML-based SSO on Enterprise plans.

Support

✅ 24/7 on-call, included

⚠️ Email until Enterprise, no SLA

Trunk includes 24/7 PagerDuty on-call for system-critical issues on Enterprise. Aviator offers community support on Free, email support on Team and Scale, and Slack Connect on Enterprise, with no published response-time SLA at any tier.

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. Prevent a broken main branch by catching integration failures before they reach main.
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 merge queues
Dynamic Parallel Merge 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 →

“Trunk has saved us 330 hours by preventing merge issues over the last 35 days. That’s 9.4 hours of engineering productivity saved per day.”

George Jacob
George Jacob
Senior Software Engineer, Faire

“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

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, batching with test caching, and parallel queues hold up at 100+ PRs a day.