Goal
Implement every runtime and platform surface currently called out in the README's What Is Not Implemented section, with checked-in compatibility inventories and reproducible evidence, so that the section can be removed without qualification.
This is an umbrella issue. Each independently reviewable implementation slice should have its own linked child issue before substantial work begins.
Scope
1. JavaScriptCore compatibility surfaces
- Check in a versioned inventory of the public JavaScriptCore C API and implement every symbol in the declared target.
- Check in version-pinned inventories for the private framework/internal surfaces we intentionally target, then implement every inventoried entry.
- Implement and test the Objective-C bridge, including object/value conversion, exceptions, lifetimes, blocks/callables, and cross-runtime identity.
- Implement inspector/debugger APIs and protocol behavior, including attach/detach, breakpoints, stepping, evaluation, stack/scope inspection, pause/resume, and exception events.
- Define version-pinned Bun and Home private-JSC ABI compatibility profiles and implement every symbol and behavior in those profiles.
- Reject unsupported ABI versions explicitly; no silent no-ops or accidental partial compatibility.
Complete here means complete for the exact checked-in target inventories. Private ABIs are moving targets, so each supported revision must be named and auditable rather than described as universal compatibility.
2. WebAssembly
- Parser, binary decoder, validator, and deterministic malformed-module diagnostics.
- Module compilation/instantiation and JS-facing Module, Instance, Memory, Table, Global, and Function behavior.
- Imports, exports, start functions, traps, growth, bounds checks, numeric conversions, and JS/Wasm exception boundaries.
- Declare and implement the chosen post-MVP feature set (reference types, bulk memory, multi-value, SIMD, threads, exceptions, GC, etc.) in versioned feature profiles.
- Run the applicable upstream WebAssembly specification tests with an explicit zero-hidden-skip inventory for the supported profiles.
3. PR-249 reference corpus and shell hooks
- Inventory every WebAssembly/JIT shell hook used by the PR-249 reference corpus.
- Promote each relevant reference-only hook into maintained runtime functionality with tests and documentation.
- Remove or explicitly disposition every corpus exclusion; no untracked skip lists.
4. Production generational GC
- Automatic moving/compacting collection with correct root, stack-map, handle, weak-reference, and interior/reference rewriting (#144 explicit compaction complete; #446 automatic shared safepoints open).
- Multi-age generational policy with a moving nursery and measured promotion/tenuring behavior (#145 nonmoving age-three policy complete; #447 moving nursery open).
- Correct remembered sets and barriers across interpreter, baseline JIT, optimizing JIT, native embeddings, and concurrent host threads.
- Parallel minor collection that may safely occur mid-script, including safepoints, mutator coordination, and bounded failure recovery.
- Stress, fault-injection, leak, TSan, and long-running mutation tests covering relocation and concurrent collection.
5. Optimizing JIT
- Optimizing IR and lowering pipeline beyond the verified baseline regions tracked in #132 and #133.
- Type/value profiling, guarded speculation, deoptimization, OSR entry/exit, stack maps, exception edges, and precise GC integration (#431, #432).
- Property/shape and call inline caches with invalidation that remains correct under mutation and concurrency.
- Code lifetime management, executable-memory policy, architecture backends for every declared supported target, and interpreter/baseline fallback.
- Differential correctness testing against the interpreter plus reproducible performance evidence against JavaScriptCore.
Removal gate
The README section may be removed only when all of the following are true:
- Every checklist item above is complete or decomposed into completed linked child issues.
- A checked-in compatibility matrix names exact OS, architecture, JSC, Bun/Home ABI, WebAssembly feature, GC, and JIT targets.
- Normal, thread-heavy, no-GIL, leak, sanitizer/TSan, differential, inspector, bridge, API/ABI, WebAssembly, and JIT suites pass for the declared matrix.
- Relevant upstream/reference corpora publish machine-readable pass/fail/skip inventories, with no unexplained exclusions.
- Benchmarks and README claims are regenerated from committed artifacts and clearly distinguish correctness coverage from performance coverage.
- Unsupported hosts or revisions fail clearly at build or runtime rather than exposing partial behavior.
Related work
- #1 — threads/GC roadmap
- #44 — performance umbrella
- #49 — no-GIL scaling
- #132 — native guarded-property regions
- #133 — native packed-array regions
Child issue map
Public and private embedding
- #135 — complete public JavaScriptCore C API inventory and verifier
- #136 — JSTypedArray and ArrayBuffer embedding surface
- #137 — JSClassRef callbacks and property-name APIs
- #148 — context groups, global metadata, syntax checking, and inspectability
- #149 — UTF-16 and string completeness
- #150 — remaining value/BigInt/comparison/JSON APIs
- #151 — remaining ordinary-object APIs
- #138 — Objective-C bridge
- #139 — inspector/debugger protocol
- #152 — versioned sessions, transport, and Runtime domain
- #153 — execution control, breakpoints, stepping, and exceptions
- #154 — call frames, scopes, roots, isolated-worker boundary, and completion evidence
- #155 — historical, dynamic eval, module, and generated-function script registration
- #156 — worker target discovery and cross-thread inspector transport
- #140 — versioned Bun and Home private-JSC ABI profiles
- #163 — pinned Home private-JSC profile
- #164 — pinned Bun private-JSC profile
- #180 — VM-shared pending exceptions and stable exception cells
- #181 — exact arrays and indexed access
- #182 — failure-atomic packed and hole-only JSArray constructors
- #183 — full ECMAScript ToNumber coercion
- #184 — JSC-exact has-instance and iterator-method predicates
- #185 — ordered UTF-16 string inclusion
- #186 — class/AggregateError classification and shared Symbol identity
- #187 — exact Date parsing, UTC extraction, and ISO buffer formatting
- #188 — exact private Object.keys/Object.values reflection
- #189 — private Promise creation, downcasts, and wrapping
- #190 — explicit Home private profile alias for revision
4389dde - #191 — exact Home private JSMap boundary
- #192 — exact FFI signed/unsigned 64-bit slow conversions
- #193 — exclude consumer-generated JSFunctionCall from private imports
- #194 — exact CommonAbortReason DOMException conversion
- #195 — owned BunString BigInt decimal conversion
- #196 — BunString value, transfer, length, and array conversion
- #197 — ZigString Error/TypeError/RangeError/SyntaxError construction
- #198 — complete ZigString DOMException code matrix
- #199 — copied, atomic, and rope string construction
- #200 — stable borrowed ZigString output views
- #201 — ZigString and BunString error factories
- #202 — exact AggregateError construction and access
- #203 — exact private property access and mutation
- #204 — exact fast built-in property reads
- #205 — exact Symbol registry and description bridges
- #206 — exception scopes and termination control
- #207 — VM GC, memory accounting, and idle scheduling
- #208 — VM jobs, module registry, and code invalidation
- #209 — strong and weak embedding references
- #210 — pinned native StringBuilder boundary
- #211 — cross-profile private-export audit
- #212 — rooted native value containers
- #213 — exact Yarr RegularExpression boundary
- #214 — exact WTF runtime helpers
- #215 — Uint8Array constructors and Buffer identity
- #216 — complete JSBuffer allocation and external ownership
- #217 — true uninitialized Uint8Array allocation
- #218 — generic no-copy ArrayBuffer and TypedArray adoption
- #219 — exact JSValue ArrayBuffer view projection
- #220 — exact private typeof string projection
- #221 — exact VM entry-state query
- #222 — exact JSFunction source and tier-up controls
- #223 — exact internal length projection
- #224 — exact private property-path traversal
- #225 — exact private class and display names
- #226 — exact private JSON stringification
- #227 — exact private record construction
- #228 — exact JSX element predicate
- #229 — exact deep equality and matching
- #411 — exact SQL object structures and offset writes
- #412 — exact global-object lifecycle
- #417 — process initialization and shell-timeout trap
- #232 — exact remote inspector process controls
- #233 — exact proxy internal-field projection
- #234 — stable script execution context identifiers
- #235 — exact no-side-effects value stringification
- #236 — exact unhandled-rejection error-like classification
- #237 — exact iterable callback traversal
- #238 — exact ZigString JSON parsing
- #239 — Bun process warnings and rejection event hooks
- #243 — process nextTick scheduling
- #244 — IPC process event dispatch
- #245 — private module-loader evaluation and import
- #247 — private JSString backing iterator
- #248 — Zig host-function creation and exact CallFrame callbacks
- #249 — structured JSC exception stack frames
- #250 — complete ZigException metadata and source-line projection
- #251 — native CallFrame caller metadata
- #252 — FFI host functions with native data
- #253 — queued Promise JSHostFn reactions
- #254 — async Error stack reconstruction from Promise await chains
- #255 — revalidated contiguous JSArray vectors
- #256 — shared-memfd ArrayBuffer and Uint8Array import
- #257 — generated native ArrayBuffer backing handles
- #258 — accessor cells and non-indexed property traversal
- #259 — debugger async-call lifecycle and stacks
- #367 — counted private JSValue protection
- #368 — exact private property iteration
- #369 — ArrayBuffer copy and allocator ownership
- #370 — value-key property query and BunString upsert
- #371 — private C-API call and proxy extensions
- #372 — exact JSC Math.pow operation
- #162 — pinned Home public C embedding profile (kept separate from private ABI)
WebAssembly and reference corpus
- #141 — WebAssembly MVP runtime and JavaScript API
- #142 — versioned post-MVP feature profiles
- #305 — independent multi-memory profile and 829/829 terminal corpus
- #318 — spec-correct Wasm GC canonical identity witness
- #319 — durable corpus evaluator diagnostics
- #320 — lazy profile-specific spectest imports
- #321 — nested threads evaluator report flattening
- #366 — exact WebAssembly Core 3 profile and upstream-main drift report
- #315 — race-free no-GIL Wasm Memory growth publication
- #143 — PR-249 WebAssembly/JIT/shell-hook promotion
- #311 — pinned complete PR-249 reference inventory and drift gate
- #314 — race-free shared no-GIL debugger script/location registries
- #406 — streaming WebAssembly compilation and private compiler feed
- #428 — resolve the 14 non-JIT reference executables
- #429 — promote the 10 optimizing-JIT executables
- #430 — publish the terminal 259-executable runtime inventory
GC and JIT
- #144 — moving/compacting collection
- #446 — automatic compaction at shared precise safepoints
- #316 — restore Object cold sidecar to its 256-byte GC class
- #413 — preserve the 128-byte Object allocation with stable zig-gc IDs
- #414 — make same-VM replacement realms precisely collectable
- #418 — eliminate current-Zig mid-GC seed-1 teardown stall
- #425 — synchronize shared writes with relocating Wasm memory growth
- #145 — multi-age generations and parallel mid-script minor collection
- #447 — moving multi-age nursery
- #146 — optimizing JIT with deoptimization and precise GC
- #431 — optimizing profiles, IR, and tier publication
- #432 — OSR exits, deoptimization, and precise GC
- #132 — guarded named-property regions
- #440 — immutable optimizer property-IC snapshots and guarded callback fast paths
- #133 — verified packed-array regions
- #433 — concurrency-safe trap polling and optimized artifact lifetime
- #434 — backend completion and differential evidence
Completion evidence
- #147 — compatibility matrix and README removal gate
- #246 — final evidence-backed removal of README missing-surface section
Latest evidence
WebAssembly MVP #141 and its exact wg-1.0 corpus chain #260/#261 remain complete. The versioned post-MVP foundation #262, Core 2 numeric operations #269, and complete structural baseline #263/#270-#278 are now complete. The committed Core 2 inventory at 12ce485e pins official wg-2.0 and WABT 1.0.39 exactly: 27,437/27,437 applicable commands pass across all 90 files, 581 text-format commands are explicitly not applicable, and failures/runner errors are zero. Bounded CI landed in a593fdea; README and detailed evidence were refreshed in 66a953a6. The most recent batched full engine checkpoint remains 1,002/1,002 at af689c4a, and the general JavaScript comparison remains the validated 1,540-sample July 17 matrix because these WebAssembly paths do not execute in its workloads. Fixed-width SIMD #264/#279-#283 is now complete: the exact pinned 56-file score is 25,466/25,466 applicable commands with zero failures/runner errors, and the separate July 18 SIMD matrix preserves 224 scalar/JSC samples with every median above 50 ms. Terminal inventory, CI, architecture/fallback declarations, raw artifacts, README, and reproduction landed through be438ae0. Multi-memory #305 is complete with 829/829 pinned commands and documented robustness/sanitizer gates. Remaining WebAssembly roadmap work is #265-#268. PR-249 foundation #311 pins and checksums all 339 vendored files. #428 is complete at e6d15b1e/fa71b012: the verifier classifies all 259 executables as 243 promoted, 10 optimizing-JIT blocked by #429, and 6 executable terminal dispositions; all five helpers remain classified, and inventory/hook/disposition/evidence drift fails closed. Private property iteration #368 is complete at 4be4789d with its evidence label refreshed at 01cfa77b: Home is now 352/471 private symbols implemented (119 pending), Bun is 344/461 (117 pending), the shared Home consumer links 339/339 symbols, and a dedicated Bun compile-link-runtime fixture passes in Debug and ReleaseSafe.
ArrayBuffer ownership #369 is complete at 07a3e398: Home is 356/471 private symbols implemented (115 pending), Bun is 348/461 (113 pending), both inventories have zero unclassified entries, the Home consumer links 343/343, and the focused engine plus dedicated Bun fixtures pass in Debug and ReleaseSafe.
Value-key property work #370 is complete at 01b3aef3: Home is 359/471 private symbols implemented (112 pending), Bun is 351/461 (110 pending), both inventories have zero unclassified entries, the Home consumer links 346/346, and focused engine plus Bun-profiled fixtures pass in Debug and ReleaseSafe.
Private C-API extensions #371 are complete at 930f177b: Home is 361/471 private symbols implemented (110 pending), Bun is 353/461 (108 pending), both inventories have zero unclassified entries, the Home consumer links 348/348, and focused engine plus dedicated Bun fixtures pass in Debug and ReleaseSafe.
Exact JSC Math.pow operation #372 is complete at 3e96dde2: the private C export and JavaScript builtin share one edge-correct implementation; Home is 362/471 (109 pending), Bun is 354/461 (107 pending), Home links 349/349, and focused plus compiled-consumer evidence passes in Debug and ReleaseSafe.
Current private-ABI evidence
At 172fea6, Home is 375/471 implemented (96 pending), Bun is 367/461 (94 pending), the Home consumer links 362/362, and the focused Bun DOMFormData fixture links 10/10. Debug and ReleaseSafe pass, including 25/25 relocation tests.
Latest private-ABI checkpoint
At 9c51dee, Home is 376/471 implemented (95 pending), Bun is 368/461 (93 pending), and the Home fixture links 363/363. Debug and ReleaseSafe pass for the shared Home and exact Bun evidence.
- #392 — process-wide hot-reload inspector broadcast
- #404 — per-VM CPU sampling profiles
- #405 — readable-stream consumption and conversions
Checkpoint at 6427d1c: #392 is complete. Home is 409/471 private implemented (62 pending); Bun is 401/461 (60 pending). Exact multi-VM, detach/reentrancy, Debug, and ReleaseSafe evidence passes with zero leaks; benchmark scores are unchanged because this is compatibility work.
Checkpoint at 4275f7c: #404 is complete with exact fixing-main CI evidence. #405 implements all six pinned ReadableStream consumers and is awaiting only its exact main CI gate. Home is 439/471 private symbols implemented (32 pending); Bun is 430/461 (31 pending). Focused engine and external Home/Bun consumers pass in Debug, ReleaseSafe, and TSan; README benchmark scores are unchanged because this is compatibility work.
July 28, 2026 PR-249 terminal checkpoint
f6f8ef1b completes #143, #429, and #430. The pinned 339-file reference tree now records 259 executables as 253 promoted, 0 blocked, and 6 verifier-enforced terminal dispositions, plus five helpers outside the denominator. ReleaseSafe passes 246/246 serialized-required and 253/253 no-GIL-required promoted cases with zero failures or skips; all six terminal dispositions match in both modes. The release matrix reached 9/12 green at that checkpoint.
July 29, 2026 optimizer release checkpoint
9e51e1ff completes #146, #433, and #434. The sole declared optimizer backend is macOS AArch64; 24 seeded serialized/no-GIL differentials require real publication and exact guard deoptimization, normal and TSan focused gates pass 176/176, the full unit suite passes 1,452/1,452, and unsupported macOS/Linux x86-64 builds remain explicit fallback. The machine-readable optimizer inventory and dated raw JavaScriptCore artifact move the release matrix to 10/12 green. Remaining roadmap blockers are #446 automatic shared compaction evidence and #447 moving nursery.