Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
484 commits
Select commit Hold shift + click to select a range
16054fd
runtime: handle internal modules, support require("lib.node");
ammarahm-ed Mar 12, 2025
4135118
runtime: fix memory leak on release objects
ammarahm-ed Mar 14, 2025
fd797f7
primjs: fix segfault on eval
ammarahm-ed Mar 16, 2025
19ecf6d
runtime: avoid throwing uncaught exceptions in java
ammarahm-ed Mar 17, 2025
93d8ccd
jsparser: handle parsing swc transformed @NativeClass
ammarahm-ed Mar 15, 2025
0d29270
fix: handle all swc transform cases
ammarahm-ed Mar 15, 2025
6798bad
fix: use call_super location
ammarahm-ed Mar 15, 2025
e6bf16e
cleanup tests
ammarahm-ed Mar 15, 2025
a0ac6a9
fix: jsparser fixes and support for primjs in sbg
ammarahm-ed Mar 17, 2025
b94cb6f
primjs: port host objects support
ammarahm-ed Mar 18, 2025
a8daa31
fix ts_helpers.js
ammarahm-ed Oct 16, 2025
25d7c7a
feat: Update V8 to 11.1.277
ammarahm-ed Oct 22, 2025
53a016e
hermes: cleanup jsr runtime
ammarahm-ed Oct 22, 2025
d6100bc
hermes: update to hermes v1
ammarahm-ed Oct 29, 2025
53d4680
feat: v8 13.8.9
ammarahm-ed Oct 30, 2025
fdf7f88
feat: support multiple versions of v8
ammarahm-ed Oct 30, 2025
de073ba
hermes: class syntax is not supported
ammarahm-ed Oct 30, 2025
e0cb923
v8: Set default engine to V8-10
ammarahm-ed Oct 30, 2025
ddab139
chore: update deps
ammarahm-ed Oct 30, 2025
2c4023c
chore: trying release ci
farfromrefug Nov 2, 2025
8c765aa
add benchmarks
ammarahm-ed Nov 2, 2025
da7336c
add setup command
ammarahm-ed Nov 2, 2025
c8efd4b
hermes: support loading bytecode
ammarahm-ed Nov 4, 2025
07c7671
feat: add promise rejection handling for v8
ammarahm-ed Nov 24, 2025
ff73117
feat: add promise rejection handling for quickjs
ammarahm-ed Nov 24, 2025
2d3eece
v8: rename promise tracker function to be consistent across engines
ammarahm-ed Nov 24, 2025
a329437
hermes: add promise rejection handler
ammarahm-ed Nov 24, 2025
fd99ed9
quickjs: support multiple quickjs versions
ammarahm-ed Nov 26, 2025
37cbfe7
fix .extend not working in quickjs
ammarahm-ed Feb 3, 2026
cb25d3f
fix error 'length is read-only`. Use defineProperty
ammarahm-ed Feb 3, 2026
b5b2e75
fix console.log(error) should include stack trace
ammarahm-ed Feb 20, 2026
bf14453
add safety checks
ammarahm-ed Feb 21, 2026
3014a0f
chore: remove editor project folders
DjDeveloperr Jun 10, 2026
2d3ec73
chore: remove committed jsparser dependencies
DjDeveloperr Jun 10, 2026
4daf2a0
refactor: unify android runtime c++ layout
DjDeveloperr Jul 1, 2026
a27b4d3
feat: expand generic NativeScript runtime parity
DjDeveloperr Jun 12, 2026
a5fecf0
fix: support worklets 0.8 peers
DjDeveloperr Jun 13, 2026
1597426
refactor(runtime): split engine backends and harden lifetimes (#51)
DjDeveloperr Aug 5, 2026
e7e244d
fix(ffi): restore alloc+init fallback and fix UShort GSD/marshalling …
DjDeveloperr Aug 14, 2026
b02d0cc
fix(ffi): drop two build-breaking stale includes from the reorg
DjDeveloperr Aug 14, 2026
3519a29
fix(ffi): use nativeClass.new() in the zero-arg constructor fallback,…
DjDeveloperr Aug 14, 2026
6558558
chore(napi): sync shared Node-API headers and rename napi_runtime
ammarahm-ed Jul 29, 2026
212233c
feat(android/quickjs): pin engines as submodules and update the napi …
ammarahm-ed Jul 29, 2026
377488f
feat(android/primjs): update PrimJS and rewrite the napi adapter
ammarahm-ed Jul 29, 2026
7e2f51e
feat(android/jsc): update JavaScriptCore and add host object support
ammarahm-ed Jul 29, 2026
9f95b5b
feat(android/v8): rewrite the host object implementation
ammarahm-ed Jul 29, 2026
66ff778
feat(hermes): support both Node-API ABIs from one JSR
ammarahm-ed Jul 29, 2026
f09afce
feat(android/jni): port the JNI Node-API interop updates
ammarahm-ed Jul 29, 2026
a2a1737
feat(android/runtime): port runtime core, native workers and inspector
ammarahm-ed Jul 29, 2026
95fc9c8
feat(url): Ada 3.3.0, URLPattern and URLSearchParams spec compliance
ammarahm-ed Jul 29, 2026
f526b24
feat(android): port the Java runtime layer
ammarahm-ed Jul 29, 2026
a637e36
build(android): gradle/CMake updates and prebuilt engine binaries
ammarahm-ed Jul 29, 2026
e2f6a0e
test(android): port the test-app suites and build tools
ammarahm-ed Jul 29, 2026
52fcbb2
feat(android): bytecode compiler toolchain
ammarahm-ed Jul 29, 2026
2c433d7
fix(napi): declare jsr_ns_runtime where the typedef was lost
ammarahm-ed Jul 29, 2026
f37864e
fix(url,android): complete the URLSearchParams port and fix a duplica…
ammarahm-ed Jul 29, 2026
4bb3a8c
fix(hermes): restore js_runtime.h, which the Apple JSR includes
ammarahm-ed Jul 29, 2026
4adcaeb
fix(android): unbreak the Hermes build and the last bad CMake definition
ammarahm-ed Jul 29, 2026
2678395
fix(android/quickjs): carry napi-ios's WeakRef patch into the submodules
ammarahm-ed Jul 29, 2026
b26d590
fix(android): resolve Hermes native-lib packaging collisions
ammarahm-ed Jul 29, 2026
bcd7a8f
fix(android/quickjs): actually record the engines as submodule gitlinks
ammarahm-ed Jul 29, 2026
efdb712
fix(hermes): give Android its own header set, matching its engine binary
ammarahm-ed Jul 29, 2026
672a469
fix(url): give the URLSearchParams iterator state a single owner
ammarahm-ed Jul 29, 2026
0acf178
fix(url): derive iterator state from the receiver, not the callback data
ammarahm-ed Jul 29, 2026
dd71fd3
fix(napi,url): clean up the Apple build and align its URLSearchParams…
ammarahm-ed Jul 30, 2026
7f50829
fix(napi/quickjs): repair the Apple QuickJS backend after the header …
ammarahm-ed Jul 30, 2026
0e76249
chore(android): remove octane benchmark worker
ammarahm-ed Aug 5, 2026
df3260d
chore(android): update npm_trusted_release.yml to support android
ammarahm-ed Aug 5, 2026
e9159be
chore(android): cleanup
ammarahm-ed Aug 5, 2026
81fea4b
style: clang-format the engine napi and jsr sources
ammarahm-ed Aug 7, 2026
f134ee3
fix(apple/quickjs): restore the ObjC FFI sources moved out of ffi/obj…
ammarahm-ed Aug 7, 2026
31266f2
refactor(napi/hermes): use the napi/common headers instead of the for…
ammarahm-ed Aug 7, 2026
23369d5
refactor(quickjs): vendor the patched quickjs-ng tree, drop bellard a…
ammarahm-ed Aug 7, 2026
18186c0
refactor(android/v8): drop the v8-10 and v8-11 engines
ammarahm-ed Aug 7, 2026
b75aeb3
docs(android/jsc): record why gc() cannot use the synchronous collector
ammarahm-ed Aug 7, 2026
6cdc6a4
refactor(quickjs): share one backend between Apple and Android on qui…
ammarahm-ed Aug 7, 2026
1818053
refactor(jsc): share one backend between Apple and Android
ammarahm-ed Aug 7, 2026
c8d9bdc
fix(apple/v8): migrate the backend to the V8 14.9 API
ammarahm-ed Aug 8, 2026
f714715
feat(v8): add download_v8.sh for the shared V8 build
ammarahm-ed Aug 8, 2026
889f424
build(android): fetch the V8 libs on demand instead of committing them
ammarahm-ed Aug 8, 2026
2333ce0
chore(v8): vendor the shared V8 14.9 public headers
ammarahm-ed Aug 8, 2026
7526bc2
refactor(engines): share the vendored Hermes and V8 headers across Ap…
ammarahm-ed Aug 8, 2026
b021d8a
refactor(v8): merge the Apple and Android V8 backends into one napi/v8
ammarahm-ed Aug 8, 2026
bdac092
build(v8): fetch only the V8 headers the build reaches and require ND…
ammarahm-ed Aug 8, 2026
e936619
refactor(napi): move each engine's node-api layer under vendor/<engine>
ammarahm-ed Aug 8, 2026
5385fe6
build(v8): note the release now ships only the header closure
ammarahm-ed Aug 8, 2026
47493d7
fix(hermes): stop a JSI exception escaping the microtask drain into ObjC
ammarahm-ed Aug 8, 2026
5e7e4fb
fix(hermes): take the runtime lock for off-thread native callbacks
ammarahm-ed Aug 8, 2026
101669e
chore(v8): pin release -5 and install the full src-headers closure
ammarahm-ed Aug 8, 2026
e355670
chore(android): drop the unused v8-13 prebuilt libs
ammarahm-ed Aug 8, 2026
62fbb7c
fix(android/test-app): give timers unique ids and stop timing out str…
ammarahm-ed Aug 8, 2026
5194b6e
fix(jsc): guard the context->env map against concurrent worker access
ammarahm-ed Aug 8, 2026
db525ec
fix(jsc): make Android gc() a real synchronous collection
ammarahm-ed Aug 8, 2026
70c290b
fix(react-native): keep the JSR runtime scope out of the RN turbomodu…
ammarahm-ed Aug 8, 2026
6c7b5c5
build(android): fetch the Hermes prebuilts before CMake configures
ammarahm-ed Aug 16, 2026
48a1950
fix(jsc): let a JS prototype property shadow the native one again
ammarahm-ed Aug 16, 2026
cc87e6e
fix(ffi): fall back to the call's receiver when a bound one has gone …
ammarahm-ed Aug 16, 2026
ba0a39e
fix(ffi): stop the backend boundary check flagging the engine JSR tree
ammarahm-ed Aug 16, 2026
0ebf7e5
refactor(jsi): start the shared engine layer with the neutral GSD core
ammarahm-ed Jul 30, 2026
173c0ee
refactor(jsi): move the QuickJS engine layer into the shared tree
ammarahm-ed Jul 30, 2026
2f9d58c
refactor(jsi): move the V8 engine layer into the shared tree
ammarahm-ed Jul 30, 2026
ef2efde
refactor(jsi): move the JavaScriptCore engine layer into the shared tree
ammarahm-ed Jul 30, 2026
ffd6314
refactor(jsi): share the Hermes contract header and the GSD lookup side
ammarahm-ed Jul 30, 2026
2a969b0
chore(ci): teach the FFI boundary check about the shared jsi tree
ammarahm-ed Jul 30, 2026
a6d20a4
feat(engine): bring the optimised nativescript::engine layer onto the…
ammarahm-ed Aug 4, 2026
4c9f991
refactor(android): split the runtime into napi/ and jsi/ trees
ammarahm-ed Aug 4, 2026
e95ed6e
feat(jni/jsi): engine-facing foundation for the jsi JNI bridge
ammarahm-ed Aug 4, 2026
1ded2b9
feat(jni/jsi): object identity, finalizer deferral, exceptions, arg c…
ammarahm-ed Aug 4, 2026
d937d0f
feat(jni/jsi): WeakRef polyfill on the engine native-state slot
ammarahm-ed Aug 4, 2026
864111f
build(android): wire the engine:: layer into the jsi runtime
ammarahm-ed Aug 4, 2026
99ed6a6
feat(android/jsi): engine host, runtime spine, and the napi-free subs…
ammarahm-ed Aug 4, 2026
ce050b5
feat(android/jsi): JNI entry points, profiler, performance, message-l…
ammarahm-ed Aug 4, 2026
79ffec3
feat(android/jsi): port the module loader
ammarahm-ed Aug 4, 2026
3896c02
feat(android/jsi): port WorkerWrapper
ammarahm-ed Aug 4, 2026
3c5b661
feat(android/jsi): port Timers
ammarahm-ed Aug 4, 2026
fe15fc0
feat(android/jsi): port Console; compile NativeScript/jsi under -Pbin…
ammarahm-ed Aug 4, 2026
20f70c4
build(android/jsi): reconcile the two lanes' boundary contracts
ammarahm-ed Aug 4, 2026
c3b557d
feat(android/jsi): port the conversion layer to engine::
ammarahm-ed Aug 4, 2026
0767817
feat(android/jsi): port GlobalHelpers, JSONObjectHelper and MethodCache
ammarahm-ed Aug 4, 2026
9d91031
fix(android/jsi): close the last two runtime<->ffi API gaps
ammarahm-ed Aug 4, 2026
8f5f35f
feat(android/jsi): port FieldAccessor and MetadataBuilder
ammarahm-ed Aug 4, 2026
d9691a2
feat(android/jsi): port MetadataNode and CallbackHandlers; the tree l…
ammarahm-ed Aug 4, 2026
9f787c4
fix(android/jsi): key per-runtime state on a stable identity, not &rt
ammarahm-ed Aug 4, 2026
3ae64d9
fix(android/jsi): two more stale-runtime bugs found on device
ammarahm-ed Aug 4, 2026
681ea41
fix(android/jsi): open the JS scope before reading the worker handle
ammarahm-ed Aug 4, 2026
7cdfee7
fix(android/jsi): stop native exceptions escaping host callbacks
ammarahm-ed Aug 4, 2026
2e8756c
fix(android/jsi): reject a plain Worker(...) call; V8-13 reaches napi…
ammarahm-ed Aug 4, 2026
8db1c40
fix(android/jsi): release host-object proxy handles at runtime dispose
ammarahm-ed Aug 4, 2026
cdf3438
fix(android/jsi): dispose js_util::Builtins at runtime teardown
ammarahm-ed Aug 4, 2026
77d8d25
fix(jsi/quickjs,android/jsi): QuickJS reaches napi parity
ammarahm-ed Aug 4, 2026
95f687b
fix(jsi/jsc): install the constructor back-pointer on a host construc…
ammarahm-ed Aug 4, 2026
0b86d2a
fix(jsi/jsc): give native state own-property semantics
ammarahm-ed Aug 4, 2026
3fc368f
test: skip the url specs where the runtime does not provide the module
ammarahm-ed Aug 4, 2026
b6c13f9
fix(android/jsi): own the proxy registry independently of the ObjectM…
ammarahm-ed Aug 4, 2026
c38a41c
fix(jsi/hermes): install the constructor back-pointer on a host const…
ammarahm-ed Aug 4, 2026
cfcb648
fix(jsi/quickjs): do not allocate a zero-length own-names table
ammarahm-ed Aug 5, 2026
b1fc3dc
fix(android/jsi): console printed "true" for every message
ammarahm-ed Aug 5, 2026
803c1b4
perf(android/jsi): build native instances with the non-masking interc…
ammarahm-ed Aug 5, 2026
4c8bb22
fix(android/jsi): keep the error type when rebuilding an error from a…
ammarahm-ed Aug 5, 2026
7cc9a7f
fix(apple): stop crashing at exit on destroyed function-local statics
ammarahm-ed Aug 1, 2026
d3488fe
perf(jsi/quickjs): take the RuntimeState off the holder, not the cont…
ammarahm-ed Aug 5, 2026
4741e2f
perf(jsi): create and read JS strings without an owning engine handle
ammarahm-ed Aug 5, 2026
07bb96f
feat(jsi): hand host objects an array index as an integer
ammarahm-ed Aug 5, 2026
6f3accb
feat(android/jsi): run ahead-of-time bytecode modules
ammarahm-ed Aug 5, 2026
7b6723b
fix: write the number to a byte or short field, not zero
ammarahm-ed Aug 5, 2026
a81b7c4
chore(android): cleanup
ammarahm-ed Aug 5, 2026
e6e470a
docs: point comments at the relocated engine binding paths
ammarahm-ed Aug 9, 2026
ed0b194
fix(jsi): use one stack argument array across the engine layer
ammarahm-ed Aug 16, 2026
39a1d63
fix(jsc): treat advisory gc() as engine behaviour instead of forcing …
ammarahm-ed Aug 16, 2026
f49594d
build(android): fetch the Hermes prebuilts before CMake configures
ammarahm-ed Aug 9, 2026
8340b91
feat(android/jsi): let EngineHost adopt a jsi::Runtime the embedder owns
ammarahm-ed Aug 9, 2026
94c621a
feat(android/jsi): add the guest attach path for an embedder-owned ru…
ammarahm-ed Aug 9, 2026
7cd1354
feat(react-native/android): add the source-built guest runtime module
ammarahm-ed Aug 9, 2026
d6745ef
feat(react-native/android): generate metadata and attach to RN's runtime
ammarahm-ed Aug 9, 2026
d8aacb2
fix(dts-generator): emit declarations TypeScript can parse
ammarahm-ed Aug 9, 2026
4aba20d
feat(react-native/android): support subclassing Java from JS
ammarahm-ed Aug 9, 2026
288463a
feat(react-native): add @NativeClass and package the Android runtime
ammarahm-ed Aug 9, 2026
78cb751
test(react-native/android): add the conformance fixture and runner
ammarahm-ed Aug 9, 2026
d31c4d1
feat(react-native): add JavaProxy naming for build-time generated cla…
ammarahm-ed Aug 9, 2026
2569469
feat(bindings): name generated bindings by content instead of call site
ammarahm-ed Aug 9, 2026
ae34d25
feat(jsparser): emit bindings for decorated native class declarations
ammarahm-ed Aug 9, 2026
3691174
docs(react-native): document content-keyed class naming and when a na…
ammarahm-ed Aug 9, 2026
496aed6
fix(jsparser): read bundler output whatever its extension, retrying a…
ammarahm-ed Aug 9, 2026
055bf21
feat(react-native): pre-generate Java bindings from a release bundle
ammarahm-ed Aug 9, 2026
c8fae14
fix(test): count a self-reported FAIL result as a failure in the RN f…
ammarahm-ed Aug 9, 2026
270665d
feat(jsparser): recognise decorators applied as calls, not just syntax
ammarahm-ed Aug 9, 2026
b3fb3a0
feat(react-native): resolve JavaProxy classes from the release bundle
ammarahm-ed Aug 9, 2026
8da7543
perf(react-native): drop standalone-only runtime modules from the gue…
ammarahm-ed Aug 9, 2026
058ce79
feat(metadata): measure what a JS-bundle filter can and cannot cover
ammarahm-ed Aug 9, 2026
3800c4a
feat(metadata): filter metadata from the app bundle and emit R8 keep …
ammarahm-ed Aug 9, 2026
2b41cab
feat(metadata): verify closure soundness and derive the filter seed i…
ammarahm-ed Aug 9, 2026
17f0bc0
feat(metadata): enforce the generated keep rules so R8 strips the sam…
ammarahm-ed Aug 9, 2026
175c6df
docs(metadata): report the size win against real payload, not test fi…
ammarahm-ed Aug 9, 2026
464308d
fix(metadata): close the filter's coverage gaps and check them
ammarahm-ed Aug 9, 2026
cb34813
perf(sbg): compile app classes for binding generation and reuse prege…
ammarahm-ed Aug 9, 2026
21f9ae9
perf(dts): replace per-generic regex passes with a single linear scan
ammarahm-ed Aug 10, 2026
24ba478
perf(dts): bucket ignored namespaces and copy in runs
ammarahm-ed Aug 10, 2026
a1b1098
feat(dts): generate typings by default, cached on the classpath
ammarahm-ed Aug 10, 2026
67ca687
chore: ignore generated typings output
ammarahm-ed Aug 10, 2026
3d097b0
fix(rn): make the typings task runnable on its own and cache it
ammarahm-ed Aug 10, 2026
fbd1c14
fix(metadata): make filtering work on a React Native release build
ammarahm-ed Aug 10, 2026
4789fb7
feat(napi): bring content-keyed bindings and the metadata tracer to t…
ammarahm-ed Aug 10, 2026
2004354
fix(bindings): make runtime and generator content keys agree, and pre…
ammarahm-ed Aug 10, 2026
c4564a3
fix(sbg): count quoted keys in an implementation object as method ove…
ammarahm-ed Aug 10, 2026
c22d2c0
fix(react-native): stage the Apple bridge and engine layer as trees, …
ammarahm-ed Aug 16, 2026
963093c
fix(react-native): metadata filtering fixes for react-native
ammarahm-ed Aug 17, 2026
3c395ac
chore: cleanup .github/workflows in packages/android
ammarahm-ed Aug 17, 2026
24f3231
fix(metadata): exclude module names that match a js namespace
ammarahm-ed Aug 17, 2026
1afbf23
fix: add missing bundle-for-analysis.js file
ammarahm-ed Aug 17, 2026
129f1db
fix(quickjs): use gitmodules for quickjs_ng source
ammarahm-ed Aug 19, 2026
0cfa00c
fix(android): disable generateTypes by default
ammarahm-ed Aug 19, 2026
b9e887d
fix(quickjs): record the source_ng submodule gitlink at its pinned co…
ammarahm-ed Aug 19, 2026
bef319a
refactor(quickjs): move the engine patches to vendor/quickjs/patches …
ammarahm-ed Aug 19, 2026
b6b2786
fix(apple): apply the quickjs patches before building and drop the re…
ammarahm-ed Aug 19, 2026
9fe4655
refactor(android): move the build and setup entry points to the root …
ammarahm-ed Aug 19, 2026
f6eb5af
fix(release): merge the android targets into the shared npm tag and v…
ammarahm-ed Aug 19, 2026
1eeca4b
chore(android): drop the bellard quickjs package now that QUICKJS ali…
ammarahm-ed Aug 19, 2026
5dc90b2
refactor(android): stage builds in dist/<variant> and tarballs in bui…
ammarahm-ed Aug 19, 2026
c8e2d1d
chore(ci): point the release workflow at the moved scripts and the ne…
ammarahm-ed Aug 19, 2026
d9c0276
fix(react-native): enable typings generation by default
ammarahm-ed Aug 19, 2026
45302be
chore(android): remove the inert asNapiModule build flag
ammarahm-ed Aug 19, 2026
3cc26f0
fix(metadata): only close over and verify a generated seed, leaving a…
ammarahm-ed Aug 19, 2026
2e0f800
feat(android): make content-keyed bindings an app-level flag instead …
ammarahm-ed Aug 19, 2026
e9c4949
ci: android and multi-engine workflow
NathanWalker Aug 28, 2026
0ddb8e0
Merge branch 'main' into android-react-native
NathanWalker Aug 28, 2026
001290d
ci(release): apply vendored QuickJS patches before the Apple engine b…
NathanWalker Aug 28, 2026
2825fb7
Merge branch 'main' into android-react-native
NathanWalker Aug 28, 2026
d99efa9
ci(release): fix NDK install on hosted runners where sdkmanager is no…
NathanWalker Aug 29, 2026
8d27cef
Merge branch 'main' into android-react-native
NathanWalker Aug 29, 2026
54a152a
fix(jsc): measure JSChar string length through char16_t
NathanWalker Aug 29, 2026
166f7ba
fix: provenance repo url
NathanWalker Aug 29, 2026
aa4ff0a
fix(react-native): @nativescript/react-native skips android sources
ammarahm-ed Aug 29, 2026
e2a2465
fix(quickjs): bytecode functions should say [stripped source] instead…
ammarahm-ed Sep 12, 2026
0587021
fix(android): only pick assets/app folder for compiling js bundles
ammarahm-ed Sep 12, 2026
1559fda
fix: sign and restore executable permissions for macOS bytecode compi…
ammarahm-ed Sep 12, 2026
2dd48c3
chore(android): update bytecode compilers
ammarahm-ed Sep 12, 2026
02ae9a2
fix(android): ensure metadata-filter tools are included in app template
ammarahm-ed Sep 13, 2026
51c806e
Optimize metadata-first JNI method resolution
ammarahm-ed Sep 13, 2026
9ad8084
Use metadata-first resolution for Kotlin methods
ammarahm-ed Sep 14, 2026
40ead61
Port metadata lookup optimization to JSI
ammarahm-ed Sep 17, 2026
eb2e183
fix metadata overload resolution
ammarahm-ed Sep 19, 2026
e226801
fix quickjs timer callbacks
ammarahm-ed Sep 19, 2026
7c9b4ab
test overload and return type resolution
ammarahm-ed Sep 19, 2026
da356f2
cleanup metadata tracing
ammarahm-ed Sep 19, 2026
4236036
remove temporary metadata filtering docs
ammarahm-ed Sep 19, 2026
7ed3d04
remove stale metadata docs references
ammarahm-ed Sep 19, 2026
8eea02d
document metadata filter tools
ammarahm-ed Sep 19, 2026
d5fc6ac
fix(android): Android overload return type metadata
ammarahm-ed Sep 24, 2026
4cd834e
fix(android): exlcude js files app/assets folder when compiling to by…
ammarahm-ed Sep 30, 2026
d5bca06
fix(android): call the single metadata overload directly when null/JS…
ammarahm-ed Oct 1, 2026
423d6f0
fix(android): expose a package as $name when its global is non-writable
NathanWalker Oct 16, 2026
9909d6c
ci(release): check out LFS objects for the react-native build
NathanWalker Oct 18, 2026
238665d
fix(react-native/ios): attach a recycled NativeScriptUIView's handle …
NathanWalker Oct 18, 2026
e483aef
Merge pull request #80 from NativeScript/fix/rn-ios-recycled-view
ammarahm-ed Oct 25, 2026
066a38e
fix(ffi/objc): key thread_local bridge caches by a per-bridge id
NathanWalker Oct 18, 2026
95739d3
fix(types): nullable blocks as (() => T) | null; declare NativeObject…
NathanWalker Oct 25, 2026
64c7fed
fix(react-native): keep metadata.android when writing nativescript.re…
NathanWalker Oct 25, 2026
6fb40a9
fix(react-native): explain a missing native module at import (#82)
NathanWalker Nov 2, 2026
35c8263
fix(android): use $name when a Java package's global name is taken (#86)
NathanWalker Nov 2, 2026
72fcacd
fix(ffi/objc): define only real C enum constant names as globals (#87)
NathanWalker Nov 2, 2026
11fae30
fix(android): re-attach NativeScript after a JavaScript reload (#89)
NathanWalker Nov 2, 2026
f0b2dc9
fix(android): deliver GC notifications under a per-runtime lock (#91)
NathanWalker Nov 2, 2026
e144492
fix(android): free runtime-owned JNI refs and method callback data on…
NathanWalker Nov 2, 2026
1198148
fix(android): flush queued finalizers before a jsi runtime is marked …
NathanWalker Nov 2, 2026
9ab12dd
fix(android): synchronize ArgConverter's per-runtime long cache (#96)
NathanWalker Nov 2, 2026
5fe634d
fix(react-native): configure the Worklets Babel plugin with strictGlo…
NathanWalker Nov 7, 2026
829f41e
fix(metagen): keep typedef'd CF types for block parameters
NathanWalker Nov 7, 2026
dc2ff7a
test(metagen): cover CF typedef block parameters
NathanWalker Nov 7, 2026
3f430fb
build(ios): raise the iOS deployment target to 15.0
NathanWalker Nov 7, 2026
2ba50c2
build(ios): raise the remaining iOS 13.0 targets to 15.0
NathanWalker Nov 7, 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.
8 changes: 8 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Prebuilt Android engine binaries. These are large and opaque, so all of them
# are stored via Git LFS. Note this only governs how git stores *new* writes:
# blobs already committed as plain objects stay that way in history until the
# file is next written (or the history is rewritten with `git lfs migrate`).
#
# CI must check out with LFS enabled (actions/checkout `lfs: true`), otherwise
# the android build links against pointer files and fails at link time.
platforms/android/test-app/**/libs/** filter=lfs diff=lfs merge=lfs -text
322 changes: 322 additions & 0 deletions .github/workflows/bytecode-compilers.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,322 @@
name: Build bytecode compilers

# Builds the per-host bytecode compiler CLIs for every engine that supports
# ahead-of-time bytecode, by cloning each engine's UPSTREAM repo (not the
# android-runtime vendored sources) and building the CLI there.
#
# Output: one artifact per (engine, host), named `bytecode-compiler-<engine>-<host>`,
# each containing `<engine>/<host>/<binary>` so the downloads merge straight into
# platforms/android/tools/bytecode-compiler/bin/.
#
# The final `bundle` job merges them all into a single `bytecode-compiler-bin`
# artifact laid out exactly like platforms/android/tools/bytecode-compiler/bin/ — download it, unzip,
# and drop its contents into platforms/android/tools/bytecode-compiler/bin/ as-is.
#
# NOTE ON COMPATIBILITY: the produced bytecode must be loadable by the engine
# library the runtime ships. Hermes/PrimJS runtimes link prebuilt binaries and
# QuickJS-NG compiles from the vendored source, so the refs below must be kept in
# step with what the runtime actually bundles. Pin these to exact commits once
# validated instead of moving branches.
on:
workflow_dispatch:
inputs:
hermes_ref:
# MUST match UPSTREAM_COMMIT in build-hermes, which is what produced the
# prebuilt both platforms link. See scripts/download_hermes.sh.
description: "facebook/hermes ref (match the prebuilt release)"
default: "10a40b5f1de81d007cba6afe567c4ba7a0b45f5d"
quickjs_ng_ref:
# MUST match the vendored source in vendor/quickjs/source_ng, or
# JS_ReadObject rejects the blob: the compiler writes its own BC_VERSION
# and the runtime accepts only its own. d950d55e == BC_VERSION 27, which
# is what the vendored quickjs.c defines.
description: "quickjs-ng/quickjs ref (match vendor/quickjs/source_ng)"
default: "d950d55e950dd7994a96c669c31efa967b8b79f3"
primjs_ref:
description: "lynx-family/primjs ref"
default: "9c1fe150179b86f0ae5c6fbe670af7d76eca9df6"

env:
HERMES_REPO: https://github.com/facebook/hermes
QUICKJS_NG_REPO: https://github.com/quickjs-ng/quickjs
PRIMJS_REPO: https://github.com/lynx-family/primjs

jobs:
# ---------------------------------------------------------------------------
# Hermes — `hermesc` already emits a loadable HBC blob; no shim needed.
# ---------------------------------------------------------------------------
hermes:
name: hermes (${{ matrix.host }})
runs-on: ${{ matrix.runner }}
strategy:
fail-fast: false
matrix:
include:
- { host: linux-x64, runner: ubuntu-24.04 }
- { host: linux-arm64, runner: ubuntu-24.04-arm }
- { host: darwin-x64, runner: macos-15-intel }
- { host: darwin-arm64, runner: macos-14 }
- { host: win32-x64, runner: windows-2022 }
# win32-arm64 dropped: hermes' Boost.Context ARM64 assembler + CMake's
# ASM_ARMASM linker support fail on windows-11-arm. The win32-x64
# hermesc runs on ARM Windows via x64 emulation (HBC output is portable).
steps:
- name: Install toolchain (Linux)
if: runner.os == 'Linux'
run: sudo apt-get update && sudo apt-get install -y cmake ninja-build build-essential python3
- name: Install toolchain (macOS)
if: runner.os == 'macOS'
run: brew install cmake ninja
- name: Install toolchain (Windows)
if: runner.os == 'Windows'
run: choco install ninja -y

- name: Clone Hermes
shell: bash
# Fetch by ref so an exact commit SHA works (git clone --branch only
# accepts branch/tag names). GitHub allows fetching arbitrary SHAs.
run: |
set -euxo pipefail
ref="${{ github.event.inputs.hermes_ref || '10a40b5f1de81d007cba6afe567c4ba7a0b45f5d' }}"
git init hermes
git -C hermes remote add origin "$HERMES_REPO"
git -C hermes fetch --depth 1 origin "$ref"
git -C hermes -c advice.detachedHead=false checkout FETCH_HEAD

- name: Build hermesc (Unix)
if: runner.os != 'Windows'
shell: bash
run: |
set -euxo pipefail
cmake -S hermes -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DHERMES_BUILD_APPLE_FRAMEWORK=OFF
cmake --build build --target hermesc

- name: Build hermesc (Windows)
if: runner.os == 'Windows'
shell: bash
run: |
set -euxo pipefail
# Use the default (Visual Studio) generator; Ninja+MSVC also works if the
# VS dev environment is on PATH.
cmake -S hermes -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --target hermesc --config Release

- name: Stage binary
shell: bash
run: |
set -euxo pipefail
mkdir -p "out/hermes/${{ matrix.host }}"
bin="$(find build -type f \( -name hermesc -o -name hermesc.exe \) | head -n1)"
test -n "$bin"
cp "$bin" "out/hermes/${{ matrix.host }}/"
if [ "${{ runner.os }}" = "macOS" ]; then
codesign --sign - --force "out/hermes/${{ matrix.host }}/$(basename "$bin")"
codesign --verify --verbose "out/hermes/${{ matrix.host }}/$(basename "$bin")"
fi

- uses: actions/upload-artifact@v4
with:
name: bytecode-compiler-hermes-${{ matrix.host }}
# Root the artifact at `out/` so it carries the full
# `hermes/<host>/<binary>` path and merges straight into bin/.
path: out
if-no-files-found: error

# ---------------------------------------------------------------------------
# QuickJS-NG — CMake build of libqjs, then our shim (same JS_* API).
#
# There is no bellard/quickjs job: the runtime dropped that tree, and its
# QUICKJS engine is now an alias for QUICKJS_NG (see
# platforms/android/test-app/runtime/build.gradle).
# ---------------------------------------------------------------------------
quickjs-ng:
name: quickjs-ng (${{ matrix.host }})
runs-on: ${{ matrix.runner }}
strategy:
fail-fast: false
matrix:
include:
- { host: linux-x64, runner: ubuntu-24.04 }
- { host: linux-arm64, runner: ubuntu-24.04-arm }
- { host: darwin-x64, runner: macos-15-intel }
- { host: darwin-arm64, runner: macos-14 }
- { host: win32-x64, runner: windows-2022 }
# - { host: win32-arm64, runner: windows-11-arm }
steps:
- uses: actions/checkout@v4
- name: Install toolchain (Linux)
if: runner.os == 'Linux'
run: sudo apt-get update && sudo apt-get install -y cmake ninja-build build-essential
- name: Install toolchain (macOS)
if: runner.os == 'macOS'
run: brew install cmake ninja
- name: Install toolchain (Windows)
if: runner.os == 'Windows'
run: choco install ninja llvm -y

- name: Clone QuickJS-NG
shell: bash
run: |
set -euxo pipefail
ref="${{ github.event.inputs.quickjs_ng_ref || 'd950d55e950dd7994a96c669c31efa967b8b79f3' }}"
git init quickjs-ng
git -C quickjs-ng remote add origin "$QUICKJS_NG_REPO"
git -C quickjs-ng fetch --depth 1 origin "$ref"
git -C quickjs-ng -c advice.detachedHead=false checkout FETCH_HEAD

- name: Build lib + shim
shell: bash
env:
SHIM: ${{ github.workspace }}/platforms/android/tools/bytecode-compiler/native/qjs-compile.c
run: |
set -euxo pipefail
# Note: the workflow lives at the repository root, so the shim path is
# platforms/android/-prefixed; the tool tree itself is under Android.
# Build the shim as a CMake target so it uses the SAME toolchain + CRT
# as the engine lib. Linking a separately-compiled (clang) shim against
# the MSVC-built qjs.lib fails with __imp_*/CRT-mismatch link errors on
# Windows. The 'qjs' target propagates its public include dirs and libm.
cp "$SHIM" quickjs-ng/nsbc-quickjs-ng.c
cat >> quickjs-ng/CMakeLists.txt <<'CMAKE'

add_executable(nsbc-quickjs-ng nsbc-quickjs-ng.c)
target_link_libraries(nsbc-quickjs-ng PRIVATE qjs)
target_compile_definitions(nsbc-quickjs-ng PRIVATE NSBC_MAGIC=\"NSBCNGS\")
CMAKE
cmake -S quickjs-ng -B quickjs-ng/build -DCMAKE_BUILD_TYPE=Release
cmake --build quickjs-ng/build --config Release --target nsbc-quickjs-ng
out="out/quickjs-ng/${{ matrix.host }}"; mkdir -p "$out"
bin="$(find quickjs-ng/build -type f \( -name 'nsbc-quickjs-ng' -o -name 'nsbc-quickjs-ng.exe' \) | head -n1)"
test -n "$bin"; cp "$bin" "$out/"
if [ "${{ runner.os }}" = "macOS" ]; then
codesign --sign - --force "$out/nsbc-quickjs-ng"
codesign --verify --verbose "$out/nsbc-quickjs-ng"
fi
[ "${{ runner.os }}" = "Windows" ] || "$out/nsbc-quickjs-ng" || true

- uses: actions/upload-artifact@v4
with:
name: bytecode-compiler-quickjs-ng-${{ matrix.host }}
# Root the artifact at `out/` so it carries the full
# `quickjs-ng/<host>/<binary>` path and merges straight into bin/.
path: out
if-no-files-found: error

# ---------------------------------------------------------------------------
# PrimJS — build via its own toolchain: `hab sync` fetches gn + ninja + a
# bundled clang + sysroot, then GN/ninja build the engine. We add our LEPUS_*
# shim as a sibling GN executable (reusing the qjs-cli engine deps).
#
# Unix only, and NOT linux-arm64: PrimJS's envsetup.sh aborts on Windows, and
# its DEPS only provides a linux sysroot for x86_64. So: linux-x64 + macOS.
#
# Validated locally on darwin-arm64 (hab sync -> gn gen -> ninja nsbc-primjs
# produces a working CLI). Linux uses the same flow.
# ---------------------------------------------------------------------------
primjs:
name: primjs (${{ matrix.host }})
runs-on: ${{ matrix.runner }}
strategy:
fail-fast: false
matrix:
include:
- { host: linux-x64, runner: ubuntu-24.04 }
- { host: darwin-x64, runner: macos-15-intel }
- { host: darwin-arm64, runner: macos-14 }
steps:
- uses: actions/checkout@v4
- name: Install prerequisites (Linux)
if: runner.os == 'Linux'
run: sudo apt-get update && sudo apt-get install -y python3 curl

- name: Clone PrimJS
shell: bash
run: |
set -euxo pipefail
ref="${{ github.event.inputs.primjs_ref || '9c1fe150179b86f0ae5c6fbe670af7d76eca9df6' }}"
git init primjs
git -C primjs remote add origin "$PRIMJS_REPO"
git -C primjs fetch --depth 1 origin "$ref"
git -C primjs -c advice.detachedHead=false checkout FETCH_HEAD

- name: Add shim as a GN target
shell: bash
env:
SHIM: ${{ github.workspace }}/platforms/android/tools/bytecode-compiler/native/primjs-compile.c
run: |
set -euxo pipefail
# Build as C++ (.cc); the LEPUS_* API is extern "C" so linkage is fine.
cp "$SHIM" primjs/tools/qjs-cli/nsbc-primjs.cc
# Add the target to the ROOT BUILD.gn (always loaded, so it's always
# generated) linking ONLY the core engine (//src:quickjs_lib). We avoid
# qjs_wasm_binding — its WASM/JSC code doesn't build under the bundled
# toolchain's -Werror, and our shim doesn't need it. (Validated locally.)
cat >> primjs/BUILD.gn <<'GN'

executable("nsbc-primjs") {
cflags = [ "-Wno-c99-designator" ]
sources = [ "//tools/qjs-cli/nsbc-primjs.cc" ]
include_dirs = [ "//include" ]
deps = [ "//src:quickjs_lib" ]
}
GN

- name: Build (hab sync + gn + ninja)
shell: bash
working-directory: primjs
run: |
set -euxo pipefail
# hab (in-repo) fetches gn, ninja, the bundled clang toolchain + sysroot.
source tools/envsetup.sh
hab sync .
gn gen out/Default --args="is_debug=false"
ninja -C out/Default nsbc-primjs
out="../out/primjs/${{ matrix.host }}"; mkdir -p "$out"
cp out/Default/nsbc-primjs "$out/nsbc-primjs"
if [ "${{ runner.os }}" = "macOS" ]; then
codesign --sign - --force "$out/nsbc-primjs"
codesign --verify --verbose "$out/nsbc-primjs"
fi
"$out/nsbc-primjs" || true # usage line (exit 2) proves it links & runs

- uses: actions/upload-artifact@v4
with:
name: bytecode-compiler-primjs-${{ matrix.host }}
# Root the artifact at `out/` so it carries the full
# `primjs/<host>/<binary>` path and merges straight into bin/.
path: out
if-no-files-found: error

# ---------------------------------------------------------------------------
# Bundle — merge every per-(engine, host) artifact into a single artifact laid
# out exactly like platforms/android/tools/bytecode-compiler/bin/, ready to download-and-paste.
# ---------------------------------------------------------------------------
bundle:
name: bundle bin/
runs-on: ubuntu-24.04
needs: [hermes, quickjs-ng, primjs]
# Run even if some engine/host builds failed, so a partial bin/ is still
# published rather than nothing.
if: always()
steps:
- name: Download all compiler artifacts
uses: actions/download-artifact@v4
with:
# Every per-job artifact already carries an `<engine>/<host>/<binary>`
# path; merge-multiple overlays them into one tree = the bin/ layout.
pattern: bytecode-compiler-*
path: bin
merge-multiple: true

- name: Show merged layout
run: find bin -type f | sort

- name: Restore executable permissions
shell: bash
run: find bin -type f -path '*/darwin-*/*' -exec chmod +x {} \;

- uses: actions/upload-artifact@v4
with:
name: bytecode-compiler-bin
path: bin
if-no-files-found: error
9 changes: 8 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,13 @@ jobs:
- name: Generate macOS metadata
run: npm run metagen macos

- name: Apply QuickJS patches
# vendor/quickjs/source_ng is a pristine submodule checkout at its pinned
# commit; the NativeScript engine changes the Apple build needs (e.g.
# JS_EVAL_FLAG_COMPILE_ONLY_NO_RESOLVE for node:vm) live in
# vendor/quickjs/patches and are applied into the work tree here.
run: npm run patch-quickjs

- name: Build NativeScript
run: npm run build

Expand All @@ -52,6 +59,6 @@ jobs:
IOS_BUILD_TIMEOUT_MS: "600000"
IOS_TEST_TIMEOUT_MS: "600000"
IOS_TEST_INACTIVITY_TIMEOUT_MS: "180000"
IOS_TEST_VERBOSE_SPECS: "1"
IOS_LOG_JUNIT: "1"
IOS_SIMCTL_QUERY_TIMEOUT_MS: "10000"
run: npm run test:ios
6 changes: 6 additions & 0 deletions .github/workflows/npm_release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,12 @@ jobs:
echo NPM_VERSION=$NPM_VERSION >> $GITHUB_OUTPUT
echo NPM_TAG=$NPM_TAG >> $GITHUB_OUTPUT
echo BUILD_ENGINE=$BUILD_ENGINE >> $GITHUB_OUTPUT
- name: Apply QuickJS patches
# vendor/quickjs/source_ng is a pristine submodule checkout at its pinned
# commit; the NativeScript engine changes the Apple build needs (e.g.
# JS_EVAL_FLAG_COMPILE_ONLY_NO_RESOLVE for node:vm) live in
# vendor/quickjs/patches and are applied into the work tree here.
run: npm run patch-quickjs
- name: Build
run: ./scripts/build_all_ios.sh --${{ steps.npm_version_output.outputs.BUILD_ENGINE }}
- name: Upload npm package artifact
Expand Down
Loading
Loading