Skip to navigation Skip to main content
Back the Build Awesome Kickstarter!

The same static site generator you know and love, now with endless Pro 'possum-bilities. But just like other parts of the Awesomeverse, Build Awesome will continue to be free and open source.

Support the Kickstarter!

Image (JavaScript API)

On this page
Eleventy Image Usage Types
  • Image HTML Transform: Recommended—start with this one! It’s the easiest to configure and is compatible with all template syntax.

Usage

The JavaScript API here is the lowest-level use of Eleventy Image and returns a promise that resolves to a JavaScript object or an HTML string. This usage works independent of Eleventy.



my-node-script.js
import Image from "@11ty/eleventy-img";

let src = "https://images.unsplash.com/photo-1608178398319-48f814d0750c";
let stats = await Image(src, {
	widths: [300],
});

console.log(stats);
const Image = require("@11ty/eleventy-img");

// ESM is required for top level async/await.
(async () => {
	let src = "https://images.unsplash.com/photo-1608178398319-48f814d0750c";
	let stats = await Image(src, {
		widths: [300],
	});

	console.log(stats);
})();

Three things happen here:

  1. (Optional) If the first argument is a full URL (not a local file path), we download the remote image and cache it locally using the Fetch plugin. This cached original is then used for the cache duration to avoid a bunch of network requests.
  2. Images are then created for each format and width from the input source. In this example, two files are created: ./img/6dfd7ac6-300.webp and ./img/6dfd7ac6-300.jpeg.
  3. The promise resolves with a metadata object describing those newly created optimized images.

Return object

The above JavaScript code will log a JavaScript object like this:

{
	webp: [
		{
			format: 'webp',
			width: 300,
			height: 300,
			filename: '6dfd7ac6-300.webp',
			outputPath: 'img/6dfd7ac6-300.webp',
			url: '/img/6dfd7ac6-300.webp',
			sourceType: 'image/webp',
			srcset: '/img/6dfd7ac6-300.webp 300w',
			size: 10184
		}
	],
	jpeg: [
		{
			format: 'jpeg',
			width: 300,
			height: 300,
			filename: '6dfd7ac6-300.jpeg',
			outputPath: 'img/6dfd7ac6-300.jpeg',
			url: '/img/6dfd7ac6-300.jpeg',
			sourceType: 'image/jpeg',
			srcset: '/img/6dfd7ac6-300.jpeg 300w',
			size: 15616
		}
	]
}

Return HTML

Use the returnType: "html" option to return HTML. Learn more about returnType and htmlOptions.

my-node-script.js
import Image from "@11ty/eleventy-img";

let src = "https://images.unsplash.com/photo-1608178398319-48f814d0750c";
let html = await Image(src, {
	widths: [300],
	returnType: "html", // Added in v6.0
	htmlOptions: {
		imgAttributes: {
			alt: "", // required
		}
	}
});

console.log(html);
const Image = require("@11ty/eleventy-img");

// ESM is required for top level async/await.
(async () => {
	let src = "https://images.unsplash.com/photo-1608178398319-48f814d0750c";
	let html = await Image(src, {
		widths: [300],
		returnType: "html", // Added in v6.0
		htmlOptions: {
			imgAttributes: {
				alt: "", // required
			}
		}
	});

	console.log(html);
})();

The above will log:

<picture><source type="image/webp" srcset="/img/yL0QoCVMHj-300.webp 300w"><img alt="" src="/img/yL0QoCVMHj-300.jpeg" width="300" height="300"></picture>