11ty/buildawesome
63.1
Adequate · 15 October 2026
18.3k
lines of production code
JavaScript
primary language
1
measurement over time
What this system is
This system is a static site generator, specifically Eleventy v4, which has been rebranded as Build Awesome. It provides a core engine for processing templates and data, with modular support for various template languages like Liquid, Nunjucks, and Markdown. The system includes utilities for browser-compatible bundling, incremental build optimization, and structured event reporting, while maintaining a CLI interface for site generation.
How it got here
2017 — Eleventy v4 alpha and structural overhaul
7 changes.
The project underwent a major structural overhaul and rebranding to Build Awesome (Eleventy), preparing for the Eleventy v4.0.0-alpha.10 release with a Node 22 requirement and scoped package dependencies. This period focused on modernizing the codebase by refactoring template engines into a modular class-based architecture, removing legacy template support, and introducing new features like NDJSON event reporting and an HTML base URL plugin.
2018–2024 — v4 architecture and stability
9 changes.
This period focused on restructuring the codebase for the v4 architecture, introducing modular components for data resolution, error handling, and utility functions. It also enhanced stability and performance through improved benchmarking, precise incremental build tracking, and safer JavaScript front matter execution.
2025–2026 — Browser support and package restructuring
7 changes.
The project restructured its distribution to support browser environments by externalizing template engines and introducing the @11ty/client package with BuildAwesome aliasing. This period also established the @awesome.me/buildawesome wrapper package and automated release workflows, while adding comprehensive TypeScript type definitions to modernize the API surface.
Features
Added TypeScript sample utility file
A new sample file (TypeScriptSample.cts) has been added to the Util/TypeScript directory, exporting a function that accepts boolean and string parameters.
src/Util/TypeScript · high confidence
Adds TypeScript type definitions and defineConfig export
The package now includes a new \types/index.d.ts\ file that provides TypeScript definitions for the core library. This adds a \defineConfig\ helper function for configuring the application, exports the \UserConfig\ type, and defines types for the \Core\ class (aliased as \Eleventy\) and various plugins such as \BundlePlugin\, \RenderPlugin\, and \I18nPlugin\. It also marks several legacy plugins and functions as deprecated or removed in v3.
types · high confidence
Automated release and type pruning scripts
Added new scripts to automate the release process and maintain type definitions. The \scripts/release.sh\ script orchestrates the publishing of \@11ty/eleventy\, \@11ty/client\ (now in \packages/browser\), and \@awesome.me/buildawesome\ using npm's staged publish feature with provenance, including steps for installing dependencies, running tests via Vitest, generating TypeScript types, and copying documentation assets. A companion \scripts/release-dryrun.sh\ allows testing this workflow with canary and alpha tags. Additionally, \scripts/prune-types.js\ was added to automatically remove generated TypeScript declaration files that no longer correspond to source files included in \tsconfig.json\, keeping the \types/\ directory clean.
scripts · high confidence
Browser-compatible client bundle with BuildAwesome aliasing
The \packages/browser\ directory now provides a browser-friendly distribution of Eleventy under the \@11ty/client\ package. This includes bundled entry points for the core engine (\core-minimal.js\, \core-fs.js\) and specific template engines (Markdown, Liquid, Nunjucks) plus the i18n plugin. To support browser environments, the bundle includes shims for Node.js globals like \process\ and \Buffer\. Additionally, the core classes are exported with both \Eleventy\ and \BuildAwesome\ names, and the build scripts are configured to generate these optimized bundles for browser consumption.
packages/browser · high confidence
Initial release scaffolding for @awesome.me/buildawesome package
This change introduces the initial structure for the new \@awesome.me/buildawesome\ package, which acts as a thin wrapper around \@11ty/eleventy\. It provides a CLI entry point (\cmd.js\) that sets a specific environment variable to control debug log prefixes, re-exports the core Eleventy functionality (including a named \BuildAwesome\ export), and exposes the default \UserConfig\ and Git utilities. Additionally, it includes a TypeScript configuration for generating declaration files and a release script (\update-package-json.js\) to synchronize the package version with the core Eleventy release.
packages/build-awesome · high confidence
Introduces NDJSON event reporting and adapter-based package shims
Users can now write build events to a file using the new \NdjsonReporter\ (accessible via \--events-file\), which emits structured JSON lines for build start, end, and error states. The codebase also introduces an adapter layer for third-party packages (such as \chalk\, \semver\, and \url\), providing lightweight client-side stubs (e.g., \chalk.client.js\) and core implementations to support bundling and serverless environments.
src · high confidence
New HTML Base plugin for automatic URL path prefixing
Adds the HtmlBasePlugin, which automatically transforms relative URLs in HTML output to include the configured path prefix. This ensures that links and assets resolve correctly when the site is served from a subdirectory, handling both individual URL transformations via the \htmlBaseUrl\ filter and bulk HTML content transformations via the \transformWithHtmlBase\ filter or the global HTML transformer pipeline.
src/Plugins · high confidence
New collection navigation filters and updated URL handling
This change introduces three new Nunjucks/JavaScript filters for collection navigation: \getCollectionItem\ (to retrieve a specific item by index offset), \getCollectionItemIndex\ (to find the current item's index within a collection), and \getLocaleCollectionItem\ (to resolve collection items across language locales, supporting the i18n plugin). Additionally, the \url\ filter behavior has been updated to correctly handle path prefixes and relative URLs by leveraging \@11ty/eleventy-utils\ for path normalization, ensuring that relative links are preserved as-is while absolute paths are correctly prefixed.
src/Filters · high confidence
New object utility functions introduced in src/Util/Objects
Added five new utility modules to the codebase: DeepFreeze for recursively freezing plain objects, ObjectFilter for filtering object entries based on a callback, ProxyWrap for creating proxies with fallback object support (addressing key-ordering issues), Sortable for managing and sorting item collections with various strategies, and Unique for deduplicating arrays.
src/Util/Objects · high confidence
Behavioural changes
Benchmarking system now filters low-impact logs and uses performance.now()
The benchmarking infrastructure in src/Benchmark has been refactored to improve log clarity and timing precision. BenchmarkGroup now enforces a minimum threshold (defaulting to 50ms and 8% of total time) for verbose warnings, ensuring that only significant performance impacts are highlighted to the user. Additionally, debug logs are suppressed for benchmarks with very low call counts (1-2 times) or negligible duration (0ms/1%), reducing noise. The timing mechanism has been updated to use the \performance.now()\ API where available, providing higher-resolution timestamps compared to the previous \Date.getTime()\ fallback.
src/Benchmark · high confidence
Externalize template engines for dynamic loading in reduced core
The Liquid, Markdown, and Nunjucks template engines are now externalized in the \src/Adapters/Engines\ directory to support dynamic loading. This change introduces \.core.js\ stubs that export \undefined\ and corresponding \.js\ re-export files, allowing the core bundle to remain smaller by excluding these engines until they are needed, while ensuring the Nunjucks adapter functions correctly in browser environments.
src/Adapters/Engines · high confidence
Project rebrand to Build Awesome (Eleventy) and structural overhaul
The project has been rebranded from 'elevenisland' to 'Build Awesome (Eleventy)', updating the README, license, and code of conduct to reflect the new identity and community standards. The repository structure has been significantly reorganized: the legacy \config.json\ and \cmd.js\ files have been removed in favor of a new \cmd.cjs\ entry point and a flat \eslint.config.js\ configuration. New tooling files have been added, including \.editorconfig\ and \.prettierrc.json\ to standardize code formatting (tabs for JS, spaces for YAML), \.nvmrc\ to pin the Node version to 24, and \SECURITY.md\ to define vulnerability reporting procedures.
(repo-wide) · high confidence
Refactored data resolution into modular components with improved incremental build tracking
The data processing logic in src/Data has been reorganized into distinct modules (ComputedData, ComputedDataProxy, ComputedDataQueue, etc.) to better manage computed data dependencies and execution order. This change introduces precise tracking of global data reads using proxies, ensuring that incremental builds only re-render templates that actually consume changed global data, thereby improving build performance. It also supports TypeScript data files when available and maintains backward compatibility for configuration data resolution.
src/Data · high confidence
Refactored error handling with structured error classes and improved logging
The error handling system in src/Errors has been restructured to provide clearer, more maintainable error reporting. A new BaseError class now serves as the foundation for all Eleventy-specific errors, supporting the standard Error.cause property for chaining original errors and allowing file path context to be attached. Specific error types like DuplicatePermalinkOutputError, TemplateContentPrematureUseError, and UsingCircularTemplateContentReferenceError have been introduced to handle distinct failure scenarios. The ErrorHandler class now centralizes logging logic, deduplicating repeated error messages and properly unwrapping nested causes for display, while ErrorUtil provides helpers for embedding and extracting error information from template engines that may not support native error chaining.
src/Errors · high confidence
Refactored internal utilities and event system for v4
The \src/Util\ directory has been restructured to support the v4 architecture, introducing a new \AsyncEventEmitter\ that defaults to sequential event handling to prevent race conditions, and a \ConsoleLogger\ that supports dynamic prefixes (including \BuildAwesome:\). Path handling is now centralized through \PathNormalizer\ and \GlobRemap\ to ensure consistent forward-slash usage across platforms, while \HtmlTransformer\ now supports priority-sorted plugins and callbacks. The codebase also integrates \picomatch\ for glob matching, \@11ty/parse-date-strings\ for date parsing, and an \EsmResolver\ with cache-busting hooks to improve ESM module resolution stability.
src/Util · high confidence
Removal of sample and legacy template files
The templates directory has been cleaned up by deleting several sample and legacy template files, including \post2.ejs\, \test.ejs\, and \test3.hbs\. These files, which contained example content and layout structures for EJS and Handlebars, are no longer part of the project.
templates · high confidence
Support for arbitrary JavaScript front matter via import/export
The JavaScript front matter engine now supports arbitrary JavaScript code by leveraging dynamic import/export instead of eval(). This change allows users to use complex JavaScript expressions in front matter, while maintaining compatibility with the legacy \javascript\ type that previously relied on eval(). The implementation uses RetrieveGlobals to handle the code execution safely.
src/Engines/FrontMatter · high confidence
Support for buildawesome: prefix in attribute resolution
The PostHTML utility now recognizes the 'buildawesome:' prefix alongside 'eleventy:' when resolving and checking for attributes. This allows the transformer to correctly map and detect attributes using either prefix, ensuring compatibility with tools or configurations that utilize the 'buildawesome:' namespace.
src/Util/PostHtml · high confidence
Template engine architecture refactored into dedicated classes
The template engine system has been restructured into a modular class-based architecture within the \src/Engines\ directory. A new \TemplateEngine\ base class provides shared functionality, while specific engines (Nunjucks, Liquid, Markdown, JavaScript, HTML, and Custom) are now implemented as distinct classes. This change introduces a \TemplateEngineManager\ to handle engine instantiation, caching, and aliasing, and adds support for custom engine initialization via an \init\ method. The refactoring also improves incremental build support by tracking template dependencies and enhances error handling and context augmentation for filters and shortcodes.
src/Engines · high confidence
Test coverage
Added Node.js test suite for TSX, MDX, and type checking; Added placeholder files for configuration directory export test stubs; Added unit tests for core utility and data processing classes.
Dependencies
Eleventy v4.0.0-alpha.10 dependency overhaul and Node 22 requirement
The project has been updated to version 4.0.0-alpha.10, raising the minimum Node.js version to 22.15 and migrating the package name to @11ty/eleventy. This release replaces several legacy dependencies with scoped @11ty packages (including @11ty/nunjucks, @11ty/gray-matter, and @11ty/dependency-tree) and upgrades core libraries such as liquidjs to 10.30.0, markdown-it to 15.0.2, and chokidar to 5.0.0. The dependency graph has also been significantly reduced by removing older template engines like pug, hbs, mustache, ejs, and haml, as well as fs-extra and glob-watcher, in favor of modern, specialized alternatives.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Baseline
- First survey — no prior run to compare against. CAI 63.
Lenses
- Code Health 83
- Architecture 71
- Maturity 59
- Readiness 68
- Security 95
- Performance 60
Changes since last survey
- 300 commits — 244 feature/other, 56 fixes
By area
- (root) — 90 commits
- (repo) — 52 commits
- .github/workflows — 30 commits
- src/Util — 22 commits
- src/Data — 12 commits
- src/Engines — 10 commits
- .github/dependabot.yml — 7 commits
- src/CoreMinimal.js — 7 commits
- src/Core.js — 6 commits
- packages/browser — 5 commits
- packages/build-awesome — 5 commits
- src/Eleventy.js — 5 commits
- src/Plugins — 4 commits
- src/Template.js — 4 commits
- src/Errors — 3 commits
- src/defaultConfig.js — 3 commits
- test/stubs — 3 commits
- src/Benchmark — 2 commits
- src/EleventyFiles.js — 2 commits
- src/ExtensionMap.js — 2 commits
Notable commits
- fix: A few tweaks with the upstream Nunjucks fix to always include cause
- fix: Adds contentPipeline object. Fixes #4393
- fix: Adds a defer boolean option to the addCollection API. Fixes #4182
- fix: Adds a defineConfig export and fixes typescript config types. Fixes #4395
- fix: Fix #4325
- fix: Fix CI for Windows tests
- fix: Fix TypeScript data files not being processed (#4247)
- fix: Fix audit
- fix: Fix codeql error
- fix: Fix double colon bug in DEBUG environment variables
- fix: Fix eslint package deprecation warning
- fix: Fix for isTemplateFile bug with root/input relative paths
- fix: Fix import paths
- fix: Fix macOS 27 vitest temp folder
- fix: Fix missing function in client build
- fix: Fix nested premature template content errors
- fix: Fix npm audit (via eslint dev dep)
- fix: Fix paths for render and i18n plugins in resolvePlugin (#4390)
- fix: Fix server output from ConsoleLogger reuse
- fix: Fix signing
- …and 280 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
11ty/buildawesome was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 15 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 0191dacec28cd38ee6af713798c19318a7a94574 — the exact code this score is about.
- Scored under rubric-2026.10.5 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-fe8540b5da9b.