Selling a plugin or theme without a licensing system means you have no way to enforce purchase requirements, no mechanism for delivering automatic updates to paying customers, and no visibility into how many sites a single license is running on. Easy Digital Downloads Software Licensing solves all three: it generates license keys on purchase, connects those keys to a verification API that your plugin or theme calls home to, and powers an update server that WordPress’s built-in update mechanism can query for new versions. This guide covers the complete setup, from installing the addon and creating licensed products through configuring the update endpoint, building beta release channels, handling site deactivations, and managing multi-site licensing.

What EDD Software Licensing Does
EDD Software Licensing is a first-party addon that adds license key generation, activation tracking, and an update API to your Easy Digital Downloads store. When a customer purchases a Software Licensing-enabled product, EDD automatically generates a unique license key and delivers it in the purchase confirmation email. That key has an activation limit (the number of sites the customer is allowed to run the plugin on), an expiration date tied to your pricing model, and a record of every site domain that has activated it.
On the update delivery side, EDD Software Licensing provides an update API endpoint on your store that WordPress’s update mechanism can query. Your plugin or theme calls this endpoint with its current version number and license key; the endpoint responds with information about the latest available version and a download URL. WordPress’s built-in update system displays this in the Dashboard → Updates screen, and customers can update your plugin with a single click exactly as they would with plugins hosted on WordPress.org, but updates go only to licensed customers.
Installation and Activation
Download EDD Software Licensing from your EDD customer account and install it in WordPress. The activation process is straightforward:
- Download the zip file from your EDD account dashboard under Downloads → Purchases
- Go to Plugins → Add New → Upload Plugin in your WordPress admin
- Upload the zip and click Install Now, then Activate
- A new Licenses menu item appears under Downloads in the admin sidebar
- Navigate to Downloads → Settings → Licenses to review global defaults before creating licensed products
No additional server configuration is required. The update API endpoint is served by WordPress directly through EDD’s integration with the WordPress HTTP API, your store becomes an update server the moment the addon is active.
Before creating licensed products, review the global settings at Downloads → Settings → Licenses. The key settings here are the default license duration (how long licenses are valid from purchase date), the default activation limit (how many sites one license can be used on), and the license expiration behavior (whether licenses can still deliver plugin updates after expiring, or whether customers must renew to receive updates). This last decision has significant customer service implications: if updates stop working on expired licenses, you will receive support tickets from customers whose sites are falling behind on updates but have simply forgotten to renew.
Creating a Software Licensing-Enabled Product
Open any existing Download product (or create a new one) and scroll to the Download Files section. Attach your plugin’s zip file as the download file. Then scroll to the License Options section, which becomes available after the addon is active. Enable the “Enable licensing for this download” toggle to reveal the full license configuration fields.
Setting Activation Limits
The activation limit controls how many unique domains can activate a single license key. A limit of 1 means single-site licensing; a limit of 5 means the customer can run the plugin on up to five sites. Set the limit based on your pricing model. A common structure is: Personal (1 site, lowest price), Developer (5 sites, mid price), Agency (unlimited sites, highest price). For unlimited sites, set the activation limit to 0, which EDD Software Licensing interprets as unlimited.
If you use EDD variable pricing to offer multiple license tiers from the same product page, each pricing variation can have its own activation limit. The standard three-tier structure used by most commercial WordPress plugins looks like this:
| Tier | Activation Limit | Typical Price | Best For |
|---|---|---|---|
| Personal | 1 site | $49–$79/year | Individual site owners |
| Developer | 5 sites | $99–$149/year | Freelancers managing client sites |
| Agency | Unlimited (0) | $199–$299/year | Agencies with large site portfolios |
This structure gives customers a clear upgrade path when their site count grows and makes your pricing page easy to understand. Customers who purchase the Personal tier and later need more activations can upgrade directly from the EDD checkout, and EDD calculates the price difference automatically.
License Duration and Expiration
License duration sets how long a license key is valid after purchase. Options are 1 year (standard for most commercial plugins), lifetime (no expiration), or custom day counts. For recurring subscription products (monthly or annual subscriptions created with EDD Recurring), the license expiration should sync with the subscription renewal date. EDD Software Licensing integrates with EDD Recurring to handle this: when a subscription renews, the associated license key’s expiration date is automatically extended. When a subscription cancels, the license expires at the end of the current billing period. This integration is one of the primary reasons to use both addons together for subscription-based plugin businesses, license management and billing stay in sync without manual intervention. For the full picture of how recurring billing integrates with license delivery, the EDD Recurring Payments setup guide covers the subscription configuration in detail.
The License Management Dashboard
Navigate to Downloads → Licenses to see all issued license keys. Each license displays its current status, activation count, the associated download, customer, and expiration date. The five status values are:
- Active, license is valid, within its activation limit, and not expired
- Inactive, license key was issued but has never been activated on any site
- Disabled, manually disabled by an admin, typically for refunded or disputed purchases
- Expired, past the expiration date set at purchase; may still deliver updates depending on your global settings
- Site Inactive, was previously activated but currently has zero active site activations
Click any license to open its detail view. Here you can see every domain that has activated the license with timestamps, manually add or remove site activations (for customer service situations where a domain change means the customer cannot deactivate the old site themselves), extend the expiration date, change the activation limit, or disable the license entirely. The ability to manually manage activations is important for long-term customers: domain migrations, site rebuilds, and local development environments frequently exhaust activation counts in ways that are not the customer’s fault, and your ability to cleanly resolve these situations directly affects renewal rates.
How Automatic Updates Work
EDD Software Licensing creates an update server at your store URL. Your plugin or theme calls this server by sending a request to your store’s URL with an edd_action=get_version query parameter along with the plugin name, the current version, the license key, and the requesting site’s domain. The EDD update server validates the license, checks whether a newer version exists, and responds with the new version number, changelog, download URL, and other metadata that WordPress needs to display the update in the dashboard.
The download URL returned by the update server is a time-limited, authenticated URL generated by EDD. This ensures that only customers with valid license keys can download your plugin updates, even if someone intercepts or shares the URL. The URL expires after a short window, typically 24 hours, preventing URL sharing from bypassing your license requirement.
For the update to appear in a customer’s WordPress dashboard, your plugin must include the EDD Software Licensing updater class and initialize it with the correct parameters. EDD provides a reference implementation of this class (the EDD_SL_Plugin_Updater class) that you copy into your plugin. You initialize it once in your plugin’s main file with your store URL, the plugin’s file path, and an array of configuration options including the item name (matching the product title in EDD) and the license key retrieved from the customer’s WordPress options table. EDD’s documentation includes the complete updater class code and integration instructions. Many commercial plugin developers also use the EDD SL Sample Plugin on GitHub as a reference implementation for exactly how the updater class should be integrated.
Building the License Settings Page
For automatic updates to work, your plugin needs a license settings page where the customer enters their license key and activates it against their site. This page is also where they can deactivate the license (to free up an activation slot) and check the current activation status.
The license settings page typically lives in the WordPress admin under Settings → Your Plugin License, or as a tab within your plugin’s main settings screen. The page displays a text input for the license key, an activation status indicator (active, inactive, expired, activation limit reached), the activation count and limit, and buttons to activate and deactivate the license. EDD Software Licensing provides the activation API endpoint your plugin calls when the customer clicks Activate, and the response from the API populates the status indicator. For standalone plugin sellers, this design is so standard that customers expect it, deviation from this pattern increases support tickets about how to activate their license.
The EDD SL Sample Plugin (available in EDD’s GitHub organization) provides a complete reference implementation of the license settings page, including the admin page registration, settings fields, activation and deactivation form handlers, and status display. Using this reference implementation rather than building from scratch ensures you are calling the EDD API correctly and handling all response states (including the no_activations_left, expired, and disabled error codes) in a way customers will recognize from other EDD-powered plugins. For developers who sell AI-generated plugins through their EDD store, the AI-written plugin code licensing guide covers the legal and commercial aspects of licensing AI-generated WordPress plugins through EDD Software Licensing.
Beta Release Channels
EDD Software Licensing supports beta release channels, allowing you to offer pre-release versions to customers who opt in without exposing the beta to your entire customer base. A beta channel is a separate release track that customers can switch to from their license settings page, after which they receive beta versions through the normal update mechanism.
Setting up beta channels requires creating a separate download in EDD for the beta version of your plugin and configuring the updater in the beta-enrolled sites to query for the beta product rather than the stable product. The practical implementation is straightforward: your plugin’s license settings page includes a “Join Beta Program” option that, when enabled, stores a flag in WordPress options. Your updater initialization code checks that flag and switches the item name it sends to EDD from your stable product title to your beta product title. EDD returns the beta download URL for sites with this flag set, and the stable download URL for all others.
Beta channels are particularly valuable for plugin developers with large customer bases. Rather than releasing an update to all customers simultaneously and risking widespread compatibility issues, release to your beta group first, collect feedback for two to four weeks, then promote the beta release to stable. Your beta participants get early access (a benefit for power users), and you get real-world testing before the release hits your full customer base.
Site Deactivation and License Recovery
Every license has a finite number of activations, and customers will legitimately exhaust those activations over time through site migrations, local development environments, staging sites, and domain changes. A well-handled deactivation flow is essential for customer satisfaction and renewal rates.
When a customer deactivates a license from their site’s license settings page, EDD Software Licensing decrements the active site count by one and removes that domain from the activation record. This frees up a slot for a new site activation. The deactivation request is an API call from the customer’s WordPress site to your store, and EDD handles it automatically, no manual admin intervention required in normal operation.
Problems arise when sites are deleted or migrated without first deactivating the license. The old domain remains in the activation record, occupying a slot the customer can no longer free up themselves. Your admin license detail view allows you to manually remove specific domain activations, which is the cleanest resolution. For recurring support issues with customers who regularly exhaust their activation limit through development workflows, consider recommending that they use a local development environment that is excluded from license activation checks, or upgrade to the unlimited activation tier to eliminate the issue entirely.
Multi-Site License Handling
WordPress multisite installations present a licensing edge case: a single WordPress install serves multiple sites (subsites), each at a different domain or subdomain. EDD Software Licensing counts each subsite domain as a separate activation by default. For customers running WordPress multisite with large networks, this creates friction if your activation limit is designed for standard single-site installs.
Address this through your pricing and policy, not through technical workarounds. Offer a Multisite or Network license tier with a higher activation limit or an explicit “multisite networks count as one activation” policy. Document this policy clearly on your pricing page and in your license terms so multisite customers know what to expect before they purchase. If you use EDD variable pricing, create a specific “Multisite” variation that activates against the network’s root domain rather than individual subsite domains. The EDD updater class handles both per-subsite and per-network activation depending on how you initialize it.
License Migration Tools
If you are migrating from a different license management system (or from no system at all) to EDD Software Licensing, the addon provides import tools for bulk license creation. Navigate to Downloads → Tools → Import and use the CSV importer to create license keys in bulk from an export of your previous system. The CSV format requires at minimum the customer email, the download ID, and optionally the license key string if you want to preserve existing keys. If no key string is provided, EDD generates new keys automatically.
For customers migrating from selling through third-party marketplaces (CodeCanyon, ThemeForest), the migration path requires a customer communication campaign alongside the technical migration. Marketplace customers are accustomed to receiving updates through the marketplace; switching them to your own update server requires that they install your license key and activate it. Send a clear migration guide to all affected customers explaining what is changing, what they need to do, and what the deadline is. Offer an extended license term as an incentive to migrate, and set a realistic transition window (90 to 180 days) during which both the marketplace and your direct store channels continue to serve updates.
Troubleshooting Common Issues
Updates not appearing in customer dashboards: The most common cause is a mismatch between the item name string passed to the updater class and the exact product title in EDD. The comparison is case-sensitive. Check that your plugin’s updater initialization uses the exact title string, including any special characters or capitalization, that appears in the EDD product title field. The second most common cause is an SSL certificate issue: the update server request fails silently when the certificate on your store cannot be verified. Ensure your store has a valid SSL certificate and that WordPress’s HTTP API can reach your store URL from the customer’s server.
License showing as inactive after activation: Check whether the activation request is reaching your store. Use your server’s access log to look for incoming requests containing edd_action=activate_license. If no requests are arriving, the issue is on the customer’s side (firewall, outbound request blocking). If requests are arriving but the license still shows inactive, check EDD’s error logs and verify that the license key in the request matches what is stored in EDD, copy-paste errors in the key string are common.
Activation limit errors on a single-site license: Verify the activation limit configured on the license in the EDD Licenses dashboard. If the limit is 1 and the customer has tried to activate on more than one domain (including a staging site), the limit will be reached. The fastest resolution is to manually remove the non-production domain activation from the license detail view. For future prevention, advise customers to use a local development tool like Local (by WP Engine) with a .local TLD, which most license systems exclude from activation counts, or create a staging site detection function in your plugin that suppresses the activation attempt on non-production URLs. EDD’s own themes and plugins that use Software Licensing implement this pattern by checking whether the current site URL matches known staging patterns before initiating activation. For broader context on how EDD Software Licensing fits into a complete plugin sales operation, the guide to selling WordPress themes with EDD covers the full stack from product creation through update delivery and support workflows.
Wrapping Up
EDD Software Licensing is the infrastructure layer that turns your EDD store into a professional plugin or theme business. The license key system enforces your purchase requirement, the activation tracking gives you visibility into how and where your products are being used, and the update server delivers a seamless WordPress-native update experience to paying customers without requiring you to host on WordPress.org.
Set it up correctly from the start: configure the license settings page in your plugin using the EDD SL reference implementation, make your activation limits and renewal policy explicit on your pricing page, and build your admin workflow for handling the deactivation edge cases that every plugin business encounters. Done well, the combination of EDD, EDD Software Licensing, and EDD Recurring Payments gives you a complete commercial plugin business infrastructure that scales from your first sale to thousands of active licenses without requiring a custom-built solution.
Every plugin seller on EDD eventually hits the same operational questions: how do I deliver updates securely, how do I enforce purchase limits, and how do I handle customers who run out of activations? Software Licensing answers all three from inside your existing EDD store, with no third-party services required.
