 Chrome 49 adds support for CSS custom properties, sometimes referred to as CSS variables. Background sync makes it easy to reliably send data to the server, even if the user leaves the page, closes the browser, or loses their network connection. And the new save data client-hint header enables you to deliver fast and light applications to users who want them. These are just some of the new features for developers in Chrome 49. Let's dive in and see what's new in Chrome. Every site has CSS files filled with repeated values, colors, margins, padding, etc. Repeating these values over and over again in your CSS is not only a chore, but it's also error prone. If, at some point, one of those values needs to be changed, your best option is probably to find and replace all the things. But on a project that's large enough, this is dangerous. Chrome now supports CSS custom properties, sometimes referred to as CSS variables, allowing you to define property values in the CSS without a preprocessor. Once defined, you can use the var function to reference these custom properties anywhere in the document. One of the more powerful features of custom properties is the ability to define or change them wherever you want. For example, you could define a variable in a media query, or use JavaScript to change it. You simply can't do that with a preprocessor. While CSS custom properties just landed in Chrome 49, it's already available in Firefox 42, Safari 91, iOS Safari 93. So check it out. One of the cool features of service workers is the ability to cache pages, ensuring that your page loads fast, even on slow or non-existent networks. But what about the case where you need to send something to the server? In the past, we'd probably use on before unload to prevent the user from leaving the page before we finish the send. And if there was no network connection, hopefully we'd fail gracefully. But graceful is hard. The new Background Sync API improves network reliability by allowing service workers to schedule a one-off sync of the user's local changes when the device next connects to the network. Even if the page isn't open. To use Background Sync, we need to add a sync event listener to our service worker that calls a sync method. Our sync method should then return a promise indicating success or failure. If it fulfills, the sync is complete. But if it fails, the browser will try again later until it successfully sends the data. Then, to request a sync, we grab the service worker's registration in our app and request a sync. Check out this article for more details and try out Emojoy, a simple emoji-only chat thing. Every day, hundreds of millions of users rely on proxy browsers and various transcoding services to access the web and reduce their bandwidth enabling a faster browser experience. But the popularity of proxy browsers and transcoding services is an indicator that we are ignoring the high user demand for fast and light applications and pages. The new Save Data Client Hint Request Header available in Chrome, Opera, and Yandex browsers enables us to deliver fast and light applications to users who have opted in to data savings mode in their browser. By identifying this request header, your app should respond with a lighter version. For example, reduce the number of image bytes sent by sending fewer images or using higher compression ratios, or switch to on-demand loading of expensive content. These are just a few of the new features in Chrome 49 for developers. Be sure to check out the description below to get links to more details and learn about some of the other new features. If you haven't already, subscribe to our Chrome Developers YouTube channel to stay up to date with the latest news. I'm Pete LaPage, and as soon as Chrome 50 is released, I'll be right here to tell you what's new in Chrome.