.png)
March 31, 2025 marked the end of an era. Microsoft shut down App Center, taking CodePush—the OTA update solution trusted by thousands of React Native developers—offline permanently. Apps that relied on CodePush for instant bug fixes and feature rollouts suddenly lost their ability to update without going through app store review processes.
If you were affected, you remember the scramble. If you migrated just in time, you probably don't want to experience that stress again. And if you're currently evaluating alternatives, you're wondering: how do I choose a solution that won't disappear in three years?
Why Microsoft Abandoning CodePush Matters More Than You Think
CodePush wasn't some obscure Microsoft side project. It was acquired technology with a dedicated user base, integrated into App Center, and positioned as the recommended OTA solution for React Native developers. Microsoft even provided migration documentation and encouraged adoption.
Then strategic priorities shifted. App Center wasn't generating the revenue Microsoft wanted. The product team got reassigned. Support degraded. And finally, the shutdown notice arrived with six months to migrate—generous by tech company standards, but brutal when you're managing production apps serving millions of users.
The lesson isn't that Microsoft acted maliciously. They didn't. The lesson is that OTA updates are too critical to trust to companies where it's not a core product. When you're a line item in a quarterly review and the numbers don't justify continued investment, deprecation becomes inevitable regardless of how many developers depend on your service.
The False Security of "Industry Standard" Solutions
After CodePush shut down, developers migrated to various alternatives. Expo EAS Updates became the default recommendation. Branch and other attribution platforms added OTA capabilities. Some teams even built their own solutions using React Native's built-in bundle update mechanisms.
Each approach seemed reasonable at first. Expo has momentum and VC backing. Branch has revenue and enterprise customers. Self-hosted solutions give you complete control. But each also carries risks that only become apparent after you're committed.
The Expo Lock-In Problem
Expo EAS Updates works beautifully—if you're building with Expo. If you're on bare React Native or have custom native modules, integration requires significant refactoring. You're not just adopting a new OTA service; you're potentially restructuring your entire development workflow around the Expo ecosystem.
For teams already invested in Expo, this makes sense. For everyone else, it's a costly migration that creates new dependencies. When Expo's priorities shift or pricing changes, you're locked in with limited alternatives.
The Attribution Platform Distraction
Branch, Adjust, and AppsFlyer added OTA capabilities to round out their offerings. These are solid companies with enterprise customers and sustainable revenue. But OTA updates are a side feature in their attribution-focused platforms.
When you need support for an OTA issue, you're talking to teams whose primary expertise is attribution analytics. When the platform needs to choose between improving attribution features or OTA functionality, OTA loses. You're paying enterprise prices for what's essentially a checkbox feature in a larger product.
The Self-Hosted Maintenance Burden
Building your own CodePush alternative sounds appealing initially. Complete control, no vendor lock-in, no recurring costs beyond infrastructure. Microsoft even open-sourced the CodePush server code before shutting down, making self-hosting seem feasible.
Then reality hits. You need to maintain servers, handle CDN distribution, implement security updates, monitor uptime, build analytics, and keep everything running 24/7. The initial "no recurring costs" calculation didn't account for developer hours, infrastructure complexity, and the opportunity cost of building features for your actual product.
Three months in, you've spent more on maintenance than an OTA service would have cost, and you still don't have the feature completeness of established solutions.
What Actually Matters in OTA Update Infrastructure
If you've lived through CodePush's shutdown or watched competitors scramble to migrate, you understand what matters in OTA infrastructure differently than someone evaluating solutions for the first time. It's not about feature lists or promises. It's about sustainability, reliability, and business alignment.
Drop-In Compatibility That Doesn't Require Rewriting Your App
The best time to migrate from CodePush was before Microsoft announced the shutdown. The second best time is now, before your next crisis forces rushed decisions under pressure.
But migration shouldn't require refactoring your entire app. If you've built around CodePush APIs and workflows, your new solution should support the same patterns with minimal code changes. Update a few configuration values, deploy new endpoints, verify everything works, and you're live.
The React Native ecosystem moves fast enough without forcing major rewrites every time you change infrastructure vendors. Compatibility with existing CodePush patterns protects your investment in working code while giving you the benefits of more sustainable infrastructure.
Update Delivery That Handles Real-World Conditions
OTA updates sound simple in theory: bundle JavaScript, push to server, devices download and install. In practice, network conditions vary, devices go offline mid-download, app states change during updates, and edge cases multiply faster than you can document them.
Robust OTA infrastructure handles these realities gracefully. Partial downloads resume correctly. Failed updates roll back cleanly. Users on cellular connections get appropriate bandwidth management. Apps in the background update without disrupting foreground tasks.
These capabilities don't show up in feature comparison charts because everyone claims to handle them. The difference becomes apparent only in production when your update rollout succeeds or fails based on how well the infrastructure handles real-world conditions.
Rollout Control That Protects Your Users
Pushing updates instantly sounds great until you push a bug that crashes the app on launch. Suddenly, instant deployment becomes instant disaster, and you're racing to roll back before more users are affected.
Sophisticated OTA platforms provide staged rollouts where updates go to 1% of users first, then 5%, then 25%, with automatic rollback if crash rates or error metrics exceed thresholds. version and rollout management with AppSync You catch problems early, limit exposure, and fix issues before they impact your entire user base.
This isn't paranoia—it's responsible deployment practices for production apps where bugs damage real businesses and affect real users.
Infrastructure That Scales Without Breaking
Your app has 10,000 users today. Next month, it might have 100,000. In six months, maybe a million. Your OTA infrastructure needs to scale transparently without requiring architecture changes, performance optimization, or emergency capacity planning. OTA distribution platform
Enterprise-grade infrastructure handles traffic spikes from viral growth or coordinated update rollouts without degrading response times. CDN integration ensures global users get fast downloads regardless of location. Automatic scaling handles load without manual intervention.
You shouldn't think about your OTA infrastructure's capacity. It should just work, at whatever scale your app reaches.
How AppsOnAir CodePush Delivers What Microsoft Didn't
AppsOnAir CodePush emerged specifically to address the gap Microsoft left. AppsOnAir CodePush It's not a side feature in a larger platform. It's not a free tier hoping to monetize later. It's purpose-built OTA update infrastructure for React Native teams that can't afford downtime, uncertainty, or vendor lock-in.
Zero-Friction Migration From App Center
If your app currently uses App Center CodePush patterns, migrating to AppsOnAir requires updating configuration endpoints and adjusting a few initialization parameters. Your existing deployment scripts continue working. Your React Native code doesn't change. Your bundle generation process remains identical.
The migration guide is measured in minutes because compatibility with App Center CodePush was a design requirement, not an afterthought. Teams migrating from the Microsoft shutdown reported production deployments within hours of starting migration, not weeks.
React Native Architecture Support From Day One
The React Native ecosystem is transitioning to the new architecture with Fabric, TurboModules, and revised threading models. Legacy OTA solutions struggle with compatibility as the platform evolves.
AppsOnAir CodePush supports both old and new React Native architectures natively. Whether you're on React Native 0.68 or 0.76, whether you've migrated to the new architecture or you're still planning the transition, CodePush updates work identically.
This matters more than it seems. When React Native's next major version lands with breaking changes, you shouldn't need to scramble checking whether your OTA provider will support it. The platform should track React Native's evolution automatically.
Deployment Workflows That Match How Teams Actually Ship
Your CI/CD pipeline probably uses GitHub Actions, Bitrise, CircleCI, or similar automation. AppsOnAir CodePush integrates directly through CLI tools and APIs that slot into existing workflows without forcing you to learn new deployment processes.
Generate a bundle, sign it, push it to CodePush, and trigger updates—all from your existing automation scripts. No web dashboard required for routine deployments, though the dashboard provides visibility when you need it.
Teams report deploying critical fixes in under five minutes from commit to user devices. That's the speed OTA updates should enable, not aspirational marketing copy.
Analytics That Show What's Actually Happening
When you push an update, you need to know: how many users installed it successfully, how many are still on older versions, what the error rate looks like compared to the previous version, and whether the update is actually improving the metrics you care about.
AppsOnAir CodePush provides real-time visibility into update adoption, version distribution, and performance metrics. See exactly what percentage of your user base is on each version. Track rollout progress as updates propagate. Monitor error rates to catch problems early. in-app bug reporting with AppRemark
The analytics aren't buried in separate dashboards requiring correlation. They're integrated into the CodePush workflow, surfacing information at the moment you need it for making deployment decisions.
Infrastructure Built to Last, Not Experiment
The reason Microsoft shut down CodePush wasn't technical failure—the infrastructure worked fine. It was strategic misalignment. CodePush wasn't generating the revenue Microsoft needed, and it wasn't central to their cloud platform vision.
AppsOnAir CodePush is the product, not a feature in something bigger. The business model is straightforward: teams pay predictable monthly rates for OTA infrastructure, and that revenue funds continued development, support, and operations.
This alignment matters more than people realize until they've been burned. When OTA updates are your core product, every decision optimizes for reliability, performance, and customer success—not quarterly reviews questioning whether this line item justifies continued investment.
The Economics of Sustainable Infrastructure
CodePush was free under Microsoft, which made it easy to adopt but also made it vulnerable to deprecation when usage didn't justify costs. Free tiers sound attractive until they disappear, forcing expensive migrations at inconvenient times.
AppsOnAir CodePush pricing is structured around sustainable unit economics: $30-$150 per month for most teams depending on app scale and update frequency. That's less than two developer hours, for infrastructure that saves dozens of hours every month by enabling instant updates instead of app store submission cycles.
Compare that to Expo EAS Updates at $99/month minimum (plus overages for bandwidth), or enterprise attribution platforms charging $500-2000 monthly where OTA is a secondary feature. The economics favor purpose-built infrastructure priced to be sustainable long-term.
The value equation isn't just about monthly costs. It's about avoiding forced migrations when providers deprecate services, losing development velocity to submission delays, and having confidence that your infrastructure will work next year and the year after.
Making the Move Before the Next Emergency
The time to migrate from deprecated or risky infrastructure is before crisis forces rushed decisions. If you're still running on CodePush patterns but need sustainable infrastructure, or you're using an alternative that gives you the same uncertain feeling CodePush did, moving now means migrating carefully instead of desperately.
Start with a staging environment. Configure AppsOnAir CodePush using your existing bundle generation process. Deploy a test update. Verify it works exactly like App Center CodePush did. Check that your rollback procedures function correctly.
Run parallel deployments where both your current infrastructure and AppsOnAir handle the same updates, comparing results to ensure consistency. This step is optional, but for teams managing millions of users, parallel running for a week provides confidence before cutover.
When you're ready for production, update your app configuration to point at AppsOnAir endpoints, deploy the app update, and you're live. Future OTA updates flow through AppsOnAir without requiring app submissions. Existing update workflows continue functioning with new backend infrastructure.
Your users never notice the change. Your deployment automation continues working with minimal adjustments. Your team gains sustainable infrastructure without disrupting established workflows.
What Reliable Infrastructure Actually Enables
Teams using AppsOnAir CodePush report something that sounds simple but transforms how they operate: they trust OTA updates again. After Microsoft's shutdown created deployment anxiety, having reliable infrastructure restored confidence in pushing updates quickly.
Developers fix bugs in production within minutes, not waiting days for store review. Product teams A/B test features without submitting multiple app versions. Operations teams toggle functionality remotely when issues arise, avoiding forced updates.
That confidence compounds into velocity. When you trust your infrastructure, you ship faster, iterate more aggressively, and respond to user feedback immediately. The right OTA platform doesn't just enable updates—it changes how boldly you can move.
The Vendor Commitment That Actually Matters
Every OTA platform promises reliability. The difference is how that promise is structured.
Platforms where OTA is a side feature will always prioritize their core product when resources are constrained. Platforms offering free tiers will eventually deprecate or move upmarket when growth targets aren't met. Platforms backed by acquisition-focused VCs will optimize for exit valuations instead of long-term customer success.
AppsOnAir CodePush exists specifically to provide React Native teams with OTA infrastructure they can rely on indefinitely. The business model is simple: recurring revenue from customers who need reliable infrastructure funds continued operation and improvement.
This isn't about which platform has the longest feature list or most impressive marketing site. It's about alignment—when your success depends on infrastructure that keeps working, the provider's incentives should favor long-term reliability over short-term growth metrics or strategic pivots.
Microsoft taught the React Native community an expensive lesson about infrastructure dependencies. The solution isn't avoiding dependencies entirely—it's choosing dependencies structured to last. That's what AppsOnAir CodePush delivers: OTA infrastructure built to work today, tomorrow, and years from now without forced migrations or deprecation surprises.
