t3-code-android-nightly/apps/mobile
Julius Marminge b707eeb052
refactor(provider-grok): move Grok into its own provider package (#17357)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 18:30:58 -07:00
..
assets fix(web,mobile): drop the baked-in tile from the Antigravity icon (#13373) 2026-09-24 16:42:46 -03:00
deps feat(mobile): adopt v5 navigation and native iPad columns (#16733) 2026-10-07 13:26:48 -07:00
modules feat(web): find messages and plans in the current thread (#10439) 2026-10-08 08:24:50 -05:00
plugins chore(mobile): upgrade to Expo SDK 58 and React Native 0.88 RC (#12045) 2026-10-01 10:51:22 -07:00
scripts feat(preview): run the browser on the environment server (#15328) 2026-10-06 08:04:27 -07:00
src refactor(provider-grok): move Grok into its own provider package (#17357) 2026-10-08 18:30:58 -07:00
.editorconfig T3 Code Mobile [WIP] (#2013) 2026-05-29 17:00:54 -07:00
.fingerprintignore chore: setup eas ci (#2911) 2026-06-03 22:08:34 -07:00
.gitignore T3 Code Mobile [WIP] (#2013) 2026-05-29 17:00:54 -07:00
.swiftlint.yml Add adaptive split-view layout for iPad/mobile workspace (#3514) 2026-07-02 22:42:14 -07:00
app.config.ts feat(preview): run the browser on the environment server (#15328) 2026-10-06 08:04:27 -07:00
assets.d.ts T3 Code Mobile [WIP] (#2013) 2026-05-29 17:00:54 -07:00
babel.config.js T3 Code Mobile [WIP] (#2013) 2026-05-29 17:00:54 -07:00
Brewfile T3 Code Mobile [WIP] (#2013) 2026-05-29 17:00:54 -07:00
clerk-theme.json fix(mobile): align built-in theme colors with desktop (#12534) 2026-09-18 21:12:32 -07:00
detekt.yml T3 Code Mobile [WIP] (#2013) 2026-05-29 17:00:54 -07:00
eas.json feat(orchestrator): introduce new orchestrator (#2829) 2026-10-02 12:22:22 -07:00
fingerprint.config.js feat(mobile): adopt v5 navigation and native iPad columns (#16733) 2026-10-07 13:26:48 -07:00
generated-uniwind-default-theme-variables.json fix(mobile): align built-in theme colors with desktop (#12534) 2026-09-18 21:12:32 -07:00
generated-uniwind-theme-names.json refactor(mobile): compile semantic themes for Uniwind (#7327) 2026-08-28 07:54:02 -07:00
generated-uniwind-themes.css feat(orchestrator): introduce new orchestrator (#2829) 2026-10-02 12:22:22 -07:00
global.css fix(mobile): align built-in theme colors with desktop (#12534) 2026-09-18 21:12:32 -07:00
index.ts [codex] Expand real-route app store screenshot harness (#4014) 2026-07-17 11:33:40 +02:00
metro.config.js feat(preview): run the browser on the environment server (#15328) 2026-10-06 08:04:27 -07:00
package.json refactor(provider-grok): move Grok into its own provider package (#17357) 2026-10-08 18:30:58 -07:00
README.md fix(mobile): ensure a compatible native client before verification (#11862) 2026-09-15 00:47:06 -07:00
tsconfig.json chore(mobile): upgrade to Expo SDK 58 and React Native 0.88 RC (#12045) 2026-10-01 10:51:22 -07:00
uniwind-types.d.ts refactor(mobile): compile semantic themes for Uniwind (#7327) 2026-08-28 07:54:02 -07:00

T3 Code Mobile

Warning

T3 Code Mobile is currently in development and is not distributed yet. If you want to try it out, you can build it from source.

Quickstart

Note

Uses native modules so using Expo Go is not supported. You need to use the Expo Dev Client.

This app has three variants:

  • development: Expo dev client, installable side-by-side as T3 Code Dev
  • preview: persistent internal preview build, installable side-by-side as T3 Code Preview
  • production: store/release build as T3 Code

Run commands from apps/mobile.

T3 Connect is optional and disabled in a fresh clone. Public configuration belongs in the repository-root .env or .env.local, not an apps/mobile/.env file. See ../../.env.example.

Development

For simulator/emulator development, select and boot a device, then ensure its native client matches this checkout before starting Metro:

node ../../scripts/mobile-native-client.ts ensure ios <simulator-udid>
# Or: node ../../scripts/mobile-native-client.ts ensure android <emulator-serial>
vp run dev:client

The helper compares a local Expo fingerprint and the installed binary with its last successful build record. It builds and installs missing, stale, or unverified clients and reuses matching ones. Use check instead of ensure for a read-only decision: exit 0 means compatible, 2 means a build is needed, and 1 means an operational error. Run it on the simulator host; no EAS login is required. An externally installed client is unverified until the helper builds it once.

Start Metro for an already verified dev client:

vp run dev:client

Metro keeps its transform cache between ordinary starts. If the cache itself is causing stale or invalid output, clear it for one development-client start:

vp run dev:client:reset

Run that reset once after installing or changing the Uniwind dependency patch. Cached transforms can otherwise reference its previous pnpm package path. Ordinary Metro starts still keep the cache.

Component edits use Fast Refresh. See mobile development lifecycle before changing runtime ownership or refresh behavior.

Build and run the local iOS dev client:

vp run ios:dev

After changing a native dependency patch, rerun CocoaPods before rebuilding an existing iOS project. pnpm gives each patch hash a new package path; Pods can otherwise keep compiling the previous directory.

If your Xcode account only has a Personal Team, use a bundle identifier you control and opt into the reduced-capability local build. Personal Team builds omit the widget and share extensions, push entitlement, and native Sign in with Apple entitlement; builds without this opt-in are unchanged.

T3CODE_IOS_PERSONAL_TEAM=1 \
T3CODE_IOS_PERSONAL_TEAM_BUNDLE_ID=com.example.t3code.dev \
vp run ios:dev

Build and install a self-contained Release app that does not need Metro:

vp run ios:release

The Personal Team equivalent also needs a unique bundle identifier:

T3CODE_IOS_PERSONAL_TEAM=1 \
T3CODE_IOS_PERSONAL_TEAM_BUNDLE_ID=com.example.t3code \
vp run ios:release

Build and run the local iOS preview app:

vp run ios:preview

Force the review diff highlighter engine:

EXPO_PUBLIC_REVIEW_HIGHLIGHTER_ENGINE=javascript vp run ios:dev

javascript is the default and recommended setting for the review diff screen. Set EXPO_PUBLIC_REVIEW_HIGHLIGHTER_ENGINE=native only when you explicitly want to test the native Shiki engine.

Inspect the resolved Expo config for a variant:

vp run config:dev
vp run config:preview

Run static checks for mobile native code:

node ../../scripts/mobile-native-static-check.ts

The native lint task runs SwiftLint for Swift plus ktlint and detekt for Kotlin. Missing native tools are reported as warnings and skipped locally. CI installs the default toolset from apps/mobile/Brewfile before running the native checks.

EAS Builds

Preview and production variants use Expo fingerprinting so OTA updates only reach binaries with matching native dependencies, config plugins, and patches. CI uses the preview:dev profile to reuse a compatible native build when possible.

The development variant uses appVersion to avoid recalculating the native fingerprint for each Metro launch manifest. MOBILE_VERSION_POLICY can override either default. If you distribute a custom Release build with the development identity and publish OTA updates to it, set MOBILE_VERSION_POLICY=fingerprint for both its build and updates. Changing the runtime policy requires a native rebuild for OTA matching; an existing dev client can still load local Metro bundles.

For preview or production EAS environments, set T3CODE_CLERK_PUBLISHABLE_KEY, T3CODE_CLERK_JWT_TEMPLATE, and T3CODE_RELAY_URL as EAS environment variables. Expo config maps the canonical values into the mobile build.

Create a PR preview dev-client build manually:

vp run eas:ios:preview:dev

Create a cloud dev-client build:

vp run eas:ios:dev

Create a persistent preview build:

vp run eas:ios:preview

Android equivalents:

vp run eas:android:dev
vp run eas:android:preview:dev
vp run eas:android:preview