# An Eleventy blog with Decap CMS already wired to Netlify

> eleventy-netlify-boilerplate is an MIT-licensed starter that pairs the Eleventy 3 static site generator with Decap CMS and a Netlify deploy button, so a blog with tags, archives, a contact form and a CMS is one click away. The wiring is convenient, and the parts that lean on Netlify Identity and Netlify Forms are the parts you will have to unpick elsewhere.

**danurbanowicz/eleventy-netlify-boilerplate** — A template for building a blog with the Eleventy static site generator and Decap CMS

- Repository: https://github.com/danurbanowicz/eleventy-netlify-boilerplate
- Website: https://eleventy-netlify-boilerplate.netlify.app/
- Stars: 546 · Forks: 190
- Language: Nunjucks
- License: MIT
- Published: 2026-10-22 · Updated: 2026-10-22 · Language: en
- Canonical page: https://hysenlabs.com/projects/danurbanowicz-eleventy-netlify-boilerplate

## What the one-click deploy actually gives you

The deploy button in the README is the centre of the template. Clicking it copies the demo site into your own Netlify account and, in the same flow, creates a new repository in your GitHub account with the code, sets up continuous deployment to Netlify's CDN, wires Netlify Identity for controlling CMS users and access, configures Decap CMS for managing content, and turns on Netlify Forms for the contact form. That is a lot of infrastructure in one step, and it is the reason this template exists. The underlying stack is deliberately plain: pre-generated HTML from Eleventy, Markdown for content, Nunjucks or Liquid for layout, and no JavaScript framework at all. The demo site is live at eleventy-netlify-boilerplate.netlify.app, which is the fastest way to see what you would be copying.

## The file layout is the whole architecture

The top level of the repository tells you how the site is organised before you read a line of documentation. .eleventy.js holds the Eleventy configuration, with a README instruction to look at it to see whether you want to change any options, and .eleventyignore excludes paths from the build. Content lives in posts/ and pages/, shared layout in _includes/, and site-wide values in _data/ where metadata.json holds the site title and author details and can carry other commonly used values. Templates at the root, author.njk, authors.njk and tags.njk, generate the tag and author pages. static/ holds assets that are copied through untouched, admin/ holds the Decap CMS configuration and the identity email templates, and netlify.toml plus .nvmrc handle the deployment and the Node version.

## Running the site locally before you deploy it

The local development path is short. Clone the repository, move into it, install the generator, and run it:

```bash
git clone https://github.com/danurbanowicz/eleventy-netlify-boilerplate.git my-blog-name
```

```bash
cd my-blog-name
```

```bash
npm install @11ty/eleventy
```

The build command runs the same binary the scripts use:

```bash
npx @11ty/eleventy
```

and three variants exist for the way people actually work. Adding --watch rebuilds when a template changes, adding --serve builds and hosts locally, and setting DEBUG=* runs in debug mode:

```bash
npx @11ty/eleventy --watch
```

```bash
npx @11ty/eleventy --serve
```

```bash
DEBUG=* npx @11ty/eleventy
```

The package.json mirrors these as npm scripts named build, watch, serve and debug, so a team can standardise on npm run build without everyone remembering the flags.

## The dependency list is small and entirely build-time

The package.json declares the Eleventy generator at ^3.1.2, which is why the feature list can say it now uses Eleventy 3, and the README notes the template is based on the Eleventy Base Blog project, with extra Eleventy usage details to be found there. The rest of the dependencies are six specific packages doing specific jobs: @11ty/eleventy-navigation for the automatic navigation menus, clean-css for the minification step, html-minifier for the pre-build and minify pass over the HTML, luxon for date handling, markdown-it-anchor for heading anchors in the Markdown content, and uglify-js for the optional minified inline JavaScript pipeline. All of them sit in devDependencies, and there are no runtime dependencies, since the output is static files. The CSS is described as 2kb minified and inlined for the fastest render, which is the sort of detail a starter is judged on when the point is speed.

## Authentication is the step people skip and regret

After deployment, Netlify Identity adds you as a CMS user and emails an invitation, and accepting it is optional if you plan to authenticate through an OAuth provider such as GitHub instead. The README recommends the OAuth route, on the grounds that it removes the need for an email and password to log into the CMS and is generally more secure. To use it you add a provider in the Netlify app settings under Settings, Identity and External providers, then visit /admin on your site, pick the provider from the list, and you are logged in. There is a second configuration step that is easy to miss: Netlify Identity emails, such as signup and reset password, need to know where your templates live. The repository ships four under /admin/email-templates/, and you paste the root-relative path of each into the matching box in Site Settings, Identity, for the Invitation, Confirmation, Recovery and Email change templates, for example /admin/email-templates/invitation.html.

## The gotcha that appears the moment a repository goes private

There is one documented trap, and it arrives at the worst possible time. If you change the repository created at deploy time from public to private, you have to regenerate the token, because the token produced by the deploy button can only access public repositories. The fix is in the Netlify site dashboard under Settings, then the Identity section, scrolling to Services, where an Edit settings button exposes a Generate access token in GitHub link. People who hit this usually hit it after the fact, once a blog has content and the repository is genuinely private, so it is worth doing the switch early and regenerating the token at the same time rather than under pressure.

## Author archives, tags and the features that run themselves

The feature list mixes two kinds of item, and the difference matters. Some are structural: sample pages, a blog with tag support, Markdown content with Nunjucks or Liquid layouts, navigation menus generated through the Eleventy Navigation plugin, and a working contact form. Others are things that stay working without you: maintenance-free post author archives, which is the kind of detail that turns into a chore the moment you build it yourself. The README also claims a Lighthouse performance score of 100/100/100/100, which you can treat as the template's own measurement of its demo rather than a guarantee for the site you build on top of it. What the archive mechanism actually does is not described, so if you want a particular author page shape, check the templates in author.njk and authors.njk before assuming.

## Where this starter stops being enough

Two limits, and the second is the sharper one. The first is scope: this is a blog template, so anything beyond posts, pages, tags and authors, whether it is a search index, a membership system or content that changes per request, means writing it yourself against a static build. The second is portability. The CMS depends on Netlify Identity for user management, the contact form depends on Netlify Forms, and the deploy button depends on Netlify's continuous deployment, so a blog that starts here and moves to another host inherits three pieces of work. The template is open source and MIT-licensed, and it is based on the Eleventy Base Blog project, so the Eleventy half of it is portable by construction; the Netlify half is the part that is not. On maintenance, the last push was on 2026-05-19 and the repository publishes no GitHub releases, with the version tracked in package.json as 1.0.5, so you track upstream by commit rather than by tag.

## Conclusion

eleventy-netlify-boilerplate is a good fit for a writer or a small team who wants a working blog with an editorial CMS this afternoon, and who is happy to host on Netlify so the Identity and Forms pieces keep working as written. It is a poor fit if you intend to move hosting later, because authentication and the contact form are wired to Netlify services rather than to a portable backend, and it is not a foundation for a site with server-side behaviour. Check three things before you build on it: that the CMS login path works with an OAuth provider added under Settings, Identity and External providers, that the four email templates in /admin/email-templates/ are pointed at in your site settings so invitations and password resets deliver, and that the .eleventy.js configuration matches the site structure you need, since the content model in posts/ and _data/metadata.json is what everything else in the template assumes.

## FAQ

### What does the Eleventy Netlify Boilerplate include out of the box?

It includes Eleventy 3, sample pages and a blog with tag support, Decap CMS with editor previews, automatic navigation menus, maintenance-free post author archives, a working contact form, Markdown content with Nunjucks or Liquid layouts, and a CSS file of 2kb minified and inlined. There is no JavaScript framework involved.

### How do I run the site locally before deploying it?

Clone the repository, change into the directory, run npm install @11ty/eleventy, and then run npx @11ty/eleventy. Adding --watch rebuilds on change, --serve hosts locally, and setting DEBUG=* gives debug output. The package.json exposes the same commands as the build, watch, serve and debug scripts.

### How do I log in to the Decap CMS in this boilerplate?

The README recommends adding an OAuth provider such as GitHub under Settings, Identity and External providers in the Netlify app settings, then visiting /admin on your site and selecting that provider. Accepting the emailed Netlify Identity invitation is not necessary if you use an OAuth provider.

### What happens if I make the repository created by the deploy button private?

You have to regenerate the token, because the token generated by the deploy button can only access public repositories. The README points to Settings in the Netlify site dashboard, then the Identity section and Services, where Edit settings exposes a link to generate an access token in GitHub.

### Where do I configure the Netlify Identity email templates?

The four templates live in /admin/email-templates/ in the repository. In the Netlify site settings under Site Settings and Identity you fill in the Path to template field for the Invitation, Confirmation, Recovery and Email change templates, for example /admin/email-templates/invitation.html.

## Sources

- [danurbanowicz/eleventy-netlify-boilerplate on GitHub](https://github.com/danurbanowicz/eleventy-netlify-boilerplate)
- [Issues](https://github.com/danurbanowicz/eleventy-netlify-boilerplate/issues)
- [License: MIT](https://github.com/danurbanowicz/eleventy-netlify-boilerplate/blob/master/LICENSE)
- [Project website](https://eleventy-netlify-boilerplate.netlify.app/)
- [README](https://github.com/danurbanowicz/eleventy-netlify-boilerplate/blob/master/README.md)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/danurbanowicz-eleventy-netlify-boilerplate
