 There are two new APIs that allow the declarative shadow DOM to be used from JavaScript. You can use streams and web sockets. View transitions get a little bit better, and there's plenty more. I'm Pete LaPage. Let's dive in and see what's new for developers in Chrome 124. There are two new APIs that allow the declarative shadow DOM to be used from JavaScript. Set HTML unsafe is similar to inner HTML. It lets you set the HTML of an element to the string provided. This is really helpful for when you've got some HTML that includes a declarative shadow DOM like this. If you just use inner HTML, the browser won't parse it properly, and there's no shadow DOM. But with set HTML unsafe, our shadow DOM is created, and the element is parsed as we expect it to be. The other API is parse HTML unsafe. It works similarly to DOM parser dot parse from string. Both of these APIs are unsafe, which means they don't do any input sanitization, so you'll want to make sure that whatever you feed them is safe. Finally, both of these APIs are already supported in the latest version of Firefox and Safari, adding to baseline 2024. Web sockets are a great way to send data back and forth between the user's browser and the server, without having to rely on polling. This is great for apps where you need to deal with data as soon as it comes in. But what happens if the data arrives faster than what you can handle? That's called back pressure, and it can cause some serious headaches for you. Unfortunately, the WebSocket API doesn't have a nice way to deal with back pressure. The WebSocket Stream API combines the power of streams with WebSockets, which means back pressure becomes way easier to handle. Start by constructing a new WebSocket Stream and passing it the URL of the WebSocket server. Next, wait for the connection to be opened, which returns a readable stream and a writable stream. By calling readablestream.getReader, you get a readablestream default reader from which you can then read the data from. To write data, call writablestream.getWriter, which gives you a writable stream default writer so that you can then write data to that. I'm excited about the ViewTransition API, and there are two new APIs that have landed that help with that. The PageSwap event is fired on a document's window object when a navigation will replace the document with a new document. And DocumentRenderBlocking enables you to block the rendering of a document until all of the critical content has been parsed, ensuring a consistent first paint across all browsers. Of course, there's plenty more. Disallow return to opener hints to the browser that it shouldn't show a return to opener button in the picture-in-picture window. Keyboard-focusable scroll containers improve accessibility by making scroll containers focusable using sequential focus navigation. And Universal Install allows users to install any page, even those that do not meet the current PWA criteria. All the details, including links, docs, and specs, are in the post linked in the description. Hit the subscribe button now so that you don't miss any of the latest Chrome DevTools videos, the CSS podcast, and more. I'm Pete LaPage, and as soon as Chrome 125 is released, we'll be right here to tell you what's new in Chrome.