Who are we
We are Robin (22) and Maurice (23) (the author of this post). We are two developers from Germany who have been friends for over a decadeāand weāve been coding together for just as long.
Our journey started deep in the Java ecosystem, building custom logic for Minecraft servers. As we grew, we went our separate ways to explore different tech stacks, but we always circled back to compare notes.
Our Backgrounds
While we started together, our paths diverged to cover the full spectrum of development:
- Robin moved from Java deeper into low-level systems programming. He became a true polyglot, working across many different languages to understand how things work close to the metal.
- I (Maurice) spent years in web technology (PHP, JS/Node), but I didn't stop at the frontend. I dove deep into the Go ecosystem and later Rust. I always had a fascination with compilers and language design.
The Problem with Server-Side JS
Through my work in web dev, I fell in love with TypeScript. The type system is fantastic, and JavaScript is arguably the best fit for the server when it comes to handling JSON - considering convenience.
However, coming from a Go and Rust background, the limitations of the Node ecosystem were painful. I missed real multithreading and the ease of single-binary deployments. On top of that, the environment often felt "unfinished"āyou have to install a heavy toolchain just to get type checking, and compared to compiled alternatives, it was simply too slow.
I wanted the developer experience of TypeScript, but the performance and stability of a systems language. There was no alternative that gave me both.
Enter: Duck
That frustration sparked a conversation about building a dedicated programming language for the web. We started working on a prototype: Duck.
Duck is our attempt to get the best of both worlds. It combines the ease of typing found in a TypeScript-like type system with the speed and concurrency of the Go runtime under the hood.
By now, Duck has grown from a prototype into a large compiler project. We spent the last six months formalizing the system, and it now features far more capabilities than we originally expected.
We will explain more about the language syntax, the architecture, and how we leverage the Go runtime in an upcoming post.