A starter repository for a blog web site using the Eleventy static site generator.
A starter repository showing how to build a blog with the Eleventy site generator (using the v3.0 release).
mkdir my-blog-name
cd my-blog-name
git clone https://github.com/11ty/eleventy-base-blog.git .
Optional: Review eleventy.config.js
and _data/metadata.js
to configure the site’s options and data.
npm install
Generate a production-ready build to the _site
folder:
npx @11ty/eleventy
Or build and host on a local development server:
npx @11ty/eleventy --serve
Or you can run debug mode to see all the internals.
--serve
for speedy local builds.<img>
markup if possible (single image format) but switches automatically to <picture>
for multiple image formats.<picture>
syntax markup with srcset
and optional sizes
width
/height
attributes to avoid content layout shift.loading="lazy"
for native lazy loading without JavaScript.decoding="async"
eleventy-plugin-bundle
.draft: true
to mark any template as a draft. Drafts are only included during --serve
/--watch
and are excluded from full builds. This is driven by the addPreprocessor
configuration API in eleventy.config.js
. Schema validator will show an error if non-boolean value is set in data cascade.sitemap.xml
Deploy this Eleventy site in just a few clicks on these services:
.github/workflows/gh-pages.yml.sample
for information on Deploying to GitHub Pages.content/about/index.md
is an example of a content page.content/blog/
has the blog posts but really they can live in any directory. They need only the posts
tag to be included in the blog posts collection.eleventyNavigation
key (via the Eleventy Navigation plugin) in your front matter to add a template to the top level site navigation. This is in use on content/index.njk
and content/about/index.md
.eleventy.config.js
-> templateFormats
.public
folder in your input directory will be copied to the output folder (via addPassthroughCopy
in the eleventy.config.js
file). This means ./public/css/*
will live at ./_site/css/*
after your build completes._includes/layouts/base.njk
: the top level HTML structure_includes/layouts/home.njk
: the home page template (wrapped into base.njk
)_includes/layouts/post.njk
: the blog post template (wrapped into base.njk
)_includes/postslist.njk
is a Nunjucks include and is a reusable component used to display a list of all the posts. content/index.njk
has an example of how to use it.If your site enforces a Content Security Policy (as public-facing sites should), you have a few choices (pick one):
base.njk
, remove <style>{% getBundle "css" %}</style>
and uncomment <link rel="stylesheet" href="{% getBundleFileUrl "css" %}">
style-src: 'unsafe-inline'
(less secure).