Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
87 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
b0fdf78
chore(napi): sync shared Node-API headers and rename napi_runtime
ammarahm-ed Jul 29, 2026
79f086b
feat(android/quickjs): pin engines as submodules and update the napi …
ammarahm-ed Jul 29, 2026
a0f9043
feat(android/primjs): update PrimJS and rewrite the napi adapter
ammarahm-ed Jul 29, 2026
61f8c84
feat(android/jsc): update JavaScriptCore and add host object support
ammarahm-ed Jul 29, 2026
3b13b44
feat(android/v8): rewrite the host object implementation
ammarahm-ed Jul 29, 2026
c194efd
feat(hermes): support both Node-API ABIs from one JSR
ammarahm-ed Jul 29, 2026
14c6851
feat(android/jni): port the JNI Node-API interop updates
ammarahm-ed Jul 29, 2026
30f58b9
feat(android/runtime): port runtime core, native workers and inspector
ammarahm-ed Jul 29, 2026
473a5df
feat(url): Ada 3.3.0, URLPattern and URLSearchParams spec compliance
ammarahm-ed Jul 29, 2026
dc38fe0
feat(android): port the Java runtime layer
ammarahm-ed Jul 29, 2026
8e77e86
build(android): gradle/CMake updates and prebuilt engine binaries
ammarahm-ed Jul 29, 2026
a84b015
test(android): port the test-app suites and build tools
ammarahm-ed Jul 29, 2026
071cc75
feat(android): bytecode compiler toolchain
ammarahm-ed Jul 29, 2026
598957d
fix(napi): declare jsr_ns_runtime where the typedef was lost
ammarahm-ed Jul 29, 2026
459b6bd
fix(url,android): complete the URLSearchParams port and fix a duplica…
ammarahm-ed Jul 29, 2026
54461dd
fix(hermes): restore js_runtime.h, which the Apple JSR includes
ammarahm-ed Jul 29, 2026
1dd7842
fix(android): unbreak the Hermes build and the last bad CMake definition
ammarahm-ed Jul 29, 2026
6edce1c
fix(android/quickjs): carry napi-ios's WeakRef patch into the submodules
ammarahm-ed Jul 29, 2026
3520ebf
fix(android): resolve Hermes native-lib packaging collisions
ammarahm-ed Jul 29, 2026
eaa5e33
fix(android/quickjs): actually record the engines as submodule gitlinks
ammarahm-ed Jul 29, 2026
75c6973
fix(hermes): give Android its own header set, matching its engine binary
ammarahm-ed Jul 29, 2026
93b602b
fix(url): give the URLSearchParams iterator state a single owner
ammarahm-ed Jul 29, 2026
33548ec
fix(url): derive iterator state from the receiver, not the callback data
ammarahm-ed Jul 29, 2026
8907e68
fix(napi,url): clean up the Apple build and align its URLSearchParams…
ammarahm-ed Jul 30, 2026
b7c155d
fix(napi/quickjs): repair the Apple QuickJS backend after the header …
ammarahm-ed Jul 30, 2026
7ae4d1e
chore(android): remove octane benchmark worker
ammarahm-ed Aug 5, 2026
6bcd826
chore(android): update npm_trusted_release.yml to support android
ammarahm-ed Aug 5, 2026
7b0d53b
chore(android): cleanup
ammarahm-ed Aug 5, 2026
8ed1ee4
style: clang-format the engine napi and jsr sources
ammarahm-ed Aug 7, 2026
e8bd5f1
fix(apple/quickjs): restore the ObjC FFI sources moved out of ffi/obj…
ammarahm-ed Aug 7, 2026
1e842b5
refactor(napi/hermes): use the napi/common headers instead of the for…
ammarahm-ed Aug 7, 2026
db9d2ed
refactor(quickjs): vendor the patched quickjs-ng tree, drop bellard a…
ammarahm-ed Aug 7, 2026
6bb7aad
refactor(android/v8): drop the v8-10 and v8-11 engines
ammarahm-ed Aug 7, 2026
1c6bcb8
docs(android/jsc): record why gc() cannot use the synchronous collector
ammarahm-ed Aug 7, 2026
bf2182f
refactor(quickjs): share one backend between Apple and Android on qui…
ammarahm-ed Aug 7, 2026
7122718
refactor(jsc): share one backend between Apple and Android
ammarahm-ed Aug 7, 2026
ebe0eb9
fix(apple/v8): migrate the backend to the V8 14.9 API
ammarahm-ed Aug 8, 2026
7f03784
feat(v8): add download_v8.sh for the shared V8 build
ammarahm-ed Aug 8, 2026
fb954da
build(android): fetch the V8 libs on demand instead of committing them
ammarahm-ed Aug 8, 2026
ab5334e
chore(v8): vendor the shared V8 14.9 public headers
ammarahm-ed Aug 8, 2026
158c44b
refactor(engines): share the vendored Hermes and V8 headers across Ap…
ammarahm-ed Aug 8, 2026
90c691c
refactor(v8): merge the Apple and Android V8 backends into one napi/v8
ammarahm-ed Aug 8, 2026
68a50bd
build(v8): fetch only the V8 headers the build reaches and require ND…
ammarahm-ed Aug 8, 2026
a4bb9ad
refactor(napi): move each engine's node-api layer under vendor/<engine>
ammarahm-ed Aug 8, 2026
6ed7048
build(v8): note the release now ships only the header closure
ammarahm-ed Aug 8, 2026
2b0414a
fix(hermes): stop a JSI exception escaping the microtask drain into ObjC
ammarahm-ed Aug 8, 2026
78ae4bd
chore(v8): pin release -5 and install the full src-headers closure
ammarahm-ed Aug 8, 2026
82ab4b1
chore(android): drop the unused v8-13 prebuilt libs
ammarahm-ed Aug 8, 2026
1c13eac
fix(android/test-app): give timers unique ids and stop timing out str…
ammarahm-ed Aug 8, 2026
5fd64ca
fix(jsc): guard the context->env map against concurrent worker access
ammarahm-ed Aug 8, 2026
189f6f5
fix(jsc): make Android gc() a real synchronous collection
ammarahm-ed Aug 8, 2026
6ca13f3
fix(react-native): keep the JSR runtime scope out of the RN turbomodu…
ammarahm-ed Aug 8, 2026
ab9c614
build(android): fetch the Hermes prebuilts before CMake configures
ammarahm-ed Aug 16, 2026
85dfe01
fix(jsc): let a JS prototype property shadow the native one again
ammarahm-ed Aug 16, 2026
89f60c5
fix(ffi): stop the backend boundary check flagging the engine JSR tree
ammarahm-ed Aug 16, 2026
51baae7
fix(android): preserve refactor runtime synchronization
DjDeveloperr Aug 28, 2026
b18073c
fix(quickjs): use standard Node-API failure statuses
DjDeveloperr Aug 28, 2026
0c0dbbf
fix(android): restore JNI class metadata flow
DjDeveloperr Aug 28, 2026
aae02b1
ci(runtime): isolate stacked engine benchmarks
DjDeveloperr Aug 28, 2026
9604f3c
refactor(jsi): start the shared engine layer with the neutral GSD core
ammarahm-ed Jul 30, 2026
f1df517
refactor(jsi): move the QuickJS engine layer into the shared tree
ammarahm-ed Jul 30, 2026
07806fe
refactor(jsi): move the V8 engine layer into the shared tree
ammarahm-ed Jul 30, 2026
b4c1c4a
refactor(jsi): move the JavaScriptCore engine layer into the shared tree
ammarahm-ed Jul 30, 2026
ca14ff2
refactor(jsi): share the Hermes contract header and the GSD lookup side
ammarahm-ed Jul 30, 2026
7cdeb2e
chore(ci): teach the FFI boundary check about the shared jsi tree
ammarahm-ed Jul 30, 2026
4246722
fix(react-native): package the shared JSI headers
DjDeveloperr Aug 28, 2026
2700200
Merge pull request #67 from NativeScript/port/android-updates-on-refa…
ammarahm-ed Sep 24, 2026
85933e3
Merge pull request #68 from NativeScript/jsi-shared-jsi-layer
ammarahm-ed Sep 24, 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
  •  
  •  
  •  
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
137 changes: 136 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,138 @@ 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: |
# Candidate and base can pin different engine releases and CMake
# layouts. Their ignored build/framework outputs must not bleed into
# one another when both revisions are built in this checkout.
rm -rf ./dist/intermediates/macos ./dist/NativeScript.xcframework
case "${ENGINE}" in
v8)
rm -rf ./Frameworks/libv8_monolith.xcframework
;;
hermes)
rm -rf ./Frameworks/hermes.xcframework ./Frameworks/hermes-headers
;;
esac
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"
Loading