Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
2125175
chore(repo): rebuild refactor history without artifacts
DjDeveloperr Aug 20, 2026
82da738
refactor(runtime): consolidate engine backends and harden ownership (…
DjDeveloperr Aug 25, 2026
b398836
runtime(apple): CLI bundle resolution + shutdown-order hardening
DjDeveloperr Aug 6, 2026
f403cb3
ffi(bridge): thread-safe, per-runtime object expandos
DjDeveloperr Aug 6, 2026
8042a19
ffi(bridge): RN backend config — callback gate, lazy symbol indexing,…
DjDeveloperr Aug 6, 2026
f796ffe
ffi(interop): associated objects, primitive aliases, class returns, p…
DjDeveloperr Aug 6, 2026
5dbd7a2
ffi(subclass): JS-subclass identity & dispatch
DjDeveloperr Aug 6, 2026
bccc530
ffi(appearance): UIAppearance proxy primitives
DjDeveloperr Aug 6, 2026
17a0db3
ffi(interop): fix stale bound-receiver crash on selector-group re-cro…
DjDeveloperr Aug 6, 2026
7131207
fix(ffi): stop calling -description on live callback-argument objects
DjDeveloperr Aug 13, 2026
22bc6b7
fix(ffi): resolve protocol-only method metadata for block parameters
DjDeveloperr Aug 20, 2026
442e5fc
feat(metadata): add bundle-based metadata filtering
DjDeveloperr Aug 1, 2026
9c498a9
fix(metadata): harden bundle filtering integration
DjDeveloperr Aug 1, 2026
368dc3e
fix(ci): avoid redundant metadata generator rebuilds
DjDeveloperr Aug 12, 2026
f5f672e
feat(react-native): add extensible Fabric components
DjDeveloperr Aug 23, 2026
a98f421
fix(runtime): restore cross-engine bridge correctness
DjDeveloperr Aug 28, 2026
ab956bd
test(runtime): stabilize cross-engine Apple suites
DjDeveloperr Aug 28, 2026
23e6d44
ci(runtime): test and benchmark every Apple engine
DjDeveloperr Aug 28, 2026
1972fed
test(runtime): allow JSC weak cleanup on macOS
DjDeveloperr Aug 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
9 changes: 9 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Android engine and test binaries are required build inputs, but must never
# become ordinary Git blobs. Keep the repository history source-only while
# allowing a full checkout to materialize the existing test environment.
platforms/android/**/*.a filter=lfs diff=lfs merge=lfs -text
platforms/android/**/*.aar filter=lfs diff=lfs merge=lfs -text
platforms/android/**/*.exe filter=lfs diff=lfs merge=lfs -text
platforms/android/**/*.jar filter=lfs diff=lfs merge=lfs -text
platforms/android/**/*.so filter=lfs diff=lfs merge=lfs -text
platforms/android/tools/astyle filter=lfs diff=lfs merge=lfs -text
125 changes: 124 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ jobs:
- name: Check FFI backend boundaries
run: npm run check:ffi-boundaries

- name: Test React Native package
run: npm run test:react-native

- name: Download V8
run: ./scripts/download_v8.sh

Expand All @@ -33,7 +36,7 @@ jobs:
run: npm run build-libffi

- name: Build metadata generator
run: npm run build-metagen
run: METADATA_GENERATOR_ARCHS="$(uname -m)" npm run build-metagen

- name: Generate macOS metadata
run: npm run metagen macos
Expand All @@ -52,6 +55,126 @@ jobs:
IOS_BUILD_TIMEOUT_MS: "600000"
IOS_TEST_TIMEOUT_MS: "600000"
IOS_TEST_INACTIVITY_TIMEOUT_MS: "180000"
IOS_LOG_JUNIT: "1"
IOS_TEST_VERBOSE_SPECS: "1"
IOS_SIMCTL_QUERY_TIMEOUT_MS: "10000"
run: npm run test:ios

engine-tests:
name: macOS tests (${{ matrix.engine }})
runs-on: macos-26
strategy:
fail-fast: false
matrix:
engine: [hermes, quickjs, jsc]
steps:
- uses: actions/checkout@v5
with:
submodules: 'recursive'

- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: '24.x'

- name: Install dependencies
run: npm install

- name: Install libffi build tools
run: brew install autoconf automake libtool texinfo

- name: Build libffi
run: npm run build-libffi

- name: Build metadata generator
run: METADATA_GENERATOR_ARCHS="$(uname -m)" npm run build-metagen

- name: Generate macOS metadata
run: npm run metagen macos

- name: Run macOS test suite
env:
MACOS_COMMAND_TIMEOUT_MS: "1200000"
MACOS_LOG_JUNIT: "1"
MACOS_TEST_ENGINE: ${{ matrix.engine }}
MACOS_TEST_INACTIVITY_TIMEOUT_MS: "180000"
MACOS_TEST_TIMEOUT_MS: "600000"
MACOS_TEST_VERBOSE_SPECS: "1"
run: npm run test:macos -- ./build/test-results/macos-${{ matrix.engine }}-junit.xml

- name: Run iOS test suite
env:
IOS_BUILD_TIMEOUT_MS: "1200000"
IOS_LOG_JUNIT: "1"
IOS_SIMCTL_QUERY_TIMEOUT_MS: "10000"
IOS_TEST_ENGINE: ${{ matrix.engine }}
IOS_TEST_INACTIVITY_TIMEOUT_MS: "180000"
IOS_TEST_TIMEOUT_MS: "600000"
IOS_TEST_VERBOSE_SPECS: "1"
run: npm run test:ios -- ./build/test-results/ios-${{ matrix.engine }}-junit.xml

performance:
name: Performance (${{ matrix.engine }})
if: github.event_name == 'pull_request' && github.base_ref != 'main'
runs-on: macos-26
strategy:
fail-fast: false
matrix:
engine: [v8, hermes, quickjs, jsc]
env:
BASE_SHA: ${{ github.event.pull_request.base.sha }}
CANDIDATE_SHA: ${{ github.event.pull_request.head.sha }}
ENGINE: ${{ matrix.engine }}
steps:
- uses: actions/checkout@v5
with:
fetch-depth: 0
ref: ${{ github.event.pull_request.head.sha }}
submodules: 'recursive'

- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: '24.x'

- name: Install dependencies
run: npm install

- name: Install libffi build tools
run: brew install autoconf automake libtool texinfo

- name: Build shared dependencies
run: |
npm run build-libffi
METADATA_GENERATOR_ARCHS="$(uname -m)" npm run build-metagen
npm run metagen macos

- name: Build candidate CLI
run: |
./scripts/build_nativescript.sh --no-iphone --no-simulator --no-macos --macos-cli --${ENGINE}
cp ./dist/nsr "${RUNNER_TEMP}/nsr-candidate-${ENGINE}"
cp "./metadata-generator/metadata/metadata.macos.$(uname -m).nsmd" "${RUNNER_TEMP}/metadata-candidate-${ENGINE}.nsmd"

- name: Build base CLI
run: |
git checkout --detach "${BASE_SHA}"
git submodule update --init --recursive
npm install
npm run build-libffi
METADATA_GENERATOR_ARCHS="$(uname -m)" npm run build-metagen
npm run metagen macos
./scripts/build_nativescript.sh --no-iphone --no-simulator --no-macos --macos-cli --${ENGINE}
cp ./dist/nsr "${RUNNER_TEMP}/nsr-baseline-${ENGINE}"
cp "./metadata-generator/metadata/metadata.macos.$(uname -m).nsmd" "${RUNNER_TEMP}/metadata-baseline-${ENGINE}.nsmd"
git checkout --detach "${CANDIDATE_SHA}"
git submodule update --init --recursive

- name: Compare Objective-C dispatch performance
run: |
npm run benchmark:objc-dispatch:cli:compare -- \
--engine "${ENGINE}" \
--baseline-binary "${RUNNER_TEMP}/nsr-baseline-${ENGINE}" \
--baseline-metadata "${RUNNER_TEMP}/metadata-baseline-${ENGINE}.nsmd" \
--candidate-binary "${RUNNER_TEMP}/nsr-candidate-${ENGINE}" \
--candidate-metadata "${RUNNER_TEMP}/metadata-candidate-${ENGINE}.nsmd" \
--output "./build/benchmarks/objc-dispatch-${ENGINE}.json"
24 changes: 17 additions & 7 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ package-lock.json
v8_build
.npmrc
/Frameworks/
/.kiro/
/opencode.json

/llvm/

Expand All @@ -52,10 +54,10 @@ v8_build
.cipd/

# project template
/templates/ios/.build_env_vars.sh
/templates/ios/__PROJECT_NAME__.xcodeproj/project.xcworkspace/xcshareddata/
/templates/visionos/.build_env_vars.sh
/templates/visionos/__PROJECT_NAME__.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
/platforms/apple/templates/ios/.build_env_vars.sh
/platforms/apple/templates/ios/__PROJECT_NAME__.xcodeproj/project.xcworkspace/xcshareddata/
/platforms/apple/templates/visionos/.build_env_vars.sh
/platforms/apple/templates/visionos/__PROJECT_NAME__.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist

.cache/

Expand All @@ -66,11 +68,19 @@ packages/*/metadata-json
SwiftBindgen

# Generated Objective-C/C dispatch wrappers
NativeScript/ffi/napi/GeneratedSignatureDispatch.inc
NativeScript/ffi/napi/GeneratedSignatureDispatch.inc.stamp
NativeScript/ffi/**/GeneratedSignatureDispatch.inc
NativeScript/ffi/**/GeneratedSignatureDispatch.inc.stamp
NativeScript/ffi/**/GeneratedGsdSignatureDispatch.inc
NativeScript/ffi/**/GeneratedGsdSignatureDispatch.inc.stamp

# Packaged native framework artifacts
packages/*/NativeScript.xcframework/

# React Native TurboModule package staging
packages/react-native/dist/
packages/react-native/ios/vendor/
packages/react-native/metadata/
packages/react-native/native-api-jsi/
packages/react-native/native-api/

# Rust metadata bundle analyzer build output
metadata-generator/symbol-analyzer/target/
Loading
Loading