netlify/context-and-tools

netlify-image-cdn

Transform, resize, crop, reformat, and optimize images on demand via Netlify Image CDN's /.netlify/images endpoint.

Ver código-fonte
Documento original do Skill

Renderizado do repositório de origem, preservando títulos, exemplos, código, tabelas, links e imagens.

Netlify Image CDN

Transform images by requesting /.netlify/images with query parameters. No function or file authoring required — it's a built-in edge endpoint.

bash
# resize + crop to a 50px square, retain left side, convert to webp at q=80
curl -vs 'https://mysitename.netlify.app/.netlify/images?url=/owl.jpeg&fit=cover&w=50&h=50&position=left&fm=webp&q=80'

There is no legacy/deprecated form — the endpoint above is the only programmatic surface. Use framework image components where available (below) rather than hand-building URLs.

Endpoint & query parameters

GET /.netlify/images?url=<source>&...

ParamValuesNotes
urlrelative path or full remote URLREQUIRED. Only required param.
winteger pxwidth
hinteger pxheight
fitcontain (default), cover, fillresize behavior
positioncenter (default), top, bottom, left, rightonly applies when fit=cover
fmavif, jpg, png, webp, gif, blurhashoutput format; webp/gif can be animated
qinteger 1100 (default 75)only for avif, jpg, gif, webp

fit behavior

fit=aspect ratio keptcrops excessreturns exact dimensions
containyesnono — one dimension may be smaller
covernoyesyes — scaled proportionally, then cropped
fillnonoyes — stretched/squished if needed
  • `fit=cover` requires BOTH `w` and `h`. Supplying only one silently misbehaves.
  • contain with one dimension calculates the other to preserve aspect ratio.

Format & content negotiation

  • Source-only request (just url, no size/format): image is unchanged in size/shape but still reformatted to avif/webp based on the browser's Accept header.
  • No fm specified → webp if accepted, else avif if accepted, else original.
  • fm=blurhash returns a BlurHash text string, not image bytes. Pointing <img src> or a CSS background at it renders nothing. Fetch the string server-side/ahead of time, decode it client-side with a BlurHash library (https://blurha.sh), then load the real image as a separate request without fm=blurhash.

Response codes

  • Invalid transformation param values → 404.
  • Valid, new transformation → 200 with content + content-type.
  • Previously transformed → 304.

Remote source images

Remote url values require allowlisting the domain in netlify.toml:

toml
[images]
  remote_images = ["https://my-images.com/.*", "https://animals.more-images.com/[bcr]at/.*"]

Then percent-encode the remote URL and request it:

js
const src = `/.netlify/images?url=${encodeURIComponent("https://my-images.com/owl.jpeg")}`;
  • Always `encodeURIComponent` the remote URL before placing it in url — URLs containing ? or & break otherwise.
  • In remote_images patterns, escape only the dot: 'https://example\.com/.*'. Forward slashes are NOT regex metacharacters — do not write https:\/\/.
  • Remote sources must be publicly accessible. Netlify does NOT forward Authorization or Cookie headers to remote sources. For auth-required images use self-authorizing URLs (e.g. S3 presigned URLs) and make sure your remote_images pattern matches them.

Reusable transformations (redirects)

Reuse the same params across many images via a redirect:

_redirects:

/transform-small/* /.netlify/images?url=/:splat&w=50&h=50 200

netlify.toml:

toml
[[redirects]]
  from = "/transform-small/*"
  to = "/.netlify/images?url=/:splat&w=50&h=50"
  status = 200

Then GET /transform-small/owl.jpeg yields a 50×50 transform. Avoid cross-site redirects for transformations — they hurt performance.

Custom headers (caching)

_headers:

/source-images/*
  Cache-Control: public, max-age=604800, must-revalidate
  • Headers set on a source image are applied to the transformed asset served by Image CDN.
  • Custom headers cannot be applied to remote (other-domain) source images; Netlify respects whatever cache headers the external domain sends.
  • Cache-Control on source images applies only to browsers/CDNs in front of Netlify, not the Netlify Cache itself.

Framework integrations

Use the framework's native image component/handling; it wires to Image CDN automatically. Configure the remote allowlist per framework:

FrameworkPrerequisiteRemote allowlist
Angularnone — NgOptimizedImage auto-uses it[images] remote_images in netlify.toml
Astronone — <Image /> auto-uses itimage.domains / image.remotePatterns in astro.config.mjs
Nuxtnone — nuxt/image auto-uses itimage.domains in nuxt.config.ts
Next.jsNext 13.5+ and adapter v5remotePatterns in next.config.js
Gatsbyenv NETLIFY_IMAGE_CDN=true + Contentful/Drupal/WordPress source plugin[images] remote_images in netlify.toml

Local development

Run netlify dev (Netlify CLI) to test transformations locally — it mimics production including Image CDN.

  • A local `404` on `/.netlify/images` almost always means a framework dev server (`vite`, `next dev`, `astro dev`) is running instead of `netlify dev`. The endpoint, [images] allowlisting, and image redirects only exist under netlify dev. The URL itself is usually fine.

Caching & deploys

Transformed results are uniquely cached on Netlify's edge. Atomic deploys are respected: changing a source image in a new deploy re-runs transformations on new requests so stale assets aren't served.

User-uploaded image pipelines

For user-uploaded image pipelines (Functions + Blobs + Image CDN composed), see references/user-uploads.md in this skill.

Limitations

  • Split Testing is not supported — you may get inconsistent image results between split test branches.
  • Not currently supported in Netlify's HIPAA-compliant hosting offering. See the Trust Center for the HIPAA-compliant reference architecture.

<!-- system: agent-context/image-cdn/system.md — human-owned, merged by ctx-gen; edit system.md, not this section -->

Netlify house rules (image-cdn)

These are org conventions, not docs facts — merged into the rendered skill by ctx-gen and never generated. Owned by the skills maintainer.

  1. For user-uploaded image pipelines (Functions + Blobs + Image CDN

composed), see references/user-uploads.md in this skill — an authored guide with no single docs source.

  1. Percent-encode remote source URLs before placing them in the url

parameter (encodeURIComponent) — URLs containing ? or & break otherwise.

  1. fm=blurhash returns a BlurHash TEXT string, not image bytes. Pointing an

<img src> (or CSS background) at it renders nothing — fetch the string ahead of time, decode it client-side with a BlurHash library, and load the real image as a separate request without fm=blurhash.

  1. A local 404 on /.netlify/images almost always means a framework dev

server (vite, next dev, astro dev) is running instead of netlify dev — the endpoint, [images] allowlisting, and image redirects only exist under netlify dev. The URL itself is usually fine.

  1. In remote_images patterns, the meaningful regex escape is the dot;

forward slashes are not metacharacters — do not write https:\/\/. In netlify.toml, use a single-quoted literal string ('https://example\.com/.*') or double the backslash in a double-quoted string ("https://example\\.com/.*") — a bare \. inside double quotes is invalid TOML.

do mesmo repositório

Mais Skills

Todos os Skills
netlify
Comunidade

netlify-blobs

Store and retrieve unstructured data like file uploads, images, documents, JSON, and cache-like state with Netlify Blobs. It is a zero-config key/value store accessible from Functions, Edge Functions, and Build Plugins. Reach for this when you handle a file or image upload, persist Background Function output like sitemaps or processed media, cache API responses, store per-deploy assets, or need a simple key/value store from a serverless function. Covers creating site and deploy stores, reading and writing values and JSON, listing keys with metadata, atomic conditional writes, consistency modes, region selection, and file-based uploads. Not for per-user, transactional, or relational data — use Netlify DB for that.

instalações
1
GitHub Stars
37
Atualizado
18 de set.
netlify
Comunidade

netlify-config

Configure Netlify builds and routing via netlify.toml, redirects, and headers. Use when setting a build command or publish directory, adding redirects or rewrites or proxies, adding an SPA fallback rewrite, setting custom response headers or basic auth, managing environment variables and secrets, scoping vars per deploy context, marking a var as secret, disabling secret scanning, configuring functions bundling, ignoring builds, or wiring up a monorepo or JavaScript SPA on Netlify.

instalações
1
GitHub Stars
37
Atualizado
18 de set.
netlify
Comunidade

netlify-database

Zero-config Postgres for Netlify apps via @netlify/database — querying data from Functions/Edge Functions, writing schema migrations, setting up Drizzle ORM, local dev with netlify dev, database branches for deploy previews, and migrating an existing Postgres project onto Netlify. Use when adding a database, building a contact form or CRUD API, writing SQL migrations, wiring up Drizzle, running netlify database commands, testing with a local Postgres, or switching from Neon/Supabase/RDS to Netlify Database.

instalações
1
GitHub Stars
37
Atualizado
18 de set.
netlify
Comunidade

netlify-frameworks

Deploy and configure web frameworks on Netlify — build settings and SSR/edge adapters plus local platform emulation and env vars. Use when setting up or fixing a framework deploy (Next.js / Astro / Nuxt / SvelteKit / Remix / React Router / TanStack Start / SolidStart / Gatsby / Angular / Vite / Express / Hydrogen / Hugo / Eleventy / Vue / React), adding SSR or edge functions or middleware wired to Netlify context, fixing SPA redirect and catch-all rules, setting a build command or publish directory, or debugging "why isn't my env var updating" and framework build failures.

instalações
1
GitHub Stars
37
Atualizado
18 de set.