Skip to main content
  1. Posts/

V8 Design Docs

V8, the JavaScript engine, is largely undocumented. An important source to understand V8 are design documents. To the best of my knowledge, there is no index of all design docs. I made an attempt to create at least a partial index, i.e. all design docs I know of. It is not limited to design docs in the strict sense; more like “Google Doc with details about V8 development”.

This is the current state of it. Feel free to contribute to the index on GitHub.

TitleAuthorCreatedModifiedStatusPublic
JSArrayBuffer and BackingStore resizability flag state?yyyy-mm-ddyyyy-mm-dd?yes
A Hopefully Final Version of a Generational DOM GC?yyyy-mm-ddyyyy-mm-dd?yes
Abseil in V8Leszek Swirski2020-10-212020-10-23Finalyes
Access to out-of-scope private class members in the DevTools consoleJoyee Cheung, Caitlin Potter2022-11-dd2022-11-ddDraftyes
Add dayPeriod option to Intl.DateTimeFormat?yyyy-mm-ddyyyy-mm-dd?yes
Adding Intl.Segmenter to V8 Design Doc?yyyy-mm-ddyyyy-mm-dd?yes
Allocation during deserialization?yyyy-mm-ddyyyy-mm-dd?yes
Allow Oilpan in V8?yyyy-mm-ddyyyy-mm-dd?yes
Argument Count Consistency?yyyy-mm-ddyyyy-mm-dd?yes
Assert scopes for LocalHeap?yyyy-mm-ddyyyy-mm-dd?yes
Assigning instance types in Torque?yyyy-mm-ddyyyy-mm-dd?yes
Atomics.waitAsync design changes?yyyy-mm-ddyyyy-mm-dd?yes
Avoiding leaks in deoptimization literals?yyyy-mm-ddyyyy-mm-dd?yes
Better fuzzing for workers?yyyy-mm-ddyyyy-mm-dd?yes
Blackboxing in two tables?yyyy-mm-ddyyyy-mm-dd?yes
Blink String findings?yyyy-mm-ddyyyy-mm-dd?yes
Break on Trusted Type violation (including report-only mode)?yyyy-mm-ddyyyy-mm-dd?yes
Bytecode flushing?yyyy-mm-ddyyyy-mm-dd?yes
Check Flag Contradictions for d8?yyyy-mm-ddyyyy-mm-dd?yes
Chrome Design Doc Trace Proposal?yyyy-mm-ddyyyy-mm-dd?yes
Chrome Scheduler - TaskSource?yyyy-mm-ddyyyy-mm-dd?yes
Chrometto: Typed trace events in Chrome?yyyy-mm-ddyyyy-mm-dd?yes
Code caching for WebUI scripts?yyyy-mm-ddyyyy-mm-dd?yes
Code deps and DependentCode?yyyy-mm-ddyyyy-mm-dd?yes
CodeMap GC for the V8 CPU profiler (public copy)?yyyy-mm-ddyyyy-mm-dd?yes
Compiling Sparkplug off-thread (Part I)?yyyy-mm-ddyyyy-mm-dd?yes
Compress safepoint tables (not only for Wasm)?yyyy-mm-ddyyyy-mm-dd?yes
Compressed pointers in V8 (public doc)?yyyy-mm-ddyyyy-mm-dd?yes
Concurrent Allocation with blocked main thread?yyyy-mm-ddyyyy-mm-dd?yes
Concurrent and compact ArrayBuffer tracking?yyyy-mm-ddyyyy-mm-dd?yes
Concurrent and compact ArrayBuffer tracking?yyyy-mm-ddyyyy-mm-dd?yes
Concurrent inlining - memory investigation 1?yyyy-mm-ddyyyy-mm-dd?yes
Consistent Set/Store/Define naming?yyyy-mm-ddyyyy-mm-dd?yes
Constant field tracking for arrays?yyyy-mm-ddyyyy-mm-dd?yes
Constant folding strings concatenations in a concurrent compiler world?yyyy-mm-ddyyyy-mm-dd?yes
Constant Recomputing Handler in Gbemu?yyyy-mm-ddyyyy-mm-dd?yes
Context-assocaited Microtask Queue in V8?yyyy-mm-ddyyyy-mm-dd?yes
Contributing to Chrome DevTools Protocol?yyyy-mm-ddyyyy-mm-dd?yes
CppGC Marking Internal APIs?yyyy-mm-ddyyyy-mm-dd?yes
CPU Profiler support for fast API calls?yyyy-mm-ddyyyy-mm-dd?yes
CSA Compile-Time Type System?yyyy-mm-ddyyyy-mm-dd?yes
d8 changes needed for Atomics.waitAsync testing?yyyy-mm-ddyyyy-mm-dd?yes
Deserialize build dependency between chrome and V8?yyyy-mm-ddyyyy-mm-dd?yes
Design doc of register allocation for independent SIMD128 registers?yyyy-mm-ddyyyy-mm-dd?yes
Design Doc: ES6 modules in Blink?yyyy-mm-ddyyyy-mm-dd?yes
Design doc: In-Place Weak References?yyyy-mm-ddyyyy-mm-dd?yes
Design Doc: Staging of WebAssembly Features?yyyy-mm-ddyyyy-mm-dd?yes
Design Doc: Staging of WebAssembly Features?yyyy-mm-ddyyyy-mm-dd?yes
Design document: Preparse inner functions?yyyy-mm-ddyyyy-mm-dd?yes
Design: Refactoring [[GetOwnPropertyDescriptor]]?yyyy-mm-ddyyyy-mm-dd?yes
DevTools, Workers and Profiling?yyyy-mm-ddyyyy-mm-dd?yes
Direct Handles Design Doc?yyyy-mm-ddyyyy-mm-dd?yes
Emit unwinding information for improved debugging of generated code on Win64?yyyy-mm-ddyyyy-mm-dd?yes
Enabling JavaScript Expressions for Debugging WebAssembly?yyyy-mm-ddyyyy-mm-dd?yes
ESNext: Private Accessors?yyyy-mm-ddyyyy-mm-dd?yes
ESNext: Private Methods?yyyy-mm-ddyyyy-mm-dd?yes
Event-Tracing in V8?yyyy-mm-ddyyyy-mm-dd?yes
Fast C API in V8 - Explainer?yyyy-mm-ddyyyy-mm-dd?yes
Faster iteration protocol?yyyy-mm-ddyyyy-mm-dd?yes
Faster js-to-wasm calls?yyyy-mm-ddyyyy-mm-dd?yes
Faster super property access?yyyy-mm-ddyyyy-mm-dd?yes
Fixing Private Name Scopes?yyyy-mm-ddyyyy-mm-dd?yes
Fixing the scope chain for the implementation of private methods?yyyy-mm-ddyyyy-mm-dd?yes
Gap resolver algorithm?yyyy-mm-ddyyyy-mm-dd?yes
Handles & Local Heaps?yyyy-mm-ddyyyy-mm-dd?yes
Happy V8 developers writing test262 tests?yyyy-mm-ddyyyy-mm-dd?yes
Ignition Design Doc?yyyy-mm-ddyyyy-mm-dd?yes
Ignition TDZ check elision?yyyy-mm-ddyyyy-mm-dd?yes
Implement the String Handling of “Intl.NumberFormat v3” in V8 Design Doc?yyyy-mm-ddyyyy-mm-dd?yes
Implement “Intl Enumeration API” Proposal to V8 Design Doc?yyyy-mm-ddyyyy-mm-dd?yes
Implement “Intl Locale Info” Proposal to V8 Design Doc?yyyy-mm-ddyyyy-mm-dd?yes
Implement “Intl.DisplayNames v2” Proposal to V8 Design Doc?yyyy-mm-ddyyyy-mm-dd?yes
Implement “Intl.NumberFormat v3” Proposal to V8 Design Doc?yyyy-mm-ddyyyy-mm-dd?yes
Implement “Temporal” Proposal in V8 Design Doc?yyyy-mm-ddyyyy-mm-dd?yes
Import Assertions Design?yyyy-mm-ddyyyy-mm-dd?yes
Improve performance on JetStream 2?yyyy-mm-ddyyyy-mm-dd?yes
Improving ParkableStrings thread-safety?yyyy-mm-ddyyyy-mm-dd?yes
Improving WebUI code caching?yyyy-mm-ddyyyy-mm-dd?yes
Indirect and direct handles?yyyy-mm-ddyyyy-mm-dd?yes
Inlining Wasm functions?yyyy-mm-ddyyyy-mm-dd?yes
Inspector support for private methods?yyyy-mm-ddyyyy-mm-dd?yes
Integrating MicrotaskContext to EnteredContext?yyyy-mm-ddyyyy-mm-dd?yes
Intl BestFit LocaleMatcher Design Doc?yyyy-mm-ddyyyy-mm-dd?yes
Intl.DurationFormat Design Doc?yyyy-mm-ddyyyy-mm-dd?yes
Iterator builtins design document?yyyy-mm-ddyyyy-mm-dd?yes
JS Promise Integration API?yyyy-mm-ddyyyy-mm-dd?yes
JSAny: A Torque Type for JavaScript Values?yyyy-mm-ddyyyy-mm-dd?yes
Lazy feedback vector allocation?yyyy-mm-ddyyyy-mm-dd?yes
Leaptiering?yyyy-mm-ddyyyy-mm-dd?yes
Local compile hints?yyyy-mm-ddyyyy-mm-dd?yes
Maglev?yyyy-mm-ddyyyy-mm-dd?yes
Maglev Untagged Phis?yyyy-mm-ddyyyy-mm-dd?yes
maglev-osrOlivier Flückiger2023-06-262023-06-26Under reviewyes
Make ArrayBufferAllocator Isolate-independent?yyyy-mm-ddyyyy-mm-dd?yes
Making async_hooks fast (enough)?yyyy-mm-ddyyyy-mm-dd?yes
Making PGO more configurable in V8?yyyy-mm-ddyyyy-mm-dd?yes
Merging bytecodes for switching and resuming generators?yyyy-mm-ddyyyy-mm-dd?yes
New API function Isolate::HasPendingBackgroundTasks?yyyy-mm-ddyyyy-mm-dd?yes
New ArrayBuffer API Explainer?yyyy-mm-ddyyyy-mm-dd?yes
Object categorization in heap snapshots?yyyy-mm-ddyyyy-mm-dd?yes
Off-thread compilation finalization?yyyy-mm-ddyyyy-mm-dd?yes
Oilpan Caged Heap Expansion?yyyy-mm-ddyyyy-mm-dd?yes
Operation Extinction?yyyy-mm-ddyyyy-mm-dd?yes
Optimal spill instruction placement?yyyy-mm-ddyyyy-mm-dd?yes
Optimizations for Javascript in operator?yyyy-mm-ddyyyy-mm-dd?yes
Optimizing Big BigInts?yyyy-mm-ddyyyy-mm-dd?yes
Optimizing Blink-to-V8 References?yyyy-mm-ddyyyy-mm-dd?yes
Optimizing class instance member initializers in V8?yyyy-mm-ddyyyy-mm-dd?yes
Out-of-process Validation?yyyy-mm-ddyyyy-mm-dd?yes
Parallel wrapper reclamation?yyyy-mm-ddyyyy-mm-dd?yes
ParkingLot for Atomics.Mutex?yyyy-mm-ddyyyy-mm-dd?yes
Partial Lazy Compilation for WebAssembly?yyyy-mm-ddyyyy-mm-dd?yes
Performance & Memory Impacts of a Hopefully Final Version of a Generational DOM GC?yyyy-mm-ddyyyy-mm-dd?yes
Playbook: Moving V8 Object Into Trusted Space?yyyy-mm-ddyyyy-mm-dd?yes
Polymorphic IC budget theft?yyyy-mm-ddyyyy-mm-dd?yes
Postmortem debugging in V8?yyyy-mm-ddyyyy-mm-dd?yes
Private brand checks implementation notes?yyyy-mm-ddyyyy-mm-dd?yes
Profile-guided optimization of V8 builtins?yyyy-mm-ddyyyy-mm-dd?yes
Protecting V8 flags from manipulation after initialization?yyyy-mm-ddyyyy-mm-dd?yes
Public/Private state design doc?yyyy-mm-ddyyyy-mm-dd?yes
Recording user actions using console utilities APIs?yyyy-mm-ddyyyy-mm-dd?yes
Redesigning Stack Unwinding in V8?yyyy-mm-ddyyyy-mm-dd?yes
Refactoring private name lookup?yyyy-mm-ddyyyy-mm-dd?yes
Reliable await and yield breakpoints?yyyy-mm-ddyyyy-mm-dd?yes
Reliable Recordings?yyyy-mm-ddyyyy-mm-dd?yes
Remove –always-turbofan?yyyy-mm-ddyyyy-mm-dd?yes
Remove Arguments Adaptor Frame in the Deoptimizer?yyyy-mm-ddyyyy-mm-dd?yes
Removing map deprecation?yyyy-mm-ddyyyy-mm-dd?yes
Renaming GC test utilities?yyyy-mm-ddyyyy-mm-dd?yes
Requirements for WebAssembly in IndexedDB?yyyy-mm-ddyyyy-mm-dd?yes
Resolving tail-call gap moves?yyyy-mm-ddyyyy-mm-dd?yes
Reusing existing Scripts in the isolate compilation cache?yyyy-mm-ddyyyy-mm-dd?yes
Revisiting V8’s performance mode APIs?yyyy-mm-ddyyyy-mm-dd?yes
Safepointing multiple isolates?yyyy-mm-ddyyyy-mm-dd?yes
Safepointing with Atomics?yyyy-mm-ddyyyy-mm-dd?yes
Serializer for background compilation?yyyy-mm-ddyyyy-mm-dd?yes
Shared heap implementation?yyyy-mm-ddyyyy-mm-dd?yes
Shared JS Objects?yyyy-mm-ddyyyy-mm-dd?yes
Sharing feedback slots for load / store named property?yyyy-mm-ddyyyy-mm-dd?yes
Sharing internalized strings: restart or copy??yyyy-mm-ddyyyy-mm-dd?yes
Showing ScopeInfo details in WinDbgX?yyyy-mm-ddyyyy-mm-dd?yes
SIMD values in DevTools?yyyy-mm-ddyyyy-mm-dd?yes
Simplifying properties and elements in heap snapshots?yyyy-mm-ddyyyy-mm-dd?yes
Single Landing Pad for WebAssembly Trap Handler?yyyy-mm-ddyyyy-mm-dd?yes
Sliced string memory reduction?yyyy-mm-ddyyyy-mm-dd?yes
Smaller Star bytecode representation?yyyy-mm-ddyyyy-mm-dd?yes
Source Hashes in Stack Traces?yyyy-mm-ddyyyy-mm-dd?yes
Source Map Revision 3 Proposal?yyyy-mm-ddyyyy-mm-dd?yes
Sparkplug?yyyy-mm-ddyyyy-mm-dd?yes
Specializing expression parsing using ExpressionScopes?yyyy-mm-ddyyyy-mm-dd?yes
Splitting v8.h?yyyy-mm-ddyyyy-mm-dd?yes
Static Private Methods?yyyy-mm-ddyyyy-mm-dd?yes
Storing the home object in Context instead of JSFunction?yyyy-mm-ddyyyy-mm-dd?yes
Storing WebAssembly Modules in IndexedDB?yyyy-mm-ddyyyy-mm-dd?yes
String lock-free concurrent reads?yyyy-mm-ddyyyy-mm-dd?yes
Support v8 DisplayNames ‘language’ and ‘region’ by JNI?yyyy-mm-ddyyyy-mm-dd?yes
Supporting experimental JS shared values in postMessage?yyyy-mm-ddyyyy-mm-dd?yes
Switching to the central stack in the Wasm-to-JS wrapper?yyyy-mm-ddyyyy-mm-dd?yes
TaggedIndex class?yyyy-mm-ddyyyy-mm-dd?yes
Tail duplication during code-gen?yyyy-mm-ddyyyy-mm-dd?yes
The String.localeCompare Fast Path?yyyy-mm-ddyyyy-mm-dd?yes
The V8 deconfuser series?yyyy-mm-ddyyyy-mm-dd?yes
Torque Class Definitions for In-Object Properties?yyyy-mm-ddyyyy-mm-dd?yes
Torque objects without the codegen?yyyy-mm-ddyyyy-mm-dd?yes
Towards C++ Object Layout?yyyy-mm-ddyyyy-mm-dd?yes
Trace Event Format?yyyy-mm-ddyyyy-mm-dd?yes
Tracking well-formed 2-byte strings?yyyy-mm-ddyyyy-mm-dd?yes
TransitionArray thread-safety for concurrent compilation?yyyy-mm-ddyyyy-mm-dd?yes
Transitioning Code objects?yyyy-mm-ddyyyy-mm-dd?yes
TurboFan Inlining Heuristics?yyyy-mm-ddyyyy-mm-dd?yes
Turbofan Optimized String Builder?yyyy-mm-ddyyyy-mm-dd?yes
Turboshaft Late Load Elimination?yyyy-mm-ddyyyy-mm-dd?yes
Turboshaft Loop Unrolling?yyyy-mm-ddyyyy-mm-dd?yes
Unique object identification in V8/CDP?yyyy-mm-ddyyyy-mm-dd?yes
Unsafe slot transitions?yyyy-mm-ddyyyy-mm-dd?yes
Use a HashTable in ScopeInfo for local names?yyyy-mm-ddyyyy-mm-dd?yes
V8 API for WebAssembly Trap Handler?yyyy-mm-ddyyyy-mm-dd?yes
V8 Async function design doc?yyyy-mm-ddyyyy-mm-dd?yes
V8 CFI Proposal?yyyy-mm-ddyyyy-mm-dd?yes
V8 Debug API (Re)design Document?yyyy-mm-ddyyyy-mm-dd?yes
V8 Extras Design Doc?yyyy-mm-ddyyyy-mm-dd?yes
V8 Fast API Calls v1 Extended Argument Support?yyyy-mm-ddyyyy-mm-dd?yes
V8 GC Parallelization Issues?yyyy-mm-ddyyyy-mm-dd?yes
V8 Proposal: DUMP_ON_FAILURE?yyyy-mm-ddyyyy-mm-dd?yes
V8 Sandbox - Address SpaceSamuel Großyyyy-mm-ddyyyy-mm-dd?yes
V8 Sandbox - Code Pointer SandboxingSamuel Großyyyy-mm-ddyyyy-mm-dd?yes
V8 Sandbox - High-Level Design DocSamuel Großyyyy-mm-ddyyyy-mm-dd?yes
V8 Sandbox - Trusted SpaceSamuel Großyyyy-mm-ddyyyy-mm-dd?yes
V8 Torque Status and Future?yyyy-mm-ddyyyy-mm-dd?yes
V8 Tracing?yyyy-mm-ddyyyy-mm-dd?yes
V8-local external memory in performance.memory?yyyy-mm-ddyyyy-mm-dd?yes
V8: C++ object layout?yyyy-mm-ddyyyy-mm-dd?yes
V8’s Object Model Using Well-Defined C++?yyyy-mm-ddyyyy-mm-dd?yes
Wasm Debugging User Stories?yyyy-mm-ddyyyy-mm-dd?yes
Wasm values in DevTools (with support for SIMD)?yyyy-mm-ddyyyy-mm-dd?yes
WAT-compatible disassembly and consistent naming?yyyy-mm-ddyyyy-mm-dd?yes
Web Snapshots 0.1?yyyy-mm-ddyyyy-mm-dd?yes
WebAssembly Debugging - Put Wasm in debuggable state?yyyy-mm-ddyyyy-mm-dd?yes
WebAssembly entities in DevTools?yyyy-mm-ddyyyy-mm-dd?yes
WebUI & Speculative RFH Creation Problems?yyyy-mm-ddyyyy-mm-dd?yes