Skip to content

OTA localization updates without making every copy fix a release.

ReRune SDKs deliver approved text across Flutter, Android, iOS, Kotlin Multiplatform, React, React Native, and Angular. OTA staging adds an opt-in preview path for enabled drafts while production clients keep receiving published content.
ReRune projects list showing real localization projects in a workspace
ReRune dashboard showing localization workspace activity and project statusReRune dashboard showing localization workspace activity and project statusReRune dashboard showing localization workspace activity and project status
ReRune OTA demo mobile app landing screen with live localization status

Common challenge

App-store release cycles are too slow for every copy fix, translation refinement, or newly supported language.

Best fit

Flutter, Android, iOS, Kotlin Multiplatform, React, React Native, and Angular products that need reviewed text delivered safely at runtime.

How ReRune helps

ReRune treats OTA as one delivery option inside the localization platform, not a detached runtime patching tool.

Update lifecycle

What happens between publish and the text a user sees.

ReRune OTA localization adds a runtime overlay to the application's existing localization layer. The public SDKs keep their framework APIs and bundled resources while synchronizing approved locale payloads.
  1. Preview enabled drafts before publishing

    Project staging and SDK staging are separate opt-ins. A staging client synchronizes complete draft snapshots into an isolated cache; production clients continue on published manifests and caches.

  2. Fetch a versioned manifest

    A supported SDK uses its publishable OTA ID to request the ReRune manifest, compare the published locale versions with local state, and fetch locale payloads that changed.

  3. Commit updates to a platform cache

    Previously applied locale data can be restored on a later startup. When no matching cache or network update is available, the app continues from its bundled localization resources.

  4. Fall back per missing message

    Published translations replace the matching bundled text. When a translation is missing, the app shows its own text in the same language, then a fallback language, so the screen never goes blank. The fallback is the main language on Android and iOS, the template ARB language on Flutter, and the i18next or engine fallback language on the web. If an update does not fit the app's own text, ReRune skips it, so a language is never half updated.

  5. Keep code changes in app releases

    OTA changes text the installed SDK already knows how to render. New code paths, compiled resource identifiers, placeholder signatures, native system strings, and store metadata can still require a normal release.

OTA demo14 sec

From dashboard to app in 14 seconds.

Edit approved copy, publish it, and refresh the app without a new store release.

  1. Edit

    Update approved copy.

  2. Publish

    Create the OTA update.

  3. Refresh

    Load it in the app.

OTA demo14 sec
OTA live preview5 min 37 sec

Preview translations in your app before publishing.

Enable OTA staging for a project, opt a test build into staging mode, and sync enabled drafts, including unfinished and never-published keys, without changing what production apps receive.

  1. Enable project staging

    Turn on the preview path once for the project.

  2. Connect a test app

    Start or switch the SDK into staging mode.

  3. Review the next sync

    Check draft copy in context, then publish when it is ready.

  4. Production stays published

    Other SDK requests keep receiving the last published translations.

Staging preview downloads use the normal OTA quota.

OTA live preview5 min 37 sec

Publication rollback

Roll back published app text.

Preview an earlier publication and restore it as the live version for apps using ReRune.

  1. Find the earlier publication

    Open the translation key’s publication history and inspect the saved snapshot before restoring it.

  2. Restore live delivery

    Make the selected snapshot live again. ReRune records the rollback in publication history and leaves the current editor draft unchanged.

  3. Fetch the restored text

    Apps receive the restored text on their next successful update check. The video shows this with a Flutter app.

This restores published localization content. App code and layout changes still follow your normal release process.
Publication rollback40 sec

Workflow

From app copy to release-ready localization.

ReRune connects translation management to the delivery path developers already use: dashboard work, AI assistance, CLI/API sync, and OTA updates where a supported SDK is installed.

Install the SDK

Connect the supported app runtime to a ReRune publish ID while keeping native or framework localization behavior in place.

Publish approved text

Approve translation changes in the workspace, then publish runtime updates without turning every text fix into a full store release.

Refresh visible copy

Let supported SDK hooks check for updates and refresh text when new approved localization payloads are available.

Keep fallbacks intact

When runtime updates are unavailable, the app keeps reading bundled resources so localization failures do not break the product.

Setup WizardAI Coding Agent

One command. A wizard sets the stage, your AI agent ships it.

Run the onboarding command from the root of your Git repository. The wizard inspects the app and confirms the plan with you, with no AI involved and nothing changed yet. Then it opens the coding agent you already use with a complete migration workflow.

Run inside your Git repository

curl -fsSL https://rerune.io/onboard.sh | sh

The script runs locally. ReRune does not receive your source code or list of installed agents.

Coding agent integrations

11 integrations: 4 available now, 7 planned.

  • Claude CodeReady
  • CodexReady
  • OpenCodeReady
  • PiReady
  • GitHub Copilot CLIPlanned
  • GoosePlanned
  • Qwen CodePlanned
  • Cursor AgentPlanned
  • Kiro CLIPlanned
  • Cline CLIPlanned
  • Factory DroidPlanned

Developer delivery

Sync through the CLI. Publish through OTA SDKs.

Use the ReRune CLI locally or in CI/CD to manage project translations, then deliver approved runtime updates through the SDK built for your app.

Companion CLI

Install the ReRune CLI

Use the ReRune CLI to sync, validate, and manage translations right from your terminal. Run syncs in CI/CD or locally whenever you need to push a new language.

Homebrew (macOS/Linux):

brew install BasalBit/tap/rerune
  • Downloadable builds for macOS, Linux, and Windows
  • Uses the API keys you generate in the dashboard
  • Fits scripted CI/CD workflows through CLI and API access
rerune

Connect the project

Create the project config and connect the repository to its ReRune workspace.

rerune pull

Pull approved updates

Bring current dashboard translations into the app or its build workflow.

rerune push

Push local changes

Send local translation updates back to ReRune for the team to manage and publish.

SDK platform

ReRune for Flutter

Add OTA localization updates and runtime variants on top of generated Flutter localizations without changing how widgets read translated strings.

  • Layers server-published translations over AppLocalizations
  • Works across mobile, web, and desktop from one setup
  • Generate the ReRune config; prepare API-exported ARBs when needed
  • Checks for updates at start and on every return to the foreground, or refresh manually at runtime
  • Select Main or a named translation variant at setup or runtime
  • Preview enabled drafts in an isolated staging mode before publishing
AndroidiOSWebmacOSLinuxWindows

Quick Start

setup

dependencies:
  rerune: ^1.9.1

flutter gen-l10n
dart run rerune

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();

  await ReRune.setup(
    otaPublishId: 'your-ota-publish-id',
    localizations: reRuneAppLocalizationsConfig,
    variant: ReRuneVariant.named('customer_acme'),
  );

  runApp(const MyApp());
}

MaterialApp(
  localizationsDelegates: ReRune.localizationsDelegates,
  supportedLocales: ReRune.supportedLocales,
);

Why it feels lightweight

Keep your generated Flutter localization APIs. If exported ARBs contain offset:0, the SDK can prepare compatible copies before generation. Keep source ARBs in lib/l10n, set arb-dir to lib/l10n/flutter, and run dart run rerune prepare-arb before flutter gen-l10n and dart run rerune.

Main runtime APIs

Use ReRune.checkForUpdates(), listen to ReRune.onFetchedTextsApplied, or wrap screens with ReRuneBuilder when you want update-aware UI.

Questions

Questions teams ask before choosing a localization platform.

Contact the ReRune team

Share an idea, report a problem, or ask for help with ReRune.

Which ReRune platforms support OTA localization updates?

ReRune supports OTA workflows and runtime variant selection for Flutter, Android, iOS, Kotlin Multiplatform, React, React Native, and Angular. Angular integrates with ngx-translate or Transloco.

Are OTA updates a replacement for normal localization files?

No. OTA updates add a runtime delivery layer for approved text. Bundled files and native or framework localization remain important for fallback and baseline behavior.

Can ReRune add a language without a new app release?

The public Flutter, Android, iOS, Kotlin Multiplatform, React, React Native, and Angular SDKs can expose dashboard-published languages at runtime after their locale payloads are fetched. Platform language listings, store metadata, and SDK-specific application configuration can still require a release.

What localization changes still require an app release?

New code paths and localization structures the installed app does not know about still require a release. Examples include new Android resource IDs, new Flutter keys or placeholder signatures, native system text, and app-store language metadata.

Are OTA text updates allowed on the App Store and Google Play?

ReRune SDKs download published translations as text data into an on-device cache. They do not download or run code, and they do not add or change app features. Apple's App Review Guideline 2.5.2 and Google Play's Device and Network Abuse policy restrict apps that download executable code or change their features outside a store update. New keys, screens, code, and store metadata still ship in a store release, and your app stays subject to App Store and Google Play review as usual. Apple and Google make their own review decisions.

Explore next

Go deeper into the developer, platform, and delivery workflows connected to this page.

React localization that stays connected to product delivery.

Adopt React OTA localization with SDK 1.9.0. Replace startup wiring, preserve i18next translation calls, and restore native setup when removing ReRune.

Angular localization with your existing translation engine.

Adopt @rerune/angular 1.9.0 with ngx-translate or Transloco. Replace the root provider, keep native options and pipes, and support OTA updates and Angular SSR.

React Native localization for cross-platform app teams.

Adopt React Native OTA localization with SDK 1.9.0. Keep native options and hooks, use AsyncStorage caching, and restore native startup when removing ReRune.

Android localization SDK for native app text updates.

Use ReRune Android Compose or Views SDK 1.8.0 for OTA strings and runtime variants with per-key Main and native resource fallback.

Kotlin Multiplatform localization SDK for shared Compose UI.

ReRune Kotlin Multiplatform SDK 1.0.0 brings OTA text updates and runtime variants to shared Compose UI on Android, iOS and desktop, with bundled fallback.

One workspace

Start with one product workflow and expand from there.

Create projects, manage keys, use AI assistance with context, sync through CLI/API, and publish approved runtime updates when your app uses a supported ReRune SDK.