[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"github-release-repo-nuxt-image":3,"$f2v3tzw7dti6zg":-1,"github-release-repo-nuxt-image-page-1":18},{"project":4,"relatedArticles":17},{"id":5,"name":6,"owner":7,"repo":8,"url":9,"firstPublishedAt":10,"releaseCount":11,"tags":12},"019d75af-fb33-76be-ad0d-a4fd7f8df6f9","Nuxt Image","nuxt","image","https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fimage","2026-07-28T17:45:49.000Z",1,[13],{"color":14,"id":15,"name":16,"slug":7},"#41DC82","019d75ad-5b60-75ca-9027-363caa1d5e2a","Nuxt",[],{"items":19,"page":11,"pageSize":35,"totalCount":11},[20],{"body":21,"createdAt":22,"githubId":23,"htmlUrl":24,"id":25,"isPrerelease":26,"isPublished":27,"name":28,"projectId":5,"projectName":6,"projectOwner":7,"projectRepo":8,"publishedAt":10,"summary":29,"tagName":28,"updatedAt":30,"displayName":31,"hasBreakingChanges":26,"tags":32,"version":34},"> v2.1.0 is the next minor release.\r\n\r\n## 👀 Highlights\r\n\r\nNuxt Image 2.1 ships eight new image providers, a major upgrade to our image processing engine, and a bunch of fixes across existing providers.\r\n\r\n### 🖼️ IPX v4\r\n\r\nUnder the hood, we've upgraded to [IPX v4](https:\u002F\u002Fgithub.com\u002Funjs\u002Fipx) which brings significant improvements:\r\n\r\n- **Smaller bundles**: IPX is now ESM-only with reduced dependency size\r\n- **Stronger SVG security**: SVG sanitization now always runs, regardless of optimization settings. This fixes a potential XSS vector where `svgo: false` would return untouched SVGs. The sanitizer now removes SMIL attribute injection, foreign content (`\u003CforeignObject>`, `\u003Ciframe>`, etc.), and unsafe URIs across all elements\r\n- **New image modifiers**: `opacity`, `brightness`, `saturation`, `hue`, `lightness`, `autoorient`, `dilate`, `erode`, `clahe`, and `linear`\r\n- **Better error messages**: Invalid modifier arguments now return `400` errors with clear messages instead of cryptic `500`s\r\n- **Custom URL parsing**: IPX now supports custom URL formats via the `parseURL` option\r\n\r\n### 🌐 New Providers\r\n\r\nThis release adds support for eight new image optimization services:\r\n\r\n- **[Builder.io](https:\u002F\u002Fimage.nuxt.com\u002Fproviders\u002Fbuilderio)** - Builder.io's Image API (#2050)\r\n- **[Cloudflare Images](https:\u002F\u002Fimage.nuxt.com\u002Fproviders\u002Fcloudflareimages)** - Cloudflare's dedicated image service (#2100)\r\n- **[EdgeOne Pages](https:\u002F\u002Fimage.nuxt.com\u002Fproviders\u002Fedgeone-pages)** - Tencent EdgeOne Pages (#2173)\r\n- **[Flyimg](https:\u002F\u002Fimage.nuxt.com\u002Fproviders\u002Fflyimg)** - Self-hosted image resizing (#2125)\r\n- **[imgproxy](https:\u002F\u002Fimage.nuxt.com\u002Fproviders\u002Fimgproxy)** - Fast, secure image processing server (#2117)\r\n- **[Lorem Picsum](https:\u002F\u002Fimage.nuxt.com\u002Fproviders\u002Fpicsum)** - Placeholder images for development (#2106)\r\n- **[Supabase](https:\u002F\u002Fimage.nuxt.com\u002Fproviders\u002Fsupabase)** - Supabase Storage image transformations (#2027)\r\n- **[Umbraco](https:\u002F\u002Fimage.nuxt.com\u002Fproviders\u002Fumbraco)** - Umbraco CMS image cropper (#2165)\r\n\r\n### 🔧 Provider Improvements\r\n\r\n- **Directus**: Added support for [sharp transforms](https:\u002F\u002Fsharp.pixelplumbing.com\u002Fapi-operation\u002F) and a `key` modifier for named presets (#2207)\r\n- **Sanity**: Support for absolute URLs with automatic project\u002Fdataset extraction (#2274), and a configurable `baseURL` for custom CDN setups (#2273)\r\n- **AWS Amplify & Vercel**: `minimumCacheTTL` is now configurable (#2278)\r\n\r\n### 📦 Type Exports\r\n\r\n`NuxtImgProps` and `NuxtPictureProps` are now exported from the runtime, making it easier to type your own components that wrap `\u003CNuxtImg>` or `\u003CNuxtPicture>` (#2115).\r\n\r\n```ts\r\nimport type { NuxtImgProps, NuxtPictureProps } from '#image'\r\n```\n\n## 👉 Changelog\n\n[compare changes](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fimage\u002Fcompare\u002Fv2.0.0...release\u002Fv2.1.0)\n\n### 🚀 Enhancements\n\n- **deps:** migrate to ipx v4 (#2094)\n- **provider:** add EdgeOne Pages provider (#2173)\n- **imgproxy:** add provider (#2117)\n- **directus:** add sharp transforms & `key` modifier (#2207)\n- **sanity:** support absolute URLs with project and dataset extraction (#2274)\n- **awsAmplify,vercel:** make `minimumCacheTTL` configurable (#2278)\n- **sanity:** add configurable `baseURL` option to Sanity provider (#2273)\n- **runtime:** export Picture and Image props types (#2115)\n- **umbraco:** add image provider (#2165)\n- **flyimg:** add Flyimg built-in provider (#2125)\n- **cloudflareimages:** add new provider (#2100)\n- **builderio:** add Builder.io Image API provider (#2050)\n- **picsum:** add Lorem Picsum placeholder image provider (#2106)\n- **supabase:** add image provider (#2027)\n\n### 🩹 Fixes\n\n- **flyimg:** encode all # characters in color values ([`137ee63`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fimage\u002Fcommit\u002F137ee63))\n- remove duplicated `provider` key in generated image options (#2279)\n- **nuxt-picture:** align preload link type with unhead v3 (#2254)\n- **github:** set max size of 460 ([`7e561f6`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fimage\u002Fcommit\u002F7e561f6))\n- **umbraco:** shallow clone modifiers before modifying ([`237e480`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fimage\u002Fcommit\u002F237e480))\n- **cloudflare:** add `baseURL` for urls with no operations (#2162)\n- **nuxt-img:** set `imagesrcset` preload when densities are set w\u002Fo sizes (#2176)\n- **fastly:** handle absolute URLs and merge preexisting query params (#2140)\n- **ipx:** merge user-defined `runtimeConfig.ipx` with defaults (#2134)\n- **directus:** add `withoutEnlargement` modifier type (#2133)\n- **shopify:** merge preexisting query params with modifiers (#2135)\n- reduce max-width breakpoint values by 1px (#2132)\n- **netlifyImageCdn,netlifyLargeMedia:** set netlify `remote_images` config (#2086)\n- deduplicate `formats` (#2038)\n- sanitise custom provider import names (#2092)\n- guard access from `layer.config.image` ([`23b8cef`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fimage\u002Fcommit\u002F23b8cef))\n- **bunny:** merge query params with existing image src (#2054)\n- do not shadow custom provider types with builtins (#2016)\n- **nuxt-picture:** allow `data-*` in imgAttrs (#2017)\n- resolve `public\u002F` dir in relation to `rootDir` ([`3e07761`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fimage\u002Fcommit\u002F3e07761))\n\n### 📖 Documentation\n\n- **sanity:** document baseURL option ([`6f59ab1`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fimage\u002Fcommit\u002F6f59ab1))\n- **shopify:** update NuxtImg syntax to use v-bind for modifiers (#2277)\n- update list of auto-detected providers (#2147)\n- add sharp cross-platform installation section (#2142)\n- add preload example for NuxtImg (#2124)\n- exempt patterns from cf `_routes.json` (#2136)\n- update placeholder attributes in `\u003CNuxtImg \u002F>` example (#2074)\n- add nuxt.care health badge ([`93de8a9`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fimage\u002Fcommit\u002F93de8a9))\n- update docus and add mcp name (#2080)\n- reference from Vercel's Edge Network to Vercel's CDN for image optimization. ([`2deacc0`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fimage\u002Fcommit\u002F2deacc0))\n- fix Nuxt badge icon (#2049)\n- update installation warning (#2061)\n- fix storyblok links (#2046)\n- add deno example (#2012)\n\n### 📦 Build\n\n- **deps:** bump serialize-javascript from 7.0.4 to 7.0.5 (#2249)\n- **deps:** bump js-cookie from 3.0.5 to 3.0.7 (#2248)\n- **deps:** bump ws from 8.17.1 to 8.20.1 (#2246)\n- **deps:** bump h3 from 1.15.6 to 1.15.9 (#2177)\n- **deps:** bump h3 from 1.15.4 to 1.15.5 (#2085)\n\n### 🏡 Chore\n\n- run module prepare in `prepack` ([`97d3758`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fimage\u002Fcommit\u002F97d3758))\n- move `consola` to dev dependencies (#2275)\n- migrate to pnpm v11 (#2236)\n- migrate resolutions to `pnpm-workspace.yaml` ([`9b80ce6`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fimage\u002Fcommit\u002F9b80ce6))\n- migrate npm badges and links to npmx.dev ([`fd87f7d`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fimage\u002Fcommit\u002Ffd87f7d))\n- remove unused slot-related code from `\u003CNuxtPicture>` (#2145)\n- update lint scripts in package.json (#2139)\n- remove deprecated github silent config (#2026)\n- revert pnpm trust policy and restore provenance action ([`13b88c1`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fimage\u002Fcommit\u002F13b88c1))\n- update pnpm to 10.21 and enable trust policy ([`03b5ef4`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fimage\u002Fcommit\u002F03b5ef4))\n\n### 🤖 CI\n\n- add workflow to comment on issues resolved in the latest release ([`e529f37`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fimage\u002Fcommit\u002Fe529f37))\n- improve workflows (#2288)\n- migrate to uppt (#2286)\n- migrate agentscan-action to v2 ([`2f8b332`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fimage\u002Fcommit\u002F2f8b332))\n- add agent-scan workflow to flag bot-authored PRs ([`23ee710`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fimage\u002Fcommit\u002F23ee710))\n- add merge group config (#2137)\n- rename workflow ([`777239c`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fimage\u002Fcommit\u002F777239c))\n- avoid checkout for reproduction comment ([`a200dae`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fimage\u002Fcommit\u002Fa200dae))\n- pin github actions to full-length commit shas ([`f60d0f7`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fimage\u002Fcommit\u002Ff60d0f7))\n- unpin workflow ([`d1cb12b`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fimage\u002Fcommit\u002Fd1cb12b))\n- try pinning ([`09e5efb`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fimage\u002Fcommit\u002F09e5efb))\n- update var ([`402c729`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fimage\u002Fcommit\u002F402c729))\n- use new shared dependency review workflow ([`906111c`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fimage\u002Fcommit\u002F906111c))\n\n### 🎉 New Contributors\n\n- venzil (@q153877011)\n- Vlad Z. (@Nks)\n- kheiner (@kheiner)\n- Berk Altıok (@berkaltiok)\n- 山吹色御守 (@KazariEX)\n- dependabot[bot] (@dependabot[bot])\n- Jens Morten Mikkelsen (@jemomi)\n- Bernhard Berger (@bernhardberger)\n- FKarstein (@FKarstein)\n- Sergiu Daniel Vidican (@vsergiu93)\n- Mohamed Fadl (@FADL285)\n- Martin Arce (@divagueame)\n- Iniubong Obonguko (@codiini)\n- Alireza Jahandideh (@Youhan)\n- Leon Hornig (@Leon338)\n- Dino Kupinic (@Dino-Kupinic)\n- wotan-allfather (@wotan-allfather)\n- Hugo (@HugoRCD)\n- IO-Fire (@IO-Fire)\n- Ingo Fabbri (@infabo)\n- Andrey Shevtsov (@andreyshivas)\n- Tony Costanzo (@Patrity)\n\n### ❤️ Contributors\n\n- Daniel Roe (@danielroe)\n- Luke Nelson (@luc122c)\n- venzil (@q153877011)\n- Vlad Z. (@Nks)\n- kheiner (@kheiner)\n- Berk Altıok (@berkaltiok)\n- Nestor Vera (@hacknug)\n- Damian Głowala (@DamianGlowala)\n- 山吹色御守 (@KazariEX)\n- dependabot[bot] (@dependabot[bot])\n- Julien Huang (@huang-julien)\n- Jens Morten Mikkelsen (@jemomi)\n- Bernhard Berger (@bernhardberger)\n- FKarstein (@FKarstein)\n- Sergiu Daniel Vidican (@vsergiu93)\n- Mohamed Fadl (@FADL285)\n- Martin Arce (@divagueame)\n- Iniubong Obonguko (@codiini)\n- Alireza Jahandideh (@Youhan)\n- Leon Hornig (@Leon338)\n- Dino Kupinic (@Dino-Kupinic)\n- wotan-allfather (@wotan-allfather)\n- Hugo (@HugoRCD)\n- Sébastien Chopin (@atinux)\n- IO-Fire (@IO-Fire)\n- Ingo Fabbri (@infabo)\n- Maxime Pauvert (@maximepvrt)\n- Andrey Shevtsov (@andreyshivas)\n- Domenik Reitzner (@dreitzner)\n- Tony Costanzo (@Patrity)\n- abeer0 (@iiio2)","2026-07-28T20:00:06.744Z","361268836","https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fimage\u002Freleases\u002Ftag\u002Fv2.1.0","019faa50-2457-7760-a752-885324f28569",false,true,"v2.1.0","Nuxt Image v2.1.0 introduces eight new image providers and upgrades to IPX v4, enhancing image processing with smaller bundles, improved SVG security, and new image modifiers. Additionally, error handling has been improved with clearer messages, and type exports for `NuxtImgProps` and `NuxtPictureProps` are now available for better component typing.","2026-07-28T20:00:27.740Z","Nuxt Image v2.1.0",[33],{"color":14,"id":15,"name":16,"slug":7},"2.1.0",25]