Version 5.1.0

November 12, 2026
  • Added a Download Field setting to digital product types, which limits the digital-products/download/download action to assets in that field. When no field is selected, licenses can still download any asset related to their product. (#121)
  • Added craft\digitalproducts\models\ProductType::$downloadFieldUid.
  • Added craft\digitalproducts\models\ProductType::getDownloadField().
  • The assetId param for the digital-products/download/download action is now optional when the product type has a download field, and defaults to the field's first asset.
  • Fixed an error that occurred when viewing the Product Types settings pages when Dev Mode was enabled. (#120)
  • Fixed a bug where licenses without a product showed another product's name, including in the license editor and save notices. (#120)

Version 5.0.0

November 12, 2026

Digital products' SKUs and prices are now stored in Commerce's commerce_purchasables and commerce_purchasables_stores tables. Code that reads the sku or price columns of the digitalproducts_products table directly must be updated.

Content Management

  • Digital products and licenses now use Craft's native element editor, with breadcrumb navigation, draft-based creation, and standard sidebar metadata.
  • Digital product edit pages now use Commerce's SKU and Price fields.
  • Licenses can now be created from the control panel via a "New license" button.
  • The Digital Products section of the control panel now opens the Products index instead of Licenses, when there are product types. (#115)
  • Fixed a bug where the Price field was not editable in the element index inline editor. (#112)
  • Fixed an error that occurred when viewing digital products in "Display as cards" view. (#111)

Administration

  • Licenses now support custom fields, managed from Digital Products → Settings → License Fields. (#30)
  • Product types are now managed from Digital Products → Settings → Product Types.

Development

  • Added the digital-products/download/download action, which streams a licensed asset to the browser without exposing the underlying file URL. (#67, #109)
  • Fixed a bug where the product() method on craft\digitalproducts\elements\db\LicenseQuery didn't accept arrays or not conditions. (#104)
  • Fixed a bug where the product() method on craft\digitalproducts\elements\db\LicenseQuery returned all licenses when no products matched the given SKUs. (#119)

Extensibility

  • craft\digitalproducts\elements\db\ProductQuery now extends craft\commerce\elements\db\PurchasableQuery.
  • Removed craft\digitalproducts\controllers\ProductsController::actionEdit() and actionSave(). Products are now edited and saved via Craft's elements/edit and elements/save actions.
  • Removed craft\digitalproducts\elements\Product::getEditorHtml().

System

  • Removed the sku and price columns from the digitalproducts_products table.
  • The productId and ownerEmail columns on the digitalproducts_licenses table are now nullable.

Version 4.1.0

July 8, 2026
  • Fixed a high-severity RCE vulnerability. (GHSA-46mx-jh57-9v4h)
  • Fixed a PHP error that could occur when paying for a completed order that contains deleted digital products.
  • Fixed an SQL error that could occur when saving a new digital product. (#110)

Version 4.0.3

February 3, 2025
  • Fixed a bug where users with “Manage licenses” permission weren’t allowed to edit licenses. (#105)
  • Fixed a PHP error that could occur when eager loading orders on a license query. (#100)

Version 4.0.2

September 11, 2024
  • Fixed a bug where GraphQL queries for digital products would fail.

Version 4.0.1

September 11, 2024
  • Fixed a bug where product fields content was not prepared for Craft 5.

Version 4.0.0

March 20, 2024
  • Digital Products now requires Craft Commerce 5.0.0-beta.1 or later.

Version 3.2.4

February 3, 2025
  • Fixed a bug where users with “Manage licenses” permission weren’t allowed to edit licenses. (#105)
  • Fixed a PHP error that could occur when eager loading orders on a license query. (#100)

Version 3.2.3

September 11, 2023
  • Fixed an XSS vulnerability.

Version 3.2.2

March 22, 2023
  • Fixed a PHP error that occurred when live previewing a digital product. (#84)

Version 3.2.1

March 9, 2023
  • Fixed a bug where digital product Licenses couldn’t be edited or deleted in Craft 4.3.2+.
  • Fixed a bug where garbage collection wasn’t running.

Version 3.2.0

January 25, 2023
  • Product type field layouts now support UI elements. (#60)
  • Fixed a PHP error that occurred when uninstalling the plugin. (#80)
  • Fixed a bug where digital products couldn’t be edited or deleted in Craft 4.3.2+. (#79)

Version 3.1.0

November 23, 2022

Fixed

  • Fixed a bug where it was possible to soft-delete digital products with active licenses. (#75, #78)

Version 3.0.2

August 5, 2022

Fixed

  • Fixed a PHP error that occurred when creating a new site.

Version 3.0.1

June 13, 2022

Added

  • Added the resave/digital-products command.

Version 3.0.0.1

May 5, 2022

Fixed

  • Fixed a PHP error that occurred when trying to manage permissions.

Version 3.0.0

May 4, 2022

Added

  • Added Craft CMS 4 and Craft Commerce 4 compatibility.

Version 2.4.3.2

August 18, 2021

Fixed

  • Fixed a bug where the afterSave event was not being triggered for license elements.

Version 2.4.3.1

April 28, 2021

Fixed

  • Fixed a PHP error that occurred when saving a product with a duplicate SKU. (#61)
  • Fixed errors that could occur when switching the selected site from the Digital Products index page and Edit Digital Product pages. (#54)
  • Fixed a bug where it wasn’t possible to hard-delete digital products. (#56)
  • Fixed a bug where the “Product Types” nav item was shown for users that didn’t have permission to manage product types. (#53)

Version 2.4.3

April 2, 2021

Changed

  • Products’ and licenses’ date sort options are now sorted in descending order by default when selected (requires Craft 3.5.9 or later).

Fixed

  • Fixed a 400 error that could occur when a product type’s Template setting was blank.
  • Fixed plugin description that implied compatibility only with Craft Commerce 2.
  • Fixed a PHP error that could occur when saving a new product without a price. (#58)

Version 2.4.2

August 24, 2020

Fixed

  • Fixed a deprecation warning in craft\digitalproducts\controllers\ProductsController.

Version 2.4.1

August 24, 2020

Fixed

  • Fixed a javascript error that caused the “Add Products” button to be hidden. (#49)
  • Fixed a bug where the afterSaveProductType and beforeSaveProductType events triggered the wrong event object. (#48)

Version 2.4.0

May 5, 2020

Added

  • Added GraphQL support for digital products. (#46)
  • It’s now possible to update statuses and delete products form the Products index page. (#34)
  • Added craft\digital-products\elements\Products::getGqlTypeName().
  • Added craft\digital-products\elements\Products::gqlScopesByContext().
  • Added craft\digital-products\elements\Products::gqlTypeNameByContext().
  • Added craft\digital-products\gql\arguments\elements\Product.
  • Added craft\digital-products\gql\interfaces\elements\Product.
  • Added craft\digital-products\gql\queries\Product.
  • Added craft\digital-products\gql\resolvers\elements\Product.
  • Added craft\digital-products\gql\types\elements\Product.
  • Added craft\digital-products\gql\types\gemerators\ProductType.
  • Added craft\digital-products\helpers\Gql.
  • Added craft\digital-products\Plugin::defineActions().
  • Added craft\digital-products\services\ProductTypes::getProductTypeByUid().

Version 2.3.1

October 9, 2019

Fixed

  • Fixed deprecation warnings on Edit Product page and Product Types index. (#44)

Version 2.3.0

July 24, 2019

Changed

  • Update Craft Commerce requirements to allow for Craft Commerce 3.

Version 2.2.4.1

July 18, 2019

Fixed

  • Fixed an error where it was impossible to list existing digital products. (#42)

Version 2.2.4

July 17, 2019

Fixed

  • Fixed a bug where product permissions were not being checked correctly. (#42)

Version 2.2.3

July 16, 2019

Fixed

  • Digital products are now ignored by the shipping engine.

Version 2.2.2

July 7, 2019

Fixed

  • Fixed an error that occurred when deleting a disabled product. (#41)
  • Fixed Live Preview and sharing support.

Version 2.2.1

June 14, 2019

Added

  • Added the cp.digital-products.product.edit.details template hook.

Fixed

  • Fixed an error that could occur when updating to 2.2.0 and there were user groups with no defined permissions.

Version 2.2.0

April 26, 2019

Added

  • Added support for the project-config/rebuild command.

Changed

  • Digital Products now correctly typecasts the boolean and integer values saved to the project config.
  • Digital Products now requires Craft 3.1.20 and Craft Commerce 2.1.0 or later.

Fixed

  • Fixed an error that could occur when saving a digital product if it didn’t have a boolean promotable value set.
  • Fixed a bug where edit product permissions were missing. (#33)
  • Fixed an error that could prevent licenses from getting listed properly in the Control Panel.

Version 2.1.0

January 24, 2019

Added

  • Added support for project config.
  • Added the generateLicenseOnOrderPaid setting which allows to specify when the license should be created.

Changed

  • Digital Products now requires Craft 3.1.0-alpha.1 or later.
  • Digital Products now requires Commerce 2.0 or later.

Fixed

  • Fixed an error where adding or removing sites would not reflect those changes in product type settings.
  • Fixed an error where a non-existing Commerce event was being referenced.

Version 2.0.4

December 7, 2018

Fixed

  • Fixed a bug where it wasn't possible to delete a product from its edit page. (#24)
  • Fixed deprecation errors in Control Panel templates. (#25)
  • Fixed a bug where the "Digital Products" item on the Settings page linked to a blank page. (#23)
  • Fixed a bug where querying for licenses would not work in some cases. (#11)

Version 2.0.3

October 19, 2018

Added

  • Added craft\digitalproducts\models\ProductTypeSite::getSite().

Changed

  • Licenses are now generated after the order is paid, instead of when it’s completed. (#21)

Fixed

  • Fixed a bug where Digital Products fields were named “Products”. (#13)
  • Fixed a bug where querying for products didn’t always return the correct results.
  • Fixed a bug where only fields in the first field layout tab were visible when editing a product. (#8)
  • Fixed a bug where products coludn’t hvae URLs. (#9)
  • Fixed a bug where querying for licenses would not work in some cases. (#11)
  • Fixed a bug where it wasn’t possible to delete a product. (#12)
  • Fixed a bug where product template paths and URI formats weren’t being automatically generated correctly. (#16)
  • Fixed deprecation errors. (#19)

Version 2.0.2

May 14, 2018

Fixed

  • Fixed a bug where licenses were not being generated after completing an order.

Version 2.0.1

May 9, 2018

Fixed

  • Fixed a bug where tax categories were not being populated when editing a product. (#3)
  • Fixed broken links in composer.json. (#4)
  • Fixed an error that occurred on the Licenses index page. (#7)
  • Fixed a bug where the “New product” button wasn’t working on the Products index page. (#6)

Version 2.0.0

April 4, 2018

Added

  • Added Craft 3 compatibility.

Changed

  • Digital products now fires beforeSaveProductType, afterSaveProductType and beforeGenerateLicenseKey events.
  • Product types are now accessible via $product->getProductType() instead of $product->getType().
  • Instead of eager-loading a boolean flag isLicensed for products, you must now eager-load the existingLicenses property, which is an array of existing licenses for that product for the current user.

Fixed

  • Fixed a broken foreign key constraint. (#1)

Version 1.0.4

March 11, 2017

Fixed

  • Fixed a bug where digital product prices weren’t displaying correctly.
  • Fixed a bug where digital product prices could be saved incorrectly.

Version 1.0.3

November 2, 2016

Changed

  • Added support for a plugin release feed.

Version 1.0.2

October 12, 2016

Fixed

  • Fixed bugs.

Version 1.0.1

October 3, 2016

Fixed

  • Fixed bugs.

Version 1.0.0

June 21, 2016
  • Initial release