Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
6140cec
Working demo
zachleat Sep 11, 2025
354303c
Working example
zachleat Sep 26, 2025
5243eaf
Opt-in feature via experimental flags
zachleat Sep 29, 2025
1acc7f8
Status
zachleat Oct 21, 2025
6e2581b
Merge branch 'main' into data-sourcemap-current
zachleat Feb 2, 2026
437df4f
Removes page.inputPathDir and page.dir (temporarily)
zachleat Feb 12, 2026
023669e
Working localedit demo
zachleat Feb 12, 2026
60086f8
Status
zachleat Mar 13, 2026
992b227
Merge branch 'main' into rename
zachleat Mar 27, 2026
de2dec4
Merge branch 'rename' into data-sourcemap-current
zachleat Mar 27, 2026
76fd63f
Status
zachleat Apr 20, 2026
08bd073
Status
zachleat May 6, 2026
3272486
Upgrade deps
zachleat May 6, 2026
2b4a09b
De-dupe file paths
zachleat May 15, 2026
6bebccf
Merge branch 'data-sourcemap-current'
zachleat Jun 5, 2026
08589e6
Priority for #4247 changed to prefer JS over TS if both exist
zachleat Jun 5, 2026
d9f0d5c
A few more package ignores
zachleat Jun 5, 2026
ebc3264
Move packages/client to packages/browser
zachleat Jun 5, 2026
f60a2a8
`eleventy.*` events now also emit as `buildawesome.*`, ELEVENTY_ env …
zachleat Jun 9, 2026
0ce6f27
Use buildawesome.config.js instead of build-awesome.config.js
zachleat Jun 9, 2026
d3888c0
Resolve buildawesome.* for data cascade. Prefer buildawesome.computed…
zachleat Jun 9, 2026
3d8abff
Breaking: changes directory dtaq file suffix from `11tydata.*` to `da…
zachleat Jun 9, 2026
e839957
Adds server.* JavaScript templates aliased to 11ty.js
zachleat Jun 9, 2026
1c6ae1e
Adds `buildawesome` global data (aliased to `eleventy`)
zachleat Jun 10, 2026
7d27fb6
Rename eleventyConfig to $config for configuration callback tests
zachleat Jun 10, 2026
96b5724
Add support for buildawesome: prefix on post html transformer API
zachleat Jun 10, 2026
c1bda25
Restore .11tydata directory data file extension (default, unbreaking …
zachleat Jun 10, 2026
6bc39be
Upgrade deps
zachleat Jun 10, 2026
b4ff998
Fetch data file globs correctly
zachleat Jun 10, 2026
f881ed9
Restore 11ty.* typescript template support
zachleat Jun 10, 2026
9d21367
Cleanup for verbose being passed around everywhere, orchestrate throu…
zachleat Jun 11, 2026
154a9d4
Fix server output from ConsoleLogger reuse
zachleat Jun 11, 2026
1a11ddc
Change logging prefix based on configuration file used.
zachleat Jun 11, 2026
b4dfeea
Standardize on browser instead of client for Vitest runs
zachleat Jun 11, 2026
3c3c21b
Missed a reference to test:client
zachleat Jun 11, 2026
f25edfc
First version of Build Awesome release script
zachleat Jun 11, 2026
e9e00ac
Whitespace consistency
zachleat Jun 11, 2026
4daa135
Revert override
zachleat Jun 11, 2026
9b2d619
Remove the dash from the future repo name
zachleat Jun 11, 2026
650e8b4
Fix signing
zachleat Jun 11, 2026
e803e26
Fix signing
zachleat Jun 11, 2026
568dbab
Resolves https://github.com/11ty/eleventy/pull/4294#discussion_r34078…
zachleat Jun 15, 2026
3f1f35a
Resolves https://github.com/11ty/eleventy/pull/4294#discussion_r34078…
zachleat Jun 15, 2026
0fd1c2f
A few more tests for attribute resolution. Resolves https://github.co…
zachleat Jun 15, 2026
dbc09e9
Remove comment
zachleat Jun 15, 2026
0c0c70b
Resolves https://github.com/11ty/eleventy/pull/4294#discussion_r34078…
zachleat Jun 15, 2026
59ff2a9
Resolves https://github.com/11ty/eleventy/pull/4294#discussion_r34078…
zachleat Jun 15, 2026
9bc119a
Remove the data editing from this PR, needs to be decoupled
zachleat Jun 15, 2026
6f87e70
Remove data cascade location mapping (needs to be in a separate PR)
zachleat Jun 15, 2026
ee65fb8
Resolve https://github.com/11ty/eleventy/pull/4294/changes/BASE..e803…
zachleat Jun 15, 2026
97e763f
Resolves https://github.com/11ty/eleventy/pull/4294#discussion_r34078…
zachleat Jun 15, 2026
a779d77
Only use BuildAwesome: debug log prefix if running from the Build Awe…
zachleat Jun 15, 2026
a028ad3
Removes comment
zachleat Jun 16, 2026
2cf4280
Error class rename
zachleat Jun 16, 2026
792108c
Method rename
zachleat Jun 16, 2026
2677949
Build Awesome package.json defaults
zachleat Jun 16, 2026
e000c35
Whitespace normalization
zachleat Jun 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
contact_links:
- name: I have a question about Eleventy
url: https://github.com/11ty/eleventy/discussions/
about: General education topics should be filed on our Discussions board e.g. “How do I do this in Eleventy?” or “Can Eleventy do this?” (Please search existing discussions first!)
- name: I have a feature request for Eleventy
url: https://github.com/11ty/eleventy/discussions/new?category=enhancement-queue
about: Enhancement or new Features. e.g. “I wish Eleventy did this.” Suggest an idea! (Please search existing discussions first!)
- name: I have a question
url: https://github.com/11ty/buildawesome/discussions/
about: General education topics should be filed on our Discussions board e.g. “How do I do this?” or “Can I do this?” (Please search existing discussions first!)
- name: I have a feature request
url: https://github.com/11ty/buildawesome/discussions/new?category=enhancement-queue
about: Enhancement or new Features. Suggest an idea! (Please search existing discussions first!)
- name: I wish the docs were different!
url: https://github.com/11ty/11ty-website/issues/new/choose
about: Something missing from the documentation? Something wrong? Something confusing? You want the 11ty-website repo!
Expand Down
6 changes: 3 additions & 3 deletions .github/ISSUE_TEMPLATE/possible-bug.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: I’m having trouble with Eleventy
name: I’m having trouble with Build Awesome or Eleventy
description: Have a problem? It might be a bug! Create a report to help us improve.
labels: [needs-triage]
body:
Expand All @@ -22,8 +22,8 @@ body:
id: eleventy
attributes:
label: Eleventy
description: Which version of Eleventy do you use?
placeholder: eleventy --version or npx @11ty/eleventy --version
description: Which version of Build Awesome or Eleventy do you use?
placeholder: npx @awesome.me/buildawesome --version or npx @11ty/eleventy --version
validations:
required: true
- type: textarea
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,6 @@ jobs:
node-version: ${{ matrix.node }}
- run: npm ci
- run: npx playwright install
- run: npm run test:client
- run: npm run test:browser
env:
YARN_GPG: no
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ on:
permissions: read-all
jobs:
release:
# see https://github.com/11ty/eleventy/settings/environments
# see https://github.com/11ty/buildawesome/settings/environments
environment: GitHub Publish
runs-on: ubuntu-latest
permissions:
Expand Down
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ api-docs/
.vscode
.idea

# Ignore eleventy output when doing manual tests
# Ignore build output when doing manual tests
_site/

# Ignore test files
Expand Down
4 changes: 3 additions & 1 deletion .npmignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,6 @@ test_node
coverage
eslint.config.js
.*
packages/client/
packages/browser/
scripts
tsconfig.json
4 changes: 2 additions & 2 deletions CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Eleventy Community Code of Conduct
# Build Awesome (Eleventy) Community Code of Conduct

View the [Code of Conduct](https://www.11ty.dev/docs/code-of-conduct/) on 11ty.dev

Expand Down Expand Up @@ -36,7 +36,7 @@ This Code of Conduct applies both within project spaces and in public spaces whe

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at eleventy@zachleat.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at maintainers@11ty.dev. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
Comment thread
zachleat marked this conversation as resolved.

Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.

Expand Down
21 changes: 12 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
<p align="center"><img src="https://www.11ty.dev/img/logo-github.svg" width="200" height="200" alt="eleventy Logo"></p>
<p align="center"><img src="./docs/ba-11ty-logo.png" width="200" height="200" alt="Build Awesome (balloon) and 11ty Logo"></p>

# eleventy 🕚⚡️🎈🐀
# Build Awesome (Eleventy) 🕚⚡️🎈🐀

A simpler static site generator. An alternative to Jekyll. Written in JavaScript. Transforms a directory of templates (of varying types) into HTML.

Works with HTML, Markdown, JavaScript, Liquid, Nunjucks, with addons for WebC, Sass, Vue, Svelte, TypeScript, JSX, and many others!

## ➡ [Documentation](https://www.11ty.dev/docs/)

- Star [this repo on GitHub](https://github.com/11ty/eleventy/)!
- Star [this repo on GitHub](https://github.com/11ty/buildawesome/)!
- Follow us [on Mastodon `@11ty@neighborhood.11ty.dev`](https://neighborhood.11ty.dev/@11ty)
- Follow us [on Bluesky `@11ty.dev`](https://bsky.app/profile/11ty.dev)
- Install [from npm](https://www.npmjs.com/org/11ty)
Expand All @@ -20,6 +20,9 @@ Works with HTML, Markdown, JavaScript, Liquid, Nunjucks, with addons for WebC, S
## Installation

```
npm install @awesome.me/buildawesome --save-dev

# Backwards compatible here too:
npm install @11ty/eleventy --save-dev
```

Expand All @@ -35,18 +38,18 @@ We have a few test suites, for various reasons:

- [ava JavaScript test runner](https://github.com/avajs/ava) ([assertions docs](https://github.com/avajs/ava/blob/main/docs/03-assertions.md)) (primary test suite in `test/`)
- [Node.js Test runner](https://nodejs.org/api/test.html) (secondary test suite in `test_node/`)
- [Vitest (in Browser Mode)](https://vitest.dev/guide/browser/) (client tests in `packages/client/test/`)
- [Benchmark for Performance Regressions](https://github.com/11ty/eleventy-benchmark)
- [Vitest (in Browser Mode)](https://vitest.dev/guide/browser/) (browser tests in `packages/browser/test/`)
- [Benchmark for Performance Regressions](https://github.com/11ty/buildbenchmark)

These run in various environments:

- [Continuous Integration on GitHub Actions](https://github.com/11ty/eleventy/actions/workflows/ci.yml)
- [Code Coverage Statistics](https://github.com/11ty/eleventy/blob/master/docs/coverage.md)
- [Continuous Integration on GitHub Actions](https://github.com/11ty/buildawesome/actions/workflows/ci.yml)
- [Code Coverage Statistics](https://github.com/11ty/buildawesome/blob/master/docs/coverage.md)

## Community Roadmap

- [Top Feature Requests](https://github.com/11ty/eleventy/discussions/categories/enhancement-queue?discussions_q=is%3Aopen+category%3A%22Enhancement+Queue%22+sort%3Atop) (Vote for your favorites!)
- [Top Bugs 😱](https://github.com/11ty/eleventy/issues?q=is%3Aissue+is%3Aopen+label%3Abug+sort%3Areactions) (Add your own votes using the 👍 reaction)
- [Top Feature Requests](https://github.com/11ty/buildawesome/discussions/categories/enhancement-queue?discussions_q=is%3Aopen+category%3A%22Enhancement+Queue%22+sort%3Atop) (Vote for your favorites!)
- [Top Bugs 😱](https://github.com/11ty/buildawesome/issues?q=is%3Aissue+is%3Aopen+label%3Abug+sort%3Areactions) (Add your own votes using the 👍 reaction)

## Plugins

Expand Down
2 changes: 1 addition & 1 deletion SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## Reporting a Vulnerability

Privately report a security issue by navigating to https://github.com/11ty/eleventy/security and using the “Report a vulnerability” button.
Privately report a security issue by navigating to https://github.com/11ty/buildawesome/security and using the “Report a vulnerability” button.

Read more at: https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing-information-about-vulnerabilities/privately-reporting-a-security-vulnerability

Expand Down
76 changes: 42 additions & 34 deletions cmd.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ const pkg = require("./package.json");
require("@11ty/node-version-check")(pkg, {
message: function (requiredVersion) {
return (
"Eleventy " +
"Build Awesome (Eleventy) " +
pkg.version +
" requires Node " +
requiredVersion +
". You will need to upgrade Node to use Eleventy!"
". You will need to upgrade Node!"
);
},
});
Expand All @@ -26,23 +26,31 @@ class SimpleError extends Error {
}

async function exec() {
const { createDebug } = await import("obug");
const debug = createDebug("Eleventy:cmd");
const { createDebug } = await import("./src/Util/DebugLogUtil.js");
const debug = createDebug("CLI");

// Notes about friendly error messaging with outdated Node versions: https://github.com/11ty/eleventy/issues/3761
const { EleventyErrorHandler } = await import("./src/Errors/EleventyErrorHandler.js");
// Notes about friendly error messaging with outdated Node versions: https://github.com/11ty/buildawesome/issues/3761
const { ErrorHandler } = await import("./src/Errors/ErrorHandler.js");
const { getEnvValue } = await import("./src/Util/EnvironmentVars.cjs");
const { default: ConsoleLogger } = await import("./src/Util/ConsoleLogger.js");

// Defensive use of Node 22.8+ Module Compile Cache
if(!process.env?.ELEVENTY_SKIP_NODE_COMPILE_CACHE) {
if(!getEnvValue("SKIP_NODE_COMPILE_CACHE")) {
try {
const nodeMod = await import('node:module').then(mod => mod.default);
nodeMod.enableCompileCache?.();
} catch(e) {
debug("Node compile cache error (optional API) %o", e);
debug("Node compile cache error (ignored: optional API) %o", e);
}
}

try {
function getFallbackErrorHandler() {
let handler = new ErrorHandler();
handler.logger = new ConsoleLogger();
return handler;
}

const argv = minimist(process.argv.slice(2), {
string: ["input", "output", "formats", "config", "pathprefix", "port", "to", "incremental", "loader"],
boolean: [
Expand All @@ -66,30 +74,30 @@ async function exec() {
},
});

debug("command: eleventy %o", argv);
const { Eleventy } = await import("./src/Eleventy.js");
debug("Arguments: %o", argv);
const { default: Core } = await import("./src/Core.js");

let ErrorHandler = new EleventyErrorHandler();
let handler = getFallbackErrorHandler();

process.on("unhandledRejection", (error, promise) => {
ErrorHandler.fatal(error, "Unhandled rejection in promise");
handler.fatal(error, "Unhandled rejection in promise");
});
process.on("uncaughtException", (error) => {
ErrorHandler.fatal(error, "Uncaught exception");
handler.fatal(error, "Uncaught exception");
});
process.on("rejectionHandled", (promise) => {
ErrorHandler.warn(promise, "A promise rejection was handled asynchronously");
handler.warn(promise, "A promise rejection was handled asynchronously");
});

if (argv.version) {
console.log(Eleventy.getVersion());
console.log(Core.getVersion());
return;
} else if (argv.help) {
console.log(Eleventy.getHelp());
console.log(Core.getHelp());
return;
}

let elev = new Eleventy(argv.input, argv.output, {
let core = new Core(argv.input, argv.output, {
source: "cli",
// --quiet and --quiet=true both resolve to true
quietMode: argv.quiet,
Expand All @@ -100,55 +108,55 @@ async function exec() {
loader: argv.loader,
});

// reuse ErrorHandler instance in Eleventy
ErrorHandler = elev.errorHandler;
// override with ErrorHandler instance in Core
handler = core.errorHandler;

// Before init
elev.setFormats(argv.formats);
core.setFormats(argv.formats);

await elev.init();
await core.init();

if (argv.to === "json") {
// override logging output
elev.setIsVerbose(false);
core.setIsVerbose(false);
}

// Only relevant for watch/serve
elev.setIgnoreInitial(argv["ignore-initial"]);
core.setIgnoreInitial(argv["ignore-initial"]);

// v4.0.0-alpha.8 multiple now supported via:
// --incremental=one.md --incremental=two.md => ["one.md", "two.md"]
// --incremental=one.md,two.md => ["one.md", "two.md"]
if(argv.incremental) {
elev.setIncrementalFiles(argv.incremental);
core.setIncrementalFiles(argv.incremental);
} else if(argv.incremental !== undefined) {
elev.setIncrementalBuild(argv.incremental === "" || argv.incremental);
core.setIncrementalBuild(argv.incremental === "" || argv.incremental);
}

if (argv.serve || argv.watch) {
if(argv.to === "json") {
throw new SimpleError("--to=json is not compatible with --serve or --watch.");
}

await elev.watch();
await core.watch();

if (argv.serve) {
// TODO await here?
elev.serve(argv.port);
core.serve(argv.port);
}

process.on("SIGINT", async () => {
elev.interrupt();
core.interrupt();

await elev.stopWatch();
await core.stopWatch();
process.exitCode = 0;
});
} else {
// `fs:templates` will skip passthrough copy
if (!argv.to || argv.to === "fs" || argv.to.startsWith("fs:")) {
await elev.write(argv.to);
await core.write(argv.to);
} else if (argv.to === "json") {
let result = await elev.toJSON()
let result = await core.toJSON()
console.log(JSON.stringify(result, null, 2));
} else {
throw new SimpleError(
Expand All @@ -157,9 +165,9 @@ async function exec() {
}
}
} catch (error) {
if(typeof EleventyErrorHandler !== "undefined") {
let ErrorHandler = new EleventyErrorHandler();
ErrorHandler.fatal(error, "Eleventy Fatal Error (CLI)");
if(typeof ErrorHandler !== "undefined") {
let handler = getFallbackErrorHandler();
handler.fatal(error, "Fatal Error (CLI)");
} else {
console.error(error);
process.exitCode = 1;
Expand Down
Binary file added docs/ba-11ty-logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion docs/coverage.njk
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
permalink: coverage.md
---
# Code Coverage for Eleventy v{{ pkg.version }}
# Code Coverage for Build Awesome v{{ pkg.version }}

| Filename | % Lines | % Statements | % Functions | % Branches |
| --- | --- | --- | --- | --- |
Expand Down
4 changes: 2 additions & 2 deletions docs/eleventy.coverage.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import { TemplatePath } from "@11ty/eleventy-utils";

const __dirname = dirname(fileURLToPath(import.meta.url));

export default function (eleventyConfig) {
eleventyConfig.addFilter("removeDir", function (str) {
export default function (config) {
config.addFilter("removeDir", function (str) {
return TemplatePath.stripLeadingSubPath(str, TemplatePath.join(__dirname, ".."));
});

Expand Down
4 changes: 2 additions & 2 deletions docs/release-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,11 @@
1. Check it all in and commit
1. Tag new version
1. Wait for GitHub Actions to complete to know that the build did not fail.
1. Publish a release on GitHub at https://github.com/11ty/eleventy/releases pointing to the tag of the release. Hitting the publish button on this workflow will use GitHub Actions to publish the package to npm on the correct dist-tag and includes npm package provenance for the release.
1. Publish a release on GitHub at https://github.com/11ty/buildawesome/releases pointing to the tag of the release. Hitting the publish button on this workflow will use GitHub Actions to publish the package to npm on the correct dist-tag and includes npm package provenance for the release.

- Main release: no version suffix publishes to `latest` (default) tag on npm
- Make sure to include OpenCollective usernames for release notes here https://www.11ty.dev/supporters-for-release-notes/
- Canary release: `-alpha.` version suffix in `package.json` publishes to `canary` tag on npm: https://github.com/11ty/eleventy/issues/2758
- Canary release: `-alpha.` version suffix in `package.json` publishes to `canary` tag on npm: https://github.com/11ty/buildawesome/issues/2758
- Beta release: `-beta.` version suffix publishes to `beta` tag on npm

Unfortunate note about npm and tags (specifically `canary` here): if you push a 1.0.0-canary.x to `canary` (even though `2.0.0-canary.x` exists), it will use the last pushed tag when you npm install from `@canary` (not the highest version number)
Expand Down
Loading