New year, new offer, same job

I have a new permanent offer with Mozilla! Also featuring a 2023 recap with work ramblings and 2024 resolutions.

Déjà vu, huh? I announced joining Mozilla and have been working since October 1st, under a 6 month fixed-term contract. Until now! Today I signed a new offer to become a permanent employee! 🎉

Why does it matter?

  • I will continue working on Firefox/Gecko for the foreseeable future!
  • My work seems to be important enough for me to continue :^)

Work (October - December)

As a bonus, here’s a detailed recap of significant work I’ve done since joining (October - December), with some comments/rants (in order of ship date):

  • User activation API (Firefox 120)
    This was for once relatively easy/small and probably the simplest API I’ve added, mostly hooking up the existing internal API to the API as per spec. A good project to start with.

  • Lazy loading iframes (Firefox 121)
    This was not like the last. After a ~week of focused development, I had a decent WIP patch. Some refinement later, we now passed most WPTs and I thought it was good enough to ship. Even though the end of the 120 release cycle was very close, I decided to push it through on by default as I thought it would be fine (see: naivety).
    After a (very helpful!) bug report in Nightly, I switched to Nightly only. Delayed to 121, I enabled it by default again after it was fixed thanks to a handy patch.

  • <hr> in <select> (Firefox 122)
    I opened a WIP patch in September before getting hired, so I stopped working on it since then. Some time later, it was agreed it would be good to have so I started working on it again. This kind of spec change seems on the surface really easy - the eventual patch wasn’t even that complex (imo) - but it was quite the experience for me (I only blame my unaware past self, everyone else was great):

    • The HTML parser. Code changes were quite simple after some helpful review comments.
    • The toolkit (~desktop UI). Changes were okay, a bit overcomplicated to support styling the color of <hr>s but understandable.
    • Android. The tiny GeckoView change was incredibly easy on my end, the only problem is it doesn’t work. Fenix (Firefox for Android)’s menus for <select> do not support separators yet, so nothing renders in the menu. More work is needed there to match desktop completely, but that’s okay for now (imo).
    • The spec. You might think (as did I) “How could the spec be complex? It’s just adding if <hr> in <select>, show separator”. You’re right, that’s essentially what the spec PR did. However, no. Pointed out in a great comment on the patch (I would have missed this otherwise, thank review processes), we did weird things when used in a <select> with a size >1 (~showing part of the dropdown in the element). I checked Blink and WebKit expecting it to be a mistake in my patch, but actually they do the same as my WIP patch did, not render separators. This feels wrong, or at least not what I would expect, so eventually I opened a spec issue for it (for now Gecko matches others). Another shoutout to <hr> not being allowed in <optgroup>.
    • The WPT tests. After accidentally finding some WebDriver bugs due to Fission (~cross-origin process isolation) not being cooperating, I ended up marking them as flaky, only passing with Fission off. I tried fixing the WD bugs, but ended up more confused than I started (modern browsers are complex indeed).
  • ICU4X migration work

Entire year recap

For a recap of notable events/contributions/work throughout the entire year:

  • Implemented various notable things in Firefox (with ~4x as many random minor fixes):
    • @media (scripting) (113)
    • CSS NaN/infinity fixes + ship (114)
    • @import supports() (115)
    • URL.canParse() (115)
    • – Exams –
    • <search> (118)
    • CSS Values 4 functions ship (118)
    • attr() fallback (119)
    • @media (prefers-reduced-transparency) (behind pref)
    • @media (inverted-colors) (behind pref)
    • NVIDIA Video Super Resolution (behind pref)
    • – Joined Mozilla –
    • navigator.userActivation (120)
    • <iframe loading=lazy> (121)
    • <hr> in <select> (122)
  • Did my first conference thing by running a session about my experience being a new contributor to web engines at Web Engines Hackfest (didn’t expect today at the time!). I’m not planning to speak or anything this year, but maybe the next?


  • Meet and talk to more people! This is mostly to simply meet cool people (yes that includes you) and also half to improve my own anxiety ;)
  • Travel more! I am already planning to attend 2 conferences so far (and probably 2 work things), potentially more?
  • Start doing (more) work on standards and other upstream projects like ICU4X
  • Get my JS engine into a mostly usable state for basic projects?

Talking with people it still feels.. incredible to say where I work and what I do. I am very privileged to be in my current position and continue to be thankful to everyone who helped me along the way to today. Thanks for reading! I hope 2024 goes well for you :)