{"id":19483297,"url":"https://github.com/cloudinary-community/netlify-plugin-cloudinary","last_synced_at":"2025-02-25T17:44:33.240Z","repository":{"id":43022194,"uuid":"431682306","full_name":"cloudinary-community/netlify-plugin-cloudinary","owner":"cloudinary-community","description":"Supercharge images on your Netlify site with Cloudinary!","archived":false,"fork":false,"pushed_at":"2024-04-05T17:20:12.000Z","size":6652,"stargazers_count":42,"open_issues_count":18,"forks_count":18,"subscribers_count":8,"default_branch":"main","last_synced_at":"2025-01-08T07:34:32.065Z","etag":null,"topics":["cloudinary","hacktoberfest","netlify","netlify-plugin"],"latest_commit_sha":null,"homepage":"https://netlify.cloudinary.dev/","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cloudinary-community.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-11-25T01:52:11.000Z","updated_at":"2024-10-15T19:13:25.000Z","dependencies_parsed_at":"2023-09-07T02:57:40.468Z","dependency_job_id":"e61a7c9f-cd8d-4377-bec7-923333409e54","html_url":"https://github.com/cloudinary-community/netlify-plugin-cloudinary","commit_stats":null,"previous_names":["cloudinary-community/netlify-plugin-cloudinary"],"tags_count":28,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudinary-community%2Fnetlify-plugin-cloudinary","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudinary-community%2Fnetlify-plugin-cloudinary/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudinary-community%2Fnetlify-plugin-cloudinary/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudinary-community%2Fnetlify-plugin-cloudinary/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cloudinary-community","download_url":"https://codeload.github.com/cloudinary-community/netlify-plugin-cloudinary/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240718919,"owners_count":19846482,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cloudinary","hacktoberfest","netlify","netlify-plugin"],"created_at":"2024-11-10T20:14:30.951Z","updated_at":"2025-02-25T17:44:33.220Z","avatar_url":"https://github.com/cloudinary-community.png","language":"HTML","readme":"\u003cpicture\u003e\n  \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://user-images.githubusercontent.com/62209650/196528621-b68e9e10-7e55-4c7d-9177-904cadbb4296.png\" align=\"center\" height=50\u003e\n  \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://user-images.githubusercontent.com/62209650/196528761-a815025a-271a-4d8e-ac7e-cea833728bf9.png\" align=\"center\" height=50\u003e\n  \u003cimg alt=\"Cloudinary\" src=\"https://user-images.githubusercontent.com/62209650/196528761-a815025a-271a-4d8e-ac7e-cea833728bf9.png\" align=\"center\" height=50\u003e\n\u003c/picture\u003e\n\u0026ensp;\u0026ensp;\n\u003cpicture style=\"padding: 50px\"\u003e\n  \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://user-images.githubusercontent.com/62209650/196580077-8decb083-1556-4e10-99af-84b79e909229.png\" align=\"center\" height=50\u003e\n  \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://user-images.githubusercontent.com/62209650/196579993-14e2a5e4-da8d-46a9-87ba-3a76d54975fb.png\" align=\"center\" height=50\u003e\n  \u003cimg alt=\"Netlify\" src=\"https://user-images.githubusercontent.com/62209650/196579993-14e2a5e4-da8d-46a9-87ba-3a76d54975fb.png\" align=\"center\" height=50\u003e\n\u003c/picture\u003e\n\n######\n\n\u003ca href=\"https://github.com/colbyfayock/netlify-plugin-cloudinary/actions/workflows/test_and_release.yml\"\u003e\u003cimg alt=\"GitHub Workflow Status\" src=\"https://img.shields.io/github/actions/workflow/status/colbyfayock/netlify-plugin-cloudinary/test_release.yml?branch=main\u0026label=Test%20%26%20Release\u0026style=flat-square\"\u003e\u003c/a\u003e \u003ca href=\"https://www.npmjs.com/package/netlify-plugin-cloudinary\"\u003e\u003cimg alt=\"npm\" src=\"https://img.shields.io/npm/v/netlify-plugin-cloudinary?style=flat-square\"\u003e\u003c/a\u003e \u003ca href=\"https://github.com/colbyfayock/netlify-plugin-cloudinary/blob/main/LICENSE\"\u003e\u003cimg alt=\"GitHub\" src=\"https://img.shields.io/github/license/colbyfayock/netlify-plugin-cloudinary?label=License\u0026style=flat-square\"\u003e\u003c/a\u003e\n\n# Cloudinary Netlify Plugin\n\nOptimize and serve all images served in your Netlify site deploy with [Cloudinary](https://cloudinary.com/).\n\nThe Cloudinary plugin hooks into your Netlify build process and sets up images for optimization and delivery. First, the plugin replaces all your on-page, post-compilation images with a Cloudinary-sourced URL, greatly accelerating your initial page load. Next, for comprehensive coverage, Cloudinary redirects assets requested from your images directory to a Cloudinary URL with the default fetch feature or the upload delivery type.\n\ntl;dr automatically serves smaller images in modern formats\n\n- [Getting Started](#%EF%B8%8F-getting-started)\n- [Configuration](#-configuration)\n- [Common Questions \u0026 Issues](#%EF%B8%8F%EF%B8%8F-common-questions--issues)\n- [How It Works](#%EF%B8%8F-how-it-works)\n- [Development](#-development)\n\n**This is a community library supported by the Cloudinary Developer Experience team.**\n\n## ⚡️ Getting Started\n\nBefore installing, make sure you're set up with a free [Cloudinary](https://cloudinary.com/) account.\n\n### Installing via Netlify UI\n\n- [Install the plugin](https://app.netlify.com/plugins/netlify-plugin-cloudinary/install) using the [Netlify Build Plugins Directory](https://app.netlify.com/plugins)\n\n\u003chttps://app.netlify.com/plugins/netlify-plugin-cloudinary/install\u003e\n\n- Add your Cloudinary Cloud Name as a [build environment variable](https://docs.netlify.com/configure-builds/environment-variables)\n\n```\nName: CLOUDINARY_CLOUD_NAME\nValue: \u003cYour Cloud Name\u003e\n```\n\n- Trigger a new deployment!\n\nBy default, your images will be served via the [fetch delivery type](https://cloudinary.com/documentation/fetch_remote_images).\n\n### File-based configuration\n\n- Add the plugin to your Netlify config:\n\n```toml\n[[plugins]]\n  package = \"netlify-plugin-cloudinary\"\n```\n\n- Configure your Cloudinary Cloud Name:\n\n```toml\n[[plugins]]\n  package = \"netlify-plugin-cloudinary\"\n\n  [plugins.inputs]\n  cloudName = \"\u003cYour Cloud Name\u003e\"\n```\n\nBy default, your images will be served via the [fetch delivery type](https://cloudinary.com/documentation/fetch_remote_images).\n\n### Installing locally\n\n- Install the plugin:\n\n```shell\nnpm install netlify-plugin-cloudinary\n```\n\n- Use a [file-based configuration](#file-based-configuration) to add the plugin to your builds\n\n## 🛠 Configuration\n\n### Plugin Inputs\n\n| Name            | Type    |Required | Example   | Description |\n|-----------------|---------|---------|-----------| ------------|\n| cloudName       | string  | No*     | mycloud   | Cloudinary Cloud Name |\n| cname           | string  | No      | domain.com | The custom domain name (CNAME) to use for building URLs (Advanced Plan Users) |\n| deliveryType    | string  | No      | fetch     | The method by which Cloudinary stores and delivers images (Ex: fetch, upload) |\n| folder          | string  | No      | myfolder  | Folder all media will be stored in. Defaults to Netlify site name |\n| imagesPath      | string/Array | No | /assets   | Local path application serves image assets from |\n| loadingStrategy | string  | No      | eager     | The method in which in which images are loaded (Ex: lazy, eager) |\n| maxSize         | object  | No      | eager     | See Below. |\n| privateCdn      | boolean | No      | true      | Enables Private CDN Distribution (Advanced Plan Users) |\n| uploadPreset    | string  | No      | my-preset | Defined set of asset upload defaults in Cloudinary |\n| uploadConcurrency | number | No     | 10        | Maximum value of concurrent uploads |\n*Cloud Name must be set as an environment variable if not as an input\n\n#### Max Size\n\nThe Max Size option gives you the ability to configure a maximum width and height that images will scale down to, helping to avoid serving unnecessarily large images.\n\nBy default, the aspect ratio of the images are preserved, so by specifying both a maximum width and height, you're telling Cloudinary to scale the image down so that neither the width or height are beyond that value.\n\nAdditionally, the plugin uses a crop method of `limit` which avoids upscaling images if the images are already smaller than the given size, which reduces unnecessary upscaling as the browser will typically automatically handle.\n\nThe options available are:\n\n| Name            | Type    | Example   | Description |\n|-----------------|---------|-----------| ------------|\n| dpr             | string  | 2.0       | Device Pixel Ratio which essentially multiplies the width and height for pixel density. |\n| height          | number  | 600       | Maximum height an image can be delivered as. |\n| width           | number  | 800       | Maximum width an image can be delivered as.  |\n\nIt's important to note that this will not change the width or height attribute of the image within the DOM, this will only be the image that is being delivered by Cloudinary.\n\n### Environment Variables\n\n| Name                   | Required | Example  | Description |\n|------------------------|----------|----------|-------------|\n| CLOUDINARY_CLOUD_NAME  | No*      | mycloud  | Cloudinary Cloud Name |\n| CLOUDINARY_API_KEY     | No       | 1234     | Cloudinary API Key |\n| CLOUDINARY_API_SECRET  | No       | abcd1234 | Cloudinary API Secret |\n\n*Cloud Name must be set as an input variable if not as an environment variable\n\n### Setting your Cloud Name\n\nYou have two options for setting your Cloud Name: plugin input or environment variable.\n\n**Input**\n\nInside your Netlify config:\n\n```toml\n  [plugins.inputs]\n  cloudName = \"\u003cYour Cloud Name\u003e\"\n```\n\n**Environment Variable**\n\nInside your environment variable configuration:\n\n```\nCLOUDINARY_CLOUD_NAME=\"\u003cYour Cloud Name\u003e\"\n```\n\nLearn how to [set environment variables with Netlify](https://docs.netlify.com/configure-builds/environment-variables/).\n\n### Changing your Delivery Type\n\n**fetch**\n\nDefault - no additional configuration needed.\n\nThe fetch method allows you to use Cloudinary delivery by providing a remote URL. Learn more about using delivering remote images with [fetch](https://cloudinary.com/documentation/fetch_remote_images).\n\n\u003e Note: if you are currently restricting Fetched URLs, you need to ensure your Netlify URL is listed under allowed fetch domains. Older accounts may restrict fetched images by default. Read more about [restricting the allowed fetch domains](https://cloudinary.com/documentation/fetch_remote_images#restricting_the_allowed_fetch_domains).\n\n**upload - Unsigned**\n\nUnsigned uploads require an additional [Upload Preset](https://cloudinary.com/documentation/upload_presets) set up and configured in your Cloudinary account.\n\nInside your Netlify config:\n\n```toml\n[[plugins]]\n  package = \"netlify-plugin-cloudinary\"\n\n  [plugins.inputs]\n  cloudName = \"[Your Cloudinary Cloud Name]\"\n  deliveryType = \"upload\"\n  uploadPreset = \"[Your Cloudinary Upload Preset]\"\n```\n\nUploading media to Cloudinary gives you more flexibility with your media upon delivery. Learn more about [unsigned uploads](https://cloudinary.com/documentation/upload_images#unsigned_upload).\n\n**upload - Signed**\n\nSigned uploads require you to set your API Key and API Secret as environment variables.\n\nInside your Netlify config:\n\n```toml\n[[plugins]]\n  package = \"netlify-plugin-cloudinary\"\n\n  [plugins.inputs]\n  cloudName = \"[Your Cloudinary Cloud Name]\"\n  deliveryType = \"upload\"\n```\n\nInside your environment variable configuration:\n\n```\nCLOUDINARY_API_KEY=\"[Your Cloudinary API Key]\"\nCLOUDINARY_API_SECRET=\"[Your Cloudinary API Secret]\"\n```\n\nUploading media to Cloudinary gives you more flexibility with your media upon delivery. Learn more about [signed uploads](https://cloudinary.com/documentation/upload_images#uploading_assets_to_the_cloud).\n\n### Customizing where your images are served from\n\nBy default, the plugin will attempt to serve any thing served from /images as Cloudinary paths. This can be customized by passing in the `imagesPath` input.\n\nInside your Netlify config:\n\n```toml\n[[plugins]]\n  package = \"netlify-plugin-cloudinary\"\n\n  [plugins.inputs]\n  cloudName = \"[Your Cloudinary Cloud Name]\"\n  imagesPath = \"/my-path\"\n  # or imagesPath = [ \"/my-path\", \"/my-other-path\" ]\n```\n\n## 🕵️‍♀️ Common Questions \u0026 Issues\n\n### I'm using the default settings but my images 404\n\nThe plugin uses the fetch method by default and if you're receiving a 404 with a valid URL and valid Cloudinary account, you may be currently restricting fetched URLs.\n\nYou have two options to resolve this: adding your Netlify domain to the list of \"allowed fetch domains\" and removing the fetched URL restriction.\n\nAdding your domain to the \"allowed fetch domains\" list is more secure by not allowing others to use your Cloudinary account with their own images. You can do this under Settings \u003e Security \u003e Allowed fetch domains.\n\nAlternatively, you can remove the restriction and allow all fetched images to work by going to Settings \u003e Security \u003e Restricted media types and unchecking the box for Fetched URL.\n\n## ⚙️ How It Works\n\n### Delivery Part 1: Replacing all static, on-page images with Cloudinary URLs\n\nDuring the Netlify build process, the plugin is able to tap into the `onPostBuild` hook where we use [jsdom](https://github.com/jsdom/jsdom) to create a node-based representation of the DOM for each output HTML file, then walk through each node, and if it's an image, we replace the source with a Cloudinary URL.\n\nDepending on the configuration, we'll either use the full URL for that image with the [Cloudinary fetch API](https://cloudinary.com/documentation/fetch_remote_images) or alternatively that image will be [uploaded](https://cloudinary.com/documentation/upload_images), where then it will be served by public ID from the Cloudinary account.\n\nWhile this works great for a lot of cases and in particular the first load of that page, using a framework with clientside routing or features that mutate the DOM may prevent that Cloudinary URL from persisting, making all of that hard work disappear, meaning it will be served from the Netlify CDN or original remote source (which is fine, but that leads us to Part 2).\n\n### Delivery Part 2: Serving all assets from the /images directory from Cloudinary\n\nTo provide comprehensive coverage of images being served from Cloudinary, we take advantage of Netlify's dynamic redirects and serverless functions to map any image being served from the /images directory (or the configured `imagesPath`), redirect it to a serverless function, which then gets redirected to a Cloudinary URL.\n\nThrough this process, we're still able to afford the same option of using either the fetch or upload API depending on preference, where the latter would be uploaded if it's a new asset within the serverless function.\n\n## 🧰 Development\n\n### Plugin\n\nTo actively develop with the plugin, you need to be able to run a Netlify build and deploy.\n\nYou can do this by pushing a site that uses this plugin to Netlify or you can use the [Netlify CLI](https://docs.netlify.com/cli/get-started/) locally (recommended).\n\nYou can reference the plugin locally in your `netlify.toml` by specifying the directory the plugin is in relative to your project, for example:\n```\n[[plugins]]\n  package = \"../netlify-plugin-cloudinary\"\n```\n\nOn the locally linked Netlify project, you can then run:\n\n```\nnetlify deploy --build\n```\n\nWhich will combine the build and deploy contexts and run through the full process, generating a preview URL.\n\n#### Caveats\n* The Netlify CLI doesn't support all input and environment variables for build plugins, primarily `process.env.DEPLOY_PRIME_URL` meaning the `onPostBuild` image replacement will not occur locally.\n\n### Demo\n\nThe repository additionally includes a demo that uses the plugin. The demo is a simple Next.js application that lows a few images statically and those same images in a separate list once the page loads. This helps us test both the on-page image replacement and the redirecting of the images directory.\n\nYou can link this project to your Netlify account for testing purposes by creating a new Netlify site at the root of this project and linking it to that new site.\n\nOnce linked, you can then run the build and deploy process with:\n\n```\nnetlify deploy --build\n```\n\n### Tests\n\nTests require all environment variables to be actively set pass. See [configuration](#-configuration) above to see which variables need to be set.\n\nOnce set, tests can be run with:\n\n```\nnpm run test\n```\n\n## Contributors\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://colbyfayock.com/newsletter\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/1045274?v=4?s=100\" width=\"100px;\" alt=\"Colby Fayock\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eColby Fayock\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/cloudinary-community/netlify-plugin-cloudinary/commits?author=colbyfayock\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/cloudinary-community/netlify-plugin-cloudinary/commits?author=colbyfayock\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"#example-colbyfayock\" title=\"Examples\"\u003e💡\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/Chuloo\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/22301208?v=4?s=100\" width=\"100px;\" alt=\"William\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eWilliam\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/cloudinary-community/netlify-plugin-cloudinary/commits?author=Chuloo\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://mk.gg\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/213306?v=4?s=100\" width=\"100px;\" alt=\"Matt Kane\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMatt Kane\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/cloudinary-community/netlify-plugin-cloudinary/pulls?q=is%3Apr+reviewed-by%3Aascorbic\" title=\"Reviewed Pull Requests\"\u003e👀\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://donno2048.github.io/Portfolio/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/61805754?v=4?s=100\" width=\"100px;\" alt=\"Elisha Hollander\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eElisha Hollander\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/cloudinary-community/netlify-plugin-cloudinary/commits?author=donno2048\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/Kunal-8789\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/76679262?v=4?s=100\" width=\"100px;\" alt=\"Kunal Kaushik\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eKunal Kaushik\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#tool-Kunal-8789\" title=\"Tools\"\u003e🔧\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://portfolio-shikhar13012001.vercel.app/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/75368010?v=4?s=100\" width=\"100px;\" alt=\"Shikhar\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eShikhar\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/cloudinary-community/netlify-plugin-cloudinary/commits?author=shikhar13012001\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/cloudinary-community/netlify-plugin-cloudinary/commits?author=shikhar13012001\" title=\"Tests\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://digantakrbanik.codes/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/65999534?v=4?s=100\" width=\"100px;\" alt=\"Diganta Kr Banik\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eDiganta Kr Banik\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/cloudinary-community/netlify-plugin-cloudinary/commits?author=developer-diganta\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/cloudinary-community/netlify-plugin-cloudinary/commits?author=developer-diganta\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"https://github.com/cloudinary-community/netlify-plugin-cloudinary/commits?author=developer-diganta\" title=\"Tests\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/3t8\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/62209650?v=4?s=100\" width=\"100px;\" alt=\"3t8\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003e3t8\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/cloudinary-community/netlify-plugin-cloudinary/commits?author=3t8\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/Abubakrce19\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/104122959?v=4?s=100\" width=\"100px;\" alt=\"Abubakrce19\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAbubakrce19\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/cloudinary-community/netlify-plugin-cloudinary/commits?author=Abubakrce19\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://ericapisani.dev\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/5655473?v=4?s=100\" width=\"100px;\" alt=\"Erica Pisani\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eErica Pisani\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/cloudinary-community/netlify-plugin-cloudinary/commits?author=ericapisani\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://matiashernandez.dev\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/282006?v=4?s=100\" width=\"100px;\" alt=\"Matías Hernández Arellano\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMatías Hernández Arellano\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/cloudinary-community/netlify-plugin-cloudinary/commits?author=matiasfha\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/kcoderhtml\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/92754843?v=4?s=100\" width=\"100px;\" alt=\"Kieran Klukas\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eKieran Klukas\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/cloudinary-community/netlify-plugin-cloudinary/commits?author=kcoderhtml\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://gshel.org\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/35184207?v=4?s=100\" width=\"100px;\" alt=\"Gretchen Shelby-Dormer\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eGretchen Shelby-Dormer\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/cloudinary-community/netlify-plugin-cloudinary/commits?author=gshel\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloudinary-community%2Fnetlify-plugin-cloudinary","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcloudinary-community%2Fnetlify-plugin-cloudinary","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloudinary-community%2Fnetlify-plugin-cloudinary/lists"}