Features Site globals
siteData adds global site data via eleventyComputed. All scalar fields from pkg.site (package.json) and data.site (_data/site.*) are spread onto site; page-level wins over pkg. The asset keys below are merged (pkg → site) rather than overridden.
| Variable | Value / Description |
|---|---|
{{ site.year }} |
Current year (e.g. 2026) |
{{ site.prod }} |
true for eleventy build, false for eleventy serve |
{{ site.styles }} |
Merged array of stylesheet URLs |
{{ site.scripts }} |
Merged array of script URLs |
{{ site.head_extras }} |
Merged array of custom head HTML/strings |
{{ site.body_extras }} |
Merged array of custom body HTML/strings |
The named export siteData(data) is also usable directly (e.g. as RSS feed metadata).
How it works
/anyblades/eleventy-blades/refs/heads/main/features/siteData.js :
const MERGED_KEYS = ["styles", "scripts", "head_extras", "body_extras"];
// Lodash style
export const castArray = (val) => (val == null ? [] : Array.isArray(val) ? val : [val]);
export const concatUnique = (a, b) => [...new Set([...castArray(a), ...castArray(b)])];
export const siteData = (data) => {
const pkgSite = data.pkg?.site ?? {};
const dataSite = data.site ?? {};
return {
...pkgSite,
...dataSite,
...Object.fromEntries(MERGED_KEYS.map((key) => [key, concatUnique(pkgSite[key], dataSite[key])])),
};
};
export default function (eleventyConfig) {
eleventyConfig.addGlobalData("eleventyComputed", {
site: (data) => ({
...siteData(data),
prod: process.env.ELEVENTY_RUN_MODE === "build",
year: new Date().getFullYear(),
}),
});
}