CARVIEW |
- Stable
3.1.2
- Canary
4.0.0-alpha.4
- Guide
Guide
- Plugins
- Services
Image
Utility to perform build-time image transformations for both vector and raster images: output multiple image sizes, multiple formats, and cache remote images locally. Uses the sharp image processor.
- Easily add
width
andheight
attributes for proper aspect ratio to reduce layout shift. - Accepts a wide variety of input image types:
jpeg
,png
,webp
,gif
,tiff
,avif
, andsvg
. Does not rely on file extensions (e.g..png
or.jpg
), which may be missing or inaccurate. - Output multiple sizes, maintaining the original aspect ratio. Does not upscale raster images larger than original size. Intelligently generates
srcset
attributes. - Output multiple formats:
jpeg
,png
,webp
,avif
+1
Build Cost, andsvg
. Intelligently generates the most efficient markup with zero server-dependencies, using<img>
or<picture>
. - Fast: de-duplicates with both an in-memory and disk cache. During local development, images are processed on request for even faster build performance.
- Robust and works offline: save remote images to prevent broken image URLs later (via
eleventy-fetch
).
Installation
Published as @11ty/eleventy-img
on npm. Source code on GitHub.
Image v6.0.0 requires Node 18+.
npm install @11ty/eleventy-img
Usage
There are a few different ways to use Eleventy image:
- Image HTML Transform: Recommended—start with this one! It’s the easiest to configure and is compatible with all template syntax.
- Image Data Files: Use images to populate data in the Data Cascade.
- Image JavaScript API: Low-level JavaScript API works independent of Eleventy.
- Image Shortcodes: Use universal shortcodes in Nunjucks, Liquid, or 11ty.js templates.
- Image WebC:
Use a WebC component for WebC templates.
HTML Transform
Added in v3.0.0 Added in Image v4.0.1This is the easiest method to configure. Eleventy will transform any <img>
or <picture>
tags in HTML files as a post-processing step in your build.
import { eleventyImageTransformPlugin } from "@11ty/eleventy-img";
export default function (eleventyConfig) {
eleventyConfig.addPlugin(eleventyImageTransformPlugin);
};
const { eleventyImageTransformPlugin } = require("@11ty/eleventy-img");
module.exports = function (eleventyConfig) {
eleventyConfig.addPlugin(eleventyImageTransformPlugin);
};
That’s it! All <img>
and <picture>
elements will be processed for you by Eleventy Image.
Resolving image sources
- Relative image sources (
<img src="./possum.png">
) will be co-located to your output directory with the template they are used in. If the same source image is used in multiple templates, it will be written to two different output locations! - Absolute image sources (
<img src="/possum.png">
) will be normalized relative to your input/content directory and written to your output directory with the default directory (e.g._site/img/
).
If you explicitly define the urlPath
option, the urlPath
is used to determine the output location instead.
Attribute Overrides
You can configure individual <img>
elements with per-instance overrides:
<img width>
is aliased toeleventy:widths
when it is valid HTML (a singleinteger
value) Added in Image v6.0.0 Related #234.<img eleventy:widths="200,600">
comma separated string to override the default widths.<img eleventy:formats="webp">
comma separated string to override the default formats.<img eleventy:ignore>
skips this image.<img eleventy:optional>
Added in Image v6.0.0controls what happens when processing this image throws an Error (good for remote images), seefailOnError
option. Default behavior removes thesrc
attribute from the<img>
node.<img eleventy:optional="keep">
: leave as-is, which would likely result in an error when a user visits your page.<img eleventy:optional="placeholder">
: replace thesrc
attribute with a transparent PNG Data URI.
<img eleventy:output>
overrides the output directory. Similar tourlPath
, absolute paths (e.g.<img eleventy:output="/mydirectory/">
) are relative to the Eleventy output directory and relative paths are relative to the template’s URL (e.g.<img eleventy:output="./mydirectory/">
).<img eleventy:pictureattr:NAME="VALUE">
Added in Image v6.0.0 attributes are hoisted as<picture NAME="VALUE">
(if<picture>
is in use)
More configuration options
Any of the configuration options can be defined when you add the plugin:
import { eleventyImageTransformPlugin } from "@11ty/eleventy-img";
export default function (eleventyConfig) {
eleventyConfig.addPlugin(eleventyImageTransformPlugin, {
// output image formats
formats: ["avif", "webp", "jpeg"],
// output image widths
widths: ["auto"],
// optional, attributes assigned on <img> nodes override these values
htmlOptions: {
imgAttributes: {
loading: "lazy",
decoding: "async",
},
pictureAttributes: {}
},
});
};
const { eleventyImageTransformPlugin } = require("@11ty/eleventy-img");
module.exports = function (eleventyConfig) {
eleventyConfig.addPlugin(eleventyImageTransformPlugin, {
// output image formats
formats: ["avif", "webp", "jpeg"],
// output image widths
widths: ["auto"],
// optional, attributes assigned on <img> nodes override these values
htmlOptions: {
imgAttributes: {
loading: "lazy",
decoding: "async",
},
pictureAttributes: {}
},
});
};
- Added in v3.0.0Added in Image v5.0.0During local development (when using
--serve
), images are optimized when requested in the browser. Read more abouttransformOnRequest
. - The
sizes
attribute must be present ifwidths
has more than one entry (MDN). TheeleventyImageTransformPlugin
does not provide a default value forsizes
, so it must be explicitly included in the HTML attribute or withhtmlOptions.imgAttributes
.- Added in Image v6.0.0When using
loading="lazy"
andsizes
is not supplied in markup — we’ll usesizes="auto"
automatically. Related #207.
- Added in Image v6.0.0When using
Build Performance
Image optimization is likely one of the costlier pieces of your Eleventy build. The total build cost of this utility is dependent on a few things (in order of priority):
- Number of unique images optimized (not page count)
- Optimizing a lot of remote images (image content must be fetched from a remote server and is subsequently cached via
eleventy-fetch
). - Number of
formats
you generate for each source image:avif
is more costly than other image formats.+1
Build Cost - Number of
widths
you generate for each source image. - File size of images being optimized (larger source images are more expensive).
Optimize Images on Request
Added in v3.0.0Added in Image v5.0.0When using the Image HTML transform during local development, image processing is removed from the build for extra performance. Instead, they are processed when requested by the browser using a special middleware built-in to the Eleventy Dev Server. This is enabled or disabled using the transformOnRequest
option.
In-Memory Cache
To prevent duplicate work and improve build performance, repeated calls to the same source image (remote or local) with the same options will return a cached results object. If a request in-progress, the pending promise will be returned. This in-memory cache is maintained across builds in watch/serve mode. If you quit Eleventy, the in-memory cache will be discarded.
Images will be regenerated (and the cache bypassed) if:
- The source image file size changes (on local image files)
- The cache asset duration expires (for remote images).
You can disable this behavior by using the useCache
option.
Example of in-memory cache reuse (returns the same promise)
import Image from "@11ty/eleventy-img";
let stats1 = Image("./test/bio-2017.jpg");
let stats2 = Image("./test/bio-2017.jpg");
console.assert(stats1 === stats2, "The same promise");
Example of in-memory cache (returns a new promise with different options)
import Image from "@11ty/eleventy-img";
let stats1 = Image("./test/bio-2017.jpg");
let stats2 = Image("./test/bio-2017.jpg", { widths: [300] });
console.assert(stats1 !== stats2, "A different promise");
Disk Cache
Added in Image v1.0.0 Eleventy will skip processing files that are unchanged and already exist in the output directory. This requires the built-in hashing algorithm and is not supported with custom filenames. More background at Issue #51.
You can use this to speed up builds on your build server.
Options
Output File Extensions
Comma separated list of file extensions used in the Image HTML Transform to determine which template output files to process.
extensions: "html"
(default)
Output Widths
Controls how many output images will be created for each image format. Aspect ratio is preserved.
widths: ["auto"]
(default, keep original width)widths: [200]
(output one 200px width)widths: [200, "auto"]
(output 200px and original width)
Output Formats
Use almost any combination of webp
, jpeg
, png
, svg
, avif
, gif
, and auto
:
formats: ["webp", "jpeg"]
(default)formats: ["png"]
formats: ["auto"]
(keep original format)formats: ["svg"]
(requires SVG input)formats: ["avif"]
+1
Build Cost
Skip raster formats for SVG
If using SVG output (the input format is SVG and svg
is in your formats
array option), we will skip all of the raster formats even if they’re in formats
. This may be useful in a CMS-driven workflow when the input could be vector or raster.
svgShortCircuit: false
(default)svgShortCircuit: true
svgShortCircuit: "size"
Added in Image v3.1.8
Using svgShortCircuit: "size"
means that raster image format entries will only be thrown out if the optimized raster size is larger than the SVG. This helps with large SVG images that compress to smaller raster sizes at smaller widths and will prefer the SVG over raster formats when the SVG file size is smaller.
To use Brotli compressed SVG sizes when making file size comparisons, use the svgCompressionSize: "br"
option Added in Image v3.1.8.
Related:
A New Technique for Image Optimization: SVG Short Circuiting (2023)
Automatically optimize your images with Eleventy Image and CloudCannon (2023)
Allow SVG to upscale
While we do prevent raster images from upscaling (and filter upscaling widths
from the output), you can optionally enable SVG input to upscale to larger sizes when converting to raster format.
svgAllowUpscale: true
(default)svgAllowUpscale: false
Transparent Images
Transparency friendly formats: avif
, png
, webp
, gif
, and svg
.
Added in Image v6.0.0We will filter out any non-transparency-friendly output formats from your formats
list automatically (as long as at least one of them is png
, gif
, or svg
).
Animated Images
Added in Image v1.1.0 To process and output animated gif
or webp
images, use sharpOptions
to pass in an animated
option.
import Image from "@11ty/eleventy-img";
await Image("./test/bio-2017.jpg", {
formats: ["webp", "gif"],
sharpOptions: {
animated: true,
},
});
Added in Image v6.0.0We will filter out any non-animation-friendly output formats from your formats
list automatically (as long as at least one of them supports animation).
Transform on Request
Development build performance improvement to optimize images when they are requested in the browser.
transformOnRequest: false
(default)transformOnRequest: process.env.ELEVENTY_RUN_MODE === "serve"
(default for HTML Transform)
You can use transformOnRequest
with Shortcodes too.
returnType
and htmlOptions
By default, Eleventy Image will return a metadata JavaScript object. To return HTML instead, use returnType: "html"
. This is useful for the Image JavaScript API and Image Shortcode types.
returnType: "object"
(default) or"html"
Added in Image v6.0.0
Further customize the markup with htmlOptions
Added in Image v6.0.0:
{
// …
returnType: "html",
htmlOptions: {
imgAttributes: {
alt : "carview.php?tsp=", // required
loading: "lazy",
decoding: "async",
},
// HTML attributes added to `<picture>` (omitted when <img> used)
pictureAttributes: {},
// Which source to use for `<img width height src>` attributes
fallback: "largest", // or "smallest"
}
}
Fix Orientation
Added in Image v4.0.0Rotates the image to enforce the correct orientation set in EXIF metadata.
fixOrientation: false
(default)fixOrientation: true
Custom Filenames
Don’t like the hashes used in output file names? Make your own!
{
// …
filenameFormat: function (id, src, width, format, options) {
// Define custom filenames for generated images
// id: hash of the original image
// src: original image path
// width: current width in px
// format: current file format
// options: set of options passed to the Image call
return `${id}-${width}.${format}`;
}
}
Custom Filename Example: Use the original file slug
import path from "node:path";
import Image from "@11ty/eleventy-img";
await Image("./test/bio-2017.jpg", {
widths: [300],
formats: ["auto"],
filenameFormat: function (id, src, width, format, options) {
const extension = path.extname(src);
const name = path.basename(src, extension);
return `${name}-${width}w.${format}`;
},
});
// Writes: "test/img/bio-2017-300w.jpeg"
Dry-Run
If you want to try the utility out and not write any files (useful for testing), use the dryRun
option. Will include a buffer
property in your return object.
dryRun: false
(default)dryRun: true
Advanced Options
Fail on Error
Added in Image v6.0.0What happens when processing an image encounters an error? Useful for remote images.
failOnError: true
(default)failOnError: false
no error is thrown (warning output is logged)
See also the eleventy:optional
attribute. Related #225
Format Filtering
Added in Image v6.0.0When using animated images or images with transparency, we will automatically filter your output formats
list to formats that support those features. If there are no valid formats
left after filtering, the original formats
list is used as-is. You can enable or disable this feature using the formatFiltering
option.
formatFiltering: ["transparent", "animated"]
Output Directory
Where to write the new images to disk. Project-relative path to the output image directory. Maybe you want to write these to your output directory directly (e.g. ./_site/img/
)?
outputDir: "./img/"
(default)
If you’re using the Image HTML Transform, we recommended not to define outputDir
.
URL Path
A path-prefix-esque directory for the <img src>
attribute. e.g. /img/
for <img src="/img/MY_IMAGE.jpeg">
:
urlPath: "/img/"
(default)
Added in Image v6.0.0Full URLs are now supported, e.g. urlPath: "https://example.com/img/"
. Related #239.
If you’re using the Image HTML Transform, we recommended not to define urlPath
.
Use Cache
(Boolean) Controls whether to use the disk cache and memory cache.
useCache: true
(default)useCache: false
to bypass the cache and generate a new image every time.
Advanced control of Sharp image processor
Extra options to pass to the Sharp constructor or the Sharp image format converter for webp, png, jpeg, or avif.
sharpOptions: {}
sharpWebpOptions: {}
sharpPngOptions: {}
sharpJpegOptions: {}
sharpAvifOptions: {}
Added in Image v6.0.0ICC Profiles are preserved by default (when available) for better colors when images have srgb
, p3
, or cmyk
color profiles. Related #244.
Full Sharp API Access
Use the transform
callback to access anything in the Sharp API. Related #52. This runs before Eleventy Image processing (keep EXIF metadata, rotation, cropping, et al).
{
// …
transform: (sharp) => {
sharp.keepExif();
}
}
Change Global Plugin Concurrency
import Image from "@11ty/eleventy-img";
Image.concurrency = 4; // default is between 8 and 16 based on os.availableParallelism()
Change the default Hash length
You can customize the length of the default filename format hash by using the hashLength
property.
{
// …
hashLength: 8, // careful, don’t make it _too_ short!
}
Advanced Caching Options for Remote Images
For any full URL first argument to this plugin, the full-size remote image will be downloaded and cached locally. See all relevant eleventy-fetch
options.
{
// …
cacheOptions: {
// if a remote image URL, this is the amount of time before it fetches a fresh copy
duration: "1d",
// project-relative path to the cache directory
directory: ".cache",
removeUrlQueryParams: false,
},
}
When caching remote images, you may want to check the processed image output into your git
(et al) repository to avoid refetches in the future. If remote images are not checked in, they may be refetched every time on your CI server unless you preserve the .cache
folder between builds.
Using a Hosted Image Service
Custom URLs
Want to use a hosted image service instead? You can override the entire URL. Takes precedence over filenameFormat
option. Useful with statsSync
or statsByDimensionsSync
.
The metadata object returned will not include filename
or outputPath
properties.
{
// …
urlFormat: function ({
hash, // not included for `statsOnly` images
src,
width,
format,
}) {
return `https://example.com/${encodeURIComponent(src)}/${width}/${format}/`;
}
}
Stats Only
Added in Image v1.1.0 Skips all image processing to return metadata. Doesn’t write files. Use this as an alternative to the separate statsSync*
functions—this will use in-memory cache and de-duplicate requests.
statsOnly: false
(default)statsOnly: true
From the Community
×134 resources via 11tybundle.dev curated by Bob Monsour.
Eleventy Launch — Ash Furrow (2025)
hire.shivjm.in: The Missing Cover Letter — Shiv J.M. (2025)
11ty Hacks for Fun and Performance — Alex Russell (2025)
Leveling Up Responsive Images with Eleventy Img — Nicholas Clooney (2025)
From Dotclear to Eleventy 3 — Alix Guillard (2025)
Expand to see 129 more resources.
Conditional favicon in Eleventy using passthrough copy — Christopher Kirk-Nielsen (2025)
OG Images using 11ty Screenshot Service — Jason Moser (2025)
Solving my Image Dimension Problem with an Eleventy Transform — Brian Cantoni (2025)
One weird trick to reduce Eleventy Image Build Times by 60% — Zach Leatherman (2025)
Migrating An Eleventy Site to Bunny.Net — Chris McLeod (2025)
How To Use eleventy-img (To Optmize Images In Eleventy) With Caching (To Keep Build Times Low) On Cloudflare Pages (Which Can't Cache Optimize Images Out Of The Box) — Martin Hähnel (2025)
Migrating WordPress To Eleventy — Brian Cantoni (2025)
11tyCMS: Image uploads and design enhancements — 11tyCMS (2025)
Uploading Images For Your Eleventy Blog to Cloudflare R2 from Obsidian — Martin Hähnel (2025)
Creating proportional, equal-height image rows with CSS, 11ty, and Nunjucks — Jeremy Robert Jones (2025)
'Built with Eleventy' Animated 88x31 — Chris Burnell (2025)
11tyCMS: Trapped in image and markdown hell — 11tyCMS (2025)
My 11ty Blogging Workflow — Floh Gro (2025)
custom emoji in 11ty with a plugin — actuallysomecat (2025)
A Slightly Improved Image Gallery for Eleventy — Valentin Pratz (2025)
How I built dynamic social media images in Eleventy using Cloudinary — Chip Cullen (2025)
Hello 11ty 3 — Judah Perez (2025)
How I write and publish blog posts in April 2025 — Juha-Matti Santala (2025)
Magick images — Ethan Marcotte (2025)
Adding base64 placeholder background images to eleventy-img — Stefan Burke (2025)
Eleventy's Image Plugin Disk Caching Approach For HTML Transform Method — Murtuzaali Surti (2025)
Extract Colors from an Image for CSS Themes — Zach Leatherman (2025)
Building a personal digital music library with Eleventy and APIs — Damian Walsh (2025)
11ty and OG images — Jay Hannah (2025)
Loading Pixelfed Photos with Eleventy — Robb Knight (2025)
Eleventy, Open Graph images and fun? — Matt B (2025)
Making static sites with Glitch and 11ty: Image gallery — Stefan Bohacek (2025)
Adding social preview images to my Eleventy blog — Stefan Burke (2025)
Rewriting My Astro Blog with Eleventy — Melanie Kat (2025)
Build-time og:image generation with eleventy-img — Dan Burzo (2025)
O(M)G Images — Jason Moser (2025)
Optimize Your Web Site's Images — Eleventy (2025)
How I built the Books page — Bob Monsour (2025)
An idiot's guide to adding open graph images to an 11ty blog — Chazz Basuta (2024)
Going all in with 'native' markdown — Bob Monsour (2024)
Eleventy Transform speeds local development...a lot! — Bob Monsour (2024)
Integrating Jupyter Notebook Cells in Eleventy Posts — Valentin Pratz (2024)
Here's how this is all put together — Cory Dransfeldt (2024)
Open Graph Metadata and Images in Eleventy Made Easy — Sebin Nyshkim (2024)
Dynamic social share images using Cloudinary — Sia Karamalegos (2024)
Automatically generating social share images using Cloudinary with Sia Karamalegos — Sia Karamalegos (2024)
Responsive, Self-hosted Images for Your Eleventy Blog — Sebin Nyshkim (2024)
Prairie Rose Arena - Project Notes — Sam Feldstein (2024)
My Decap CMS setup with 11ty hosted on Cloudflare Pages — Patrick Grey (2024)
Eleventy Images Just Got Better — Aleksandr Hovhannisyan (2024)
Building a Web Version of Your Mastodon Archive with Eleventy — Raymond Camden (2024)
Adding a Photo Stream to an Eleventy Site — nonnullish (2024)
Twenty year celebration: Site update number three — Peter Sefton (2024)
Upgrading to Eleventy v3 — Alex Zappa (2024)
Responsive Images in HTML: w and x — Shiv J.M. (2024)
Upgrading to Eleventy 3.0 — Mark Llobrera (2024)
Get image pixel colours in Eleventy/Node — Sam Smith (2024)
Updating to Eleventy v3 — Max Böck (2024)
Convert Obsidian Image Links to Nunjucks Shortcodes in Eleventy — Amy Khar (2024)
Eleventy Image problem with Netlify's build — Sami Määttä (2024)
Handling images with B2, Netlify's image CDN, Hazel and Mountain Duck — Cory Dransfeldt (2024)
Upgrading to Eleventy 1.0.1 — Mark Llobrera (2024)
Fixing a typo shaved 4 minutes off my Netlify build time — Thomas Rigby (2024)
Generating Open Graph preview images for 11ty — John Hobbs (2024)
Automatic image pre-processing in Eleventy, Part 2 — Martin Gunnarsson (2024)
I have a Problem with Build Times — Chris McLeod (2024)
Adding inline SVGs to Eleventy.js — Jordan Kohl (2024)
Eleventy - Differentiate between dev and production builds with unique favicons — Rob O'Leary (2024)
Setting up image transforms in Eleventy — Cory Dransfeldt (2024)
Eleventy 🤝 Immich — Chris Burgess (2024)
Check if images are available before optimizing in Eleventy — Cory Dransfeldt (2024)
Using 11ty to generate Open Graph images — John Brooks (2024)
Super fast responsive image loading in Eleventy — Eystein Mack Alnaes (2024)
Eleventy Photo Gallery — Evan Sheehan (2024)
Automatic pre-processing of post images in Eleventy — Martin Gunnarsson (2023)
Generating and Caching Open Graph Images with Eleventy — Robb Knight (2023)
Generating Open Graph Images in Eleventy — nonnullish (2023)
Migrating from WordPress to Eleventy (part 4) — Carlos Araya (2023)
VSCode Pasting 11ty Images — Jeff Sheets (2023)
A new technique for image optimization: SVG short circuiting — Zach Leatherman (2023)
Automatically optimize your images with Eleventy Image and CloudCannon — Zach Leatherman (2023)
Building a photography website — Darek Kay (2023)
Adding Social Preview Images To Our 11ty Blog — Matthew Lettini (2023)
Making a lighthouse-fast website with a static site generator like 11ty — Piotr Maliński (2023)
Headless kiosk application (with Kirby CMS) — James Steel (2023)
Eleventy Category Images — John M. Wargo (2023)
Favicon Generation In Eleventy — equilibriumuk (2023)
Markdown Image Optimization In Eleventy — equilibriumuk (2023)
Image Optimization In Eleventy — equilibriumuk (2023)
Adding game cover art to my /now page — fLaMEd (2023)
11ty image shortcode best practice — Simon Cox (2023)
Generating Custom OpenGraph Cards with Gatsby and the 11ty Screenshot Service — Matt Steele (2023)
Farewell Netlify Large Media, Welcome eleventy-img — Shiv J.M. (2023)
Take your 11ty build from 1 second to 2 minutes by generating OG images — Mike Street (2023)
Eleventy: Building an Image Gallery with CSS Grid and PhotoSwipe — Mark Llobrera (2023)
Hello 2023 — Chris Coleman (2023)
Creating image galleries in eleventy(11ty) with elventy-img — Prabashwara Seneviratne (2022)
Integrating Cloudinary into Eleventy — Raymond Camden (2022)
Manage your SVG files with Eleventy's render plugin — Christopher Kirk-Nielsen (2022)
Processing images linked from frontmatter with eleventy-img to use in meta tags — TJ Addison (2022)
Reading Comic Books in the Jamstack — Raymond Camden (2022)
Optimizing Images with the 11ty Image Plugin — Aleksandr Hovhannisyan (2022)
Using the Eleventy Image plugin without a central image folder — Graham F. Scott (2022)
Responsive Images in Markdown with Eleventy Image — Tomi Chen (2022)
Generating Apple Touch Icons with Eleventy — Florian Eckerstorfer (2022)
Easily Create Gravatar Images With Eleventy — Marc Littlemore (2022)
My complete blogging workflow — Michael Harley (2022)
Using a Google Photos Album in your Eleventy Site with Pipedream — Raymond Camden (2022)
Fetching remote images with Eleventy — Bryce Wray (2022)
Automatically Generated Social Media Images with HTML, CSS, Eleventy & Puppeteer — Shiv J.M. (2021)
Adding figures with captions to images in markdown with eleventy — Al Power (2021)
Setting a conditional variable in Javascript — Michael Harley (2021)
Improving my automated open graph image process w/ Eleventy — Michael Harley (2021)
Improving upon my image processing with Eleventy — Michael Harley (2021)
Automatically generate open graph images in Eleventy — Bernard Nijenhuis (2021)
Eleventy 1.0 — Martin Schneider (2021)
Using Eleventy’s official image plugin — Bryce Wray (2021)
Building a Simple Image Gallery with Eleventy — Raymond Camden (2021)
Using the Eleventy image plugin to generate images — Martin Schneider (2021)
Don't shut down your business! Instead use Eleventy Image — Zach Leatherman (2021)
Let's Learn Eleventy (11ty) - Images — Rares Portan (2021)
An async function walks into a loop. — Oscar (2021)
Automatic social sharing images for Eleventy — Mark Thomas Miller (2021)
Automated social sharing images with Eleventy and Puppeteer — Michael Harley (2021)
Setup social sharing previews, SEO, and favicons on Eleventy — Michael Harley (2021)
Maximally optimizing image loading for the web — Malte Ubl (2020)
Configuring responsive and optimized images with Eleventy — Michael Harley (2020)
Optimize Images in Eleventy Using Cloudinary — Sia Karamalegos (2020)
Generating Social Sharing Images In Eleventy — Steven Hicks (2020)
Responsive Images with Eleventy & Sharp — Ryan Cao (2020)
Eleventy and Responsive Images — Florian Eckerstorfer (2020)
Automated Open Graph images with 11ty and Cloudinary — Juan Fernandes (2020)
Tips for rolling your own lazy loading — Phil Hawksworth (2019)
Multilingual sites with Eleventy — Jérôme Coupé (2019)