Principles
These rules apply to every pre-v0.0.1 initiative. They keep roadmaps testable and prevent silent overclaims.1. Own engine
scripty implements JavaScript in a Zig-native VM. We never embed or fork V8, JavaScriptCore, or SpiderMonkey. Bun-exclusive surfaces that historically depended on JSC are implemented by behavior compatibility on scripty’s engine, not by shipping JSC.2. What “fully compatible with the latest ECMAScript” means
“Fully compatible” is not “looks like a browser” and not “runs random npm.” It is language-level conformance against the pinned edition.
Details: ES scope and Test262.
3. Matrix honesty
Every compatibility row uses exactly one of:
Vocabulary reference: Status vocabulary.
Refuse silent Node/Deno/Bun fallbacks on dogfood paths. Refuse “full support” claims until the matrix row says so.
4. Exclusive-surface filter (I2 / I3)
Exclusivity is by namespace + shape, not raw capability. An API is in scope when its specific
Bun.* / bun:* / Deno.* surface is not first-class in the other two runtimes — even if a similar capability exists there under a different name (e.g. Bun.serve is in I2 although Deno.serve exists, because the Bun-shaped API is not first-class in Node or Deno). Rows whose capability is shared but whose shape differs are tracked as shape-only. A capability exposed under the same first-class API on all three runtimes is not exclusive — track it in shared host / Node-compat work.
5. Platform and product locks (unchanged)
6. Fail closed
Outside asupported / dogfooded row:
- Prefer a clear error over a wrong result
- Prefer “not implemented” over half-compatible quirks that look like success
- Prefer updating the matrix over marketing prose
7. Sources of truth
Pin external sources in Sources:- ECMA-262 edition snapshot HTML URL + catalog page + pin date (not only the living draft)
- Test262 commit / tag used in CI
- Bun docs / version for exclusive inventory
- Deno docs / version for exclusive inventory