A starter repository showing how to build a blog with the Eleventy site generator (using the v2.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.
{% image %}
shortcode.
<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 a blog post as a draft. Drafts are only included during --serve
/--watch
and are excluded from full builds. View the Drafts plugin source code.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._site
folder to netlify.com/drop
to upload it without using git
.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.content/feed/feed.njk
content/feed/json.njk
_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="https://github.com/kirixvelu/kirify-starter/blob/main/{% getBundleFileUrl "css" %}">
style-src: 'unsafe-inline'
(less secure).