
Security News
November CVEs Fell 25% YoY, Driven by Slowdowns at Major CNAs
November CVE publications fell 25% YoY even as 2025 totals rose, showing how a few major CNAs can swing “global” counts and skew perceived risk.
@kitschpatrol/eleventy-plugin-parcel
Advanced tools
A plugin integrating the Parcel build tool and dev server with the Eleventy static site generator.
A plugin integrating the Parcel build tool and dev server with the Eleventy static site generator.
This plugin adds a Parcel bundling step to the Eleventy build process, and (optionally) allows the use of the Parcel Development Server as middleware during development.
Parcel is invoked automatically each time Eleventy finishes a build of your site, performing additional optimization and transpilation of various scripts and resources. Eleventy then launches its integrated development server to provide a preview of the site with automatic reloading when files are changed.
This post-processing step happens entirely within Eleventy's plugin system; no additions or modifications to your NPM scripts are required.
This plugin is designed for Eleventy 2.x and Parcel 2.x. It is not compatible with Eleventy 1.x. It has not yet been tested with Eleventy 3.x. Node 14+ is required.
The installation instrutions below assume you already have an Eleventy 2.x project that you want to add Parcel to.
Add the plugin to your Eleventy project:
$ npm install --save-dev @kitschpatrol/eleventy-plugin-parcel
Load the plugin in your .eleventy.js file:
const eleventyParcelPlugin = require("@kitschpatrol/eleventy-plugin-parcel");
module.exports = function (eleventyConfig) {
eleventyConfig.addPlugin(eleventyParcelPlugin);
};
Note that if you do not want to use the Parcel Development Server as middleware when serving your site, pass the useMiddleware: false option when adding the plugin:
const eleventyParcelPlugin = require("@kitschpatrol/eleventy-plugin-parcel");
module.exports = function (eleventyConfig) {
eleventyConfig.addPlugin(eleventyParcelPlugin, { useMiddleware: false });
};
This serves your site as usual via an unmodified version of the Eleventy Dev Server, but Parcel will still process your output.
Create a .parcelrc file in your project's root including at least the following:
{
"extends": "@parcel/config-default",
"resolvers": ["@mischnic/parcel-resolver-root", "..."]
}
You must include this for absolute links to resolve correctly in the output subfolder when Parcel spiders through your site!
Build and run your Eleventy project as usual. The output from Eleventy will be passed to Parcel, which will process the site, replacing the contents of your output folder (usually _site), and then start the Eleventy Dev Server:
$ npx @11ty/eleventy --serve --quiet
A normal Eleventy build will output your site with all Parcel optimizations enabled:
$ npx @11ty/eleventy
Additional configuration may be passed to Parcel when the plugin is added to Eleventy's configuration.
The available top-level option keys are as follows:
parcelOptions
Object passed to configure additional options as specified by Parcel's InitialParcelOptions type.
Defaults to:
{
parcelOptions: {
entries: "index.html",
defaultConfig: "@parcel/config-default",
shouldDisableCache: true,
shouldAutoInstall: true,
serveOptions: {
port: 3000,
},
hmrOptions: {
port: 3001,
}
}
}
Important notes about how the plugin dynamically modifies the parcelOptions object in an effort to make your life more convenient:
By default, Parcel's mode option is set dynamically based on the context of the build. Serve builds, e.g. npx @11ty/eleventy --serve, gets "development" mode, while release builds, e.g. npx @11ty/eleventy gets "production". You can override this by passing an explicit mode string to your parcelOptions.
The Plugin automatically uses your Eleventy project's output folder to correctly prefix your parcelOptions.entries string or array.
Similarly, for release builds, Parcel's defaultTargetOptions.distDir path is automatically set to match Eleventy's output.
tempFolderName
String with name of folder to stage the Parcel builds. Defaults to .11ty-parcel-temp There's little reason to change this unless there is a conflict. This folder is automatically created and cleaned up during the release build process, but may linger during a serve build. It's recommended to add this path, along with .parcel-cache to you .gitignore.
useMiddleware
Boolean specifying whether to use the Parcel development server as middleware. Defaults to true.
middlewareOptions
Object passed to the middleware (if useMiddleware: true) as specified by the http-proxy-middleware options type.
Parcel will also pull configuration from a .parcelrc file in your project's root to further customize the build process.
Here are a few example configurations to customize the Parcel's plugin's behavior. These object are passed to the plugin via the addPlugin method, usually in your projects .eleventy.js file.
Skip the Parcel middleware and always build with all Parcel's optimizations enabled, regardless of invocation context:
const eleventyParcelPlugin = require("@kitschpatrol/eleventy-plugin-parcel");
module.exports = function (eleventyConfig) {
eleventyConfig.addPlugin(eleventyParcelPlugin, {
parcelOptions: {
mode: "production",
},
useMiddleware: false,
});
};
Customize settings passed to http-proxy-middleware to rewrite paths in a way that allows you to drop the .html from URLs. This works well with the parcel-optimizer-friendly-urls Parcel plugin.
const eleventyParcelPlugin = require("@kitschpatrol/eleventy-plugin-parcel");
module.exports = function (eleventyConfig) {
eleventyConfig.addPlugin(eleventyParcelPlugin, {
useMiddleware: true,
middlewareOptions: {
pathRewrite: {
"^([^.]+?)$": "$1.html",
},
},
});
};
Simplicity and a sense of containment are part Eleventy's charm, and there's a certain appeal to keeping the build process as "close to the core" as possible, even as a site's complexity accumulates. The very thorough eleventy-high-performance-blog starter template illustrates this philosophy in practice.
For a while I've hewn to a similar approach in my own projects, but have found myself plumbing together byzantine chains of smaller tools to optimize images, add cache-busting hashes, generate CSP headers, etc. etc. — problems that have been solved several times over by a variety of build tools.
An official asset pipeline has been a topic of discussion on Eleventy's issue pages over the years. Vite seems likely to be ordained as such, but Parcel has significant feature overlap — so I wanted to kick the tires on it as well as a point of comparison.
eleventyConfig.setServerPassthroughCopyBehavior("copy");)eleventyConfig.setServerOptions({ domdiff: false });)shouldDisableCache optionshouldAutoInstall enabled by default, which means it will automatically make changes to your package.json as plugins are needed to handle various file typespackage.json if neededMany others have combined Parcel and Eleventy in various ways and at different points in the build chain:
Also:
package.jsindex.html to accommodate sites with un-crawlable pagesThis plugin is basically a port of Zach Leat's eleventy-plugin-vite from Vite to Parcel.
Issues and pull requests are welcome.
MIT © Eric Mika
FAQs
A plugin integrating the Parcel build tool and dev server with the Eleventy static site generator.
We found that @kitschpatrol/eleventy-plugin-parcel demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
November CVE publications fell 25% YoY even as 2025 totals rose, showing how a few major CNAs can swing “global” counts and skew perceived risk.

Security News
React disclosed a CVSS 10.0 RCE in React Server Components and is advising users to upgrade affected packages and frameworks to patched versions now.

Research
/Security News
We spotted a wave of auto-generated “elf-*” npm packages published every two minutes from new accounts, with simple malware variants and early takedowns underway.