Software development blog

It works on
my machine.
Let's ship it.

Guides, dev tools, and tutorials written by a working developer, for working developers.

12+
Years online
800+
Articles
1M+
Devs helped
// Latest
How to Use the Cookie Store API How to Use Uint8Array Base64 Helpers in JavaScript Why HTML-in-Canvas Is Big News How to Use Vite Environment Variables Without Leaking Secrets How to Use the Web Locks API to Stop Duplicate Browser Jobs How to Use Intl.DurationFormat How to Set Up Fathom Analytics in Your Web Apps Use Node's Built-In SQLite For Local App Features Build a Chrome Extension That Saves Text Snippets From Any Page How to Use UUIDv7 in PostgreSQL 18 How To Prepare Your Web App For Chrome’s Two-Week Release Cycle How To Try Node.js 26 Temporal Without Breaking Your Date Code IBM launches an AI platform called Bob GitHub Copilot's New Pricing Model Has Got Some Developers Worried Why AI-Assisted Development Needs Video Receipts What actually went down with Claude Mythos How to Use the Cookie Store API How to Use Uint8Array Base64 Helpers in JavaScript Why HTML-in-Canvas Is Big News How to Use Vite Environment Variables Without Leaking Secrets How to Use the Web Locks API to Stop Duplicate Browser Jobs How to Use Intl.DurationFormat How to Set Up Fathom Analytics in Your Web Apps Use Node's Built-In SQLite For Local App Features Build a Chrome Extension That Saves Text Snippets From Any Page How to Use UUIDv7 in PostgreSQL 18 How To Prepare Your Web App For Chrome’s Two-Week Release Cycle How To Try Node.js 26 Temporal Without Breaking Your Date Code IBM launches an AI platform called Bob GitHub Copilot's New Pricing Model Has Got Some Developers Worried Why AI-Assisted Development Needs Video Receipts What actually went down with Claude Mythos

Latest Articles

Browse all
The Cookie Store API is the cleaner way to work with script-visible browser cookies. It gives you promise-based reads, object-shaped writes, deletes, and change events instead of forcing you to parse and assign `document.cookie` strings.
JavaScript now has native `Uint8Array` helpers for converting bytes to and from Base64 and hex. Use them when your data is actually bytes: file chunks, image payloads, cryptographic output, compact URL tokens, or binary API responses. They are cleaner than `atob()` and `btoa()` because they work with `Uint8Array` directly.
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.

Developer Tools

All tools

Browse by Topic

// Color Theme

Custom accent
Pick any color
for the accent