975: What’s Missing From the Web Platform?

## Document Notes
## Highlights
- **Better Browser UI Primitives**
- Browser UI primitives often exist but are unusable because they lack styling and flexibility.
- Customizable primitives (like select) let developers keep accessibility while controlling presentation.
Transcript:
Wes Bos
Yeah. All right. So the first one we have here is better primitives in the DOM, right? So what that means is that like we have select, you've got like radio checkboxes, you've got a date picker, things like that. But typically nobody uses those primitives aside from maybe input type of text and input type of email and and then past that everybody's npm installing something and using a whole Bunch of javascript and that's because like the the primitives suck like the input type of date sucks right that's not a good experience to be able to do it you can't style it how you want You can't have full control over it so the the platform knows about this and they've been working on it. And the first big one we've had in terms of a very good primitive is the customizable select. And what that allows you to do now is you can now create a dropdown with a select element, but you have full control over all of the CSS, what it looks like, all of that great stuff without Having to give up any of the downsides of like accessibility and keyboard control, things like that, as well as like, you don't have to install a whole bunch of stuff, which is the customizable Select is absolutely awesome. Huge improvement. Like this is almost like, like moving into like, like headless UI as well, meaning that like headless UI is the browser will bring the functionality or your JavaScript library brings The functionality and you bring the divs, you bring the CSS, and you can sort of render it out and add whatever divs or spans or anything you want inside of there. ([Time 0:02:25](https://share.snipd.com/snip/f0bc652b-e7b0-4251-ab25-943d3c8939ca))
- **Prefer Stylable Native Primitives**
- Use native primitives when they offer accessibility and reduce JS, but demand they be fully stylable.
- Prefer headless-like primitives so you can supply HTML/CSS while the platform handles behavior.
Transcript:
Wes Bos
So what that means is that like we have select, you've got like radio checkboxes, you've got a date picker, things like that. But typically nobody uses those primitives aside from maybe input type of text and input type of email and and then past that everybody's npm installing something and using a whole Bunch of javascript and that's because like the the primitives suck like the input type of date sucks right that's not a good experience to be able to do it you can't style it how you want You can't have full control over it so the the platform knows about this and they've been working on it. And the first big one we've had in terms of a very good primitive is the customizable select. And what that allows you to do now is you can now create a dropdown with a select element, but you have full control over all of the CSS, what it looks like, all of that great stuff without Having to give up any of the downsides of like accessibility and keyboard control, things like that, as well as like, you don't have to install a whole bunch of stuff, which is the customizable Select is absolutely awesome. Huge improvement. Like this is almost like, like moving into like, like headless UI as well, meaning that like headless UI is the browser will bring the functionality or your JavaScript library brings The functionality and you bring the divs, you bring the CSS, and you can sort of render it out and add whatever divs or spans or anything you want inside of there. Now, that's great. And now they're working on like multi-select as well as combo box, you know, be able to like filter find people drop down and then a lot of people are saying like what other inputs do we Need like date picker is the big one so they are working on combo box i i didn't catch that yeah combo boxes is being worked on right now which is huge because you you want to be able to like Filter um and select multiples you know and and uh select the three tags from this list you want to filter and select the items and have a list of the tags that you've selected.
Scott Tolinski
Yeah, I'm always looking at open UI for ideas for a lot of these things because it's like a W3C community group where they're researching just UI elements and in what could be and it's A good place to to list through the kind of things that we we would need but yeah I I think that the first one you have here is date picker yeah we have a date picker it's questionable I don't I I use it when I'm lazy I'll say that I'll use the date picker when I'm lazy but it ultimately isn't as functional or as useful as other, you know, JavaScript based date pickers. So, yeah, to me, I think that there's just a major opportunity there to improve that. Make it stylable to like, come on, all this stuff. I don't feel I feel like nothing should be added that can't be stylable.
Wes Bos
No, I don't think anything will ever be added that can't be styled like any longer right really yeah those days those days have passed if you're if you're making any new primitives to To the browser then you got to be able to fully control it you got to be able to render out the different parts of it you can't just like write video tag and then that's it, right? You should be able to have access to all of the like a default UI. That's another a lot of people were saying that as well as like have good default UI. That's nice. But also give us full control over these. So I don't think we'll ever see a date picker. ([Time 0:02:31](https://share.snipd.com/snip/fdfd0f3d-f314-45ca-8dae-19c5f771302f))
- **Primitives As Headless Building Blocks**
- New primitives are meant as headless building blocks, not finished widgets you always use as-is.
- Libraries like ShadCN will adopt these primitives to minimize JavaScript and ease styling.
Transcript:
Wes Bos
No, I don't think anything will ever be added that can't be styled like any longer right really yeah those days those days have passed if you're if you're making any new primitives to To the browser then you got to be able to fully control it you got to be able to render out the different parts of it you can't just like write video tag and then that's it, right? You should be able to have access to all of the like a default UI. That's another a lot of people were saying that as well as like have good default UI. That's nice. But also give us full control over these. So I don't think we'll ever see a date picker. And I'll tell you why, because a date picker is so complex, you you have range inputs you want it sometimes you want to be able to put things on the different days like maybe you want to put Prices for like a flight or airbnb you want to be able to not allow selecting of certain ones it is just far too complex for that type of thing so i don't think we'll ever see a date picker And in that case if you have a complex date picker, that's something that you probably should still reach for an external UI for.
Scott Tolinski
Yeah. Yeah. I think that probably tracks. It is one of those things that feels like you need more often than not. And then every single time you're doing it, it's just, you know. Yeah.
Wes Bos
Yeah. Yeah. There's good ones out there. I think the idea with a lot of these primitives that we're getting, you know, like customizable select accordions, popover anchor, a lot of these primitives are not meant to be like, You'll just use this thing straight. It's like, here is a primitive, which you can then customize yourself or like Shad CN is going to use these primitives in there. And that means they're going to need a lot less JavaScript in order to make it work. And you can simply just pop it in. ([Time 0:05:23](https://share.snipd.com/snip/3145eae8-b08b-4cfb-9a95-5663db081375))
- **Ask For Common Form Controls**
- Push for native tab, file-upload, and toggle controls to avoid hacks and accessibility issues.
- Demand cross-browser implementations so developers don't hide inputs or build complex JS workarounds.
Transcript:
Scott Tolinski
Yeah, I have tabs on here. Like, bro, tabs have been like the most common one of the most common ui elements of all time and how do we not have a tab html system i mean we have accordions details and stuff like that They could do anything with tabs i i feel like this is just long overdue personally can't you do that with an accordion or like like a details i mean no not not to the degree that you would Want to like the thing is is that you you'd want it to just function like tabs like how they function and you don't want to have to hack it you don't have to hack it and so for me i i feel like
Wes Bos
This is the obvious one but uh another one for me is like a file upload at least being able to style it and if it's like a like an image you could preview it um anytime you want to like preview An image that somebody has uploaded you gotta you gotta get the file reader api out you gotta read that thing into like like a binary blob um and then you gotta paint that thing you either Then convert that blob into like a url which you can then display as like an image, or you can paint that thing to a canvas, and then you can resize it based off of that. But so many times I've just wanted a simple file upload. And then I want like, like a half decent being able to style it.
Scott Tolinski
The default styling for the default file upload is one of the worst things on the way. I've made so many drop zone components for dropping files and stuff like that. And it's like, I always hate having to do that without an actual JavaScript-based component. I actually do have something that is just a CSS version of that in my graffiti UI library. That is like a drop zone, nicely styled, but it doesn't have the previews and stuff like that. So I can totally see. One that I have here is toggles. Yeah, we have a checkbox. And yes, Safari does have toggles. Just add it to Chrome, add it to Firefox, like, do it already. Because the toggle is such ubiquitous standard ui element at this point the fact that safari is the only one that has added it as an option uh to be default styled and stuff just do it make
Wes Bos
It stylable toggles come on yeah this is so key because like like what are you going to do otherwise you're going to make it not accessible right You're going to put a whole bunch of divs Over top of the thing. You're going to hide the actual checkbox and you got to spend a whole bunch of extra work trying to get that thing to be accessible or you're going to install some third party component. Right. Toggle. Yeah. It's such a good primitive that we need to have. We have progress. We have the progress bar. You're almost there, right? Yeah.
Scott Tolinski
Yeah, all of these ones. And again, Safari did it. ([Time 0:07:18](https://share.snipd.com/snip/41a4c82b-09d5-4105-a586-56e33bb7e54b))
- **Drag-And-Drop Is Too Fragmented**
- Native drag-and-drop APIs exist but they expose too many UX choices, making practical behavior inconsistent.
- Complex behaviors (move vs copy, ghosting, reflow) still require libraries to handle edge cases well.
Transcript:
Scott Tolinski
I also have native drag and drop that doesn't suck. You know, the drag and drop just kind of aesthetic, like ghosts it out in the way that native drag and drop works. Like, it's another one where it just feels half-assed in terms of the implementation not matching how people actually want to use drag and drop in real life. So, you know, it's fine.
Wes Bos
It's never going to happen. It's never going to happen. If you take a look at Atlassian's pragmatic drag and drop, we had the developer on the show that drag and drop is such a can of worms that I think they did the right thing in that they gave Us the correct browser primitives for draggable, droppable. They gave us the correct primitives for like drop zone, where you're allowed to drop things. They gave us all of the JavaScript events for that type of thing. But there are so many things like what happens when you start dragging it? Does it leave the old thing behind? Yeah. And then ghost it out? Or does it immediately like move up? Like if you're dragging an item from a list, should immediately take it out of there? And what happens when you drop it? Does it make a copy of it? What? There's so much to it that I think that this is absolutely one of those things where you need to reach for a library. ([Time 0:10:23](https://share.snipd.com/snip/def3cc90-f3ca-47c3-b065-f01f52f8a887))
- **Type Syntax Needs Careful Design**
- Type annotations in the browser are debated; proposals aim to let browsers ignore types while tooling uses them.
- Browsers will move cautiously to avoid long-term web platform problems despite TypeScript's dominance.
Transcript:
Wes Bos
Terms of syntax for the language, a lot of people said they want type annotations, which is they basically just want TypeScript in JavaScript. And there are kind of like two movements for that already, right? There is a proposal for something called types as comments, meaning that you would be able to put your TypeScript code in the browser, but the browser would simply just ignore it, meaning That it would treat the syntax of the added TypeScript syntax, it would just treat that as a comment, meaning it would then ignore it. So that's being worked on. Whether we'll ever get that or not remains to be seen, but it seems to be that the browser will not care about that or will not use any of that information. What do you think? Should TypeScript be added to it? Like it's in Node already, right? You can run.ts files in Node with no problem, install nothing, and it just works.
Scott Tolinski
I feel like we are so far beyond the point of where Typecript was a question mark i have not written non-typescript in just about i don't know when the last time i wrote probably like seven Eight years oh it has been it's been so long since i've made a dot js file i it's it's actually wild because there was a point during this i mean this podcast has been run along enough that Uh typescript was uh competing with what was it flow and with reason yeah uh there i mean there was there was no like guarantee that typescript is going to become the thing but typescript Is not just the thing to me typescript is javascript at this point i i don't i don't see it any other way and i would be shocked if people are out there writing javascript today like straight Up shocked um especially because now it's so much easier to just run typescript whether you have bun or anything here yeah so like at this point just do it yeah it's got to be it yeah this
Wes Bos
Is one of those things where i i don't mind them taking their time because it's not that big of a pain in my butt to run typescript in the browser the the of times I have to like, oh, I can't Copy paste this into my like terminal. Maybe that's the thing is I just want Chrome dev tools to be able to strip it out for me when I sometimes paste TypeScript into that. But there is a world where TypeScript is not it and type JavaScript looks like something else. So taking a look at that whole landscape, not necessarily like what it does, because this is simply just syntax, but looking at what are the downsides to TypeScript, and maybe we could Make some improved syntax and allow that. Yeah.
Scott Tolinski
Why are we thinking about downsides? Just do it.
Wes Bos
No, that's the thing is that if you, everybody said that with jQuery as well, you know, just, just add jQuery to the browser. And they took their time and they figured out like, like what actually works for the long-term health of the web. ([Time 0:12:03](https://share.snipd.com/snip/b079c611-f748-417d-b079-ede08d31fd86))
- **Use A Pipe Operator**
- Use a pipe operator to simplify chained function transformations and improve readability.
- Prefer syntactic solutions over deeply nested higher-order function wrappers when composing operations.
Transcript:
Wes Bos
And you simply just want to take the output of something and then pipe that into something else. And and right now what you have to do is you have to wrap those functions. So you you end up with this like sort of blooming onion of functions where if you want to know what it does, you go to the middle and then you start like like stepping it back until you you Reach the outsides. A pipe operator would be so nice to be able to just like run a function, take the output of that and immediately pipe that into the next function. And it's been a proposal for many, many years. I'm not sure we'll ever get it, but I would love it.
Scott Tolinski
Yeah, it is one of those ones that's just been hanging around. It does feel like some of these things just sit in limbo forever. And I mean, again, I the entire process of that needs to take time for the reasons we've already outlined. So, yeah, it's something I would absolutely take.
Wes Bos
It's stage two and was last updated three years ago.
Scott Tolinski
Oh, okay, cool. So, wow, three years. Not looking great.
Wes Bos
Yeah. Not looking great.
Scott Tolinski
Yeah, just in limbo, yeah. Next ([Time 0:15:30](https://share.snipd.com/snip/c9fa8dbc-42f6-4f81-9cb9-1a88fe53730e))
- **Standardize Cookie Consent APIs**
- Standardize cookie-consent APIs so browsers can remember and enforce user choices.
- Implement built-in consent storage to reduce annoying, inconsistent site banners and dark patterns.
Transcript:
Wes Bos
One API, this is not something I want, but something that was really cool is I just started up Riverside here with Scott. And he's like, yeah, your video is a little choppy. And then Riverside popped up this little thing that says, hey, plug your computer in and you'll get better perf, right? Like browsers will sometimes throttle things in the browsers if you're on battery. And as soon as I plugged it in to power, that little thing went away. And that's the navigator.getBattery API. And that's a beautiful, beautiful use case of that API. And those are the types of things where we used to complain that native had a lot of these APIs. And now that's just in a website. That works great. But things we actually want. Please, oh, please, oh, please give me an api for doing cookie banners i am so sick of the web you visit any website you're blasted with a cookie banner and like they never remember what You want you know like accept all cookies or whatever and you got to sit there and think about what do i want i don't care get it out of my face i know that there's browser like extensions You can like you can ignore them and all that yeah we need a set of apis for opting in to cookies opting consent integration what people have consented to saving that in the actual browser We need those apis like yesterday like yesterday because the web is a mess with cookie banners.
Scott Tolinski
Yeah, and so many of the cookie banners are coded poorly, or they feel like they're like dark patterns all over the place. It's like either, yes, I want the browser to accept all my cookies, or no, this is dangerous, you don't accept it. So many people are like, the way that they present these banners to you are not nice. I'll just say that they're not nice for the user in many ways. So yes, standardizing, I feel like at this point needs to have happened.
Wes Bos
You know, it's a nice website that doesn't absolutely blast you in the face with cookie banners.
Scott Tolinski
Oh, I got a century. Yeah. Oh, yeah.
Wes Bos
This century at century.io forward slash syntax is they got rid of all of their cookies on their website and they had like a massive project to go through like something as little as embedding A youtube video requires a cookie banner it doesn't mean that you have to get rid of all cookies right like like a login cookie a recession cookie those are fine but like a cookie that tracks You across web those you have to actually opt into. So Sentry went on this huge thing to remove them from their platform entirely, which was absolutely awesome. ([Time 0:16:38](https://share.snipd.com/snip/bf1db552-649a-47e8-b2d7-a32209c84126))
- **Browser-Based Identity Potential**
- Browser-held login state and passkeys hint at a future where identity can be reused across sites.
- Technical and privacy challenges remain, but unified identity in the browser could simplify auth UX.
Transcript:
Scott Tolinski
Like it should be easy enough to use that state of login, whether it is via passkey or whatever, to use that login state on an app. Now, I get it. A lot of people are going to hate this idea because you want to have the individual app have the login and everything like that. But it does feel like there has to be some sort of way to use identity easy on your site and not have to reinvent the auth wheel on every single website. Yeah, it just feels like there has to be some way to do that.
Wes Bos
Yeah, some sort of like passkey was not entirely that right.? But passkey was an attempt to make the pain of logging in much easier. And I love it when it works. Man, logging into GitHub with a passkey, absolutely love it, right? But I think at the end of the day, this is going to be a phone in your pocket thing. People are going to be able to sign in with the phone in their pocket or scan your retina or something like that yeah like why can't like like face id be the thing i guess you're almost there
Scott Tolinski
With like signing in with apple right you're yeah sure but it's still at the end of the day what it's doing is it's creating a record in the database with the email address and whatever And then that is controlled. Like, I don't know. Yeah. I don't know. I, again, idealistic Scott says, hey, we're reinventing the wheel so much here. Um, yeah. One ([Time 0:20:06](https://share.snipd.com/snip/4e2115a4-4b45-4627-8e41-c17f40fe9171))
- **Enable Selecting Elements By Text**
- Add selector APIs that can find elements by visible text to simplify automation and agent-driven interactions.
- Reintroduce XPath-like text queries or a native getElementByText to avoid fragile workarounds.
Transcript:
Wes Bos
Thing I have wanted for the longest time, and I've actually written this function myself is get element by text, meaning that like you can select an element based on its IDs or attributes Or, or, uh, on the children it has or if it has a specific thing. But you cannot select an element based on the text that is inside of it, either in JavaScript or in CSS. And I would love, love, love, especially with a lot of these agentic browser things, you know, MCP server with Playwright. You can select an element by text. I would love a native API for that. I don't know if we'll ever get it. It was doable with XPath before we had, not before we had document.queryselector all, not before we had document.get element by ID, we had this thing called XPath, which is a way for You to select elements based on their XML indentation. And there was something in there that would allow you to select based on the actual text of the element. ([Time 0:21:33](https://share.snipd.com/snip/c1c3ef6a-79f5-4d3e-96d9-a60e4c1a09ab))
- **Native Reactive Templates**
- Native reactive templating in the DOM would let variables update the DOM without frameworks.
- Simple reactivity primitives (signals/templates) could make quick vanilla apps far easier to build.
Transcript:
Wes Bos
All right. This is probably high on my list with browser primitives. And this is just native reactive templates, meaning that you have a variable, you put that variable in the DOM somewhere. And when that variable updates, so does the DOM, right? Some sort of templating, some sort of reactive variables, whether that is with like signals or whatever they choose to do, I would absolutely love something because I myself, if I'm Coding up something very quickly in vanilla JavaScript, I'll always just make some sort of like a re-render string where you watch the variable to change. It'd be great to have that as a browser primitive. ([Time 0:24:09](https://share.snipd.com/snip/b5dbd0cb-9301-482d-998b-84e65f2061ff))
- **Built-In Sync And Local DBs**
- A sync protocol or CRDT primitive in the platform would simplify real-time collaboration and offline-first apps.
- Browsers need better local database and sync primitives beyond IndexedDB for reliable local-first patterns.
Transcript:
Scott Tolinski
Sync protocol. Wouldn't it be great if you had some kind of CRDT sync setup that you could just access like fetch? Now, granted, there's got to be a server involved. So you'd have to have some sort of sync server. But like, again, this is never going to happen, but like a primitive for accessing sync with a CRDT or even creating that server.
Wes Bos
Like, I mean, we have WebSockets, right?
Scott Tolinski
That's what I'm saying. Something along a protocol like WebSockets or even how about this in terms of the same world of a local first or whatever, just databases that don't suck built into the browser.
Wes Bos
Because what do we have? We've got like local storage, not really database, got more of like a key value string store. You've got index DB, right? Yeah. There's implementations of SQLite, but you want something that's a little better.
Scott Tolinski
Yeah. Yeah. Something along the lines of what they're doing with like Postgres in in Wasm, you know? ([Time 0:24:50](https://share.snipd.com/snip/ef328d70-93bc-4b41-9767-f48d2907da5d))
- **Prefer Content-Visibility Over Manual Virtualization**
- Use content-visibility CSS to defer rendering large offscreen content but test carefully for correctness.
- Rely on the browser's rendering heuristics instead of manual virtualization when possible to avoid search and accessibility breakage.
Transcript:
Wes Bos
What do you mean by this?
Scott Tolinski
Yeah. Like virtualized lists, you know, all the virtualized list solutions, especially in like react or react virtualize or whatever that was. Virtualization for people don't know is that it renders you could you could have a wrapper that only like if you have a list of 100 items in that wrapper is only like five items visible The additional 100 items or 95 items are not going to render basically saving your browser from having to do that work the problem is a lot of these virtualization libraries then break Search. And then if you do Command-F on the page, it doesn't find the item because it's not being loaded. So something that controls rendering in that way that still doesn't break Command-F, those types of things.
Wes Bos
Content visibility in CSS is supposed to do this. So it controls whether an element renders its contents at all along with forcing a strong set of containment, allowing agents to potentially omit large swatches of layout and rendering Work until it becomes needed. Meaning that like you have a list of 20,000 list items. You can put a content visibility property on there and then the browser will defer rendering it until it thinks it actually needs it. This is one of those things where I don't think we need APIs for this. I just think that like I've had problems with content visibility where I took it off and my performance drastically increased. It was way better, right? I think that browsers just need to sort this out and then we can use as much HTML and you figure it out, right? You're the rendering agent. Yeah.
Scott Tolinski
Why am I figuring it? ([Time 0:25:54](https://share.snipd.com/snip/d7a062e1-e0cb-4294-bc71-0d83ae0b7193))
- **Add PUT/PATCH/DELETE To Forms**
- Support HTTP verbs (PUT, PATCH, DELETE) on native HTML forms to enable progressive-enhanced RESTful flows.
- Add these verbs so non-JS forms can submit edits and deletes without creating separate endpoints.
Transcript:
Wes Bos
Ollie Williams, Hype Dev on Twitter says, we want put, patch, and delete on form. So form elements in the browser can only do two things, get or post, right? And if you're building an API, you should be using the rest of those, which is put, patch, delete. I think there's a couple other ones. Options. That's a stumped question for later. But if you're trying to build your app in a way that will ideally work without JavaScript or you're trying to build on like web standards and then using JavaScript to like progressively Enhance if you're updating an item and you want to like use a patch or like a put or if you're deleting something and you want to simply just have a button that deletes that item via a form Submission you're kind of out of luck you got to like you got to put that into a post right and then you got to put it on a different endpoint of like delete item so that would be that'd be pretty
Scott Tolinski
Nice as well yeah i'll take that i never understood why we have those verbs and they're not just all there that's ([Time 0:27:41](https://share.snipd.com/snip/916c1112-2cda-4d1d-a25a-d2c83d0c5ef6))
- **Expose Character Text Metrics**
- Expose text-metrics APIs to measure individual character bounding boxes to simplify advanced layouts and animations.
- Avoid wrapping each character in spans by providing native measurement capabilities.
Transcript:
Wes Bos
A great question like why why did they invent those as the browser or not they didn't invent it as a browser they built it as part of like networking stack yeah but why did we never implement Those in it another one from carl snorkel tv says text metrics get bounding box of individual characters Being able to measure the actual size of it. And the text box trim has been a fantastic addition to CSS. Meaning that if you've ever had that weird thing where your text is a certain height, but like the text is at the bottom of like the line height and it's not centered, text box trim takes Care of so many of those use cases, which honestly is probably better than having to measure characters. But there still are, especially in the animation world, there's still lots of cases where you would want to measure how big a letter is. ([Time 0:28:42](https://share.snipd.com/snip/c9efc145-e92b-40e9-be7c-15687ba15309))
- **Device APIs Need Cross-Browser Support**
- Lower-level device APIs (Bluetooth, serial, NFC) exist but lack broad cross-browser support, limiting web-to-device use cases.
- Wider adoption across engines would enable firmware updates and hardware control directly from websites.
Transcript:
Wes Bos
There is a bluetooth and a web serial api which allows you to talk directly over obviously bluetooth or us. And this is super handy for things like programming microcontrollers or being able to update the firmware on your headphones without having to download like some sketchy like install Thing just to simply update the firmware. Right. And that's why a lot a lot of devices, if you want to update the firmware, you don't download an app, You don't visit a website. You get the iPhone app, right? And the iPhone app is going to be able to do it. So there are Bluetooth and web serial, fantastic APIs, but they have not made their way into standards. They've not made their way. Safari says no way. Firefox hasn't implemented it. So that would be really nice to have control over those things. Sockets, we have web sockets, right? And this is a security thing as well. You're not going to be able to access sockets directly. ([Time 0:29:55](https://share.snipd.com/snip/ace4c699-094b-4b81-b38a-cd7b5bee5ac9))
- **Create A CSS Strict Mode**
- Introduce a CSS strict mode to allow breaking changes and remove legacy cruft safely.
- Offer opt-in modern defaults (e.g., border-box) so new projects avoid historical CSS quirks.
Transcript:
Wes Bos
Nick Williams says, a way to specify speed, example, pixels a second for transition animations rather than just a duration. That's that's really cool, right? Because if you have an animation, you tell it, I don't know, 100 seconds or 300 milliseconds, 200 milliseconds, but you don't know how far that is actually going. If you want all of your if you want them all to feel the same way same thing where like if you like cancel a transition halfway through um it would be cool to get the physics of that rather Than just break it in the middle of a bezier curve and then just reverse it from from there on out that would be sick in css yeah yeah yeah i agree i i don't know if i yeah if i i'm dying for that
Scott Tolinski
But yeah than Mary.
Wes Bos
CSS strict mode, there's a lot of baggage in CSS, right? How long has CSS been around for? A hundred years? So there's a hundred years of baggage in CSS. And there are a lot of weird oddities that you just kind of have to deal with because you can't break backwards compat of the web. But what if we could? In JavaScript, we did it, right? You just have like a use strict. You can pop at the top of your JavaScript file. Or if you simply just use an ES module, then that's considered strict mode. And all of the baggage of the weird web is gone. You break those APIs. ([Time 0:34:40](https://share.snipd.com/snip/3948d098-c416-47bf-92be-fcea562328b7))
- **Keep Multiple Browser Engines**
- A single dominant browser engine (Safari moving to Chromium) would harm competition and slow web innovation.
- Diverse engines keep the platform healthy, even if a single engine seems convenient.
Transcript:
Wes Bos
One for browsers. Christopher Van Houten says, I'd like to see Safari move to Chromium. You hear this a lot. A lot of people say, everybody just moved to Chromium. It would be so much easier for me. I'm going to tell you, you do not want that. We do not want a world where there is one browser engine as easy as it would make your life to be able to just run one engine and run everything and it runs absolutely everywhere you do not Want a single browser engine that's what's going to cause the web to stagnate that's going to cause a whole lot of a lot of pain you do need these things to compete i want ios safari to be
Scott Tolinski
To be bling that's it that's it yeah i don't know like ios safari is the dumbest one to debug and i have so many issues with it and there's so many like little things here and there with ios Safari you can get you can have normal safari on webkit keep the uh keep the variety going or whatever but like ios safari or just give me effing chrome with blink on ios please like yeah I'm so sick of of but give it to everybody though because otherwise like normies are not going to change their browser engine on ios so i just yeah just for my own personal uh sanity ([Time 0:36:26](https://share.snipd.com/snip/70b37b69-9f83-4d00-a5ea-a7f6d77099dc))
- **Design AI APIs For Local And Cloud Models**
- Native AI APIs should be designed slowly and support local device models alongside cloud options.
- Local models enable privacy, low-latency inference, and new UX like natural-language date inputs.
Transcript:
Wes Bos
Ai access as a native api um i'm gonna tell you and i actually had several calls with folks that work on on chrome and i don't think we need this yet yeah because i don't think that we have Figured out what these apis need look like. And if you rush these APIs out the door based on like what we need right now, which is like prompting and streaming back text into a chat, then these are the APIs where you just people are Just not going to use them because they're just these are not nearly as good as what we have.
Scott Tolinski
But that's what happened with web components.
Wes Bos
Yes. We do eventually need, I think, some sort of AI access in the browser that will allow you. And my idea is that eventually we're going to get to a spot where you will be able to use your computer's baked in model if you want to. Meaning that like hopefully in my ideal world, this API would be you can use the local AI that lives on the device or you can swap that out for a model that you load in yourself, kind of like Transformers.js. Maybe you load like, I don't know, a gig model into your application because it's well worth it for that. Or you can hit like an external API for that type of thing. One API that will be able to do do that. And then if you can access your your like the iOS model or your max model or whatever that is on there, then it becomes private. It becomes free, right? Yeah. The user's paying for it in their battery and their device, but it's it's it could be significantly faster. Like what happens when you can run inference on absolutely everything? What happens when it's extremely fast, where it doesn't take four or five mil, 100 milliseconds a second to come back? What happens when it's like an instant? That opens up a lot of possibilities.
Scott Tolinski
Yeah, really cool. I've been I've been thinking a lot about this kind of stuff lately. Yeah, for sure.
Wes Bos
Chrome is working on this. They have I'm in I'm in the beta that you can like test it out. There's like local AI models. And what it does is Chrome just downloads a small enough model and then it will run it on your machine and then you can just ask it for things. But it's slow. It's not very good. And it's at a spot now where people will go, cool demo, but I'm not actually going to use that because it's not very good. I'm just going to use the paid one. ([Time 0:37:47](https://share.snipd.com/snip/dd38f8b3-36d0-4828-ad6c-d895cc93c1a1))
- **Use AI For Robust Input Parsing**
- Use AI to parse messy user inputs (dates, postal codes, credit cards) to improve UX and validation.
- Prefer local models where possible to keep data private and responses fast.
Transcript:
Wes Bos
The date picker of the future will simply just be me typing in February 18th, three years ago, or the last 40 days starting from next Tuesday. You know, you'd be able to just type those in a natural language, have a model compute what that actually is, and then return to you some temporal durations that will match it.
Scott Tolinski
AGI is me entering my credit card expiration date in any gosh format that I want and having it just understand it. Oh, man.
Wes Bos
Let me tell you about postal codes inputs in Canada. Holy hell. So postal codes in Canada are like a letter, a number. I don't even know. But it's so obnoxious because, first of all, on iOS, you have to switch between every other letter. You have to switch between the keyboard and the number input. And sometimes they have to be capitals. And you generally put a space in between the first three and the second three numbers or digits. But sometimes you don't. And then like the validation on postal codes is a nightmare ([Time 0:40:18](https://share.snipd.com/snip/1451954a-2841-48d1-bc71-550dc0b5e783))
- **Bring Speech APIs To Server Runtimes**
- Add high-quality speech APIs to Node/Bun so servers can do convincing TTS and STT without external hacks.
- Allow loading better local models or connecting to chosen cloud models for superior voice experiences.
Transcript:
Wes Bos
Justin White says, I want the web speech API in Bun or Node. Yeah. I agree. I don't know that you want just like a straight up like that's that's what happened to chrome chrome implemented the web speech api yeah nobody uses it no because it sucks it sounds you Know yeah it's it's awful or like and we're talking both like text to speech and speech to text yeah and there's always going to be better models out there um so what we really need is yes You should be able to use like the sir voice built into the browser if you if you want, but you should also be able to load in additional models. And I think that this gets wrapped up in some sort of AI APIs that are built into the browser that let us optionally use the things that are available on the user's device.
Scott Tolinski
Yes. You know what? In that same regard, like give us good text to speech, I just did a text to speech server myself. And it's not a problem. I have a text to speech server running full time on my, my laptop. And anytime I need text to speech, whether it is through my agent setup or whatever, it just pings my laptop. It's got the voice. It's got the whatever. And it's like really, really good quality compared to any of the APIs that are in the browser. And it wasn't that hard to set up. It's like a Bonzi Buddy sounding. Right. And the voice, it's not like, what's the one that we, 11 Labs? It's not like 11 Labs good, but it's approaching that good. And it's it's way better than than a robot voice. I'll tell you that I love text to speech. I've been using text to speech so much with my setup that's generating. It's taking research topics for me and turning them into personalized podcasts and those types of things. And setting that text to speech up has been such a nice thing for me in my learning capabilities because I'm not reading anymore. I'm not using the built-in macOS one that also sucks. So, yeah, text-to Make it nice. ([Time 0:44:55](https://share.snipd.com/snip/3be1009d-e28d-477c-afed-e894f6d35eb0))