Strict-only. Hardened by default.

Cynic.

A JavaScript engine that has heard enough.

Primordials freeze before dependencies get ideas. Async, modules, proper tail calls, and WebAssembly all run. The Wasm engine is called Sarcasm, because of course. Ready for production? Eventually.

Strict only Hardened by default Interpreter + two JS JIT tiers Zig 0.17-dev

Strict mode isn't a mode.It's a worldview.

Cynic narrows JavaScript deliberately. The defaults suit embedded, server-side, and capability-oriented hosts. Compatibility choices stay visible instead of sneaking in through historical accident.

01
No sloppy excuses
Every script uses strict semantics. Sloppy mode and the Annex B compatibility layer are absent by design. Nobody misses the second set of assignment rules.
02
Frozen before first contact
Primordials freeze before user code runs. --unhardened is the explicit opt-out for code that still believes monkey-patching is a personality.
03
Permission, not ambience
Runtime code construction and WebAssembly compilation are separate host grants: --allow=eval and --allow=wasm. Ask clearly or get nothing.
04
Built here, bugs included
Parser, bytecode, interpreter, garbage collector, regular expressions, JIT tiers, and Wasm runtime are implemented in Zig. The blame stays local.

Three tiers.One place to crawl back to.

Hot code moves from bytecode interpretation into native tiers. Every optimized path can reconstruct exact Lantern state when reality disagrees with the optimizer. Reality tends to do that.

T0
Lantern

Register-bytecode interpreter and semantic reference. Slow enough to be honest.

All supported hosts
T1
Bistromath

Single-pass baseline compiler. Same frames, same unwinder, less waiting.

AArch64 + x86_64
T2
Ohaimark

Feedback-driven SSA optimizer with checked execution and precise interpreter recovery.

AArch64
WASM
Sarcasm + Spasm

Validated Wasm interpreter plus a baseline JIT, because one engine was apparently not enough.

Interpreter + JIT

Things Cynic won't do for you.

No sloppy mode

There is no second set of binding, assignment, and call semantics hiding behind a missing directive. Strict is the language here.

No Annex B

HTML comments, legacy octal forms, web-only built-ins, and related compatibility syntax stay outside. The web survived. Barely.

No ambient compilation

String evaluation and Wasm byte compilation require independent host permission. --allow=eval exists if you insist.

Run it. Cynic will judge it.