HTML-in-Canvas is big news because it targets one of the worst tradeoffs in web development: canvas gives you powerful rendering, but once you draw your UI there, you lose a lot of normal browser behavior.
Chrome's experimental origin trial points toward a better model where a canvas app can draw real HTML while keeping browser-managed text, controls, focus, accessibility, and interaction.
vite
In Vite, a variable that starts with `VITE_` is public browser configuration, not a secret. Vite exposes it through `import.meta.env` and bundles it into client-side code at build time, so use `VITE_` for values like API base URLs, keep real secrets on the server, and only use `loadEnv()` when `.env` values need to shape `vite.config.*`.
javascript
Use the Web Locks API when the same web app can be open in multiple tabs and only one tab or worker should run a browser-side job at a time. It is a clean fit for sync jobs, cache refreshes, IndexedDB maintenance, and polling loops that should not stampede just because the user opened your app twice.
javascript
Use `Intl.DurationFormat` when your app needs labels like `1 hr, 4 min`, `1:04:09`, or localized equivalents. Keep the duration math in your code, pass a plain duration object to `new Intl.DurationFormat(locale, options).format(duration)`, and stop maintaining English-only string helpers for timers, dashboards, media lengths, and elapsed-time UI.
analytics
Fathom Analytics can start with one script tag. That is part of its charm. But a useful analytics setup still needs engineering judgment: where the script loads, how client-side routes become pageviews, which actions deserve events, and how to keep your own staging traffic out of production reports.
sql
Not every database problem deserves a robust database server.
Sometimes you just need a small, durable place to put local state: saved links, CLI cache rows, sync checkpoints, desktop app preferences, integration-test fixtures, or a tiny job queue that only one process owns.