Skip to content

Flutter localization with OTA updates on top of your existing flow.

ReRune Flutter SDK 1.9.1 adds approved OTA text and runtime variants while widgets keep using familiar delegates, supported locales, and getters.
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

Generated delegates and ARB files cover the app runtime, but teams still need translation coordination, QA, release timing, and runtime update control.

Best fit

Flutter teams that want faster translation cycles, lower localization costs, clear ownership and review of app copy, and approved OTA text updates after the initial SDK integration without waiting for another developer release or a new App Store or Google Play release.

How ReRune helps

ReRune adds dashboard context, CLI/API sync, AI assistance, and OTA publish IDs around the Flutter localization workflow instead of replacing Flutter conventions.

Flutter specifics

How ReRune layers onto generated Flutter localization.

The Flutter package generates a ReRune configuration from Flutter's localization output, then overlays published messages while widgets keep using the generated AppLocalizations API.
  1. Generate the typed integration

    Run flutter gen-l10n, then dart run rerune to create the *.rerune.g.dart config. It also tells ReRune which placeholders each message accepts. For exported ARBs with offset:0, the SDK also provides prepare-arb. That optional step reads lib/l10n and writes lib/l10n/flutter, which must be your arb-dir.

  2. Add runtime languages to the locale list

    Fetched or cached dashboard languages join the compiled locales in ReRune.supportedLocales. Rebuild the root localization configuration when a newly fetched language must appear during the current session.

  3. Resolve each message through a fallback chain

    ReRune follows Flutter's own fallback order. It looks for the requested language first. If a message is missing, it uses the app's own bundled text in that language when the app includes it, then your template ARB language: its dashboard text, then your bundled template text. Placeholders and plurals keep your generated method signatures and follow the language the text came from.

  4. Ship structural localization changes normally

    Changed text and supported dashboard languages can arrive at runtime. New keys, changed placeholder signatures, platform language metadata, and new application behavior still require code generation and an app release.

Flutter walkthrough1 min

Localize your Flutter app with a coding agent.

Watch a coding agent move Flutter strings into ARB files, integrate ReRune, and deliver a live text update to the running app.

SDK technical reference

ReRune for Flutter

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

Version-pinned guidance from the published package README. Follow the linked README for the complete API and current release notes.

Package
rerune
Current release
1.9.1
Requirements
Flutter 3.27+, Dart 3.6+

Install command

flutter pub add rerune:^1.9.1

README at a glance

Runtime contract

  • 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.

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

Coverage

App-first does not mean mobile-only.

Start where localization creates release friction, then keep web, mobile, and cross-platform products in one shared workspace as your surface area grows.

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.

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.

Does ReRune work with Flutter localization delegates?

Yes. With rerune 1.9.1, apps select Main or a named variant before runApp(...) and keep using generated delegates, supported locales, and getters.

Can Flutter teams use ReRune without OTA?

Yes. Flutter teams can still use ReRune for project management, translation keys, AI assistance, import/export, and CLI/API sync even when OTA delivery is not part of the release plan.

Does ReRune support Flutter ARB workflows?

Yes. Run flutter gen-l10n, then dart run rerune to generate the ReRune configuration. For exported ARBs containing offset:0, first use dart run rerune prepare-arb with source files in lib/l10n and l10n.yaml pointing at lib/l10n/flutter. Widgets keep using generated AppLocalizations getters and methods.

How are missing Flutter OTA translations handled?

ReRune follows Flutter's own fallback order. It looks for the requested language first. If a message is missing, it uses the app's own bundled text in that language when the app includes it, then your template ARB language: its dashboard text, then your bundled template text. A missing translation never removes your bundled text.

Which Flutter localization changes still need an app release?

New keys, changed placeholder signatures, new code paths, and platform or store language metadata still require code generation and an app release. Published values and supported dashboard languages can be delivered within the installed SDK's runtime scope.

Explore next

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

OTA localization updates without making every copy fix a release.

Deliver published app text through ReRune OTA SDKs, preview enabled drafts in staging clients, and keep production caches isolated with fallback and rollback.

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.

App localization platform that starts with releases, not files.

App localization that starts with releases, not files. Manage app strings, coordinate translators, sync developer formats, and deliver approved text updates.

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.