# Browser Engines

While there are many web browsers, they're almost all wrappers around the only three actively developed full engines. Those are:

*   [Gecko](https://en.wikipedia.org/wiki/Gecko_(software)) ([source code](https://hg.mozilla.org/mozilla-central/)): Developed by Mozilla for [Firefox](https://en.wikipedia.org/wiki/Firefox). While it previously powered several other browsers, at this point it looks like the [Tor Browser](https://en.wikipedia.org/wiki/Tor_(network)#Tor_Browser) and [Waterfox](https://en.wikipedia.org/wiki/Waterfox) are the only ones still tracking Gecko.
    
*   [WebKit](https://en.wikipedia.org/wiki/WebKit) ([source code](https://svn.webkit.org/repository/webkit/trunk/)): Beginning as a fork of [KHTML](https://en.wikipedia.org/wiki/KHTML), it's primarily developed by Apple for [Safari](https://en.wikipedia.org/wiki/Safari_(web_browser)). It also powers [GNOME Web](https://en.wikipedia.org/wiki/GNOME_Web) (Epiphany) and [Otter](https://en.wikipedia.org/wiki/Otter_Browser).
    
    On iOS, all browsers, including Firefox and Chrome, are powered by WebKit. This is an Apple [requirement](https://developer.apple.com/app-store/review/guidelines/#software-requirements) (2.5.6), and is [controversial](https://infrequently.org/2021/08/webkit-ios-deep-dive/).
    
*   [Blink](https://en.wikipedia.org/wiki/Blink_(browser_engine)), part of [Chromium](https://en.wikipedia.org/wiki/Chromium_(web_browser)) ([source code](https://chromium.googlesource.com/chromium/src/+/refs/heads/main/third_party/blink)): Beginning as a fork of WebKit, it's primarily developed by Google for [Chrome](https://en.wikipedia.org/wiki/Google_Chrome). It also powers [Edge](https://en.wikipedia.org/wiki/Microsoft_Edge), [Brave](https://en.wikipedia.org/wiki/Brave_(web_browser)), [Silk](https://en.wikipedia.org/wiki/Amazon_Silk), [Vivaldi](https://en.wikipedia.org/wiki/Vivaldi_(web_browser)), [Opera](https://en.wikipedia.org/wiki/Opera_(web_browser)), and most other browser projects (some via [QtWebEngine](https://wiki.qt.io/QtWebEngine)). If someone introduces a new browser and doesn't talk about its engine, it's very likely they are using Blink.
    

You could also make the case for two others:

*   [Flow](https://en.wikipedia.org/wiki/Flow_(web_browser)): A clean-slate closed-source browser and engine, designed to make effective use of parallelism. This matters most on highly resource-constrained devices, and if you have a Raspberry Pi you can download and play with their [demo](https://support.ekioh.com/download/). The reason I am not including this engine above (yet!) is that while it's made impressive progress, including handling [Google Docs](https://www.ekioh.com/devblog/google-docs-in-a-clean-room-browser/), it's still a ways from done; the demo page has "we're not quite ready to start receiving reports for rendering issues just yet, these are mostly down to missing features, so as we add them you'll see those issues steadily disappear over time." You can see which features they have and haven't implemented on the [web-platform-tests dashboard](https://wpt.fyi/results/?label=master&label=experimental&product=chrome&product=firefox&product=safari&product=flow&aligned). To get a very rough sense of where it stands today we can compare the proportion of web platform tests that pass in each browser:
    
    | Chrome | 97% |
    | --- | --- |
    | Firefox | 96% |
    | Safari | 94% |
    | Flow | 24% |
    
*   [Goanna](https://en.wikipedia.org/wiki/Goanna_(software)) / [UXP](https://en.wikipedia.org/wiki/Pale_Moon_(web_browser)#UXP): A pre-[Quantum](https://en.wikipedia.org/wiki/Gecko_(software)#Quantum) fork of Gecko, developed for [Pale Moon](https://en.wikipedia.org/wiki/Pale_Moon_(web_browser)). There doesn't seem to be an official SCM: [palemoon.org/sourcecode](https://www.palemoon.org/sourcecode.shtml) links to a [snapshot archive](https://archive.palemoon.org/source/) and an [archived GitHub repo](https://repo.palemoon.org/mcp-graveyard/UXP/releases). It looks like it was on [repo.palemoon.org](https://repo.palemoon.org/MoonchildProductions/UXP) until sometime between May and October 2021 ([wayback](https://repo.palemoon.org/MoonchildProductions/UXP)). Probably ~2021-08-25, since that's the [final public commit](https://repo.palemoon.org/mcp-graveyard/UXP/commit/c6b1b30bb562736c3a779cfc3a1c9f593016a083). Based on the timing, probably deleted it as part of the [MyPal](https://www.reddit.com/r/palemoon/comments/pexate/pale_moon_developers_abuse_mozilla_public_license/) [licensing](https://forum.palemoon.org/viewtopic.php?f=62&t=27294) [blowup](https://github.com/Feodor2/Mypal/issues/3)? They don't seem to participate in [web-platform-tests](https://web-platform-tests.org/). This looks like a fork that has fallen well behind Firefox (ex: no web components or nullish coalescing), and I expect we'll see them fall further behind and either shut down or rebase on top of one of the actively maintained engines.
    

I've heard some concern that we're losing browser engine diversity as the web platform grows and it becomes harder to build and maintain something that supports it fully. While I do think the size of the web platform could have that effect, I'm not seeing it yet. Some of this is that there just haven't ever been that many competitive browser engines. In the late 90s, we had three (powering Netscape, IE, and Opera) and then four (KHTML) in the early 2000s. In 2003 Safari (WebKit) forked from KHTML, making five. For three months in 2013 we had six, between Chrome forking WebKit to make Blink (April) and Opera discontinuing Presto for Blink (July). In 2016 KHTML development fell off, with consumers switching to first WebKit and then Blink, bringing us down to four. In 2020 Edge switched from their own engine to Blink, bringing us down to three. And now with Flow we'll probably be back to four soon.

*Comment via: [facebook](https://www.facebook.com/jefftk/posts/10100236580288042)*