Descrizione
DMSI DDLS – Digital Downloads, Licensing & Subscriptions (DDLS) is a comprehensive solution for software vendors, digital product sellers, and subscription-based businesses who need to manage licenses, subscriptions, and digital downloads through WooCommerce.
Why Choose DDLS?
Unlike expensive alternatives that cost $500-700/year, DDLS provides enterprise-grade licensing features completely free. Built specifically for WordPress and WooCommerce, it integrates seamlessly with your existing store.
Core Features
License Management
- Generate unique license keys automatically on purchase
- Set activation limits per license (unlimited or fixed number)
- Track activations with detailed site information
- License expiration with automatic notifications
- License status management (active, expired, suspended, revoked)
- Transfer licenses between customers (with admin approval)
- Bulk actions (activate, suspend, delete)
Subscription Management
- Custom subscription system (no WooCommerce Subscriptions required)
- Subscription tracking and status management
- Manual renewal order creation
- Grace periods for expired subscriptions
- Admin notifications for renewals due
Digital Downloads
- Secure file delivery with signed URLs
- Version management for software products
- Multiple files per product version
- Platform-specific downloads (Windows, Mac, Linux)
- Download tracking and logging
- Access control based on license status
Customer Portal
- Self-service license management
- View and download purchased products
- Deactivate sites from the portal
- View subscription status
- Download history
- Account settings
Email Notifications
- 30+ email templates
- Customer and admin notifications
- License lifecycle emails (created, activated, expiring, expired)
- Subscription status emails
- Email queue with retry logic
- Email logs
REST API
- License validation endpoint
- Activation and deactivation endpoints
- Download endpoints
- Secure API key authentication
- Rate limiting protection
Admin Dashboard
- Overview widgets with key metrics
- License status summary
- Recent activity feed
- Quick actions for common tasks
Reports
- License reports
- Customer reports
- Basic analytics
- Export capabilities
Security
- 4 user roles with granular permissions
- API key authentication
- Audit logging
- GDPR compliance tools
Bundle Products
- Group multiple DDLS products into a single purchasable SKU
- One parent license + one child license per bundled product generated on purchase
- One subscription covers the entire bundle — one renewal, one email
- Child licenses inherit each product’s own activation limit and duration
- Customer portal shows child licenses grouped under the bundle with “Managed by” labels
- Renewal extends all child licenses atomically in a single transaction
- Bundle badge in DDLS Products list shows child product count
Premium Extensions
Extend DDLS functionality with optional premium extensions, available at dmsi.gr:
- Update Server – Automatic plugin/theme updates
- Subscriptions Pro – Automatic renewals, payment retry, dunning
- Analytics Pro – Advanced revenue analytics and reporting
- Webhooks – Outbound event notifications
- Support Desk – Customer support ticketing
- Team Management – Multi-user license management
- Advanced API – Enterprise REST and GraphQL APIs
- Service Management – Service contracts and SLA tracking
Perfect For
- Software developers selling plugins, themes, or desktop applications
- Digital product sellers needing license control and secure downloads
- Subscription-based businesses with recurring billing needs
- Agencies managing client licenses and software access
- E-book, course, or media creators with download access control
- Anyone selling digital products through WooCommerce
Requirements
- WordPress 6.0 or higher
- WooCommerce 7.0 or higher
- PHP 8.0 or higher
- MySQL 5.7 or higher
Documentation
Comprehensive documentation is available at dmsi.gr/docs/ddls/
Support
For support questions, please visit dmsi.gr/support/
Privacy Policy
DMSI Digital Downloads, Licensing & Subscriptions stores the following data:
- Customer information (name, email) linked to WooCommerce orders
- License keys and activation records
- Site URLs where licenses are activated
- Download logs for security auditing
- Email logs for delivery tracking
This data is stored in your WordPress database and is not transmitted to external servers except when customers activate licenses (their site URL is recorded).
For GDPR compliance, customers can request data export or deletion through the Customer Portal or WordPress privacy tools.
Screenshot

Dashboard – Upper section with license overview, subscription revenue, and expiring licenses 
Dashboard – Lower section with top products, renewals due, and system status 
Customer Portal – Product overview with license, downloads, support, subscription, and purchase info 
Licenses – List view with filtering, search, and bulk actions 
Edit License – Configure license key, customer, product, type, activation limit, and expiration 
Licensed Products – Product list with license type, activation limits, and pricing 
Subscriptions – Track subscription status, billing, and renewal dates 
Customer Portal – My Products page with product cards, license status, and quick actions 
Reports – License and revenue analytics 
Versions – Software version management and release tracking 
Activations – Track license activations across sites and devices 
Background Jobs – Automated task scheduling and processing status 
Settings – General configuration options
Installazione
Automatic Installation
- Log in to your WordPress dashboard
- Navigate to Plugins > Add New
- Search for “DMSI Digital Downloads Licensing”
- Click “Install Now” and then “Activate”
- Go to DDLS > Settings to configure the plugin
Manual Installation
- Download the plugin ZIP file
- Log in to your WordPress dashboard
- Navigate to Plugins > Add New > Upload Plugin
- Choose the ZIP file and click “Install Now”
- Activate the plugin
- Go to DDLS > Settings to configure the plugin
After Installation
- Navigate to DDLS > Settings to configure general options
- Create your first licensable product in WooCommerce
- Configure the license settings for your product
- Test a purchase to verify license generation
FAQ
-
Does this plugin require WooCommerce?
-
Yes, DDLS is built as a WooCommerce extension and requires WooCommerce 7.0 or higher to function.
-
How do license keys get generated?
-
License keys are automatically generated when a customer completes a purchase. You can also manually create licenses from the admin dashboard.
-
Can I limit how many sites a license can be activated on?
-
Yes, you can set activation limits per product or per license. Options include unlimited activations or a specific number (1, 2, 5, 10, etc.).
-
Does it support recurring subscriptions?
-
Yes, DDLS includes a subscription management system. The core plugin tracks subscriptions and notifies admins when renewals are due. For automatic payment processing and retry logic, the Subscriptions Pro extension is available.
-
Can customers manage their own licenses?
-
Yes, the Customer Portal allows customers to view licenses, deactivate sites, download products, and view their subscription status. Site activation is done via the REST API from your software.
-
Is there an API for license validation?
-
Yes, DDLS provides a REST API for license validation, activation, and deactivation. This allows your software to verify licenses programmatically.
-
Does it support multiple files per product?
-
Yes, you can upload multiple files per product version, including platform-specific builds (Windows, Mac, Linux).
-
How secure are the download links?
-
Downloads use signed URLs with expiration times to prevent unauthorized access. Each download is logged for security auditing.
-
Is the plugin translatable?
-
Yes, DDLS is fully internationalized with 2,400+ translatable strings. Translation files can be added to the languages folder.
-
Does it include automatic updates for my software?
-
The core plugin manages licenses and downloads. For automatic plugin/theme update delivery, the Update Server extension is available.
Recensioni
Non ci sono recensioni per questo plugin.
Contributi e sviluppo
“DMSI DDLS – Digital Downloads, Licensing & Subscriptions” è un software open source. Le persone che hanno contribuito allo sviluppo di questo plugin sono indicate di seguito.
CollaboratoriTraduci “DMSI DDLS – Digital Downloads, Licensing & Subscriptions” nella tua lingua.
Ti interessa lo sviluppo?
Esplora il codice segui il repository SVN, segui il log delle modifiche tramite RSS.
Changelog
2.1.2
Bug Fixes
* Fixed Action Scheduler duplicate registrations — dedup guard was checking without group but scheduling with group, causing hundreds of duplicate recurring jobs
* Fixed 4 background jobs (database cleanup, subscription renewal, support expiration, support renewal) that were silently not running since WP Cron context doesn’t fire admin_init
* Fixed stale activations job hook name mismatch that prevented the job from executing
2.1.1
Bundle UX Improvements
* Customer portal: bundle licenses now display as a single card in the list; child keys and details accessible via VIEW DETAILS
* Customer portal VIEW DETAILS: Included Extensions table shows all child licenses with name, key, activations, and expiry; Active Sites section hidden for bundle parents
* Order email: child extension keys now shown with product name labels; parent bundle container key omitted
2.1.0
New: Bundle Products
* Added Bundle product type — group multiple DDLS products into a single purchasable SKU
* New lnl_dmsilm_bundle_items database table maps bundle products to their child products
* Order processor creates one parent license + one child license per bundled product on purchase
* Child licenses use each child product’s own License Type, Activation Limit, and Duration settings
* One subscription per bundle linked to the parent license; child licenses never get individual subscriptions
* Bundle renewal extends all non-cancelled child licenses atomically in a single DB transaction
* Single consolidated renewal email lists all renewed products with new expiry dates
* Admin: Bundled Products multi-select on WooCommerce product edit Licensing tab (visible when type = Bundle)
* Admin: “Bundle · N products” badge in DDLS Products list for bundle products
* Customer portal: child licenses grouped under bundle parent row with “Managed by [Bundle Name]” label
* Customer portal: renewal action on bundle (parent) row only; child rows show no renewal button
* Extension hook compatibility: dmsilm_license_created fires per child with synthetic order item (3 args) so Team Management and other extensions work automatically
2.0.1
New: Per-Variation File Uploads
* Added variation_id column to files table — assign downloadable files to specific WooCommerce product variations
* Variation dropdown on Add File and Edit File forms (auto-populated via AJAX for variable products)
* Files grouped by variation on Version edit page with section headers
* Version variation dropdown filters the files section in real-time
Improvements
* File uploads now stored in protected directory (wp-content/uploads/dmsilm-files/) with .htaccess deny rules
* AJAX-based file upload with progress bar (0-90% upload, 90-100% server processing)
* Modernized Add File page UI with drag & drop zone, file preview, and card layout
* Delete file now also removes the physical file from disk
* Form processing moved to admin_init hook — eliminates white screen flashes on edit/delete/update
Bug Fixes
* Fixed file upload not working when accessed via shell route URLs (only legacy slug was recognized)
* Fixed “Invalid file type” error on MSI uploads (disabled WordPress MIME check for admin uploads)
* Fixed in_array() null haystack error when saving files (platform validation used uninitialized static property)
* Fixed delete file not actually deleting (missing delete(true) for physical file removal)
* Fixed file edit/delete causing white screen flash (redirect inside render callback)
2.0.0
New: Support Plan Product Type
* Added custom WooCommerce product type “Support Plan” for selling support contracts as standalone products
* Admin product data tab with support level, duration, and contract settings
* Order completion handler automatically creates support contracts on purchase
* Support Plan products visible in WooCommerce product type dropdown
New: EULA & Terms System
* Full EULA management system with admin CRUD interface
* 5 bundled legal templates: Standard Software License, SaaS/Subscription ToS, Free/Open Source, Freemium Plugin, API/Developer Service
* Template picker with one-click loading on EULA creation
* Placeholder substitution engine ({company_name}, {product_name}, {governing_law}, etc.)
* Custom template creation — save any EULA as a reusable template
* EULA Templates admin section with list table
* Governing Law field added to General Settings
* Legal disclaimer on all EULA forms
New: Standalone Support Contracts & Portal Binding
* Support contracts can now exist without a parent license (standalone purchases)
* Supported Products multi-select field on product edit page — defines which products a contract covers
* supported_product_ids column added to support_contracts table
* Auto-bind logic links standalone contracts to eligible licenses on creation
* Customer portal binding UI — button, modal, and eligible license list via AJAX
* Binding confirmation email sent on successful contract-to-license binding
* WooCommerce order email includes support contract line for standalone items
New: Support Level “None” & Upgrade Discovery
* “None” option added to support level dropdown (product and variation level)
* Contracts with support_level=’none’ filtered from customer portal display
* Dashboard support count widget excludes ‘none’ contracts
* find_support_products() discovers purchasable support products for upgrade prompts
* Support Purchase URL field on product admin for manual override
* Cache invalidation for support product discovery
New: Version Variation Support
* variation_id column added to versions table (schema migration)
* Version model updated with variation_id property and methods
* Admin Versions UI includes variation dropdown on add/edit forms
* Versions list table shows variation column
* Customer portal downloads filtered by purchased variation
New: Entitled Major Version
* entitled_major_version field on licenses — restricts update entitlement to a specific major version (e.g., 3.x.x only)
* Entitled Major Version setting on product edit page — auto-stamps onto licenses at purchase time
* “Lifetime” option added to Override License Duration dropdown
New: Email Capture on Activation
* email_notice field added to activation API response when customer email is captured
* Informs API callers that the email was stored and how to request removal
New: Admin-Configurable Platform Values
* Platform dropdown values (Windows, Mac, Linux, etc.) are now admin-configurable via Settings > Platforms tab
* Add, edit, and delete platform options from the admin UI
Security: License Cross-Activation Fix
* Added product_id validation to all license API routes (activate, deactivate, validate, check-in, verify)
* Prevents licenses from one product being used to activate a different product
* validate_product_ownership() helper enforces ownership across all endpoints
* Unified licenses AJAX handlers updated with product validation
Improvements
* Added inline file upload on Add Version form — attach files during version creation
* Made support levels list table responsive for smaller screens
Bug Fixes
* Fixed license type info display showing “12 months” instead of “Lifetime” for lifetime licenses
* Fixed support level edit modal always showing permissions/SLA checkboxes as checked
* Fixed support levels “Name” column too narrow (19px) causing vertical text wrapping
* Fixed all Versions admin URLs using legacy page slug — migrated to new shell format
* Fixed Edit and Deprecate/Restore action links broken on Versions grouped view page
* Fixed Versions grouped view filter URLs encoding ampersand with add_query_arg
* Fixed Override License Duration not accepting lifetime value in save handler
* Fixed email logs bulk delete using unregistered page slug
* Fixed license copy icon duplicate and handler mismatch
* Fixed default support level fallback
* Fixed version numbering incorrectly set to 1.3.0 in plugin header and constant
1.2.2
- Added is_lifetime flag to License Types — allows lifetime licenses with no expiry
- Added variable product support: per-variation license configuration and order processing
- Added resolve_effective_settings() for merging product/variation/license-type settings
- Added variation metadata (license type, activation limit, duration) to API responses
- Added license type permissions info display on product edit page
1.2.1
- Renamed customer portal “Support” tab to “Support Contracts” to avoid conflict with Support Desk extension’s “Support” tab
- Customer portal now backed by a real WordPress page — fixes theme page title banner showing “Recent Posts”
- Added “Portal Page Title” setting (replaces “Portal URL Slug”) — title syncs to the portal WP page
- Portal page auto-created on activation and recreated if deleted while portal is enabled
- Removed “My Portal” h1 from portal shell — theme handles the page title via its standard page template
- Moved logout link to bottom of portal sidebar; removed username display from portal header
1.2.0
- Added 3-column admin shell layout with URL router (section/view params) and dmsilm_admin_shell_sections / dmsilm_admin_shell_pages filters for extensions
- Added draggable dashboard widget system
- Added Extension Status dashboard widget showing installed/active extensions
- Added unified extension license page in Core Settings section
- Added consolidated license admin notice (replaces per-extension notices)
- Added CSS design tokens at :root for consistent theming across Core and extensions
- Added shared dmsilm-chartjs script handle registered by Core
- Added License Types — full model, database table, settings tab with CRUD UI, dynamic dropdown on product and variation edit pages
- Added variation metadata (license type, activation limit, duration) to API responses
- Added resolve_effective_settings() for merging product/variation/license-type settings; updated order processor
- Added variable product support: per-variation license configuration and order processing
- Added 3-column customer portal shell with section/view routing
- Added Email UID — unique message ID generation, schema migration, X-DMSI-UID header injection
- Added Email Logs: Email ID column, search-by-UID, per-email detail view
- Added extension settings tab hooks (dmsilm_settings_tabs filter, dmsilm_settings_tab_content_{tab} and dmsilm_settings_save_{tab} actions)
- Added public key-based REST API routes: POST /licenses/activate and /licenses/deactivate
- Added order processor filters: dmsilm_license_data_before_create, dmsilm_subscription_data_before_create, dmsilm_support_contract_data_before_create
- Added Files section placeholder on Add Version form (shows “Save first” message)
- Added Media Library option to file upload page (choose existing files or upload new ones)
- Added License Type permissions info box on product edit page (shows activation limit, duration, updates, premium content, API access)
- Fixed license activation and customer portal product visibility issues
- Fixed settings tabs, capability manager registration, and legacy URL redirects
- Fixed Versions page: “Add Version” and “Add the first version” buttons not navigating to add form
- Fixed Versions page: product groups rendering beside filters instead of below them
- Fixed database upgrade routine not running on plugin file updates (missing plugins_loaded version check)
1.0.1
- Fixed Email Logs: CSV export, column sorting, filters, view modal, close button, modal styling
- Fixed Email Settings: 403 error, undefined method, queue status queries
- Fixed Email Templates: preview/edit routing, template loading, CSS layout, editor toolbar, validator warnings, iframe link navigation
- Fixed Advanced tab: wired Test Mode to email sending
- Fixed JS/AJAX timing for all email admin pages
- Removed non-functional Real Data preview option
- Added portal_url and preferences_url template variables
- Fixed Dashboard: system activity labels, expiring licenses link, renewals due link
- Fixed Licenses: filter dropdowns resetting (nonce conflict), layout overlap, added Reset button
- Fixed Subscriptions: same filter nonce conflict, status tabs, renewal_due pseudo-status, Clear All button
- Fixed Products: filter nonce conflict, removed redundant Filter button
- Fixed Downloads: filter nonce conflict, native date pickers for date filters
- Added Reset button to all list table filters
- Auto-submit on filter dropdown change across all admin list pages
- Fixed Reports: revenue tab not loading from dashboard link
- Fixed Activations: custom nonce conflict, status tabs
- Fixed Customers: custom nonce conflict, search
- Fixed Settings: tab navigation from external links
- Fixed Email Stats: date range selection from external links
- Fixed Email Stats: page not accessible (missing submenu registration, capability mismatch)
- Added Email Stats: full CSS styling (header, widget cards, charts, tables, queue status, responsive)
- Added Email Stats: asset enqueuing (Chart.js, localizations)
- Added Email Stats: AJAX handler registration for refresh and chart data
- Added Email Logs: “View Statistics” link in page header
1.0.0
- Initial public release
- License management with automatic key generation
- Activation tracking and limits
- Subscription tracking system
- Digital download delivery with versioning
- Customer portal for self-service
- 30+ email templates
- REST API for license validation
- Admin dashboard with overview widgets
- 4 user roles with permissions
- Audit logging and GDPR tools
