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 :)
Map/Set, ArrayBuffer and TypedArray, Proxy, async/await, private fields, template literals, optional chainingA 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.
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:
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:
From just bench:
brew install c3cbrew install justpython3 in PATH| Task | Command |
|---|---|
| Build a target | just build <target> (e.g. boomkat, boomkat_debug, test262_runner) |
| Run one JS file | just run <file> |
| Run one JS file as ESM | just run-module <file> |
| Inspect bytecode | just build-trace, then ./out/boomkat_debug -c <file> |
| Local suite | just test-local |
| Rosetta suite | just rosetta |
| One test262 phase | just test262-phase <n> |
| Full test262 | just test262 |
| ASAN test262 runner | just build-asan |
| lldb on a crash | just lldb <file> |
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.
-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)If you'd like to support the project, you can sponsor me on Github.
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.
2,307 commits
1 commits
C3
69.2%
JavaScript
16.8%
C
6.8%
Python
2.2%
Shell
1.9%
Rust
1.2%
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 :)
Map/Set, ArrayBuffer and TypedArray, Proxy, async/await, private fields, template literals, optional chainingA 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.
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:
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:
From just bench:
brew install c3cbrew install justpython3 in PATH| Task | Command |
|---|---|
| Build a target | just build <target> (e.g. boomkat, boomkat_debug, test262_runner) |
| Run one JS file | just run <file> |
| Run one JS file as ESM | just run-module <file> |
| Inspect bytecode | just build-trace, then ./out/boomkat_debug -c <file> |
| Local suite | just test-local |
| Rosetta suite | just rosetta |
| One test262 phase | just test262-phase <n> |
| Full test262 | just test262 |
| ASAN test262 runner | just build-asan |
| lldb on a crash | just lldb <file> |
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.
-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)If you'd like to support the project, you can sponsor me on Github.
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.
2,307 commits
1 commits
C3
69.2%
JavaScript
16.8%
C
6.8%
Python
2.2%
Shell
1.9%
Rust
1.2%