mainIn this repository is managed by Trunk

Trunk vs Aviator
Two merge queues. One never falls behind - even at 3000+ PRs/day.
Tired of breaking main and wasting CI time? These teams were too
Last updated: July 2026

Features
Works with any CI
✅
✅
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
Flaky test protection
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
Bisection
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
Dynamic parallel merge queues
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
Direct merge to main
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
PR prioritization
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
GitHub outage resilience
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
Free tier with merge queue
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
✅
✅
SOC 2
Both Trunk and Aviator are SOC 2 Type II certified.
SSO
✅
✅
SSO
Both support SAML-based SSO on Enterprise plans.
Support
✅ 24/7 on-call, included
⚠️ Email until Enterprise, no SLA
Support
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.





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.”
“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.”
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.









