Selling digital downloads is something that not a single one of the large WordPress ecommerce plugins has ever gotten really right. This plugin aims to fix that. Instead of focusing on providing every single feature under the sun, Easy Digital Downloads tries to provide only the ones that you really need. It aims to make selling digital downloads through WordPress easy, and complete.
More information can be found at easydigitaldownloads.com.
For detailed setup instructions, visit the official Documentation page.
- You can clone the GitHub repository:
https://github.com/easydigitaldownloads/easy-digital-downloads.git - Or download it directly as a ZIP file:
https://github.com/easydigitaldownloads/easy-digital-downloads/archive/master.zip
This will download the latest developer copy of Easy Digital Downloads.
If you find an issue, let us know here!
This is a developer's portal for Easy Digital Downloads and should not be used for support. Please visit the support page if you need to submit a support request.
Anyone is welcome to contribute to Easy Digital Downloads. Please read the guidelines for contributing to this repository.
There are various ways you can contribute:
- Raise an Issue on GitHub
- Send us a Pull Request with your bug fixes and/or new features
- Translate Easy Digital Downloads into different languages
- Provide feedback and suggestions on enhancements
EDD has multiple scripts to prepare installable packages:
build: Generate the final files for a release. This script regenerates all CSS/JS, runs translations, and copies files to a build directory. This does not generate zip files.build:blocks: This is for internal use only and rebuilds the blocks asset files.dev: Watch and rebuild CSS/JS files; this will watch for changes and automatically rebuild assets.lite: Generate aneasy-digital-downloads-x.x.x.zipfile, the lite version of EDD. Does not rebuild assets. Useful for quickly creating an installable package.local: Generate zip files for both lite and pro. Does not rebuild assets.package: Rebuild assets, run translations, copy files, and compress files for installation on any WordPress site, for both lite and pro versions of EDD.postinstall: Runs automatically afternpm install; do not use directly.pro: Generate aneasy-digital-downloads-pro-x.x.x.zipfile, the pro version of EDD. Does not rebuild assets. Useful for quickly creating an installable package.repo: Generate a directory of files to copy over to the public repository. Updates the translation.translate: Translate EDD (Pro).translate:lite: Translate the public version of EDD. Runs as part ofnpm run lite; generally do not run this directly.translate:repo: Translate the repository copy of EDD. Runs as part ofnpm run repo; generally do not run this directly.update: Updates all Composer packages and runs the Mozart script. Only run this if a Composer library needs to be updated.
A handful of production dependencies (stripe/stripe-php, nesbot/carbon, square/square) are bundled into /libraries/ rather than loaded from vendor/. Mozart rewrites them into the EDD\Vendor\ namespace so they can't collide with a different copy of the same library shipped by another plugin on the site.
Mozart is installed globally, not as a project dependency:
composer global require coenjacobs/mozart
The compose step copies each package into /libraries/, prefixes its namespace, and then deletes the original from vendor/ (delete_vendor_directories in the extra.mozart config). That delete is intentional — leaving the unprefixed copy in vendor/ would ship the library twice and re-register its original namespace, defeating the prefixing.
Because the source packages are removed from vendor/ after a compose, you must restore them before composing again:
composer install # restore the source packages into vendor/ (respects composer.lock)
composer run mozart # compose into /libraries/, then dump the production autoloader
Only run this when a bundled library actually needs to change. The npm run update script wraps the same Mozart step for the full update flow.
End-to-end tests use Playwright against an ephemeral Docker-managed WordPress + EDD site. No manual site setup required. See e2e/README.md for full details.