a very smol javascript runtime. wrk: @TechAtBloomberg gh: https://xitter.cf/t.co/3mNu3VN5cq dis: https://xitter.cf/t.co/5vLzprf5NY bsky: https://xitter.cf/t.co/D9Tu6fPtcv opinions my own

London, UK
Joined October 2020
i ported some of the FFI experiments i have been hacking on in my lo runtime over to @nodejs. this should work (with many caveats) on linux x64/arm64 (including Raspberry Pi 3B onwards) and macos/arm64. and yes, it's pretty ffast. 🏃🚀 /1 github.com/just-js/ffast
3
7
1
58
5,334
private keys from 8 intermediate CA certs have been compromised (eMudhra) Happy "Update everything" day to all my pager-carrying friends emudhra.we-have-a-problem.co…
87
770
298
4,159
2,261,089
just-js retweeted
tsrs is a fast new TypeScript compiler port 🔥 This deep-dive blog post by @max_schwenk explains how he created the compiler and what makes it so fast. Contains excellent infographic animations.
1
13
2
223
7,911
just-js retweeted
New from Vercel Labs: tsc-ts TypeScript was written in TypeScript Then rewritten in Go We ported it back to TypeScript Compiled it with scriptc And it's 2-4x faster than tsgo
246
199
202
3,419
488,079
Nowadays this kind of stuff is trivial... super exciting, but also I feel bad for the TypeScript team because it's becoming easy for other people to come up with better solutions. You no longer need to spend millions of dollars to do this kind of work.
1
6
279
"Every bottleneck we remove immediately leads to a further increase in the amount of code we produce." More value, more features, more quality. These are the things one wants more of. Not more code. theregister.com/devops/2026/…
13
36
3
262
10,989
It’s disappointing to see people say all code is going to be slop and we should be ok with it, because humans weren’t writing the best code either. Quality and reliability should be higher (as quantitatively measured), not lower. Why’re we lowering the bar for ourselves? 😔
19
22
5
256
12,107
just-js retweeted
I've looked into what is known about Bun's AOT experiments on a code level. Here's what they are actually doing, and how it differs from Perry and the other native-TS/JS projects. 🧵 What Bun AOT does At build time your JS goes: bytecode → SSA graph → whole-program type inference → inlining, escape analysis, scalar replacement, range analysis, loop opts → B3 (the backend behind JSC's top FTL tier) → position-independent machine code. At runtime the JIT is OFF. Code is mapped read-only straight from the executable. Nothing is ever patched. Even inline caches, normally self-modifying code, become plain data slots that stubs read. Three ideas make it work: 1. Closed world. The compiler assumes it sees the entire program, so it knows every call target, every captured variable, every escape. eval/new Function still work; they just drop to the interpreter. Perry either compiles all of it, or does not run it - no escape hatch. Some other compilers have built-in JS engines to provide escape hatches here. Notice, though, that all AOT is hitting the same wall here? 2. Frozen built-ins. Math.floor and Array.prototype.push can't be reassigned anymore, so arr.push(x) compiles to an actual push instead of lookup + guard. A small, deliberate spec deviation. 3. "Sound types." TS annotations get lowered into real runtime checks and tags. Lie to the type system, and you get a TypeError instead of a wrong answer. With a type table, objects get fixed field layouts, closer to a struct than a hash map. 📊 The numbers tsc type-checking effect (688 files): - Wall time: 5.97s JIT vs 6.01s AOT. Basically identical. - CPU time: 15.7s → 6.9s (-57%) - Instructions: -47% The JIT run kept ~2.6 cores busy. The AOT run, ~1.1. Same output. Read that carefully: AOT here isn't faster at peak. It's dramatically cheaper. Less CPU, less memory, faster startup. That's the part that matters on servers and CLIs. Status: draft, verified on macOS arm64 only, CI hasn't run, and the Bun-side `bun build --compile --compile-aot` isn't public yet. You can read it. You can't use it yet. ⚔️ Perry vs Bun AOT Same destination. Opposite directions. Bun goes top-down: take one of the best JS engines in the world and remove the JIT. Everything else stays. JSC's GC, hidden classes, megamorphic caches, the interpreter as a safety net. Full JS semantics, and you ship a whole engine. And this, by design, will not change. Some people might look at it as "this will be optimized away", but the reality is that you can't do it without replacing JSC here. Perry goes bottom-up: no engine at all. TypeScript/JavaScript parsed with SWC, compiled through LLVM, linked against a runtime and GC written from scratch (moving, generational, precise roots). No V8. No JSC. No interpreter waiting behind you. If something can't be resolved statically, that's a compiler problem to fix, not a slow path at runtime. What that means in practice: - Safety net: Bun's is the interpreter. Perry doesn't have one. That's the price, and it's also what lets Perry target places a JS engine doesn't go (WebAssembly today, RISC-V/ESP32 experiments). - Compatibility: Bun AOT can run more or less anything Bun runs. Perry targets statically resolvable JS/TS (~96–98% of test262 in that scope) and closes the gap compiler-side. Getting Claude Code's 13MB minified CLI to compile natively took 160 compiler fixes. - Backend: B3 was built to compile JS fast inside a JIT. LLVM is slower to compile but gives you every target and optimization LLVM has. - Runtime: Bun keeps a JS object model and bolts whole-program knowledge on top ("known shapes", a program-wide dispatch table). Perry's runtime only has to support what the compiler emits, so it's more tailored towards the target app. 🎯 The takeaway Everyone is converging on the same three ideas: 1. Closed world 2. Immutable intrinsics 3. Types you can actually trust Bun arriving there independently, from inside JavaScriptCore, is the strongest validation yet that TypeScript as a systems language is real. The open question is the engine. Do you keep it, or throw it away? Bun bets you keep it. I'm betting you don't need it. I also think you actually don't want it (safety-related). Honestly, we're probably both right, for different workloads. And either way, TypeScript wins. PR: github.com/oven-sh/WebKit/pu… Perry: perryts.com
10
14
3
92
9,181
"We also design a novel lazy dynamic linking mechanism for Linux that defers relocations to fault time using bpf_fault, a use case impossible with userfaultfd, which reduces dirty memory usage of widely-used applications like Chrome and Clang by up to 50%" lpc.events/event/20/contribu…
3
11
587
ouch for anyone who was relying on deno runtime: "We’ve decided to put our future development work into this shared platform rather than continuing to develop a separate runtime and hosting service"
5
73
Rails founders code has perf issues 😂 I halved median response time in 5mins AI Go & Rust ports fix slow code written by Rails founders Rails uses Redis over TCP Go/Rust ports use in proc cache I’ve spent more time in the code than them. I give up. Code & benchmarks are trash
29
42
17
908
106,330
“I didn’t do it, AI did” is the biggest cope and laziest excuse of all time.
37
40
8
748
17,779
lol. this guy knows literally nothing about benchmarking. probably why RoR is so goddamn slow! 😝
What worries me about the future of programming is you see this and don’t immediately know there must be something wrong with the results or what you actually measured.
8
356
just-js retweeted
We’ve confirmed a KVM 0day through our Vercel Sandbox bounty program. Affecting the industry’s gold standard solution for Linux virtualization. 2026 is wild! Thankful to Paulos and other researchers helping us make the most secure sandbox for agents. Full writeup coming.
Full VM escape zeroday (guest>host root in industry standard hypervisors)! More soon
107
151
46
2,072
254,127
Time sharing a GPU across many VMs, with scale to zero dynamics?? 🤔 We're used to time sharing a CPU, but GPUs are different beasts -- until now 🚀 ! We now support the ability to quickly snapshot and scale to zero VMs that use a @nvidia GPU (or GPU slice), which means that multiple such VMs can time share a single GPU so idle GPUs need no longer apply! This short video shows this in action, hope you like it 🙂
2
1
13
614
An early 1990s Bloomberg keyboard—with its trackball, speaker, dedicated network and all—captures an era when mastering a proprietary interface was essential to Wall Street trading. spectrum.ieee.org/bloomberg-…
2
11
2,351
My CppCon Keynote, “The Address is Not The Place” is now up on YouTube! It’s not often that we get new tiers added to the memory hierarchy of computing, but it sure is fun! You can certainly get ahead of the curve by thinking about the programmatic challenges this will cause (and possibilities it will open up!) in the (very) near future. Hope this talk gets more people thinking about the concept of object “wherency”, and especially what that mental model could look like in various languages. I wrote my demonstrator as a C++26 native implementation; curious to see what others will come up with. Not just limited to C++ either; this concept is easily extended to many other (including runtime!) languages.
17
52
3
898
35,053