Browser Engines… Chromium, V8, Blink? Gecko? WebKit?

Jonathan Biro
4 min readMar 5, 2019

--

Recently Microsoft has decided to switch from using their own browser engines on Edge to using Google’s Chromium. This shows how the world of JavaScript engines has really consolidated.

The first JavaScript engine came with the first browser that used JavaScript. Netscape Navigator. Since then, Microsoft among others have made their own engines to interpret and compile JavaScript and competition has been good for the market.

At one time, Internet Explorer 6 dominated the market and almost no one used any other browser. But Internet Explorer was not standards compliant and was slow to adopt new features or implementations of JavaScript, so the world was stuck designing websites to work on a mediocre browser with a mediocre engine.

Luckily, Microsoft’s win over the browser wars was short lived and out of the ashes of Netscape’s Navigator came some great alternatives to Internet Explorer that would help make the web better.

Mozilla’s Firefox was the first major competitor to try and dethrone Microsoft’s nearly abandoned browser. Along with Mozilla with their Firefox browser and Gecko engine came Apple with their WebKit engine and Safari, Opera and their browser of the same name with its Presto engine, and eventually Google’s Chrome with first WebKit and then their Blink engine.

All of these are browser engines that manage a website’s layout and also include a JavaScript engine that interprets and compiles JavaScript code. The most popular of these JavaScript Engines is v8 and it powers more than just the Chrome browser.

V8 also powers Electron, a framework developed and maintained by GitHub that lets you make JavaScript based apps for the desktop.

V8 also powers the Node.js runtime system. This allows Node.js to constantly benefit from the development and improvements to V8 and provide a great and fast server experience. Since V8 is written in C++ it is able to compile JavaScript to native machine code instead of interpreting it in real time, which is what allows the Node.js to be so speedy and competitive in the server marketplace.

Now that Microsoft is switching to using Chromium and V8, and Opera and other alternative browsers have already made the switch, there are only 3 major browser engines in the market. Mozilla’s Gecko and Google’s Blink with Apple’s WebKit a close cousin of Blink.

Wait what’s Blink? It’s a bit confusing, as Blink is Google Chrome’s rendering engine, V8 is the JavaScript Engine used within Blink, and Chromium is the browser project that holds them all together. Add a bit of Google product integration and Chromium becomes Google Chrome.

V8 knows nothing about the DOM, the Document Object Model, as it is meant to just process the JavaScript. Blink contains the layout engine that decides how to display a site. It makes sense that Node.js would only need V8 and not Blink, because Node doesn’t need to know anything about the DOM.

Why should you care?

Now that there are essentially only 3 major JavaScript engines and Chromium will gain an even bigger market share from 65% plus whatever they are absorbing from Edge and Internet Explorer which are about 15%, we’ll see web developers build their sites to work best on the most popular browser engine. This could eventually turn into a bad situation like we had with IE6, but hopefully Chromium remains standards compliant and the competition from Firefox and Safari can keep development fast and moving forward for the foreseeable future. I’m hoping Google never slows down Chromium development and keeps it competitive with such a high market share.

Current Major JavaScript Engines:

  • V8 — open source, developed by Google, written in C++
  • SpiderMonkey — the first JavaScript engine, which back in the days powered Netscape Navigator, and today powers Firefox
  • JavaScriptCore — open source, marketed as Nitro and developed by Apple for Safari

Funny little aside: the HTML <blink> tag was never supported by the Blink engine. You can see why:

Such an annoying HTML tag

--

--