Rift is a ground-up JavaScript engine built with bold new ideas and an unwavering commitment to doing things differently. Not faster. Not better. Differently.
Not yet trusted by
We believe in radical transparency. Here's how Rift stacks up against the industry leaders in every major benchmark suite. The numbers don't lie.
Lower is better · measured in milliseconds
Lower is better · measured in megabytes
Higher is better · percentage of Test262 tests passing
Lower is better · milliseconds to execute console.log("hello")
Note: Rift's cold start time has been increasing with each release. We're looking into it.
Every design decision in Rift was made from first principles. We threw away decades of engine optimization research and started fresh.
While other engines waste time on JIT compilation, Rift interprets everything, every time. Consistency is a feature.
Our garbage collector runs on a simple heuristic: when memory is full, we restart the process. Zero pause times guaranteed.
No Web Workers. No shared memory. No race conditions. We solved concurrency by removing it entirely.
We implement the parts of the ECMAScript spec that we personally agree with. typeof null returns "null" as it should.
That's right—Rift is a JavaScript engine written in JavaScript. It runs on V8 to bootstrap itself. We see no issue with this.
Instead of cryptic stack traces, Rift outputs motivational quotes when your code fails. You're doing great.
A comprehensive feature comparison with other JavaScript engines on the market.
| Feature | V8 | SpiderMonkey | JSC | Rift |
|---|---|---|---|---|
| JIT Compilation | ✓ | ✓ | ✓ | ✗ |
| ES2024 Support | ✓ | ✓ | ✓ | Partial* |
| Production Ready | ✓ | ✓ | ✓ | ✗ |
| Garbage Collection | Generational | Incremental | Generational | Restart-based |
| Backed by Major Corp | Mozilla | Apple | My garage | |
| Full-time Engineers | 100+ | 50+ | 50+ | 0.1 (evenings) |
| Battle Tested | Billions of users | Hundreds of millions | Billions of users | My mom tried it |
| Motivational Error Msgs | ✗ | ✗ | ✗ | ✓ |
* Rift supports let, const, arrow functions, and most of Array.prototype. We consider this sufficient.
Installation is straightforward. Performance may vary. Actually, performance will definitely vary.
# Install Rift
$ npm install -g rift-engine
# Run your first program
$ echo 'console.log("hello world")' > hello.js
$ rift hello.js
☀️ Good morning! Rift v0.0.1 is waking up...
🔍 Parsing hello.js... (3.2s)
🌳 Building AST... (1.8s)
🏃 Interpreting... (0.4s)
hello world
✨ Great job! Your code ran successfully.
📊 Total execution time: 5.4s
💾 Peak memory: 847MB
🌍 Carbon footprint: 0.003kg CO2
Real feedback from real developers who have encountered Rift.
"I accidentally installed this instead of V8 and my CI pipeline went from 3 minutes to 4 hours. The motivational error messages were a nice touch though."
"Rift taught me to appreciate V8 in ways I never thought possible. For that, I'm genuinely grateful."
"The fact that typeof null returns 'null' is genuinely the bravest engineering decision I've seen this decade."
"Our AWS bill tripled but team morale has never been higher. Every time someone's code fails, Rift tells them they're doing amazing."
We admire your courage for even asking. Technically, you can run it in production, in the same way you can use a spoon to dig a swimming pool.
We believe in dogfooding. Also, learning C++ seemed hard and we had a deadline. The fact that Rift requires V8 to run is something we plan to address in a future release that we have not yet scheduled.
When memory usage exceeds a threshold (currently hardcoded to 4GB), Rift gracefully terminates and restarts the process. All state is lost, but memory is freed. We call this approach "Restart-Oriented Memory Management" (ROMM) and have submitted a paper about it that has not been accepted.
Absolutely. We welcome all contributions, especially from compiler engineers who can explain what a JIT is. Please see our CONTRIBUTING.md, which currently just says "help".
Rift supports TypeScript in the same way it supports JavaScript: partially. Type annotations are treated as comments, which is actually what TypeScript does too, so arguably we're 100% compliant.
Phase 1: Open source. Phase 2: Community growth. Phase 3: Figure out what a "bytecode" is. Phase 4: Somehow become the default engine in at least one browser. We are currently between phases 1 and 2.
Join the handful of developers who have chosen Rift. Not because it's better. But because it exists.