November 15th 2017
A Quick Browser Compatibility Checkup
I’ve written a few times about the state of browser compatibility and the web platform over the years. Over 4 years ago I linked to a post celebrating the rise of evergreen browsers. Then 2 years ago I was one of several people stressing about whether Safari was going to hold the web back. It’s something I’ve followed closely because supporting many different subtly incompatible execution environments is one of the most unique and frustrating challenges of front-end development.
For the web application I have spent my workdays building over the past 4 years, we target the last 2 versions of the major desktop browsers (Chrome, Firefox, Safari, Edge). At the time of writing that means we target
- Chrome 61 + 62
- Edge 15 + 16
- Firefox 55 + 56
- Safari 10.1 + 11
All of ES6 and ES2016, and almost all of ES2017
That includes core ES6 stuff like classes, destructuring, and arrow functions. But also features that were just standardized this summer like async functions.
Modern CSS specifications like Flexbox, CSS Grid and CSS Variables, and CSS Feature Queries are all fully supported in these browsers, making creating layouts especially much easier than it had been in the past.
Promises and Fetch
Promises have been mostly supported for a while, but they didn’t have native support in IE11, so some folks may still be polyfilling them. With a last 2 versions standard, you not only don’t need to polyfill Promises, but also can drop any polyfills for the promise based fetch api as well (and use them with async-await natively!).
So there is a ton of stuff that is available today for people targeting the last 2 versions of browsers. But there is also a bunch of stuff that is almost there:
Web Assembly and low level primitives
The latest versions of all browsers also support WebRTC, an API for peer to peer communication through browsers. This potentially opens the door for all types of browser-based text/video chat and collaboration applications.
Service workers are getting close. They’re available in every browser but Safari now, and Safari is working on them. If we get another big
x.1 release of Safari like last year, they could be available for early adopters across the board within the next 6 months.
The web is moving forward together
It’s fun to see this level of unified activity across the web platform over the past 2 years. In my 7+ years of front-end development, I’ve never seen a more compatible web than the one we can develop against today.