The Best And Worst Parts Of Eleventy (Now In v3)—Web Unleashed 2024
![A laptop sits in focus on a podium. A blurred Zach stands in the background holding a microphone.](/img/built/YTAjmhnhhB-400.jpeg)
Here are the slides from my talk at Web Unleashed:
![An angel and demon sit beside the 11ty logo](/img/built/SxrVgwIKt7-600.jpeg)
![The Best and Worst of 11ty](/img/built/75ADHmcDe3-600.jpeg)
![The XKCD meme with a jenga tower, the caption reads A Project Some Random Person in Nebraska has been Maintaining since 2017 (11ty logo sits overhead)](/img/built/ZDqeoyQUzr-600.jpeg)
![But why does 11ty exist?](/img/built/6vp3MG6PkX-600.jpeg)
![A Delorean car sits with its doors open](/img/built/90UGbvk6ui-600.jpeg)
![The Back to the Future time machine date reads Nov 26, 2017 11:27 PM](/img/built/xj7RwhJoce-600.jpeg)
![Screenshots of Netlify Blog (Top Ten Static Site Generators of 2017) and StaticGen](/img/built/HqkODxbFJi-600.jpeg)
![A logo cloud of site generators from 2008 to 2017](/img/built/kCsN2sGJe7-600.jpeg)
![11ty wanted to be Jekyll but with JavaScript](/img/built/ePMwCAdVmx-600.jpeg)
![11ty also wanted to be the Anti-Gatsby](/img/built/sDYBm3zjZq-600.jpeg)
![A logo cloud of site generators from 2008 to 2017](/img/built/kCsN2sGJe7-600.jpeg)
![A much larger cloud of more site generators, the ones that are not maintained any more are crossed out](/img/built/ENteFCyvaV-600.jpeg)
![A graph of npm downloads for 11ty, showing when other site generators were introduced](/img/built/ENMPMmxmMQ-600.jpeg)
![A large photo of an elephant stands behind the word Maintenance](/img/built/r-WJLx3NQh-600.jpeg)
![Eric says “One thing to point out while The Discourse favors it is that @thea11yproject launched with version 1.0.0 of @eleventy (and developed using a pre-major release version). Eleventy is now at version 2.0.0](/img/built/8fju3kDdv3-600.jpeg)
![A photo of a YouTube Video reads How Stable is Eleventy?](/img/built/AcJgCLoJXe-600.jpeg)
![A screenshot of a GitHub diff for an 11ty Upgrade to v3.0.0](/img/built/lanGo-FRTd-600.jpeg)
![+6 additions, -4 subtractions (GitHub diff)](/img/built/ROq9lIplhJ-600.jpeg)
![Upgrade Helper, Eleventy has a major version upgrade helper plugin](/img/built/fkHEEevtyd-600.jpeg)
![Point 1. Stability](/img/built/Rs67t5ibN6-600.jpeg)
![Killed by Google graveyard screenshot](/img/built/iAbkml8Hdn-600.jpeg)
![Vue Plugin crossed out, screenshot of vuejs/rollup-plugin-vue](/img/built/O2W4RYVA5v-600.jpeg)
![Serverless Plugins, crossed out](/img/built/wiZXInPfDf-600.jpeg)
![Browsersync, crossed out](/img/built/IivOLmvm0q-600.jpeg)
![Eleventy Dev Server, fewer dependencies, reduces node_modules, faster npm install, a goose egg on npm audits](/img/built/HWdLzhtjFV-600.jpeg)
![A screenshot of a toot “Updating my Node dependencies after 2 months. Ah, let’s see what fresh horrors await”](/img/built/1C5cZ3gFsl-600.jpeg)
![Deps, v1 315, v2 213, v3 189](/img/built/7-C5p_0inT-600.jpeg)
![Weight, v1 72.7 MB, v2 35.2 MB, v3 28.1 MB](/img/built/WZX4Jfb9wT-600.jpeg)
![Graph of other generator weights, from smallest to largest—Eleventy, SvelteKit, Astro, Remix, Nuxt, Next.js, Gatsby](/img/built/u2-N3KhOHe-600.jpeg)
![A large photo of an elephant stands behind the word Maintenance](/img/built/r-WJLx3NQh-600.jpeg)
![Maintenance encompasses Scope, Motivation, and Funding](/img/built/Xj2WPveyR4-600.jpeg)
![Point 2, Static HTML](/img/built/uyH1GyD3f4-600.jpeg)
![Graph of Site generators showing Dynamic Server/Static on x-axis and MPA/SPA on y-axis](/img/built/4Cwh8-KF07-600.jpeg)
![11ty is trying to be the best at MPA and Static.](/img/built/XmqPrf0LoT-600.jpeg)
![Static & Audits, found 23 vulnerabilities (8 low, 10 moderate, 5 high) in 120 scanned packages](/img/built/LvJSPv_xNR-600.jpeg)
![Comparison is the thief of joy](/img/built/QsutrXessL-600.jpeg)
![“I like Next”](/img/built/XcjcdQXlwp-600.jpeg)
![Next.js uses Static export, Vercel preferred hosting, and Big JavaScript bundles. 11ty is static-first, hosted anywhere, and has zero client JS by default](/img/built/2YIT8TppIk-600.jpeg)
![Point 3, Images](/img/built/inLDdgnZ5e-600.jpeg)
![Screenshot of configuration file to add Eleventy Image plugin](/img/built/I9_YWc_h4--600.jpeg)
![Never manually add a width or height attribute again, not even for remote images](/img/built/HwfHidwFsU-600.jpeg)
![Code samples showing output from <img> tag to <picture> during serve or build modes](/img/built/jg2FpWoLnv-600.jpeg)
![Specify more widths using `eleventy:widths` attribute](/img/built/fcPZ2s19Lp-600.jpeg)
![<img> versus <picture>? Don’t worry about it](/img/built/lJu89sPctW-600.jpeg)
![Specify formats using `eleventy:formats` attribute](/img/built/xU4FaBuDlS-600.jpeg)
![Reduce build cost for local dev](/img/built/v2yOYUdMxc-600.jpeg)
![Graph of build versus serve performance for Eleventy Image](/img/built/i1W4kZ7SAP-600.jpeg)
![svgShortCircuit feature](/img/built/N0_dLJVz6S-600.jpeg)
![Demo of the Mexico flag SVG showing one raster output image is discarded (larger than SVG)](/img/built/5LBE0MfDqY-600.jpeg)
![Demo of SVG Tiger shows that only the SVG is used, it’s smaller than all raster images.](/img/built/MEhesmNhRK-600.jpeg)
![Point 4, JavaScript](/img/built/VRaJLVMRks-600.jpeg)
![11ty v3 uses ESM](/img/built/-dfiDeozZh-600.jpeg)
![require("node:") and module.exports](/img/built/cDyFwNtJMD-600.jpeg)
![import "node:" and export default](/img/built/ZcBV8Dqm8h-600.jpeg)
![Screenshot of Titus Wormer’s graph showing how many package son npm are using esm (12.1%) versus CommonJS (65%). CommonJS usage is trending down slowly.](/img/built/3c8Ojdg1mv-600.jpeg)
![ESM: 11ty, Astro; Dual: Svelte, Vite, Nuxt; Faux: Remix, Gatsby; CommonJS: Next.js](/img/built/5S0fXVH_9Q-600.jpeg)
![ESM support was stable in Node 12+ and 11ty added it for Node 18+ so we’re a *little* late here.](/img/built/AKCZ2Ya84_-600.jpeg)
![11ty is written in ESM, adds support for ESM in your projects, but ESM remains optional.](/img/built/WDJiv3YOHn-600.jpeg)
![Configuration files can use ESM](/img/built/ywVZxHmpji-600.jpeg)
![JavaScript Data Files can use ESM](/img/built/5Vwy-FRoAp-600.jpeg)
![and JavaScript Templates can use ESM](/img/built/kAkAMjm73d-600.jpeg)
![You can set .js to use ESM by default in your project with `"type": "module"` in your package.json.](/img/built/xHrKFHQiG2-600.jpeg)
![Your configuration file might look like module.exports = function(eleventyConfig) {}](/img/built/p-L9EL7MpB-600.jpeg)
![If you use a plugin bundled with Eleventy, you can’t require("@11ty/eleventy") now that it’s written in ESM](/img/built/buZvYQItyF-600.jpeg)
![So pull that require into an async configuration callback and use `await import("@11ty/eleventy")` instead.](/img/built/vfCiPvrHrc-600.jpeg)
![Though if you’re using Node 22+ and `--experimental-require-module` you can still require("@11ty/eleventy");](/img/built/FLboRILDQ3-600.jpeg)
![But it’s easier just to use ESM and import "@11ty/eleventy" directly in your configuration file.](/img/built/iPOu8p_MMo-600.jpeg)
![And you can use JSDoc to get autocomplete in your IDE too](/img/built/5qk2WpFQP7-600.jpeg)
![ESM/CommonJS Node.js Quick Reference. You can import "ESM". You can import "CommonJS". You can’t require("ESM") unless Node 22+ and --experimental-require-module. You can require("CommonJS"). Eleventy plugins written in ESM will be Eleventy v3+ only.](/img/built/AeIQqqGNMt-600.jpeg)
![Comparison is the thief of Joy. “I like Hugo”](/img/built/Nelh6kFy0q-600.jpeg)
![Hugo uses Go and Go templates, it’s *so* fast, has a zero client JS baseline. 11ty uses JavaScript and any JS-based templates. It’s also fast (but not as fast as Hugo) and offers first-class access to npm.](/img/built/HuHPbyTgOz-600.jpeg)
![11ty wants to be Hugo but with JavaScript](/img/built/1CvN3OiFmI-600.jpeg)
![Screenshot of npm](/img/built/NVtC9UG8zM-600.jpeg)
![npm has 3.3M packages](/img/built/g8BcDy0fEG-600.jpeg)
![Graph showing Ruby Gems, crates.io (Rust), Packagist (PHP), PYPI (Python) and gopm (Go) all offer about 1M packages added up.](/img/built/KGj4fPvmyH-600.jpeg)
![JavaScript is the top language on GitHub](/img/built/fUJFLTiXYX-600.jpeg)
![Comparison is the thief of Joy. “I like Astro”](/img/built/wBE1N14aLd-600.jpeg)
![11ty and Astro are pretty similar. Astro uses Vite and 11ty is Bundler de-coupled. Astro has serverless support and 11ty does not. Astro has support for only a handleful of template types and 11ty is fully custom.](/img/built/bbMXOh-kfD-600.jpeg)
![The real difference between 11ty and Astro is performance, a graph shows 11ty builds 4000 markdown files a little slower than Hugo. Astro performance is on par with Gatsby and Next is about 4× slower than Gatsby.](/img/built/PzIyTKJ3_S-600.jpeg)
![Point 5, CSS](/img/built/yg1T_LCnlP-600.jpeg)
![Showing how to use the bundle plugin in Eleventy](/img/built/7T6yCQXkga-600.jpeg)
![Showing how to output bundle contents in templates](/img/built/2_YuCPuHIg-600.jpeg)
![Point 6, Feeds](/img/built/ZqvxS0NDQb-600.jpeg)
![Screenshot showing how to add an Atom feed to your project config](/img/built/xXl0IW_RNu-600.jpeg)
![Point 7, Formats & Runtimes](/img/built/T9ihUfPHPI-600.jpeg)
![Building eleventy-base-blog in Deno](/img/built/mPJDP-6ob0-600.jpeg)
![Adding support for TypeScript and JSX to 11ty](/img/built/IsgJFcJpLZ-600.jpeg)
![Using arbitrary JavaScript in front matter](/img/built/aALhudpjJw-600.jpeg)
![.astro files when?](/img/built/HA1MslcMnQ-600.jpeg)
![Point 8, Community](/img/built/lc1-jeqvbP-600.jpeg)
![40350 friends on social media](/img/built/Zhg0ipwNdh-600.jpeg)
![So many contributors (a giant screenshot of them)](/img/built/wOqZMktC0h-600.jpeg)
![76397 repositories on GitHub use Eleventy](/img/built/dJ9ytFlREC-600.jpeg)
![A logo cloud of the companies using Eleventy: NASA, Cern, TC39, W3C, Google, Mozilla, etc](/img/built/2gLBeYpDvP-600.jpeg)
![A facepile of our Open Collective supporters](/img/built/BH0dv2kGu--600.jpeg)
![Our Discord moderators and helpers](/img/built/OYoAtHO8SK-600.jpeg)
![11tyMeetup.dev organizers, 11tyBundle.dev, and the GitHub Issue Tracker](/img/built/QeBhw6QeHl-600.jpeg)
![Our best thing is our Community](/img/built/X7wbdra4AD-600.jpeg)
![Thank you!](/img/built/0yrC70PHID-600.jpeg)
Unfortunately the talk was not recorded (by the event or me) so you’ll have to ask questions about the slides if you want more context!
Panel Discussion
I was also honored to participate in a panel alongside Chris Coyier, Rachel Andrew, and Bekah Hawrot-Weigel:
2 Comments
Nicolas (greenman)
@zachleat thanks for your work and these slides : very clear. You don't talk about themes imho this is the "talon d'Achille" of 11ty and I do believe you should set a 11ty files hierarchy as the linux one to help the themes expansion. It's such a pain to try … Truncated
d3v1an7
@zachleat always love reading through your slides, zero filler. bummed i missed hearing it!