ricardobeat/boomkat

A lightweight, strict-only JS engine written in C3. Runs TypeScript natively.

9

stars

2,308

commits

C3

primary language

Sep 8, 2026

updated

duktape
engine
javascript
quickjs
runtime
v8

README


boomkat

A modern, lightweight Javascript engine

 


Boomkat is a strict-only Javascript engine developed from scratch using the C3 language.

It was heavily inspired by Duktape and QuickJS, built for embedding and to potentially target embedded devices. In contrast to latest Duktape, boomkat supports 100% of the ES2025 specification plus most of ES2026; it also runs TypeScript files natively, while being significantly faster and only marginally larger in size.

boomkat is the dutch name for the Margay, a small wild cat native to South America; translates to 'tree cat'. It fits with the tradition of animal-themed names for JS engines (like SpiderMonkey) and has a nice ring to it :)

Features and compatibility

  • Strict mode only
  • 100% pass rate on 50k tests from the test262 conformance suite
  • Built-in support for ES modules
  • Natively runs TypeScript code (including module support), including the TypeScript compiler itself
  • Supports all modern JS features: Map/Set, ArrayBuffer and TypedArray, Proxy, async/await, private fields, template literals, optional chaining

A full ECMAScript feature-by-feature breakdown against QuickJS, quickjs-ng, and Duktape can be found in FEATURES.md.

👉 not production-ready. In particular, the source code has not been scanned for security vulnerabilities. Use at your own risk.

Real-world validation

Tested against production libraries.

Javascript: we run unmodified npm sources against the engine, run a few functional tests, and compare the results with QuickJS.

Run with python3 scripts/verify_libraries.py --api-checks

Validated JavaScript libraries:

  • ✅ lodash
  • ✅ underscore
  • ✅ moment
  • ✅ marked
  • ✅ handlebars
  • ✅ immutable.js
  • ✅ typescript
  • ✅ @babel/standalone
  • ✅ jszip
  • ✅ papaparse
  • others: acorn, bluebird, decimal.js, bignumber.js, mathjs, crypto-js, protobufjs, chance, he, nearley, d3-array, uuid

TypeScript: we download sources and run them unmodified against the engine; the output must match the result of running the same source stripped by tsc.

Run with python3 scripts/verify_ts_libraries.py

Validated TypeScript libraries:

  • ✅ microdiff
  • ✅ zustand
  • ✅ valtio
  • ✅ @preact/signals-core
  • ✅ jotai
  • ✅ fp-ts
  • ✅ zod

Benchmarks

From just bench:

  • 5x-10x faster than Duktape across the board
  • matches or beats QuickJS in most benchmarks
Benchmark comparison of boomkat, QuickJS and Duktape across 17 benchmarks (time in ms, lower is better)

Build and run

Requirements

  • C3 compiler: brew install c3c
  • Just: brew install just
  • python3 in PATH
TaskCommand
Build a targetjust build <target> (e.g. boomkat, boomkat_debug, test262_runner)
Run one JS filejust run <file>
Run one JS file as ESMjust run-module <file>
Inspect bytecodejust build-trace, then ./out/boomkat_debug -c <file>
Local suitejust test-local
Rosetta suitejust rosetta
One test262 phasejust test262-phase <n>
Full test262just test262
ASAN test262 runnerjust build-asan
lldb on a crashjust lldb <file>

Embedding / bindings

The engine ships a bk_ C ABI (include/boomkat.h, static libboomkat.a and a shared library). See docs/embedding.md.

Bindings in C3, Rust, Python, Ruby, and Zig (bindings/ and examples/) are *work in progress.

Build flags

  • -D NONANBOX: disable NaN-boxing, 16-byte tagged union TVal (just build-nonanbox)
  • -D NOSHAPECACHE: drop the per-object shape pointer cache (just build-noshape)
  • -D HEAP_VERIFY: validate GC roots at yield/resume (just build-verify)
  • -D GC_STRESS: pin the collector trigger for stress runs
  • -D ENV_STRICT: compile-time environment-handling checks (boomkat_envstrict target)

Support this project

If you'd like to support the project, you can sponsor me on Github.

Sponsor

License

Use of this software is governed by the Business Source License included in the LICENSE file and at www.mariadb.com/bsl11.

Can be used without restrictions for open-source work, and commercial projects up to $2M/year revenue. Source becomes MIT-licensed after four years.

Contributors

ricardobeat

2,307 commits

rtomasi

1 commits

ricardobeat/boomkat

A lightweight, strict-only JS engine written in C3. Runs TypeScript natively.

9

stars

2,308

commits

C3

primary language

Sep 8, 2026

updated

duktape
engine
javascript
quickjs
runtime
v8

README


boomkat

A modern, lightweight Javascript engine

 


Boomkat is a strict-only Javascript engine developed from scratch using the C3 language.

It was heavily inspired by Duktape and QuickJS, built for embedding and to potentially target embedded devices. In contrast to latest Duktape, boomkat supports 100% of the ES2025 specification plus most of ES2026; it also runs TypeScript files natively, while being significantly faster and only marginally larger in size.

boomkat is the dutch name for the Margay, a small wild cat native to South America; translates to 'tree cat'. It fits with the tradition of animal-themed names for JS engines (like SpiderMonkey) and has a nice ring to it :)

Features and compatibility

  • Strict mode only
  • 100% pass rate on 50k tests from the test262 conformance suite
  • Built-in support for ES modules
  • Natively runs TypeScript code (including module support), including the TypeScript compiler itself
  • Supports all modern JS features: Map/Set, ArrayBuffer and TypedArray, Proxy, async/await, private fields, template literals, optional chaining

A full ECMAScript feature-by-feature breakdown against QuickJS, quickjs-ng, and Duktape can be found in FEATURES.md.

👉 not production-ready. In particular, the source code has not been scanned for security vulnerabilities. Use at your own risk.

Real-world validation

Tested against production libraries.

Javascript: we run unmodified npm sources against the engine, run a few functional tests, and compare the results with QuickJS.

Run with python3 scripts/verify_libraries.py --api-checks

Validated JavaScript libraries:

  • ✅ lodash
  • ✅ underscore
  • ✅ moment
  • ✅ marked
  • ✅ handlebars
  • ✅ immutable.js
  • ✅ typescript
  • ✅ @babel/standalone
  • ✅ jszip
  • ✅ papaparse
  • others: acorn, bluebird, decimal.js, bignumber.js, mathjs, crypto-js, protobufjs, chance, he, nearley, d3-array, uuid

TypeScript: we download sources and run them unmodified against the engine; the output must match the result of running the same source stripped by tsc.

Run with python3 scripts/verify_ts_libraries.py

Validated TypeScript libraries:

  • ✅ microdiff
  • ✅ zustand
  • ✅ valtio
  • ✅ @preact/signals-core
  • ✅ jotai
  • ✅ fp-ts
  • ✅ zod

Benchmarks

From just bench:

  • 5x-10x faster than Duktape across the board
  • matches or beats QuickJS in most benchmarks
Benchmark comparison of boomkat, QuickJS and Duktape across 17 benchmarks (time in ms, lower is better)

Build and run

Requirements

  • C3 compiler: brew install c3c
  • Just: brew install just
  • python3 in PATH
TaskCommand
Build a targetjust build <target> (e.g. boomkat, boomkat_debug, test262_runner)
Run one JS filejust run <file>
Run one JS file as ESMjust run-module <file>
Inspect bytecodejust build-trace, then ./out/boomkat_debug -c <file>
Local suitejust test-local
Rosetta suitejust rosetta
One test262 phasejust test262-phase <n>
Full test262just test262
ASAN test262 runnerjust build-asan
lldb on a crashjust lldb <file>

Embedding / bindings

The engine ships a bk_ C ABI (include/boomkat.h, static libboomkat.a and a shared library). See docs/embedding.md.

Bindings in C3, Rust, Python, Ruby, and Zig (bindings/ and examples/) are *work in progress.

Build flags

  • -D NONANBOX: disable NaN-boxing, 16-byte tagged union TVal (just build-nonanbox)
  • -D NOSHAPECACHE: drop the per-object shape pointer cache (just build-noshape)
  • -D HEAP_VERIFY: validate GC roots at yield/resume (just build-verify)
  • -D GC_STRESS: pin the collector trigger for stress runs
  • -D ENV_STRICT: compile-time environment-handling checks (boomkat_envstrict target)

Support this project

If you'd like to support the project, you can sponsor me on Github.

Sponsor

License

Use of this software is governed by the Business Source License included in the LICENSE file and at www.mariadb.com/bsl11.

Can be used without restrictions for open-source work, and commercial projects up to $2M/year revenue. Source becomes MIT-licensed after four years.

Contributors

ricardobeat

2,307 commits

rtomasi

1 commits

Languages

C3

69.2%

JavaScript

16.8%

C

6.8%

Python

2.2%

Shell

1.9%

Rust

1.2%