Day-to-day habits and scripts.
Use Bun. Do not mix npm/yarn into this tree.
| Script | What it does |
|---|---|
start / dev |
Metro with --dev-client |
devClear |
Metro cache clear |
android |
expo run:android (debug APK) |
ios |
expo run:ios (macOS) |
prebuild |
Android then iOS (--clean; iOS skipped on Windows) |
prebuild:android |
Android-only; sets OTA_PLATFORM=android |
prebuild:ios |
iOS-only (macOS) |
wsl:prebuild-android |
Same Android prebuild |
build:android:wsl |
Gradle assembleDebug (internal APK) |
android:release |
expo run:android --variant release |
build:android:release:wsl |
Gradle assembleRelease (signed APK, sideload) |
build:android:bundle:wsl |
Gradle bundleRelease → Play .aab |
build:android:bundle |
Same without chmod (macOS/Linux) |
lint / format / format:check |
oxlint / oxfmt |
tsc / tsc:app |
Typecheck |
test / verify |
Jest (212 tests) / full gate (oxlint + oxfmt + tsc + Jest) |
ota:export:* |
Stage JS OTA into OTA repo (--out; see ota-self-host) |
eas:build:* / eas:submit:* |
Optional EAS cloud |
Local Play AAB: .env → bun run prebuild:android → bun run build:android:bundle:wsl — deployment-local.md.
| Change | Action |
|---|---|
| TS/TSX, most JS | Fast Refresh; then ota:export:* + push OTA repo |
New native module / plugin / app.json |
prebuild + native rebuild |
plugins/*.js |
prebuild + native rebuild |
Do not hand-edit android/ or ios/ for product features. Change app.json / plugins, then prebuild. Release signing is re-injected from .env via withAndroidReleaseSigning.
bun verifyHusky pre-push also runs verify.
After large feature work (especially new tests or store/math changes), refresh Graphify from the AstraX workspace root and update graphify-drift.md:
cd .. # AstraX-Projects root (parent of radixel/)
bun run graphify:refresh:code
python -m graphify query "mathModes intMath foldWord applyEvaluate"