Expo EAS Update Pricing: Cost, Bandwidth & What It Really Costs at Scale
Expo EAS Update feels cheap when you're starting out. Free tier covers you, Starter plan is reasonable, and you're shipping updates without thinking about it. Then your app grows. You're shipping more releases. Users are downloading updates. And suddenly the billing gets confusing—MAUs, bandwidth overages, per-GB charges.
This page explains how Expo actually bills for EAS Update, why costs grow faster than you expect, and what happens when you're shipping frequent releases to real users. No marketing spin—just the billing model and the math.
How Expo EAS Update Pricing Works
Expo bills EAS Update based on two things: monthly active users (MAUs) and CDN bandwidth. Each plan includes some of both, and you pay overages when you exceed either limit.
A MAU is a unique user who downloads at least one OTA update that month. If a user downloads three updates in January, they count as one MAU. If they download zero updates, they don't count.
Here's the thing: every OTA update sends the entire JavaScript bundle again. A 12MB bundle means 12MB downloaded, even if you only changed one line of code. There's no differential updates, no patches—just full bundles every time.
Typical Expo Plans (approximate, for illustration)
- •Free: ~1,000 MAUs, ~100 GB CDN bandwidth
- •Starter (~$19/mo): ~3,000 MAUs, ~100 GB bandwidth
- •Production (~$99/mo): ~50,000 MAUs, ~1 TB (1,000 GB) bandwidth
- •Enterprise (custom, often ~$1,000–$2,000+/mo): Larger MAU + bandwidth buckets, still usage-based beyond that
Note: These plans change over time. Treat these as typical tiers for understanding the model, not guarantees.
Once you exceed plan limits, you pay per additional MAU and per GB of CDN bandwidth. MAU overages slightly increase your included bandwidth, but once that's exhausted, pure bandwidth billing applies. The per-GB rate varies, but the point is: bandwidth adds up fast when every update is a full bundle.
Real-World Cost Math
Let's look at three scenarios. These aren't edge cases—they're what happens as apps grow.
Small App
- • 10 MB bundle
- • 10,000 users
- • 4 releases/month
Bandwidth per release: 10,000 users × 10 MB = 100 GB
Monthly bandwidth: 100 GB × 4 releases = 400 GB
This fits within the Production plan's 1 TB limit, but you're already at 40% of your bandwidth allocation. If you ship one more release or add a few thousand users, you're into overage territory.
Growing App
- • 12 MB bundle
- • 100,000 users
- • 4 releases/month
Bandwidth per release: 100,000 users × 12 MB = 1.2 TB
Monthly bandwidth: 1.2 TB × 4 releases = 4.8 TB
You've already blown past the Production plan's 1 TB limit on the first release. You're now paying for 3.8 TB of overage bandwidth every month, plus any MAU overages if you're above 50,000 MAUs. This is where the bills start getting unpredictable.
Large App
- • 15 MB bundle
- • 500,000 users
- • 6 releases/month
Bandwidth per release: 500,000 users × 15 MB = 7.5 TB
Monthly bandwidth: 7.5 TB × 6 releases = 45 TB
At this scale, you're in pure CDN billing territory. Even with an Enterprise plan that includes larger buckets, you're paying per-GB for most of that 45 TB. Every release is expensive. Every hotfix is expensive. The cost scales linearly with users and releases, and there's no way around it with full bundle updates.
Why This Hurts
The billing model creates a few problems that aren't obvious until you're living with them:
Hotfixes are expensive. You ship a critical bug fix. It's a one-line change, but every user downloads the full 12MB bundle again. That's fine at 10k users, painful at 100k, and genuinely expensive at 500k.
Users keep re-downloading the same JS. If a user doesn't update immediately, they'll download the same bundle again on next launch. If they're on a slow connection and the download fails, they'll retry. You're paying for bandwidth even when updates don't complete.
Costs grow with users × releases. Double your users? Double your bandwidth. Ship twice as many releases? Double your bandwidth. There's no efficiency gain as you scale. The math is just: users × bundle size × releases = bandwidth.
The unpredictable part is when you hit overages. You're not just paying for the plan—you're paying per-GB for everything over the limit. One busy month with extra releases, and your bill jumps. It's hard to budget when costs scale directly with usage.
How Patch Updates Change This
Differential updates change the math. Instead of downloading the entire bundle, you download only what changed. Most releases are KBs, not MBs.
That same 12MB bundle? If you changed 200 lines of code, the patch might be 300KB. Instead of 100,000 users downloading 12MB each (1.2 TB), they download 300KB each (30 GB). That's 98% less bandwidth.
The large app scenario we looked at earlier—45 TB monthly with full bundles—drops to maybe 900 GB with patches. Still significant, but manageable. And hotfixes? A one-line change might be 50KB instead of 15MB. The cost difference is real.
React Native Stallion supports patch updates. Same 100,000 users, same 4 releases per month, but 98% less bandwidth. The billing becomes predictable because you're not paying for full bundles every time.

Expo EAS vs Stallion: Cost Comparison
| Factor | Expo EAS Update | React Native Stallion |
|---|---|---|
| Update Type | Full bundle only | Patch updates (90-98% smaller) |
| Bandwidth per Release | Users × Bundle Size | Users × Patch Size (~2% of bundle) |
| Example: 100k users, 12MB bundle | 1.2 TB per release | ~30 GB per release |
| Cost Predictability | Usage-based, scales with releases | More predictable, lower bandwidth |
| Hotfix Cost | Full bundle download | Small patch (often <100KB) |
Comparison based on typical usage patterns. Actual costs depend on bundle size, user count, and release frequency.
Who Should Care
This pricing model starts to hurt at different scales depending on your release cadence:
Apps over ~50–100k users: You're likely hitting Production plan limits or paying overages. Every release is expensive, and hotfixes add up.
Teams shipping weekly: If you're releasing frequently, bandwidth scales linearly. Four releases per month means four times the bandwidth cost.
Teams doing hotfixes: Critical bug fixes mean full bundle downloads for all users. At scale, that's expensive even if the fix is tiny.
If you're seeing bandwidth overages, unpredictable monthly bills, or hesitating to ship releases because of cost, the billing model is working against you. Patch updates change that equation.
Frequently Asked Questions
Does Expo charge for every update?
Expo charges based on MAUs (users who download at least one update) and CDN bandwidth. If a user downloads multiple updates in a month, they still count as one MAU, but you pay for the bandwidth of each download. Every update downloads the full bundle, so bandwidth adds up quickly.
What counts as a MAU?
A monthly active user (MAU) is a unique user who downloads at least one OTA update that month. If a user downloads zero updates, they don't count. If they download three updates, they count as one MAU, but you pay for the bandwidth of all three downloads.
Why does bandwidth grow so fast?
Because every update downloads the full bundle. A 12MB bundle means 12MB downloaded, even for tiny changes. The math is simple: users × bundle size × releases = bandwidth. Double any of those, and bandwidth doubles. There's no efficiency gain as you scale.
Can Expo apps use another OTA system?
Yes. Expo apps can use React Native Stallion or other OTA systems. You'll need to configure it properly, but it works with both managed and bare React Native workflows. Many teams switch for cost, patch updates, or more control over the update process.
Are patch updates allowed by Apple and Google?
Yes. Both platforms allow OTA updates for JavaScript code changes, whether they're full bundles or patches. You can't modify native code or app configuration, but JavaScript updates are fine. Patch updates are just more efficient—same rules, less data.
If this is starting to look familiar, this is exactly why we built Stallion.
Ready to Get Started with React Native Stallion?
Start using React Native Stallion today. Free tier available for all developers.