-
Notifications
You must be signed in to change notification settings - Fork 2
Development Workflow
npm install
npm --prefix example installnpm run typecheck
npm --prefix example run typechecknpm run example:start
npm run example:ios
npm run example:androidFull rebuild (iOS + Android + bindings):
npm run build:rustPlatform-specific:
npm run build:rust:ios
npm run build:rust:androidTo sync versioned files, rebuild the packaged native artifacts, rebuild dist,
and dry-run the npm tarball:
npm run publish:preparenpm testcargo test --manifest-path rust/editor-core/Cargo.tomlRun the dedicated Rust-core benchmark suite in release mode:
npm run bench:rust -- --quickUseful options:
npm run bench:rust -- --filter collaboration
npm run bench:rust -- --json > perf-results.json
npm run bench:rust:quickThe suite covers editor state/render generation, editing operations, position
mapping sweeps, and collaboration update handling. Use --quick for fast local
checks and omit it for a heavier run.
npm run android:test
npm run android:test:perf
npm run android:test:perf:deviceThis runs the Robolectric-based unit tests for the Android native module. You can also compile-check Android Kotlin without running tests:
npm run android:compileFor physical-device or emulator instrumentation runs, set ANDROID_DEVICE_ID
or ANDROID_SERIAL, or create example/android/.device-test.env, then run:
npm run android:test:device
npm run android:test:perf:devicenpm run ios:testThis wrapper always runs the workspace, not the raw .xcodeproj, so CocoaPods
targets like ExpoModulesCore stay in the build graph.
Pass through any extra xcodebuild flags after --:
npm run ios:test -- -only-testing:NativeEditorTests/RenderBridgeTests
npm run ios:test:perfFor physical-device runs, set IOS_DEVICE_ID and IOS_DEVELOPMENT_TEAM, or
create ios-tests/.device-test.env, then run:
npm run ios:test:device
npm run ios:test:perf:deviceOverride the auto-selected simulator if needed:
IOS_SIMULATOR_NAME="iPhone 17" npm run ios:test
IOS_DESTINATION="platform=iOS Simulator,id=<simulator-id>" npm run ios:testIf you change ios-tests/project.yml, or add, remove, or rename files under ios or ios/Tests, regenerate the Xcode project before running CocoaPods or tests. The test harness pulls source files from both trees.
cd ios-tests
xcodegen generate
pod installIf you need to regenerate the native projects (e.g. after changing Expo config or adding native dependencies):
npm run example:prebuildRebuild Rust outputs when you change:
- Rust core logic
- the UniFFI UDL surface
- generated Swift or Kotlin bindings
Rebuild native apps when you change:
- iOS native editor code
- Android native editor code
- Expo module wiring
- The example app is the fastest way to validate focus, keyboard, toolbar, and theming behavior.
- The iOS XCTest target is useful for native regressions that are too specific for the example app alone.
- Android unit tests run under Robolectric and do not require a device or emulator.
Copyright © 2026 Apollo Health Group Pty. Ltd.