sbt 2.0.0 has officially landed! 🎉🎉
Here are the biggest changes for the Scala ecosystem:
✅ Scala 3 constructs for build definitions
✅ Bazel-compatible caching system
✅ Faster startup times with the native-image sbtn client
⚠️ The latest release of doobie changes the groupId from org.tpolecat to org.typelevel!
If Scalafix doesn't work for you, be sure to replace import doobie with import org.typelevel.doobie in your codebase.
https://t.co/wLn12O1mGh
A French engineer who lives quietly in Paris has spent 30 years writing software that the entire internet now runs on without knowing his name.
He wrote the code that streams every YouTube video, every Netflix show, every TikTok clip. He wrote the code that runs the virtual servers underneath AWS, Google Cloud, and Microsoft Azure. He calculated more digits of pi than anyone in history. He has no Twitter. He has no marketing. He just keeps shipping.
His name is Fabrice Bellard.
Here is the story, because almost nobody outside the systems programming world knows what one man has built.
Fabrice was born in 1972 in Grenoble, France. He studied at École Polytechnique, the top French engineering school. He never went to Silicon Valley. He never built a startup empire. He just wrote code.
In 2000 he started a project called FFmpeg, an open-source multimedia framework for encoding, decoding, and streaming video. He was 28. The project did one thing nobody else had done well. It handled every video and audio format that existed, in one library, on every operating system. He led it himself for years.
Today FFmpeg is the invisible engine of the internet. YouTube uses it. Netflix uses it. VLC uses it. Chrome and Firefox use parts of it. Every Android phone, every iPhone, every smart TV, every video editing tool you have ever touched runs FFmpeg somewhere underneath. If you have watched a video on a screen in the last 20 years, Fabrice's code processed it.
He was not done.
In 2003 he started QEMU, a machine emulator and virtualizer. He wrote it solo until version 0.7.1 in 2005. QEMU lets you run any operating system on any other operating system. It became the foundation of modern virtualization. KVM, the Linux kernel hypervisor, runs on top of QEMU. Every major cloud provider, AWS, Google Cloud, Microsoft Azure, IBM Cloud, runs virtual machines on infrastructure built around it. The Quick Emulator is the most cited piece of cloud infrastructure code on Earth.
He kept going.
In 2001 he won the International Obfuscated C Code Contest with a small C compiler that grew into TCC, the Tiny C Compiler. TCC can compile and boot a Linux kernel from source in under 15 seconds. In 2004 he calculated the most digits of pi ever computed at the time, using a personal desktop computer and an algorithm he derived himself called Bellard's formula. In 2011 he wrote a complete PC emulator in pure JavaScript that runs Linux in your browser, a project called JSLinux that engineers still cannot believe is real.
In 2019 he released QuickJS, a small but complete JavaScript engine that fits where V8 cannot. In 2021 he released NNCP, a neural network based lossless data compressor that immediately took the lead on the Large Text Compression Benchmark.
Then he turned his attention to large language models. He built TextSynth Server, a web server with a REST API for running LLMs locally. He released ts_zip and ts_sms, compression utilities that use language models to compress text and short messages at ratios traditional algorithms cannot reach. He released TSAC, a very low bitrate audio compression system. In December 2025 he released Micro QuickJS, a new JavaScript engine for microcontrollers, separate from QuickJS, designed for environments with almost no memory.
Fabrice co-founded a telecom company called Amarisoft in 2012, where he serves as CTO. Amarisoft builds 4G and 5G base station software used by carriers and labs around the world. He has been running it for over a decade while continuing to ship personal projects from his own home page at bellard dot org
He has no Twitter. He has no Instagram. He gives almost no interviews. His personal website is a flat list of projects with no styling, no fonts, no marketing copy. Just titles and links.
A quiet French engineer who never moved to Silicon Valley wrote the code that quietly runs the internet.
He is still shipping.
VoidZero, the team behind Vite, Vitest, Rolldown, Oxc, and Vite+, is joining Cloudflare. Vite stays open source, vendor-agnostic, and built for everyone. https://t.co/DJTpX4Q9Xt
Re: the various "bad VC" stories circling around social media today. I believe it. I have my own stories. I think bigger picture though I'd tell all founders: there's going to be bad shit that you witness. Don't associate. Find the good people because there are plenty.
In most cases, you won't be in a position to be able to say anything about the bad things you witnessed. Even @eastdakota chose not to say anything until he was in a position of being CEO of a $80 to $100B market cap company.
(To be clear, I'm sure Matthew would've said something earlier, he just didn't care to. But surely at some point in history he was in a position he didn't feel comfortable to as well.)
Just move on, find the good people. Bide your time. But most importantly, do not associate with the bad people. Maybe they get away with it maybe they don't, but people definitely KNOW who the bad people are and you don't want to be in those rings. It's not worth it.
🥳 Finishing the week on a high note, merged all pending PRs for #Hardwood 1.0 candidate release 1. More performant filter evaluation, reworked API for columnar access to #Parquet data, support for local files >2 GB, etc. CR 1 out next week, then on the homestretch for 1.0 Final!
I've got an agent in a loop optimizing a renderer with the goal to minimize frame times (and tests to measure). It got times down from 88ms to 2ms and allocations down from ~150K to 500. Sounds good, right? Wrong. This is exactly why agent psychosis is a big fucking problem.
As an experiment, I rewrote the Ghostty core render state in Go, with access to identically laid out data structures as Ghostty and the exact same validation tests. I made a purposely naive renderer (simple, correct, but slow). 88ms per frame with 150,000 allocations (horrendous, lol)!
I then kickstarted a Ralph loop to bring the frame times down. I told it it can't modify input data structures or the public API or tests (they're correct), but it can do anything else it wants. It got to work.
It has worked for about 4 hours. I've spent around $350 on this experiment so far. The results?
88ms => 1.5ms
150K allocs => ~500 allocs
Incredible right? Nope.
My hand-written renderer I ported has frame times (same benchmark) of ~20us (0.020ms) and 0 allocations in the update path.
This is the problem with psychosis and lacking systems understanding. If you don't understand the system, you're going to accept that this is an incredible result. If you understand the system, you'll see better solutions immediately and can do roughly 75x better on throughput.
The people who blindly trust agent output are in the former camp. They're sheeple, overdrinking from a fountain of mediocrity.
Standard disclaimer: I use AI all the time. I like AI. The point I'm making is to not blindly accept results. Think. Analyze. Learn.
AWS has become the first hyperscaler to build a flat data center network using random graph theory. An approach academia called brilliant but impossible. Our team proved it's both. Watch applied scientist Giacomo Bernardi break down the new design and what it means for customers ↓ https://t.co/eUvGYcXEWq
okay folks, new module out of the oven 🍞
kyo-ui 🧩
write a UI once, run it on the client or the server:
▸ Swap the runner: the same UI mounts in the browser on Scala.js, streams from a server over SSE, or renders to static HTML for SSR and tests.
▸ Reactivity without the machinery: a Signal is a plain value you pass wherever the API takes one, with no wrapper type, binding operator, or hooks.
▸ Type-safe down to the markup: containers accept only valid children, attributes are enums instead of strings, and setters exist only where they apply.
▸ Surgical updates: no virtual DOM and no re-rendering, only the nodes a changed signal touches get patched.
JVM, JS, and Native. Of course 😎
As the family IT guy its so disappointing how bad of an experience technology is for non-technical people.
I had the distinct pleasure of building educational software for kids full time for a summer while in college (s/o to @WilliamsonMark), and I remember they did weekly/biweekly user testing where a group of toddlers would come in and we'd record them using the software in various states and then adjust accordingly.
Every single session was SHOCKINGLY illuminating. Like, I expected after a number of these I'd empathize more and build better toddler software one-shot right? Hell fucking no. Every user study was so educational. I learned I simply can't enter the mind of a toddler.
Do TV companies, Netflix/Roku/etc. do user studies with elderly people? Do they realize how dogshit and impossible to navigate their interfaces are?
Asking some elderly family members to "sign up and schedule an Uber to pick you up for the airport" is like mission impossible. I thought they were exaggerating, then I tried the experience and holy shit man. Try cold finding, installing, signing up, and scheduling an Uber on a 5 year old iPhone with max font size. Its insane.
Jakub Cichy is working on creating a truly production-quality #MCP server & client in #Scala. I've already used Chimp to effortlessly expose an MCP server from a Scala application with just a couple lines of code. Everything that can be inferred, is inferred in a type-safe way - minimal boilerplate.
Great to see this happening :)
https://t.co/YJlVCU04Ie
After over a decade without writing a new DB library, I finally had the time to iterate on a new approach 😅
Quill has long lasted as the richest DB library in Scala, but it's time for some innovation! 🙌 kyo-sql is in the oven and packed with goodies:
✅ DSL mirrors SQL syntax, not collection algebra
✅ Records properly encode relational algebra: no nested tuple nightmare anymore 🥹
✅ Raw sql fragments that compose with other typed APIs
✅ Single compilation pipeline, three execution modes: run/runStatic/runDynamic. Full control with peak performance 📈
✅ No complex macros or transformations of queries. A simple, reliable and predictable compilation process
✅ Native async PG + MySQL drivers in pure Scala, first-class typed cancellation, no JDBC
✅ And yes! support for JVM, JS, and Native 😱
This is so much fun!!! 🚀🚀🚀
(don't miss the preview 👇🏼)
Why sometimes you do need Kafka after all…
“To guarantee ordering, every single COMMIT with a pending NOTIFY acquired AccessExclusive lock on a global object”
Personal update: I've joined Anthropic. I think the next few years at the frontier of LLMs will be especially formative. I am very excited to join the team here and get back to R&D. I remain deeply passionate about education and plan to resume my work on it in time.
Scala has long been a magnet for innovation and, although that's actually desirable, the consequent fragmentation of the ecosystem is a major issue for library authors. And yes, Kyo worsens it.
It's time for a proper solution! Forget F[_], meet kyo-compat: write your library once, support ZIO, Cats Effect, Future, Ox, Twitter Future, and Kyo 🪄
✅ Zero overhead: every method is inline and lowers to the backend's own primitive. No typeclass dispatch
✅ No degraded features: capabilities like tracing work as if using the underlying libraries directly
✅ Fully isolated: each artifact depends only on its target library. No Kyo runtime, zero dependencies
✅ SBT plugin: cross-publishes every backend from one source tree
One source. Every stack.