Fast, programmable git infrastructure on object storage
Thousands of pushes per second, open-source and APIs built for machines. Build scalable CI, work with thousands of agents in parallel or embed git version control into your product.
- pushes a second into one repository
- 7,600+
- median push latency, single pusher
- 4.4 ms
- faster shallow clones than a standard git server
- 2–3×
How it performs
What if Git worked more like a modern distributed system backed by object storage, rather than a file on a disk? The results speak for themselves. Enroute is the fastest and most scalable Git hosting solution, built for massive push concurrency, with clone performance on par with disk-based Git servers.
pushers pushes/s p50 ms p99 ms1 █▍ 201 4.4 7.78 █████████▎ 1,357 5.3 9.216 ███████████████▏ 2,213 6.4 12.464 ████████████████████████████████████████▉ 5,994 9.1 20.1256 █████████████████████████████████████████████████▉ 7,304 23.1 125.5512 ████████████████████████████████████████████████████ 7,619 40.4 307.2────────────────────────────────────────────────────────────────────────────────────────────1 → 512 pushers · peak 7,619 pushes/s
pushers pushes/s1 ▋ 2018 ████▌ 1,35716 ███████▎ 2,21364 ███████████████████▋ 5,994256 ████████████████████████ 7,304512 █████████████████████████ 7,619────────────────────────────────────────────pushers p50 ms p99 ms1 4.4 7.78 5.3 9.216 6.4 12.464 9.1 20.1256 23.1 125.5512 40.4 307.2────────────────────────────────────────────1 → 512 pushers · peak 7,619 pushes/s
We used forgemark, an open-source push benchmark, to simulate large numbers of concurrent agents pushing to one shared repository, scaling from 1 to 512 concurrent pushers and measuring throughput and latency at each step.
Running in the cloud on EC2 and S3.
What you can build with it
Program your own rules on top of headless git infrastructure or bring version control to entirely new places. These are use-cases we see teams building on top of Enroute already today.
┌────────────────────┐┌───▶│ runner │┌────────────────┐ push ┌─────────┐ ┌─────────┐ trigger │ ├────────────────────┤│ coding agent │──────▶│ enroute │───────▶│ rules │─────────┼───▶│ runner │└────────────────┘ └─────────┘ └─────────┘ │ ├────────────────────┤│ └───▶│ runner ││ └────────────────────┘│ ▲ ▲│ clone │ │ ┌────────┐└────────────────────────────────────────┘ └───▶│ cache │└────────┘
┌────────────────────────┐│ enroute │└────────────────────────┘│▼┌────────────────────────┐│ rules │└────────────────────────┘│ trigger▼┌────────────────────────┐│ runners │└────────────────────────┘
Coding agents trigger more CI runs than your setup was built for. Define your own rules, use caching, or build a hub that can support unlimited runners in parallel. Optimize your setup so your runners clock in fewer minutes.
Start building with agent skills
npx skills add enroute-sh/enroutecopyGoing custom is no longer the enemy
Stay ahead while the ground moves. Express any rule or workflow in code, on a stack you own. Host it anywhere that speaks HTTP. Enroute is fully headless and completely customizable via hooks.
Decide who gets access to your repos and for what. Enroute does not need to know your org chart or agents. Use your own data and grant access in a way that matches your risk profile: Per user, per repo, per use-case.
Build review strategies beyond the pull request. Decide which changes get reviewed by an agent and which need human oversight. Enroute calls your app after every interaction. You decide what happens next.
Protect your branch with your own rules. Changes only get applied if they comply. No settings page or yaml file needed.
Minimize the time it takes to pull from your repo. You decide what is visible on every fetch. Only serve your agents what they actually need.
The best-in-class provider today is legacy tomorrow. Connect your issue tracker or collaboration platform. Pick the sandbox that gives you the right level of abstraction over bare metal. Swap anytime.
┌──────────────────────────┐ ┌──────────────────────────┐│ │ │ ││ │◀─────────── authorize ──────────── │ ││ your app │ │ enroute ││ │ ──────────── decision ────────────▶│ ││ │ │ ││ │ │ │└──────────────────────────┘ └──────────────────────────┘
┌───────────────┐│ your app │└───────────────┘▲ authorize▼ decision┌───────────────┐│ enroute │└───────────────┘
$ git push origin main # dana, platform
remote: dana is not on the team that owns payments
fatal: unable to access 'https://acme.enroute.sh/payments.git/': 403
// enroute asks this on every git request, read or write.
async function authorize(request) {
// your identity provider, answering about your org chart.
const actor = await yourIdP.verify(request.headers);
if (!actor) return unauthorized(CHALLENGE);
// all of engineering reads. the owning team writes.
const mayWrite = actor.teams.includes(repo.team);
if (request.access === "ACCESS_WRITE" && !mayWrite) return forbidden();
return grant(repo.enrouteId, actor.id);
}
How it works
┌──────────────────────────────────────────────────────────────────────────────────────────┐│ ││ client ││ │└──────────────────────────────────────────────────────────────────────────────────────────┘│ ▲ hooksgit protocol, gRPC │ │▼ │╔═ compute ════════════════════════════════════════════════════════════════════ stateless ═╗║ ║║ ┌────────────────────────────────────────┐ ┌────────────────────────────────────────┐ ║║ │ │ │ │ ║║ │ engine │ │ cache │ ║║ │ │ │ │ ║║ └────────────────────────────────────────┘ └────────────────────────────────────────┘ ║║ ║╚══════════════════════════════════════════════════════════════════════════════════════════╝│ ▲ updates │ ▲ cold readscommits │ │ writes │ │▼ │ ▼ │┌──────────────────────────────────────────┐ ┌──────────────────────────────────────────┐│ │ │ ││ ledger │ │ object storage ││ │ │ │└──────────────────────────────────────────┘ └──────────────────────────────────────────┘
┌─────────────────────────┐│ client │└─────────────────────────┘git protocol │ ▲ hooksgRPC ▼ │╔═ compute ═══════════════╗║ ║║ ┌─────────┐ ┌─────────┐ ║║ │ engine │ │ cache │ ║║ └─────────┘ └─────────┘ ║║ ║╚═════════════════════════╝commits │ ▲ updates▼ │┌─────────────────────────┐│ ledger │└─────────────────────────┘writes │ ▲ cold reads▼ │┌─────────────────────────┐│ object storage │└─────────────────────────┘
Enroute runs git like a modern cloud database: stateless compute in front, a replicated ledger for every ref update, and object storage for the data. One repository takes thousands of pushes a second, and caching keeps clones as fast as from disk.
Enroute is fully headless and accessible via the git wire protocol or the gRPC API. Your application doesn't hold any state. Anything git is handled by Enroute.
Compute nodes hold no state, so you can add nodes as load grows. A fresh node rebuilds everything it knows from the ledger and object storage.
The engine does the git work behind every request. Handling pack files is the expensive part of git, and it happens before a push is committed. Any node validates the pack and builds it into a layer, in parallel and without taking locks. Only the ref update at the end is ordered.
Each node keeps the parts of a repository it has served in cache. A fresh node can serve right away. It reads the refs and layer list, fetches only the chunks a request needs from object storage, and keeps them for the next request.
The ledger keeps one Raft-replicated log per repository across three availability zones, holding its refs and the list of layers that make up its data. A push commits in milliseconds, and nodes subscribe to the log to stay up to date.
Repository data lives in the bucket as layers: immutable files of git objects with their own index, similar to git packs. About once a second, recent pushes are merged into one file and uploaded, and LSM-style compaction merges small layers into larger ones in the background. Objects are stored by the commit that changed them, so a fetch reads a few ranges instead of walking the tree.
▲ Get in touch
Code needs a new home
Enroute is open source and free to self-host. Get started with our agent skills that help you scaffold your own git platform from scratch.
Rather we host it? Hosted Enroute is in early access.
Or write to us: copy