Skip to content

Releases: 11ty/eleventy

Eleventy v3.0.0-beta.1: ESM like a Phoenix (the mythical bird, not Arizona)

31 Jul 20:24
Compare
Choose a tag to compare

We did it. It’s happening. After 18 alpha pre-releases and over a year of work, our very first beta release of Eleventy 3.0 is now available. We’re still working on shipping documentation for some of these features but you can try it out now on your project using:

npm install @11ty/eleventy@beta

If you’re upgrading, use the Upgrade Help plugin for automated project checks and help!

A few numbers on the best version of Eleventy yet:

Stats v2.0.1 v3.0.0-beta.1
23% smaller 35.2 MB 27.1 MB
6.6% fewer third-party dependencies 210 196
21.7% faster npm install 6.572s* 5.146s*

(*fastest time of 3 runs bypassing cache)

🙌🏻🚨 We still need your help! 🚨🙌🏻

11ty is now operating independently, with full time development and maintenance funded by our Open Collective supporters. We need your help to keep going! We have a goal of $6000 USD recurring monthly budget. Read more about this fundraising push and head directly to our Open Collective to start your recurring contribution!

Every recurring contribution helps!

Flagship 3.0 features

  1. Eleventy is now written in ESM with full support for ESM in your projects (#836): configuration, data files, 11ty.js templates, etc. For many projects this won’t be a breaking change and we’ll continue to support CommonJS too. You can read more about what ECMAScript Modules (ESM) means for Eleventy projects on the 11ty Blog.
// ESM
export default function(eleventyConfig) {}

// We’ll keep supporting CommonJS:
module.exports = function(eleventyConfig) {}
  1. Supporting more package managers and runtimes: Deno, pnpm, yarn (more to come!)
  2. Asynchronous configuration #614
// ESM
export default async function(eleventyConfig) {}

// CommonJS
module.exports = async function(eleventyConfig) {}
  1. For-free performance improvement to built-in slugify, inputPathToUrl universal filters (via memoization) #840
  2. Named config export improves consistency for plugins #3246 and set*Directory configuration API methods #1503
export default function(eleventyConfig) {
  eleventyConfig.setInputDirectory(".");
  eleventyConfig.setOutputDirectory("_site");
};

export const config = {
  dir: {
    input: ".",
    output: "_site"
  },
};
  1. Virtual Templates, configuration API to add content (great for plugins, used by the new RSS plugin!) #1612
export default function(eleventyConfig) {
  eleventyConfig.addTemplate("robots.njk", "User-agent: *\nAllow: /", {
    permalink: "/robots.txt",
  });
};
  1. IdAttribute plugin adds id attributes to headings for on-page anchor links (supports all template-languages) #3363
<h1>Welcome to my web site</h1> becomes <h1 id="welcome-to-my-web-site">Welcome to my web site</h1>
  1. Plain-text Bundler included (via eleventy-plugin-bundle)
export default function(eleventyConfig) {
  eleventyConfig.addBundle("css"); // Adds {% css %} paired shortcode to create per-page CSS bundles
};
  1. InputPath to URL plugin lets you link directly to an input file path (and we’ll output the right URL)
<a href="my-template.md">Home</a> becomes <a href="/my-template/">Home</a>
  1. Use arbitrary JavaScript with the js Front Matter #2819
---js
const hello = "hi";
---
{{ hello }}
  1. page.rawInput unlocks access to raw template content #1206
  2. addPreprocessor configuration API to modify raw content before rendering works for file ignores and drafts #188
  3. addDateParsing configuration API to add your own custom date parsing logic #867
  4. eleventyDataSchema data option to validate data cascade values #879
  5. Reserved Eleventy properties in data cascade are now frozen #1173
  6. Support for asynchronous plugins and async-friendly addPlugin configuration API #2675
  7. useLayouts option for Custom Template Languages allows opt-out of Eleventy Layouts #2830
  8. renderTransforms Universal Filter will run project transforms on an arbitrary block of content (useful for RSS and other feeds) #3294
  9. --incremental=filename.md on the command line #3324
  10. renderContent Universal Filter now included with Render Plugin #3370

Breaking Changes and Upgrade Path

Rather than navigating this list manually, use the Upgrade Help plugin for automated project checks and upgrade help!

  • Requires Node 18 or newer.
  • Removes Serverless and Edge plugins.
  • Use of bundled Eleventy plugins from CommonJS requires changing require("@11ty/eleventy") to await import("@11ty/eleventy") for ESM reasons. We provide helpful error messaging for this.
  • pug, ejs, haml, mustache, and handlebars plugins moved from core to official plugins
  • Throw errors if --config= command line file is missing #3373
  • The htmlOutputSuffix feature was removed #3327
  • Aliased custom templates must be declared in active formats #3302
  • --formats= and --formats="" on command line means no formats (previously aliased to *) #3255
  • Custom Template Language compileOptions.permalink option changed from true to "raw" #2780
  • Major semver updates of dependencies:
  • Full list of breaking changes

Minutiae

  • Packages are now published using npm package provenance.
  • The code base isn’t just ESM, it’s using tabs instead of spaces too 😱😈 #3098

Full Eleventy v3 Milestone (151 closed): https://github.com/11ty/eleventy/milestone/40?closed=1
Full Changelog: v2.0.1...v3.0.0-beta.1

Thank You Notes

This release would not have been possible without our community and supporters.

  • To everyone that has built something with Eleventy: thank you!
  • To everyone that has answered a question about Eleventy: on the Discord, on social media, in GitHub issues or discussion, at your local meetup or coffee shop: thank you!
  • To everyone that attended the 11ty Conference earlier this year: thank you!
  • To everyone that brought a well-intentioned complaint about something you didn’t like about Eleventy: thank you!
  • To everyone that dropped a few nice words of appreciation: thank you!
  • To everyone that has chipped in with their hard-earned money and made this release possible: thank you!

Thank you to @bobmonsour, @pdehaan, @Snapstromegon, @cdransf, @5t3ph, @BenDMyers, @siakaramalegos, @shivjm, @dleatherman, @darthmall, @clottman, @nachtfunke, @David-Large, Olivia Nicholson, and @mneumegen for their community contributions!

Thank you for the code contributions from @VividVisions, @mayank99, @Zearin, @chriskirknielsen, @mendhak, @fqueze, @shivjm, @rdela, @w0whitaker, @vrugtehagel, @sachac, @Snapstromegon, @alifeee, @uncenter, @Zwyx, @mayankkamboj47, @aschrab, @jgarber623, @korverdev, @mathertel, @mathieuprog, @epelc, and @Ryuno-Ki.

Pre-release: Eleventy v3.0.0-alpha.18

30 Jul 21:24
Compare
Choose a tag to compare
Pre-release
  • Published with npm package provenance for improved auditing and security #3392
  • Pre-release 3.0-compatible plugins for Pug, EJS, Handlebars, Mustache, and HAML are now available: https://github.com/11ty/eleventy-plugin-template-languages
  • Upgrade Helper plugin for 3.0 now available: https://github.com/11ty/eleventy-upgrade-help
  • New eleventyConfig.setLiquidParameterParsing("builtin") API provides a path forward to opt-in to Liquid’s built-in parameter parser #2679
  • New renderContent Universal Filter provided by the Render Plugin allows rendering an arbitrary string of template content #3370
  • Missing file name passed as --config on command line now throws an error: #3373
  • Fix to deep merge objects passed to eleventyConfig.addGlobalData #3389
  • Fix internal error when folks try to pass non-function to addFilter, addShortcode configuration API methods #3385
  • TypeScript improvements for types in configuration API #3097
  • Fix issue with error message on SIGINT server close, removes process.exit calls for a graceful stop #3361 #3375
  • Fix bug with async config and manual use of RenderPlugin #3368

Full Changelog: v3.0.0-alpha.17...v3.0.0-alpha.18
Full Eleventy v3 Milestone: https://github.com/11ty/eleventy/milestone/40

🥳🥳🥳 2 issues left (150 closed) on the Eleventy 3.0.0 milestone!

We need your help!

11ty is now operating independently, with full time development and maintenance funded by our Open Collective supporters. We need your help to keep going! We have a goal of $6000 USD recurring monthly budget. Read more about this fundraising push or head directly to our Open Collective to start your recurring contribution!

Pre-release: Eleventy v3.0.0-alpha.17

16 Jul 20:32
Compare
Choose a tag to compare
Pre-release
  • Adds new eleventyConfig.addPreprocessor API for improved drafts workflow #188 Workaround for Nunjucks macros import #3345
  • New IdAttributePlugin adds id attributes to headings across multiple template syntaxes #3363
  • Fix npm audit deprecation warnings from recursive-copy package #3299
  • Missing layout error messaging now reports the template path #727
  • Add { type: "async" } option for getShortcodes, getFilters, and getPairedShortcodes configuration API methods (#3310)
  • Fix issue with more complex export in 11ty.js templates #3359
  • Small tweaks to colorized terminal text
  • Internals: removes multimatch dependency, swaps to already in-use micromatch 9698667
  • Fix bug with Eleventy Image On-request workflow eleventyConfig.getFilter(...) is not a function #3365
  • Improvements to benchmarking debug mode outputs: https://www.11ty.dev/docs/debug-performance/
    • Benchmarking logging output improvement for minimum thresholds #1570

Full Changelog: v3.0.0-alpha.16...v3.0.0-alpha.17
Full Eleventy v3 Milestone: https://github.com/11ty/eleventy/milestone/40

🥳🥳🥳 5 issues left (137 closed) on the Eleventy 3.0.0 milestone!

We need your help!

11ty is now operating independently, with full time development and maintenance funded by our Open Collective supporters. We need your help to keep going! We have a goal of $6000 USD recurring monthly budget. Read more about this fundraising push or head directly to our Open Collective to start your recurring contribution!

Pre-release: Eleventy v3.0.0-alpha.16 (feel free to ignore this one)

09 Jul 21:41
Compare
Choose a tag to compare
  • Seeing a liquidjs-related project regression (outside of our test suite) in the newest minor version, temporarily reverting from 10.15 to 10.14.
    • Investigation at #3356 revealed an application code error and the revert is unnecessary!

Full Changelog: v3.0.0-alpha.14...v3.0.0-alpha.15
Full Eleventy v3 Milestone: https://github.com/11ty/eleventy/milestone/40

We need your help!

11ty is now operating independently, with full time development and maintenance funded by our Open Collective supporters. We need your help to keep going! We have a goal of $6000 USD recurring monthly budget. Read more about this fundraising push or head directly to our Open Collective to start your recurring contribution!

Pre-release: Eleventy v3.0.0-alpha.15

09 Jul 21:39
Compare
Choose a tag to compare
Pre-release
  • BREAKING: Bump js-yaml dependency from v3 to v4 #2126
  • New node front matter has been renamed to js and javascript (keeping backwards compatibility with previous JavaScript object literal front matter type) #2819 (node is still there, but it should be considered deprecated)
  • Support for pnpm #2876
  • Add support for 11ty.js in Virtual Templates: #3347
  • Add support for Virtual Templates to be used as Eleventy Layouts #1612 #2307
  • Memoize internal slug, slugify, and inputPathToUrl filters #840
  • Improved error messaging for filters/shortcodes #3286
  • Adds new eleventyConfig.getFilters eleventyConfig.getShortcodes, and eleventyConfig.getPairedShortcodes methods for plugins and custom template languages to access universal filters/shortcodes #3310
  • New eleventyConfig.augmentFunctionContext config API to help with this.eleventy and this.page on shortcodes/filters in plugins #3355
  • Adds eleventyConfig.addDateParsing configuration API to customize date parsing #867
  • Fix regression with JavaScript dependencies cache-busting in 11ty.js Layout files #3338
  • Fix regression with markdown engine simple aliases (without additional options) still using preprocessing engine #3339
  • PR: replace index.d.ts with jsdoc @typedef by @mayank99 in #3349
  • PR: refactor: Use ?. for terser conditionals by @Zearin in #3343

Full Changelog: v3.0.0-alpha.14...v3.0.0-alpha.15
Full Eleventy v3 Milestone: https://github.com/11ty/eleventy/milestone/40

🥳🥳🥳 5 issues left (122 solved) on the Eleventy 3.0.0 milestone!

We need your help!

11ty is now operating independently, with full time development and maintenance funded by our Open Collective supporters. We need your help to keep going! We have a goal of $6000 USD recurring monthly budget. Read more about this fundraising push or head directly to our Open Collective to start your recurring contribution!

Pre-release: Eleventy v3.0.0-alpha.14

27 Jun 15:19
Compare
Choose a tag to compare
Pre-release
  • Adds support for --incremental=filename to start an incremental build with an explicitly defined incremental file. Major improvements to dependency mapping for incremental builds (especially with --ignore-initial) #3324
  • New useLayouts option for Custom template syntax allows opt-out of Eleventy Layouts for custom template files in your addExtension definition (you don’t want Layouts on scss files) #2830
  • Fixes bugs with cached second-order JavaScript dependencies (e.g. a local import in your config file) #3270
  • eleventyConfig.resolvePlugin method for adding bundled-with-Eleventy plugins is now synchronous-friendly for better compatibility with RSS plugin usage: #3314 (comment)
  • Breaking: Removes htmlOutputSuffix common pitfall when input and output directories are the same. Instead of renaming output files with an additional suffix, errors are now thrown when output files attempt to overwrite any input file. #3327
  • eleventyConfig.quietMode now reflects --quiet CLI value #3316
  • Improved error messaging for errors in: Nunjucks filters #3295 and Acorn parsing for JavaScript dependencies for --watch or --serve #3128

Full Changelog: v3.0.0-alpha.13...v3.0.0-alpha.14
Full Eleventy v3 Milestone: https://github.com/11ty/eleventy/milestone/40

🥳🥳🥳 10 issues left (107 solved) on the Eleventy 3.0.0 milestone!

We need your help!

11ty is now operating independently, with full time development and maintenance funded by our Open Collective supporters. We need your help to keep going! We have a goal of $6000 USD recurring monthly budget. Read more about this fundraising push or head directly to our Open Collective to start your recurring contribution!

Pre-release: Eleventy v3.0.0-alpha.13

12 Jun 14:48
Compare
Choose a tag to compare
Pre-release
  • Fixes to facilitate RSS plugin updates: 80d9f98 and #3320
  • Breaking: Changes custom template syntax permalink compilation default to raw #2780
  • Breaking: Removes advanced filters option in HTML <base> plugin to rename Universal Filters for this plugin (htmlBaseUrl, addPathPrefixToFullUrl, and transformWithHtmlBase). Renaming filters in this plugin will cause cross-plugin compatibility issues in other places in your project.

Full Changelog: v3.0.0-alpha.12...v3.0.0-alpha.13
Full Eleventy v3 Milestone: https://github.com/11ty/eleventy/milestone/40

We need your help!

11ty is now operating independently, with full time development and maintenance funded by our Open Collective supporters. We need your help to keep going! We have a goal of $6000 USD recurring monthly budget. Read more about this fundraising push or head directly to our Open Collective to start your recurring contribution!

Pre-release: Eleventy v3.0.0-alpha.12

11 Jun 16:57
Compare
Choose a tag to compare
Pre-release

Quick follow-up to fix regression introduced in v3.0.0-alpha.11 with the bundled InputPathToUrl plugin: #3319

Full Changelog: v3.0.0-alpha.11...v3.0.0-alpha.12
Full Eleventy v3 Milestone: https://github.com/11ty/eleventy/milestone/40

We need your help!

11ty is now operating independently, with full time development and maintenance funded by our Open Collective supporters. We need your help to keep going! We have a goal of $6000 USD recurring monthly budget. Read more about this fundraising push or head directly to our Open Collective to start your recurring contribution!

Pre-release: Eleventy v3.0.0-alpha.11

11 Jun 14:24
Compare
Choose a tag to compare
Pre-release

What's Changed

  • New renderTransforms filter to execute transforms programmatically in non-HTML content (like RSS feeds) #3294
  • Support for more extensible custom template syntaxes and aliases. #3298
  • Some internal plugins are now unique. Multiple addPlugin calls of the same bundled plugins are de-duplicated. This is important as the RSS plugin Adds new eleventyConfig.resolvePlugin method for more ergonomic plugin import in CommonJS projects. #3314
  • Bug fix: InputPathToUrl filter and plugin works with hash: thanks @mendhak! #3276
  • Synchronous template write, thanks @shivjm! #3272
  • Restore types in package.json, thanks @chriskirkneilsen! #3291

We need your help!

11ty is now operating independently, with full time development and maintenance funded by our Open Collective supporters. We need your help to keep going! We have a goal of $6000 USD recurring monthly budget. Read more about this fundraising push or head directly to our Open Collective to start your recurring contribution!

New Contributors

Related

Full Changelog: v3.0.0-alpha.10...v3.0.0-alpha.11
Full Eleventy v3 Milestone: https://github.com/11ty/eleventy/milestone/40

Eleventy v2.0.1: a Bug Fix Release

28 Mar 16:38
Compare
Choose a tag to compare

Eleventy v2.0.1 is now available! You can try it out in your project now:

npm install @11ty/eleventy@latest

New to Eleventy?

Eleventy is a flexible and production-ready site generator known for its zero-client JavaScript footprint, speedy sites, speedy builds, and full control over the output.

Features and Fixes

Housekeeping

Thank You Notes

This project would not be possible without our lovely community. Thank you to everyone that built something with Eleventy (×684 authors on our web site!), wrote a blog post about Eleventy, contributed code, wrote a plugins, helped with documentation, asked questions, answered questions, braved The Leaderboards, participated on Discord, filed issues, attended (or organized!) a meetup, said a kind word on social media ❤️.

Open Collective Supporters