{"_id":"@acewebs/payload-plugin-cloudinary","_rev":"4-17a2fce61fbbe4fe2d486a3c15288a0e","name":"@acewebs/payload-plugin-cloudinary","dist-tags":{"latest":"1.0.3"},"versions":{"1.0.0":{"name":"@acewebs/payload-plugin-cloudinary","version":"1.0.0","author":{"name":"Aceweb","email":"andrei@aceweb.solutions"},"_id":"@acewebs/payload-plugin-cloudinary@1.0.0","maintainers":[{"name":"aceweb-code","email":"andrei@aceweb.solutions"}],"homepage":"https://github.com/acewebs/payload-plugin-cloudinary#readme","bugs":{"url":"https://github.com/acewebs/payload-plugin-cloudinary/issues"},"dist":{"shasum":"bb43a6aecbe7776ab446a5c15d5dc86ff199a846","tarball":"https://registry.npmjs.org/@acewebs/payload-plugin-cloudinary/-/payload-plugin-cloudinary-1.0.0.tgz","fileCount":7,"integrity":"sha512-TGwfZiQLV1yKxDDAe7cv0diQODB/chkK0fCZSYk0shU8vxqyTcUbyDXMUFpIHBLZu3q629c8x0cTTNO25hBfnQ==","signatures":[{"sig":"MEUCIHWsLETn3jsZ+Yu/dlpwS5XUgyZfckPGRmtwhthT+j9aAiEA+nBvMWJxCNpsopeGEPVZCRNkIdjHtY27PWeXSzpa+G8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19004},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.js","require":"./dist/index.js"}},"gitHead":"c0252346bfb7414a1d3c96d42a6d36f9f8bf3f09","scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts --format esm,cjs --dts"},"_npmUser":{"name":"aceweb-code","email":"andrei@aceweb.solutions"},"repository":{"url":"git+https://github.com/acewebs/payload-plugin-cloudinary.git","type":"git"},"_npmVersion":"10.8.2","description":"This plugin replaces Payload CMS's local file storage with **Cloudinary**, enabling your media uploads to be automatically pushed to and served from Cloudinary.","directories":{},"_nodeVersion":"18.20.8","dependencies":{"cloudinary":"^2.6.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","cloudinary":"^2.6.1","typescript":"^5.8.3"},"peerDependencies":{"payload":"^3.39.1","cloudinary":"^2.6.1"},"_npmOperationalInternal":{"tmp":"tmp/payload-plugin-cloudinary_1.0.0_1748712027321_0.2689833025996251","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@acewebs/payload-plugin-cloudinary","version":"1.0.1","author":{"name":"Aceweb","email":"andrei@aceweb.solutions"},"_id":"@acewebs/payload-plugin-cloudinary@1.0.1","maintainers":[{"name":"aceweb-code","email":"andrei@aceweb.solutions"}],"homepage":"https://github.com/acewebs/payload-plugin-cloudinary#readme","bugs":{"url":"https://github.com/acewebs/payload-plugin-cloudinary/issues"},"dist":{"shasum":"cc1ab3057e5d41e1bd51f962bc7bd82cbf14591f","tarball":"https://registry.npmjs.org/@acewebs/payload-plugin-cloudinary/-/payload-plugin-cloudinary-1.0.1.tgz","fileCount":7,"integrity":"sha512-812ahvkyO/4OC6G28UhjzYpi2Pxgx+bqSwjzZNfoWm34qeuc4xsZnXKLUNcKsREUqIo+QALyaqg/26ROMxrJyw==","signatures":[{"sig":"MEUCIQDhbRiT+EprdRvzbMRyIlDoa+AqK1o7/ujvFw/+IImL0AIgS5kH/fO0pZDT6Bm5cVeUmU+XxS1MZ99NIcNmsn0SGoo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19246},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.js","require":"./dist/index.js"}},"gitHead":"4d47a16ff655afe09e2f20b880f5d739b5222c72","scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts --format esm,cjs --dts"},"_npmUser":{"name":"aceweb-code","email":"andrei@aceweb.solutions"},"repository":{"url":"git+https://github.com/acewebs/payload-plugin-cloudinary.git","type":"git"},"_npmVersion":"10.8.2","description":"This plugin replaces Payload CMS's local file storage with **Cloudinary**, enabling your media uploads to be automatically pushed to and served from Cloudinary.","directories":{},"_nodeVersion":"18.20.8","dependencies":{"cloudinary":"^2.6.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","cloudinary":"^2.6.1","typescript":"^5.8.3"},"peerDependencies":{"payload":"^3.39.1","cloudinary":"^2.6.1"},"_npmOperationalInternal":{"tmp":"tmp/payload-plugin-cloudinary_1.0.1_1748784430192_0.21883590964299393","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@acewebs/payload-plugin-cloudinary","version":"1.0.2","author":{"name":"Aceweb","email":"andrei@aceweb.solutions"},"_id":"@acewebs/payload-plugin-cloudinary@1.0.2","maintainers":[{"name":"aceweb-code","email":"andrei@aceweb.solutions"}],"homepage":"https://github.com/acewebs/payload-plugin-cloudinary#readme","bugs":{"url":"https://github.com/acewebs/payload-plugin-cloudinary/issues"},"dist":{"shasum":"b509508a9e41837ee02a44d033cf0056685e16d5","tarball":"https://registry.npmjs.org/@acewebs/payload-plugin-cloudinary/-/payload-plugin-cloudinary-1.0.2.tgz","fileCount":7,"integrity":"sha512-bLRo249EsNbyXe4wXLFubyDqEcC7YJCnn/NEqvWrHvWXCqWI+OhtXe3mLGkmYqq8p5lMQkqMQO6RFvydUwPnTg==","signatures":[{"sig":"MEYCIQDH3n4POUgWwGSpcL5Kv8TJnnAiNHr5J9eMhr48uYAykAIhAMvFv3BKJj2Rnm3vsUekYTtccK5N5zk5W3yIvuNvrFQT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27127},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.js","require":"./dist/index.js"}},"gitHead":"f48162a051957ff1c00e4ce3b8f872b8ccd152d8","scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts --format esm,cjs --dts"},"_npmUser":{"name":"aceweb-code","email":"andrei@aceweb.solutions"},"repository":{"url":"git+https://github.com/acewebs/payload-plugin-cloudinary.git","type":"git"},"_npmVersion":"10.8.2","description":"This plugin replaces Payload CMS's local file storage with **Cloudinary**, enabling your media uploads to be automatically pushed to and served from Cloudinary.","directories":{},"_nodeVersion":"18.20.8","dependencies":{"cloudinary":"^2.6.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","cloudinary":"^2.6.1","typescript":"^5.8.3"},"peerDependencies":{"payload":"^3.39.1","cloudinary":"^2.6.1"},"_npmOperationalInternal":{"tmp":"tmp/payload-plugin-cloudinary_1.0.2_1748803077388_0.00992849269260998","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@acewebs/payload-plugin-cloudinary","version":"1.0.3","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.js","require":"./dist/index.js"}},"scripts":{"build":"tsup src/index.ts --format esm,cjs --dts","dev":"tsup src/index.ts --watch"},"peerDependencies":{"payload":"^3.39.1","cloudinary":"^2.6.1"},"dependencies":{"cloudinary":"^2.6.1"},"devDependencies":{"tsup":"^8.5.0","typescript":"^5.8.3","cloudinary":"^2.6.1"},"author":{"name":"Aceweb","email":"andrei@aceweb.solutions"},"repository":{"type":"git","url":"git+https://github.com/acewebs/payload-plugin-cloudinary.git"},"bugs":{"url":"https://github.com/acewebs/payload-plugin-cloudinary/issues"},"homepage":"https://github.com/acewebs/payload-plugin-cloudinary#readme","_id":"@acewebs/payload-plugin-cloudinary@1.0.3","gitHead":"9bb61d495f34400454003b8348fd5c38de5ef7cc","description":"This plugin replaces Payload CMS's local file storage with **Cloudinary**, enabling your media uploads to be automatically pushed to and served from Cloudinary.","_nodeVersion":"18.20.8","_npmVersion":"10.8.2","dist":{"integrity":"sha512-czHJwGj/osxu2uTP128u4pLI5PkRNuXZ8byy628NmLoyGI/MJ62jwuXHStviycKUipnH+wd+kgXKtmtcq0drng==","shasum":"c4adee7194ef319406e5b2f688cf06ea4994729e","tarball":"https://registry.npmjs.org/@acewebs/payload-plugin-cloudinary/-/payload-plugin-cloudinary-1.0.3.tgz","fileCount":7,"unpackedSize":20369,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIBJgWYoeJC+mNF+DkygMSppoow1V05hIffQvHh667Hr6AiEAw70CWNXJA8Ao7fImHPbwLQCNi/E5Xz2TN+SotwiSD4M="}]},"_npmUser":{"name":"aceweb-code","email":"andrei@aceweb.solutions"},"directories":{},"maintainers":[{"name":"aceweb-code","email":"andrei@aceweb.solutions"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/payload-plugin-cloudinary_1.0.3_1748887149704_0.07021473689652691"},"_hasShrinkwrap":false}},"time":{"created":"2025-05-31T17:20:27.238Z","modified":"2025-06-02T17:59:10.085Z","1.0.0":"2025-05-31T17:20:27.532Z","1.0.1":"2025-06-01T13:27:10.358Z","1.0.2":"2025-06-01T18:37:57.574Z","1.0.3":"2025-06-02T17:59:09.856Z"},"bugs":{"url":"https://github.com/acewebs/payload-plugin-cloudinary/issues"},"author":{"name":"Aceweb","email":"andrei@aceweb.solutions"},"homepage":"https://github.com/acewebs/payload-plugin-cloudinary#readme","repository":{"type":"git","url":"git+https://github.com/acewebs/payload-plugin-cloudinary.git"},"description":"This plugin replaces Payload CMS's local file storage with **Cloudinary**, enabling your media uploads to be automatically pushed to and served from Cloudinary.","maintainers":[{"name":"aceweb-code","email":"andrei@aceweb.solutions"}],"readme":"# Payload Cloudinary Storage Plugin\n\nThis plugin replaces Payload CMS's local file storage with **Cloudinary**, enabling your media uploads to be automatically pushed to and served from Cloudinary.\n\n### ✅ Features\n\n- Uploading images & videos to Cloudinary\n- Automatically deleting old Cloudinary assets on update\n- Automatically deleting Cloudinary assets on media deletion\n- Displaying Cloudinary images in the admin panel\n- Overriding the default `url` field with the Cloudinary URL\n- Optional folder prefixing via `CLOUDINARY_FOLDER`\n- **Automatic field injection:** `cloudinaryUrl` and `cloudinaryPublicId` added to collections\n- **Production-safe schema migrations**: plugin registers migrations for field creation and backward-compatible renaming\n\n---\n\n## 🔧 Installation\n\n1. Add the plugin to your project via local path or NPM.\n\n2. Set environment variables:\n\n```env\nCLOUDINARY_CLOUD_NAME=your_cloud_name\nCLOUDINARY_API_KEY=your_api_key\nCLOUDINARY_API_SECRET=your_api_secret\nCLOUDINARY_FOLDER=media          # optional\nDEBUG_CLOUDINARY=true            # optional\n```\n\n---\n\n## 🚀 Usage\n\n### Register the plugin in `payload.config.ts`\n\n```ts\nimport { cloudinaryPlugin } from \"payload-plugin-cloudinary\";\n\nexport default buildConfig({\n  plugins: [\n    cloudinaryPlugin({\n      cloudName: process.env.CLOUDINARY_CLOUD_NAME,\n      apiKey: process.env.CLOUDINARY_API_KEY,\n      apiSecret: process.env.CLOUDINARY_API_SECRET,\n      rootFolder: process.env.CLOUDINARY_FOLDER, // optional\n      collections: [\"media\"], // required: collections to apply Cloudinary integration to\n    }),\n  ],\n});\n```\n\n---\n\n## 📂 Output Fields\n\nEach configured collection will include the following fields:\n\n- `cloudinaryUrl`: Final URL of the asset served from Cloudinary\n- `cloudinaryPublicId`: Unique Cloudinary public identifier\n\nThese fields are read-only and automatically managed by the plugin.\n\n---\n\n## ✨ Schema Migrations\n\nThis plugin auto-registers **Payload CMS migrations** to ensure:\n\n- Backward compatibility with older `cloudinaryURL` field\n- Safe creation of `cloudinaryUrl` and `cloudinaryPublicId` fields\n- Idempotent updates (migrations only run when needed)\n\n### Vercel / Production Deployment\n\nEnsure `payload migrate` is included in your `build` script:\n\n```json\n\"scripts\": {\n  \"build\": \"payload build && payload migrate\"\n}\n```\n\nThis guarantees schema updates are applied on deploy.\n\n---\n\n## 🚪 Development\n\nUse `npm run build` to compile TypeScript to `dist/`.\nUse `npm link` or `file:` reference to test the plugin locally in your Payload app.\n\n---\n\n## 🗶 License\n\nMIT\n","readmeFilename":"README.md"}