Cloudinary is a cloud service that offers a solution to a web application's entire image and video management pipeline. With Cloudinary, all your images are automatically uploaded, normalized, optimized and backed-up in the cloud instead of being hosted on your servers.
With Cloudinary, you can stop messing around with image editors. Cloudinary can manipulate and transform your images online, on-the-fly, directly from your WordPress console. Enhance your images using every possible filter and effect you can think of. All manipulations are done in the cloud using super-powerful hardware, and all resulting images are cached, optimized (smushed and more) and delivered via a lightning fast content delivery network (CDN).
The plugin is available for installation via WordPress plugins directory. The plugin is publicly available at: https://wordpress.org/plugins/cloudinary-image-management-and-manipulation-in-the-cloud-cdn/
This Git repository is the development repository, while there's a mirror public SVN repository of the actual released WordPress plugin version: https://plugins.svn.wordpress.org/cloudinary-image-management-and-manipulation-in-the-cloud-cdn/
Deprecation Note The legacy WordPress Plugin version (v1.x) will be deprecated as of February 1st, 2021, after which support, updates and bug fixes for the legacy plugin will continue in limited fashion. The legacy plugin will be made obsolete on August 1st, 2021 (end-of-life date), meaning, Version 1.x of the plugin will no longer function after that date. We ask that you update to our latest WordPress Plugin v2.x before the August 1st deadline.
Additional resources are available at:
You can open an issue through GitHub.
Contact us https://cloudinary.com/contact
Stay tuned for updates, tips and tutorials: Blog, Twitter, Facebook.
- Node.js v16+ (see
.nvmrc) - npm v6.9+
- Composer
- Docker (required for the WordPress local environment via
wp-env)
-
Clone the repository:
git clone https://github.com/cloudinary/cloudinary_wordpress.git cd cloudinary_wordpress -
Set the correct Node version (if using nvm):
nvm install nvm use
-
Install dependencies:
npm install
This will also run
composer installautomatically via thepostinstallscript, setting up PHP dependencies and linting tools. -
Start the local WordPress environment:
Make sure Docker is running, then:
npm run env:start
This spins up a WordPress instance at http://localhost:8888 with the plugin activated and
WP_DEBUGenabled. A loopback fix is applied automatically so REST API self-requests work inside the container. -
Build front-end assets:
npm run build # One-time production build npm run dev # Watch mode for development
| Command | Description |
|---|---|
npm run env:start |
Start the local WordPress environment |
npm run env:stop |
Stop the local WordPress environment |
npm run env:destroy |
Remove the local environment completely |
npm run env:logs |
View container logs |
npm run env:cli |
Run WP-CLI commands inside the container |
npm run env:clean |
Reset the environment (removes all data) |
npm run build |
Build front-end assets for production |
npm run dev |
Build front-end assets in watch mode |
npm run lint |
Run all linters (PHP, JS, CSS) |
npm run lint:php |
Run PHP CodeSniffer |
npm run lint:php:fix |
Auto-fix PHP linting issues |
npm run lint:js |
Run ESLint on JavaScript files |
npm run lint:js:fix |
Auto-fix JS linting issues |
npm run lint:style |
Run stylelint on SCSS files |
npm run i18n |
Generate translation files |
Run npm run package to create the plugin release in the /build directory and package it as cloudinary-image-management-and-manipulation-in-the-cloud-cdn.zip in the root directory.
Files included in the release package are defined in the gruntfile.js under the copy task. Be sure to update this list of files and directories when you add new files to the project.
-
Tag a release from the
masterbranch on GitHub. -
Run
npm run deployto deploy the version referenced in thecloudinary.phpfile of the current branch. -
Run
npm run deploy-assetsto deploy just the WP.org plugin assets such as screenshots, icons and banners.
E2E tests run against a wp-env site using Playwright.
npm install
npx playwright install --with-deps chromium
npm run env:startnpm run test:e2etests/e2e/wizard-setup.spec.js exercises the live Cloudinary connection flow, so it needs a real connection string. Provide one of two ways:
Option 1 — .env file (recommended for sustained local development). Copy .env.example to .env and fill in the value. .env is gitignored. Playwright loads it automatically at startup.
cp .env.example .env
# edit .env, set CLOUDINARY_E2E_URL=cloudinary://...
npm run test:e2eOption 2 — shell export (good for one-off runs and CI).
export CLOUDINARY_E2E_URL='cloudinary://API_KEY:API_SECRET@CLOUD_NAME'
npm run test:e2eA real shell env var takes precedence over the .env file.
The variable is intentionally named CLOUDINARY_E2E_URL (not CLOUDINARY_URL) so it cannot be confused with the Cloudinary SDK convention or with anything you might define in .wp-env.override.json for local dev. Use a dedicated test Cloudinary account — never production credentials.
Note: Do not set
CLOUDINARY_URLorCLOUDINARY_CONNECTION_STRINGas PHP constants via.wp-env.override.jsonwhile running this spec. The plugin treats a constant-defined connection string as already-configured and hides the wizard's connection input, which makes the test impossible.
CI will provide CLOUDINARY_E2E_URL via a GitHub Actions secret (wired separately under WPP-1195's CI subtask).
npm run test:e2e:debug -- wizard-setupThis opens Playwright's UI runner where you can step through actions, inspect the DOM, and view the network panel.
Released under the GPL license.