Guides7 min read

How often should you release a mobile app?

Weekly, every two weeks, or monthly? How store review, phased rollouts and user update behavior shape release cadence, and the two-track model that lets you ship daily without annoying users or reviewers.

Web teams deploy many times a day. Mobile teams usually release every one to four weeks. The gap is not about discipline; it is about friction. Every mobile release goes through store review, rolls out over days, and then waits for users to actually install it. So how often should you release?

The short answer: release the native app on a steady, predictable schedule, and ship everything that does not need a new binary on a separate, faster track. This guide explains why, and how to set both up.

What limits mobile release speed

StepTypical timeCan you speed it up?
Build, sign and uploadMinutes to an hourYes, with CI
App Store reviewApple says most submissions are reviewed within 24 hours; rejections add daysOnly by avoiding rejections
Google Play reviewHours to several days, longer for new appsNot really
Phased rolloutApple’s phased release takes 7 days; Play staged rollouts are manualYes, but rolling out fast is riskier
Users installing the updateDays to weeks; some users never updateOnly with forced update prompts

The last row is the one people forget. Even if review were instant, a release reaches most active users only after a week or more of automatic updates. A bug fix that ships on Monday is still on many phones the following Monday.

Common cadences and when they fit

  • Weekly. Used by large teams with release trains: whatever is merged by the cut-off ships. Great for momentum, but review and QA overhead is paid every week.
  • Every two weeks. The most common choice. Enough time for meaningful changes and a proper QA pass, frequent enough that users see steady improvement.
  • Monthly or slower. Fine for mature apps with little native change, or for regulated industries with heavy sign-off. Painful when something breaks.
  • Whenever something is ready. Works for tiny teams, but unpredictable releases make QA, marketing and support harder to plan.

Whatever you choose, consistency matters more than frequency. A predictable schedule lets everyone plan, and keeps each release small enough to test properly.

The two-track model

In a Capacitor app, a release is two different things: the native shell (Swift, Kotlin, plugins, permissions) and the web layer (your UI and business logic). They change at very different rates, so give them different tracks.

Native trackWeb track (OTA)
What shipsPlugins, permissions, Capacitor upgrades, SDK updatesScreens, copy, styles, logic, fixes
CadenceEvery 2–4 weeks, or only when neededDaily, or on every merge
Goes through reviewYesNo, within store rules
Reaches active usersOver days to weeksOn their next app launch
RollbackSubmit another buildRe-release the previous bundle

Many teams find that most of their changes are on the web track. The native release then becomes a small, calm event: fewer changes, less risk, easier review.

This is within the rules on both stores, as long as over-the-air updates change the web content rather than the purpose of the app. See OTA policies for the App Store and Google Play.

Setting up the web track

With OtaKit, the web track is one command after your normal build. A reasonable setup:

# on every merge to main: release to internal testers
npm run build
npx @otakit/cli upload --release staging

# when staging looks good: promote the same bundle to everyone
npx @otakit/cli release <bundleId> --channel production

Put both in CI and the web track runs itself. See automating OTA releases with GitHub Actions.

Hotfixes: the case for a fast track

The strongest argument for a separate web track is not speed on a normal day. It is the bad day. When a release breaks checkout, a store hotfix takes review time plus days of user adoption. An OTA fix reaches active users within hours, and with --force-immediate devices apply it on their next check instead of their next launch.

Keep the emergency path rare. Force-immediate reloads the app for users in the middle of what they are doing. Use it for broken payments and data loss, not for a typo. See deploying hotfixes over the air.

A cadence that works for most teams

  1. Native release every two to four weeks, on a fixed day, only if native code changed. Use Apple's phased release and Play's staged rollout.
  2. Web releases continuously, to staging on every merge and to production once or several times a week.
  3. Staged rollouts for large web changes, so a problem reaches a few users before everyone. See staged rollouts.
  4. A written hotfix procedure, so nobody improvises during an incident.

You end up with the calm of a predictable native schedule and the speed of web deployment. OtaKit has a free tier, so you can add the web track to your next release and compare.

Related docs