Sign up

Zach Leatherman

Not verified No WebSub updates Supports Webmention Valid

A web development blog written by @zachleat.

Author
Zach Leatherman
Fetched

Zach Leatherman Supports Webmention Valid
Text

“AI, make the website good”

Millions of Large-Language-Model-generated words have been spilled on craftsmanship in this gilded-age of software development. We now have agents to plan how code will be written, agents to write code, agents to review code, agents to orchestrate and dispatch tasks to ...

Zach Leatherman Supports Webmention Valid
Text

Icon Fall Web Component

I’ve been doing some spring/fall cleaning and found an unpublished follow-up component to <snow-fall> (a web component to “snow” on your website — which also happens to work with emoji too). Originally it was created as an easter egg for Blog Awesome (click on the Font Awesome flag in the very bottom of the footer) but others have wanted to use it for more things!

Presenting: <icon-fall>:

It’s in use on this page (if you are on my web site and not in a feed reader). You can also install it with npm install @zachleat/icon-fall.

It has options for count (attribute, number of icons) and a comma separated list of colors (via --icon-fall-colors custom property).

Zach Leatherman Supports Webmention Valid
Text

Table of Contents Web Component

…and another one.

This little web component has two modes: progressively enhance a hierarchy of server rendered <ol> or <ul> elements (or conveniently client render them for you if they don’t exist) to highlight which are currently visible in the viewport.

I pulled this code out of the table-of-contents.webc component from the WebC Tugboat starter project for standalone use.

You can configure a selector attribute to control the scope of the headings search. My site uses main :is(h2, h3) but the default is main :is(h2, h3, h4, h5, h6).

Installation

npm install @zachleat/table-of-contents

Some sample headings

Heading 3a

Heading 4 (via 3a)

Heading 3b

Heading 4 (via 3b)

Heading 3c

Zach Leatherman Supports Webmention Valid
Text

Solar Eclipse Toggle (a dark/light mode toggle Web Component)

In Trying out a Two-state Dark Mode Toggle I summarized the Two-state Dark and Light mode Toggle discussion as I experimented with a toggle in my personal website footer.

After launch, Curtis Wilcox left some good feedback to improve the accessibility of the component.

I decided to fold this into a reusable component so that I can benefit from this work on future websites (and you can use it too, I guess!). It’s called @zachleat/solar-eclipse-toggle and you can find it on GitHub or on npm now.

  • Demo
  • …or in the footer of this website.
  • …also in the footer on Speedlify.

My favorite parts about the component are that it shows an inert button pre-JS, incurs no CLS, is still functional when the (separate) CSS doesn’t load successfully ([hidden] for the win), and all strings are inserted from light DOM for good internationalization.

Hope it’s useful to others!

Zach Leatherman Supports Webmention Valid
Text

Trying out a Two-state Dark Mode Toggle

Lea Verou sparked some lovely discussions about dark/light mode toggles by asking a simple question: do these form controls need three options for two user-facing states? You have Dark mode (1). You have Light mode (2). You have System mode (inheriting your operating system ...

Zach Leatherman Supports Webmention Valid
Text

I was tired of building 474 separate pages for Open Graph Images

Prior blog post (if you want the full context): If I work really hard on my Open Graph Images, People will share my Blog Posts (2021 Aug) Here’s the gist: Open Graph images are those little pictures that show up when your site is shared on social media. […] Each individual ...

Zach Leatherman Supports Webmention Valid
Text

Use Speedlify2 to Continuously Measure Website Performance

speedlify.dev, now running Speedlify2. The year is 2020. Inspired by a lack of budget for a web performance monitoring tool, the original Speedlify project (Speedlify Classic) was shipped to continuously measure site performance. It ran Lighthouse against a predetermined li...

Zach Leatherman Supports Webmention Valid
Text

Am I neglecting my open source projects?

I have a lot of open source projects (of varying sizes and shapes). At time of writing, I’m currently maintaining ×78 npm packages. Of those, 22 are super lightweight zero-dependency custom elements a.k.a. 🚾 Web Components (love the future compatibility I get with very littl...

Zach Leatherman Supports Webmention Valid
Text

Back Build Awesome Pro and make it easier to build for the web!

The Build Awesome (11ty) Kickstarter (Final_FINAL_v2) is live! We’re trying to make it easier for anyone to build, publish, and maintain web sites!

You have to back the Kickstarter!

Zach Leatherman Supports Webmention Valid
Text

Collaborative Editing as Progressive Enhancement

We’re ramping up again to launch the Build Awesome (11ty) Kickstarter Final_FINAL_v2 on April 28, 2026 and in this post I make the case for a new web site builder can layer itself on top of your existing projects as a progressive enhancement. Infrastructure as progressive enhancement!

Zach Leatherman Supports Webmention Valid
Text

State of the Browser (2026) It’s 10PM: Do You Know Where Your JavaScript Is?

This talk was given at State of the Browser (2026). Check out the event talk page (which includes a talk transcript, too). We’ll talk about best practices to either reduce (or increase!) the JavaScript footprint on your web site to a sweet and very practical spot for best r...

Zach Leatherman Supports Webmention Valid
Text

AMA about Build Awesome, an Open Town Hall at the 11ty Meetup

Here I field any and all community questions about the Eleventy rebrand to Build Awesome.

Watch on YouTube or below:

Watch on YouTube: AMA about Build Awesome, an Open Town Hall at the 11ty Meetup

Related:

Zach Leatherman Supports Webmention Valid
Text

Eleventy is now Build Awesome

The Eleventy project is taking up the Awesome banner. To support the project, please sign up to get notified when our Kickstarter campaign launches!

Zach Leatherman Supports Webmention Valid
Text

An Official* Logo for HTML

*Not official. I was working on my slide deck for the upcoming State of the Browser conference and ran into what I would classify as a recurring issue: HTML needs a logo. There isn’t a broadly accepted official logo for (version-independent) HTML. There is a logo for HTML 5,...

Zach Leatherman Supports Webmention Valid
Text

How Eleventy Survived: Funding, Growth, and Open Source Reality

Eleventy started as a side project. Now it’s a critical infrastructure for thousands of websites. TL;DR: Open source isn’t broken. But the way we fund it often is. Let’s talk about what actually works. In this episode, we sit down with Zach Leatherman, creator of Eleventy (...

Zach Leatherman Supports Webmention Valid
Text

Eleventy, 2025 in Review

A look back at the 2025 highlights for the 11ty org and the Eleventy project!

It was another huge year for 11ty. We shipped 177 releases (73% more than 2024) across the full 11ty/* suite. We closed 804 issues (15% more than 2024). We reduced core’s dependency count by 28% and weight by 22%. More folks are building with Eleventy than ever: our year-over-year npm downloads (for only core) are up by 51%!

Zach Leatherman Supports Webmention Valid
Text

State of the Browser 2026

This is an event post. My individual talk page is here:

Screenshot image for https://screenshot.11ty.app/https%3A%2F%2F2026.stateofthebrowser.com%2Fspeaker%2Fzach-leatherman%2F/opengraph/

Get your tickets while they last!

Zach Leatherman Supports Webmention Valid
Text

No more tokens! Locking down npm Publish Workflows

With the recent spate of high profile npm security incidents involving compromised deployment workflows, I decided that it would be prudent to do a full inventory of my npm security footprint (especially for 11ty). Just in the last few months: November 2025: Shai Halud v2 ...

Zach Leatherman Supports Webmention Valid
Text

How to Hallucinate using Web Components

Say, you want the smooth convenience of consuming content that feels like it’s generated in real time without having to deal with the tradeoffs of a Large Language Model née Artificial Intelligence. Why not use animation? It’s the perfect metaphor for a Hollywood-esque venee...

Zach Leatherman Supports Webmention Valid
Text

How we use GitHub Issues (on 11ty) and how that’s Changing

Zach Leatherman Supports Webmention Valid
Text

Copy *and* Paste? …in this Economy?

Astute visitors to the Eleventy Documentation will notice something new on the code blocks on the site. A wild copy-to-clipboard component has appeared: This feature been a long time coming and is our first use of Web Awesome on the docs (via the <wa-copy-button> cus...

Zach Leatherman Supports Webmention Valid
Text

Permanent Facepile Credit to Individuals Supporting Eleventy

Every single page of the 11ty.dev Docs has a facepile in the footer, populated (automatically) by our Open Collective supporters list. Historically, to be a part of this facepile you needed to meet the following criteria: Have an active recurring (monthly/yearly) Open Colle...

Zach Leatherman Supports Webmention Valid
Text

Wrapper Elements around Code Blocks in Markdown

I encountered a surprising (to me) edge-case bug with Markdown code blocks in the markdown-it plugin today that I thought was worth sharing! Consider this sample index.md template with a code block with an empty line (typical use in a markdown file): ```js // Line 1 // Line...

Zach Leatherman Supports Webmention Valid
Text

StarCraft II is still great.

StarCraft II was first released in 2010 and it’s still amazing: Free-to-play (since 2017) It’s an old game so it works on a wide variety of hardware and software. Great tutorial play that trains new players from scratch (even those without any real-time-strategy experience)...

Zach Leatherman Supports Webmention Valid
Text

I want to intercept Boolean Coercion for Objects in JavaScript

MDN takes a strong stance against using new with Boolean: …all objects, including a Boolean object whose wrapped value is false, are truthy and evaluate to true in places such as conditional statements. — MDN: Boolean: Boolean primitives and Boolean objects (…though it mak...

Zach Leatherman Supports Webmention Valid
Text

How We Built Web Awesome with 11ty (and Why It’s So Fast) on Podcast Awesome

Watch on YouTube: How We Built Web Awesome with 11ty (and Why It’s So Fast) on Podcast Awesome More at podcastawesome.com Build once, run everywhere. In this full-nerd, front-end-leaning episode of Podcast Awesome, Matt sits down with Zach Leat...

Zach Leatherman Supports Webmention Valid
Text

A tiny bit-o-CSS for Stable Scrollbar Gutters

I have my operating system configured to use visible scrollbars, a feature prominently elevated in macOS’ System Settings high enough that it would seem to imply some level of common usage (even though it’s not a default). I don’t necessarily prefer the behavior this feature...

Zach Leatherman Supports Webmention Valid
Text

A Note from my Late Grandmother about Eleventy

Our basement flooded this week, so I’ve been cleaning up the mess. In that process, I found a 22-year-old letter from my grandmother (who passed away Christmas 2023) to my mom that had a little Eleventy naming history that some folks might enjoy. I first talked about the sig...

Zach Leatherman Supports Webmention Valid
Text

One weird trick to reduce Eleventy Image Build Times by 60%

This web site does a fair bit of built-time Image Optimization using the HTML Transform method provided by the Eleventy Image plugin. I took a bit of a set-it-and-forget-it approach with the plugin on this site, mostly for my own convenience. My usage looked something like t...

Zach Leatherman Supports Webmention Valid
Text

Never write your own Date Parsing Library

Never write your own date parsing library. Never. No exceptions. Never have I ever… So… I’ve written my own date parsing library. Why? Our story begins seven years ago in the year 2018. I made the very sensible choice to adopt luxon as the Date Parsing library for Eleventy. ...