Skip to content
Merged
Show file tree
Hide file tree
Changes from 18 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changeset/fluffy-windows-relax.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
'rock': patch
'rock-docs': patch
---

website: update wording to emphasize Rock's strengths
48 changes: 20 additions & 28 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,54 +4,46 @@
</picture>
</a>
<p align="center">
🪨 Rock is a cross-platform React Native app development and build toolchain built for modularity, build reuse, and incremental adoption. It integrates seamlessly with your existing infrastructure, giving you complete control without vendor lock-in.
🪨 Rock is a modular toolkit for teams building React Native apps. It helps improve build times and developer experience while fitting into your existing workflows and infrastructure.
</p>

---

## React Native at scale is challenging
## Key Features
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This section reads a lot better. It's very clear what Rock does in practice.


Enterprise apps aren't built overnight. As maintainers of the Community CLI and partners to enterprise teams, we've seen the real challenges: high build times, difficulty adopting new third-party cloud services, and high barriers to introducing React Native into existing iOS and Android apps.
**☁️ Remote Build Cache**
Save up to 96% of build time by reusing native artifacts (APK, AAB, APP, IPA) across machines and CI. Use built‑in integrations for GitHub, S3, and R2 or bring your own storage.

Rock simplifies native build setup and reuse. In most React Native codebases, only about 10% of code changes affect the native iOS/Android files. Yet most teams rebuild their native apps constantly—on every commit, PR, or merge to main—when it's completely unnecessary.
**🔗 Brownfield ready**
Add React Native to existing iOS and Android apps using Rock Brownfield.

Rock leverages this insight by providing intelligent caching in your cloud infrastructure, seamlessly integrated through its CLI. This allows you to skip up to 90% of unnecessary native builds.
**🔌 Modular & Extensible**
A plugin‑driven architecture that lets you customize platforms, bundlers, cache providers, and more.

## Features
**🖥️ Cross‑platform‑ready**
iOS and Android by default; designed to extend to TVs, macOS, and Windows (coming soon).

**🖥️ Brand New CLI**
A familiar CLI experience with end-to-end development and build workflows. Migrate in seconds with `npm create rock`.

**☁️ Reusable Cloud Builds**
Reliable caching of native artifacts (APK, IPA) that you can store wherever you prefer, or use our out-of-the-box integrations with GitHub, S3, and R2.

**🔧 GitHub Actions**
Complete logic for downloading, uploading, and building native artifacts for iOS (APP, IPA) and Android (APK, AAB).

**🔗 Plug-and-Play Brownfield**
Package your React Native app as a framework and integrate it into your iOS and Android apps just like any other library.

**📦 Bundler Flexibility**
Rock supports both Metro and Re.Pack for JavaScript bundling. With Re.Pack, you can build Super Apps and Mobile Microfrontends.

**🔌 Extensible Plugin System**
Built with modularity in mind, Rock allows you to extend its capabilities through plugins that integrate with both the CLI and native templates.
**⚡ Easy Community CLI Migration**
A familiar CLI that helps you develop, run, and build your app. Migrate from Community CLI in minutes.

## Installation

Rock is designed for incremental adoption. Whether you're just starting with React Native in your iOS or Android app, or want to migrate from the React Native Community CLI, you can do it step-by-step without having to figure everything out at once.
Choose your path based on your current situation:

### Migrating an existing Community CLI project
### Creating a new project

To migrate an existing project, open a terminal in your project root and run:
> **Consider Expo First**
> For **new projects**, we recommend starting with [Expo](https://expo.dev) for the best developer experience and similar remote caching capabilities. Rock is designed for teams who have outgrown the Community CLI.
To create a fresh React Native app with Rock, open a terminal and run:

```shell
npm create rock
```

### Creating a new project
### Migrating an existing Community CLI project

To create a fresh React Native app with Rock, open a terminal and run:
To migrate an existing project, open a terminal in your project root and run:

```shell
npm create rock
Expand Down
50 changes: 21 additions & 29 deletions packages/cli/README.md
Original file line number Diff line number Diff line change
@@ -1,57 +1,49 @@
<a href="https://www.callstack.com/open-source?utm_campaign=generic&utm_source=github&utm_medium=referral&utm_content=rock" align="center">
<picture>
<img alt="Rock" src="https://github.com/callstack/rock/raw/main/banner.jpg">
<img alt="Rock" src="banner.jpg">
</picture>
</a>
<p align="center">
🪨 Rock is a cross-platform React Native app development and build toolchain built for modularity, build reuse, and incremental adoption. It integrates seamlessly with your existing infrastructure, giving you complete control without vendor lock-in.
🪨 Rock is a modular toolkit for teams building React Native apps. It helps improve build times and developer experience while fitting into your existing workflows and infrastructure.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is a really nice description!

</p>

---

## React Native at scale is challenging
## Key Features

Enterprise apps aren't built overnight. As maintainers of the Community CLI and partners to enterprise teams, we've seen the real challenges: high build times, difficulty adopting new third-party cloud services, and high barriers to introducing React Native into existing iOS and Android apps.
**☁️ Remote Build Cache**
Save up to 96% of build time by reusing native artifacts (APK, AAB, APP, IPA) across machines and CI. Use built‑in integrations for GitHub, S3, and R2 or bring your own storage.

Rock simplifies native build setup and reuse. In most React Native codebases, only about 10% of code changes affect the native iOS/Android files. Yet most teams rebuild their native apps constantly—on every commit, PR, or merge to main—when it's completely unnecessary.
**🔗 Brownfield ready**
Add React Native to existing iOS and Android apps using Rock Brownfield.

Rock leverages this insight by providing intelligent caching in your cloud infrastructure, seamlessly integrated through its CLI. This allows you to skip up to 90% of unnecessary native builds.
**🔌 Modular & Extensible**
A plugin‑driven architecture that lets you customize platforms, bundlers, cache providers, and more.

## Features
**🖥️ Cross‑platform‑ready**
iOS and Android by default; designed to extend to TVs, macOS, and Windows (coming soon).

**🖥️ Brand New CLI**
A familiar CLI experience with end-to-end development and build workflows. Migrate in seconds with `npm create rock`.

**☁️ Reusable Cloud Builds**
Reliable caching of native artifacts (APK, IPA) that you can store wherever you prefer, or use our out-of-the-box integrations with GitHub, S3, and R2.

**🔧 GitHub Actions**
Complete logic for downloading, uploading, and building native artifacts for iOS (APP, IPA) and Android (APK, AAB).

**🔗 Plug-and-Play Brownfield**
Package your React Native app as a framework and integrate it into your iOS and Android apps just like any other library.

**📦 Bundler Flexibility**
Rock supports both Metro and Re.Pack for JavaScript bundling. With Re.Pack, you can build Super Apps and Mobile Microfrontends.

**🔌 Extensible Plugin System**
Built with modularity in mind, Rock allows you to extend its capabilities through plugins that integrate with both the CLI and native templates.
**⚡ Easy Community CLI Migration**
A familiar CLI that helps you develop, run, and build your app. Migrate from Community CLI in minutes.

## Installation

Rock is designed for incremental adoption. Whether you're just starting with React Native in your iOS or Android app, or want to migrate from the React Native Community CLI, you can do it step-by-step without having to figure everything out at once.
Choose your path based on your current situation:

### Migrating an existing Community CLI project
### Creating a new project

To migrate an existing project, open a terminal in your project root and run:
> [!TIP]
> For **new projects**, we recommend starting with [Expo](https://expo.dev) for the best developer experience and similar remote caching capabilities. Rock is designed for teams who have outgrown the Community CLI.
Copy link

@brentvatne brentvatne Oct 3, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

one interesting thing to clarify here, perhaps not here but somewhere, can you use rock in expo projects? when would you do that and what would the benefits be? any tradeoffs?

To create a fresh React Native app with Rock, open a terminal and run:

```shell
npm create rock
```

### Creating a new project
### Migrating an existing Community CLI project

To create a fresh React Native app with Rock, open a terminal and run:
To migrate an existing project, open a terminal in your project root and run:

```shell
npm create rock
Expand Down
3 changes: 1 addition & 2 deletions website/rspress.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,7 @@ export default withCallstackPreset(
context: __dirname,
docs: {
title: 'Rock',
description:
'Easy to adopt. Simple to scale. Built for flexibility from day one',
description: 'Easy to adopt. Simple to scale. Ship everywhere.',
editUrl: 'https://github.com/callstack/rock/edit/main/website/src',
icon: '/logo.svg',
logoLight: '/logo-light.svg',
Expand Down
2 changes: 1 addition & 1 deletion website/src/_nav.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[
{
"text": "Docs",
"link": "/docs/getting-started/index",
"link": "/docs/introduction",
"activeMatch": "^/docs/"
}
]
28 changes: 14 additions & 14 deletions website/src/docs/_meta.json
Original file line number Diff line number Diff line change
@@ -1,32 +1,32 @@
[
{
"type": "dir",
"name": "getting-started",
"label": "Getting Started"
"type": "file",
"name": "introduction",
"label": "Introduction"
},
{
"type": "file",
"name": "cli",
"label": "CLI"
"name": "prior-art",
"label": "Prior Art"
},
{
"type": "file",
"name": "configuration",
"label": "Configuration"
"name": "getting-started",
"label": "Getting Started"
},
{
"type": "dir",
"name": "github-actions",
"label": "GitHub Actions"
"name": "cli",
"label": "CLI"
},
{
"type": "dir",
"name": "brownfield",
"label": "Integration with Native Apps"
"name": "remote-cache",
"label": "Remote Cache"
},
{
"type": "file",
"name": "acknowledgements",
"label": "Acknowledgements"
"type": "dir",
"name": "brownfield",
"label": "Integration with Native Apps"
}
]
19 changes: 0 additions & 19 deletions website/src/docs/acknowledgements.md

This file was deleted.

4 changes: 2 additions & 2 deletions website/src/docs/brownfield/ios.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -157,8 +157,8 @@ error: underlying Objective-C module 'ReactBrownfield' not found
// Add `window` property required by React Native
window = UIWindow(frame: UIScreen.main.bounds)

// Create VC that calls your module by name
let reactNativeVC = ReactNativeViewController(moduleName: "Enterprise")
// Create VC that calls your module by name registered by `AppRegistry.registerComponent` of your React Native app
let reactNativeVC = ReactNativeViewController(moduleName: "ReactNativeApp")

// Display the view as full window or anyhow you need
window?.rootViewController = reactNativeVC
Expand Down
1 change: 1 addition & 0 deletions website/src/docs/cli/_meta.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["introduction", "migrating-from-community-cli"]
61 changes: 58 additions & 3 deletions website/src/docs/cli.md → website/src/docs/cli/introduction.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
# `rock` CLI
# Introduction

The Rock CLI is a command-line tool that helps you develop, build, and run React Native applications.

We've created a new CLI from scratch with a focus on seamless migration from the Community CLI. Most projects can get started with our CLI in under 10 minutes.

At its core is a modular configuration system that lets you customize capabilities through plugins and replaceable build chain components: bundlers, platforms, remote cache providers, and other helpers available as npm packages.

Basic usage:

```shell title="Terminal"
Expand All @@ -10,6 +14,57 @@ npx rock [command] [options]

![](/cli.png)

## Key Features

The CLI handles all essential build and deployment tasks:

- Building and running APK/APP files on devices and simulators
- Creating builds for different variants and configurations
- Generating signed IPA and AAB archives for app stores
- Re-signing archives with fresh JS bundles
- Generating native project hashes for caching

## Command Changes from Community CLI

We've updated command names:

- `run-android` → `run:android`
- `build-android` → `build:android`
- `run-ios` → `run:ios`
- `build-ios` → `build:ios`

## Flag Changes

We've standardized flag naming across platforms:

Android:

- `--mode` → `--variant`
- `--appId` → `--app-id`
- `--appIdSuffix` → `--app-id-suffix`

iOS:

- `--mode` → `--configuration`
- `--buildFolder` → `--build-folder`

## Removed Flags

We've simplified the interface by removing redundant flags:

- `--interactive`/`-i` – CLI now prompts for input when needed
- `--list-devices` – Device selection is now automatic when no devices are connected

## Remote Cache

The CLI integrates with Rock's Remote Cache system to speed up builds by reusing cached native artifacts. When available, the CLI will automatically download and use cached builds (APK/AAB/APP/IPA) instead of rebuilding from scratch.

Learn more about [Remote Cache & GitHub Actions](/docs/remote-cache/introduction).

## Local Cache

Regardless of the remote cache provider you use, the CLI will also cache builds (APK/AAB/APP/IPA) in your local cache (`.rock/` directory). If a cached build is found, it will be used instead of rebuilding from scratch.

## Global Options

The following options are available for all commands:
Expand Down Expand Up @@ -166,7 +221,7 @@ The `run:ios` command runs your iOS app on a simulator or device. It follows thi
1. Build locally if `--local` flag is set
1. Otherwise, try to use a cached build from cache (in `.rock` folder)

The build cache is populated either by a local build or when downloaded frome remote storage with [`remoteCacheProvider`](./configuration.md#remote-cache-configuration).
The build cache is populated either by a local build or when downloaded frome remote storage with [`remoteCacheProvider`](../configuration.md#remote-cache-configuration).

`run:ios` extends the functionality of `build:ios` with additional runtime options.

Expand Down Expand Up @@ -205,7 +260,7 @@ The `build:android` command builds your Android app for emulators, devices, or d
1. Build locally if `--local` flag is set
1. Otherwise, try to use a cached build from cache (in `.rock` folder)

The build cache is populated either by a local build or when downloaded frome remote storage with [`remoteCacheProvider`](./configuration.md#remote-cache-configuration).
The build cache is populated either by a local build or when downloaded frome remote storage with [`remoteCacheProvider`](../configuration.md#remote-cache-configuration).

| Option | Description |
| :----------------------- | :-------------------------------------- |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -172,4 +172,4 @@ If you prefer to do it manually or encounter any issues, follow the steps below.
github-token: ${{ secrets.GITHUB_TOKEN }}
```

For more setup options see [GitHub Actions configuration](../github-actions/configuration.md)
For more setup options see [GitHub Actions configuration](../remote-cache/configuration.md)
2 changes: 1 addition & 1 deletion website/src/docs/configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -512,7 +512,7 @@ async upload({ artifactName, uploadArtifactName }) {

This `index.html` file will display an ad-hoc distribution web portal, allowing developers and testers to install apps on their provisioned devices by simply clicking "Install App".

Learn more about ad-hoc distribution and how it works with `remote-cache upload --ad-hoc` command [here](./cli#ad-hoc-distribution).
Learn more about ad-hoc distribution and how it works with `remote-cache upload --ad-hoc` command [here](./cli/introduction#ad-hoc-distribution).

| Ad-hoc distribution web portal | Ad-hoc distribution web portal |
| ------------------------------------ | ------------------------------------- |
Expand Down
Loading
Loading