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…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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"…
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…
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…
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…
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…