How Baseline helps you ship less JavaScript
Jad Joubran gives a practical method for auditing package.json: which libraries can be dropped today because the browser does the same job natively. The piece explains Baseline's three states — limited availability, newly available, and widely available — and shows how to use them as a measure instead of a feeling. The gap between the claim that something needs a library and the fact that the browser already does it closes faster than most projects track.
Source
How Baseline Can Help You Ship Less JavaScriptSmashing Magazine · Original published August 7, 2026
Jad Joubran took a typical package.json and walked through it with Baseline in hand. The outcome is between 60 and 90 kilobytes, measured after compression, that can come out of an average mid-sized application without losing functionality. The piece is not a wish list but a check with numbers.
Internationalization, the easiest 14 kilobytes
The gain is largest here and the risk smallest, because nearly everything in this group is already widely available.
timeago.js, 1 kilobyte, replaced byIntl.RelativeTimeFormatpluralize, 2.3 kilobytes, replaced byIntl.PluralRulesnumeral, 3.9 kilobytes, replaced byIntl.NumberFormathumanize-duration, 6.6 kilobytes, replaced byIntl.DurationFormat, which is only newly available rather than widely- helper functions for lists, replaced by
Intl.ListFormat
HTTP clients, 17 kilobytes
axios goes out, and the built-in fetch and AbortController come in, both widely available.
Account for the differences, though. fetch does not reject on HTTP errors, and it has no interceptors, retries, or upload progress. If you need any of that, you write a thin wrapper — still far lighter than the whole library.
Interface elements, 24 kilobytes
This group pays off best, because the dialog element and the Popover API together delete three to four packages at once.
- Modal libraries, replaced by the dialog element
tippy.js, 14 kilobytes, replaced by the Popover API with CSS anchoringfocus-trap, 6.6 kilobytes, unnecessary because focus containment is built into dialogbody-scroll-lock, 1.3 kilobytes, replaced by one CSS rule that hides overflow while the modal is open
Lodash, 8 kilobytes and up
lodash.clonedeep, replaced bystructuredClonelodash.groupby, replaced byObject.groupBy- set operations, replaced by built-in methods such as union and intersection
When not to drop: the Temporal case
Temporal reached the final stage and is part of the ES2026 standard, so the temptation is to switch immediately. Its polyfill weighs 44 kilobytes after compression, though — more than the libraries it would replace. Wait for stable support in Safari and entry into Baseline. This is a useful reminder that standardized and production-ready are not the same thing.
Three questions before you delete
- Is the replacement safe by Baseline for your audience — not in general, but for the actual visitors in your analytics?
- What does the replacement really cost, counting polyfills, support checks, and testing time?
- Does the built-in feature cover your real use case, or only the one from the documentation example?
Tools for checking
npm ls--omit=dev--depth=0 lists production dependencies- Bundlephobia shows the size of an individual package
source-map-explorerorvite-bundle-visualizershow the real share of the shipped bundle- webstatus.dev and MDN are where you check Baseline status
- the
web-featurespackage makes programmatic checks possible, which is useful in continuous integration
Related

Safari 27.0 ships an MCP server, so a coding agent can drive the browser itself
WebKit published the feature list on September 17, 2026, and it is the longest the team has written: 83 features, up from 58 at the first beta in June, and 844 quality fixes against the 525 announced at WWDC. The headline for anyone who builds with a coding agent is the Safari MCP server, which hands the agent the DOM, network requests, screenshots and console output from a real Safari window. Customizable Select turns the real select element into something you can fully restyle, and scroll anchoring stops the page from jumping when content loads in above what you are reading.
WebKit Blogverified
Safari Technology Preview 252 adds named-feature() and lets SVG reach a filter in another file
The preview build came out on September 11, 2026 and covers WebKit changes between 319252@main and 320112@main. Eleven features are new, and two of them extend the same job: how a stylesheet, and then a script, finds out what the engine underneath can do. The named-feature() function asks about a behavior that has no syntax of its own, and the registry behind it holds exactly two entries today. SVG also gained external resources, so the url() reference can finally point at a filter, mask or gradient stored in another document.
WebKitverified
Interop 2027 proposals close on September 23, and untested ideas do not qualify
The call for Interop 2027 Focus Area proposals opened on September 3, 2026 and closes on September 23, 2026. Proposals are filed as issues on the web-platform-tests/interop repository, and two conditions decide almost everything: the technology must already have a mature standard, and it must be testable, because the test results are what the dashboard scores. Anything that fails the second condition is steered toward an Interop Investigation instead. Twenty days is the whole window, and the evidence a good proposal needs takes longer than an evening to assemble.
WebKitverified
