RSS Amplifier

Blog

Linus Groh

linus.devRSS feed ↗32 posts

Written by

Latest posts

Kiesel Devlog #14: Release 0.3.0

It's a lovely day 1 at Electromagnetic Field and I spent a few hours between talks and watching Hackers (1995) to release Kiesel 0.3.0! It contains 76 commits across two months, see the changelog for the full list of user-facing changes. Performance This release is a big leap for real-world JS performance in Kiesel — mostly thanks to object layout improvements and a basic implementation of fast…

Kiesel Devlog #13: Human After All

Hi! It's been a while. Exactly one year to be precise . Don't worry, the project is alive and well, and so am I! Unfortunately, the world around us is not. JS itself has always been the target of ridicule — in some communities more than others — so I'm used to just doing my own thing. But now that people are instructing GPUs to shit out entire JS engines and other people are cheering them on I…

Kiesel Devlog #12: Write Once, Run Anywhere

Your favorite JavaScript Engine turned two years old yesterday! I'll use that as an excuse to write another blog post — not just about the birthday though 🥳 Some Numbers Kiesel is about 80,000 lines of Zig right now, give or take. A lot of it is spec comments so the amount of actual code is a bit lower. There are a few new contributors but I'm still responsible for 98% of commits, so that's…

Kiesel Devlog #11: Community Edition

Since the last devlog I've barely done any work on Kiesel myself due to being on vacation, so this one is entirely dedicated to things other people contributed! On that note: I created a Matrix space for the project where you can ask questions or just hang out and chat. I'll also try to post about in-progress things once in a while. Feel free to join! #kiesel:matrix.org #kiesel-general:matrix.org…

Kiesel Devlog #10: Let's Make It Fast!

Over the last year and a bit Kiesel has grown beyond being a small experiment. I've been churning out feature after feature, and while correctness has been of importance from day one, one thing hasn't been on my radar as much: performance. You could go as far as saying Kiesel is blazingly slow 🔥 . Let's change that :^) Make It Work This part is done, it works. Some things better than others, the…

Kiesel Devlog #9: JavaScript on a Printer

Firstly: go and read Pwning a Brother labelmaker, for fun and interop! by Domi until the end! Super cool, right? Getting SSH credentials in response to my shitpost was not exactly what I expected but here we are. Let's briefly dive into how I ported my toy JS engine to this Linux-based labelmaker :^) Initial Attempt I knew the thing is powered by a 32-bit ARM CPU, so I quickly looked for a…

Kiesel Devlog #8: SSR, but it's CGI

So, I had an idea the other day. It's enough of a shitpost for April 1st but given we're barely through May and I don't want to wait that long you get to see it now :^) TL;DR: $ curl -i http://localhost:1337/cgi-bin/hello.js HTTP/1.0 200 OK Content-Type : text/html Server : Kiesel/0.1.0-dev+c498d0465 Hello world! Why? Yes. On a more serious note, I have no idea how I even got to this point. The…

Kiesel Devlog #7: Happy Birthday!

As of today Kiesel , the JS engine I'm building in my spare time, is one year old! This post is a short overview of where we are, how we got there, and where we're going. commit 929bb044ffcd1776c850a5b924f9992915277e58 Author: Linus Groh Date: Fri Apr 28 19:48:13 2023 +0100 Initial commit Writing another JS engine seems like a fun project for learning Zig :^) Why Are You Doing This, Again? What it…

Kiesel Devlog #6: Catching up :^)

Happy new year! Well, new is a stretch, but it's been a while since I last did one of these. This post is gonna be all over the place, but I want to get you up to speed before focusing on more specific things again :^) TL;DR The last (exactly!) three months can be summed up as follows: Kiesel has three new contributors! Considering the total number is four this is a lot 🎉 Ali Mohammad Pur Fri Oct…

Kiesel Devlog #5: Progress powered by the Shadow web engine

Shadow Web Engine This is a project my friend CanadaHonk started working on earlier this week — it's a simple web engine written in JS! More about that here . For JS execution within Shadow they had the idea to use existing Wasm builds of JS engines instead of relying on the host browser, and to my surprise they picked SpiderMonkey and Kiesel for the initial proof of concept, switchable at…

Kiesel Devlog #4: The biggest update yet!

It's been two weeks and 108 commits since the last devlog, and I'm really happy with the progress I made! Let's take a look at all those shiny new features :^) A quick check of test262.fyi reveals that Kiesel now scores exactly 33%. ArrayBuffer First up, ArrayBuffer . They're not very capable and mostly serve as memory storage for other kinds of objects ( DataView , typed arrays), and are thus…

Kiesel Devlog #3: Accessors, Date/Map/Set, test262 history graph

Accessors in Object Expressions I first implemented the fairly similar object method definition syntax ( { foo() {} } ), but cheated with the AST representation — this would output the same structure as { foo: function() {} } , which obviously falls apart when the definition has a get or set prefix. One small refactor later I had an object_define_method bytecode instruction tailored to this use…

Kiesel Devlog #2: Iterators, more math, and a bug in the Zig stdlib

Welcome to the second devlog for the Kiesel JS engine! It hasn't been long since the last one, but I worked on a couple of fun things since then :^) Iterators Quoting myself from last week: […] two major features needed to unlock a bunch of runtime functionality are promises and iterators, so I'll likely work on those soon. And that's what I did the next day. Turns out iterators are much simpler…

Kiesel Devlog #1: Now passing 25% of test262!

Except for the initial announcement and a couple of fedi posts I haven't talked much about the latest project I'm working on - writing a JS engine from scratch in Zig! A little over four months and exactly 600 commits later it now passes 25% of test262 ( 20% only a week ago! ), so this seems like a good time to write the first devlog :^) Humble Beginnings commit…

Setting up a Self-Hosted Forgejo Actions Runner with Docker Compose

I created an account on Codeberg the other day with the intention of hosting some of my code there in the future. So far, 100% of my open source activity happens on GitHub, and while they do a lot of things well, this seems like a good time to try alternatives considering the ongoing enshittification of major parts of the web. I've been aware of Codeberg for a while, and after a friend (hi…

This Week in Ladybird #4

Overview of changes across the Ladybird Browser project in the week from April 10 to April 16 (plus everything merged Sunday evening) :^) Summary In chronological order: Browser: Have BookmarksBarWidget signal bookmark changes for Tab LibWeb: Resolve more background-related properties LibWeb: Return from "the end" during HTML fragment parsing LibVideo+LibWeb: Generalize PlaybackManager for use…

This Week in Ladybird #3

Overview of changes across the Ladybird Browser project in the week from April 3 to April 9 (plus everything merged Sunday evening) :^) Summary In chronological order: AK+LibWeb: Port {HTML,UIEvents,XHR}::EventNames to new FlyString LibWeb: Introduce CustomElementRegistry and creating custom elements LibWeb: Add borders functionality to CSS Grid LibWeb: Implement background-position-x and…

This Week in Ladybird #2

Overview of changes across the Ladybird Browser project in the week from March 27 to April 2 (plus everything merged Sunday evening) :^) Summary In chronological order: Ladybird: Open target _blank links in new tab LibWeb: Implement custom element name validation and fix bug in element name validation LibWeb: Don't force relayout whole page on programmatic scroll Ladybird: Enable and document…

This Week in Ladybird #1

Preface Well hello friends! I've decided to start a This Week in Ladybird blog post series, a format you may already know from various other open source projects. This will be in addition to my (almost-)monthly LibWeb/LibJS/Browser segment in our update videos, where I often have to exclude changes that are a little bit more technical or cannot be demo'd on camera very well. The plan is to include…

Office Hours with Guest: Linus Groh

Road to Working on SerenityOS & Ladybird Full-Time

When I submitted my first pull request to the SerenityOS repo I had no idea where this journey would take me. Since then, almost three years and 3,200+ commits later, I have: Learned C++, and a ton about systems programming in general Helped building LibJS, our from-scratch JavaScript engine, from the ground up Become the first appointed project maintainer Joined TC39 as an Invited Expert to…

Ladybird Browser Year in Review: What We Did in 2022!

2022 is rapidly coming to an end, and of course we've been busy all year round in the SerenityOS project! Especially LibJS and LibWeb — also known as the Ladybird Browser Project — received a huge amount of work from dozens of contributors; and since they are what I work on and am most familiar with as well, let's look at some Ladybird highlights from the past year! If you want to get a summary of…

SerenityOS Office Hours with Guest: Linus Groh

Trying Real™ Websites in the SerenityOS Browser

Well hello friends! After the recent release of Ladybird , a prototype browser GUI written in C++/Qt using the LibWeb engine, SerenityOS and specifically its browser engine subproject got quite a bit of attention on the internet again — everything from the usual "nooo you can't build a web browser from scratch" and "y tho", to excitement, to heise online suggesting we're "competing against Google"…

SerenityOS Office Hours / Q&A with Linus Groh

How To Build a Standalone GUI Application for SerenityOS

Building a GUI application as part of SerenityOS is easy, and has been done plenty of times. Just take a look at any of the existing ones , or read the (slightly outdated!) Introduction to SerenityOS GUI programming on Andreas' blog. But what if you wanted to build one that exists as a standalone project and is not part of the SerenityOS repository, and instead installed as a port, or not open…

Running SerenityOS on Bare Metal

In a previous post , I mentioned: I haven't managed to do a full successful boot on bare metal yet though, so that will definitely have to join this list one day. Well, five months later I finally did it! :^) View tweet: https://twitter.com/linusgroh/status/1486111320181149697 This is a post explaining what it took to get there, both as documentation for myself and hopefully to help someone else…

Implementing the Temporal Proposal in LibJS

Over the past five months we've implemented the Temporal stage 3 proposal in LibJS, the SerenityOS JavaScript engine. In this case, we is Idan , Luke , and yours truly . We're just three functions (& a bunch of bugfixes 🐛) short of having the minimum implementation completed, so I figured I'd write down some thoughts about the whole process :^) Motivation After finishing my rewrite of the Object…

Talking to SerenityOS Contributors About a Scratch-built C++ Developer’s Playground in Modern C++

Learning C++ With Serenity

My Journey With SerenityOS, So Far 🐞

This is a timeline of personal highlights of my involvement in the SerenityOS project — from learning C++ to becoming a maintainer and beyond. If you have any questions, feel free to get in touch, for example on the Discord Server . :^) 2019 — Discovery I first heard about SerenityOS in late 2019, but cannot remember where and when exactly — probably Reddit, Twitter, or a YouTube recommendation. I…

SerenityOS developer interview: Linus Groh