100 stars

This week, 1,779 days after publishing the first version of the first plugin, Embed Everything earned its 100th GitHub star. It’s a nice little milestone, and a good opportunity to take stock.

By the numbers

A snapshot of key stats about the project as of today:

  • 1,512 commits
  • 20,455 unit tests
  • 1,924,929 npm downloads[1]

More important than the vanity metrics of GitHub stars or npm downloads is the dependents graph, which, to me, provides a better picture of how the plugin is actually used in the wild. There are 572 public repos using it, and 6 packages that include it as a sub-dependency.

I've spent quite a lot of time scrolling through the dependents list, snooping into people’s codebases to see how they use this tool. One thing I notice, and that I believe is a good sign, is that many of them add no configuration at all. To me, that's a positive signal that I’ve chosen the right defaults, and that the plugin fits users’ mental models — it behaves pretty much the way they expect it to.

It’s likely there’s a sizeable contingent of users who don’t know the plugin exists at all. It’s been bundled into a few 11ty starter templates such as Pack11ty, Elva, and Spacebook, so for some people the core functionality Just Works™ and they neither know nor care how it happens. I find that oddly gratifying! It was the whole point, after all — to remove a few needless mouse-clicks, so you can stay focused on the task at hand. It should be invisible.

The future

At this point the plugin is pretty mature; the pace of development is naturally going to be slower, and I think that’s fine. Still, there are things to do.

End-to-end testing

I added some end-to-end testing with Playwright a few years back but then removed it because my implementation was kind of flaky. The plan was always to add it back in, and I still intend to do that.

Vitest

Still thinking about this one. I’ve worked with Vitest recently and I like it. In particular, I think it makes sense because, compared to Ava, it includes better built-in support for mocking, and that’s important for testing oEmbed implementations. But it would be quite the chore to switch. We’ll see!

ESM

I’m in no rush on this one, but eventually. Now that Node.js 22.12.0 has turned on require(esm) by default, I think we're in the final throes of the CJS/ESM wars. Overall, if tradeoffs arise between developer ergonomics for me versus stability for end users, I intend to choose the latter. I expect the codebase to remain CJS for at least a couple years yet.

Preprocessor implementation

An intriguing feature added in Eleventy 3.0 was Preprocessors, which allows you to manipulate markdown content earlier in the data pipeline. I've got a little test implementation working and I think it's promising. Among other things, it means not having to parse HTML with RegEx, and the ability to override the config on a per-post basis using just the frontmatter. This looks to me like the most logical path to a 2.0. More to come.


  1. This is the total for all the plugins combined, so there's some double counting, since the everything package downloads all the others. ↩︎