Android localization SDK for native app text updates.

ReRune Android SDK 1.2.0 adds runtime variant selection to its Compose and Views integrations, with per-key Main and native resource fallback.

ReRune dashboard showing localization workspace activity and project status
ReRune projects list showing real localization projects in a workspace
ReRune project keys view for managing software translation keys
ReRune OTA demo mobile app landing screen with live localization status
ReRune OTA demo mobile app story screen showing runtime translation content

Common challenge

XML string resources remain the safe baseline, but they cannot address every approved copy change or new language after an app ships.

Best fit

Native Android teams using Compose or Views that need the public 1.2.0 modules, runtime variants, OTA-backed strings, and developer-controlled sync.

How ReRune helps

ReRune keeps Android runtime updates connected to the same workspace that manages keys, language coverage, dictionaries, and platform sync.

Android specifics

One native resource path, with separate Compose and Views hooks.

ReRune Android 1.2.0 overlays the selected variant on native resource lookups, then falls back per key to Main and compiled resources.

Choose the UI module

Install rerune-android-compose for Compose or rerune-android-views for classic Views. Both include the core SDK transitively and initialize from the Application with an OTA publish ID.

Refresh each UI model explicitly

Compose screens opt into revision observation with reRuneObserveRevision. Views keep app-owned rebinding logic and can listen with reRuneOnStringsUpdated(...) after installing ReRuneViews.

Deliver dashboard-only Android languages

The SDK can cache locales that are not compiled into values-<locale> resources. Apps can observe availableLocalesFlow, and Android 14 or newer can receive dynamic locale configuration after a manifest fetch.

Keep resource identifiers compiled

OTA can replace values for existing resource IDs. New R.string identifiers, new UI code, app-store language metadata, and some operating-system language behavior still require an application release.

SDK technical reference

ReRune for Android

Ship OTA localization updates and runtime variants in native Android apps while keeping bundled resources as the final fallback.

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

Package
io.rerune:rerune-android-composeio.rerune:rerune-android-views
Current release
1.2.0
Requirements
Android API 21+, Kotlin or Java
Install command
dependencies {
  // Compose
  implementation("io.rerune:rerune-android-compose:1.2.0")
  // Views
  implementation("io.rerune:rerune-android-views:1.2.0")
}

android {
  packaging.resources {
    merges += "META-INF/LICENSE"
    excludes -= "/META-INF/LICENSE"
  }
}

README at a glance

Runtime contract

  • Install from Maven Central and initialize ReRune in Application.onCreate()
  • Wrap each activity base context once to enable native string lookups
  • Supports classic Views, XML inflation, and Jetpack Compose refreshes
  • Keeps bundled strings as the expected fallback when OTA is unavailable
  • Select Main or a named translation variant at setup or runtime
  • Preview enabled drafts in an isolated staging mode before publishing
AndroidKotlinJavaJetpack ComposeViews
Quick Start

UI stack

Compose quick start

dependencies {
  implementation("io.rerune:rerune-android-compose:1.2.0")
}

android {
  packaging.resources {
    merges += "META-INF/LICENSE"
    excludes -= "/META-INF/LICENSE"
  }
}

class App : Application() {
  override fun onCreate() {
    super.onCreate()
    ReRune.setup(
      app = this,
      otaPublishId = BuildConfig.RERUNE_OTA_PUBLISH_ID,
      variant = ReRuneVariant.fromSlug("customer_acme"),
    )
  }
}

override fun attachBaseContext(newBase: Context) {
  super.attachBaseContext(newBase.reRune())
}

@Composable
fun ExampleScreen() {
  reRuneObserveRevision {
    Text(text = stringResource(R.string.title))
  }
}

Declarative refresh

Compose screens wrap visible text with reRuneObserveRevision { ... }, while stringResource(...) keeps reading through the normal Android resource flow.

What still matters

Keep ReRune.setup(...) in Application.onCreate() and wrap each activity with newBase.reRune() so Compose and platform resources read OTA updates.

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.

Agent-assisted setup

Run one command. Your coding agent integrates ReRune.

Run the onboarding command from the root of your Git repository. The wizard detects the app and compatible coding agents already installed, then launches the agent you choose to move static UI text into localization, connect ReRune when cloud setup is selected, and validate the result.

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.

  1. Run the onboarding command

    Start it from the repository root. It stays in the terminal and detects the app, existing localization, and supported coding agents already installed.

  2. Confirm the detected setup

    Review the source locale, Git branch, and whether to connect ReRune cloud and add supported OTA delivery. Nothing changes until you confirm.

  3. The agent completes the integration

    The selected agent migrates user-facing strings into the app's localization system, connects ReRune when cloud setup is selected, adds supported OTA setup when requested, and runs the relevant validation.

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.

How does ReRune handle Android fallback?

When OTA data is unavailable, Android can keep reading bundled resources, so existing string behavior remains the baseline.

Does ReRune support Compose and classic Android views?

Yes. Use io.rerune:rerune-android-compose:1.2.0 for Compose or io.rerune:rerune-android-views:1.2.0 for platform Views.

Can ReRune add an Android language that is not bundled in the APK?

Yes. Android SDK 1.2.0 can fetch and cache dashboard locales that have no compiled values-<locale> directory. Apps can observe availableLocalesFlow; Android 14 or newer can also receive dynamic locale configuration.

Can OTA updates add new Android string resource IDs?

No. Android compiles R.string identifiers into the application. ReRune can update values for identifiers the installed app already contains, while new identifiers require an app release.

How do Compose and Views refresh after an update?

Compose opts into revision-aware redraw with reRuneObserveRevision. Views keeps app-owned rebinding logic and can listen for changes with reRuneOnStringsUpdated(...) after ReRuneViews.install(...).

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.