What you will build
- A digital variant — one whose delivery profile requires no shipping address, so a fully digital cart completes checkout without a delivery step.
- A downloadable file on it — uploaded to private storage and attached as a digital asset.
- Automatic delivery — a download link granted on order placement, and an email that sends it.
- Mixed carts — physical and digital items in one order, handled without extra work.
1. Make the product digital
A variant is digital when its delivery profile is a digital one. A store ships with a built-in Digital delivery profile; assign it to the product and the product’s variants stop asking for a shipping address.A product’s delivery profile is auto-assigned when it is created — from its product type’s template, or the store default. You only set it explicitly to change it. Selling from the dashboard, this is the Shipping profile field on the product page.
2. Attach the file
Upload the file to private storage and attach it to the variant as a digital asset. Private storage matters: a digital file is only ever served through a short-lived signed link, so the Admin API refuses a blob that landed on the public bucket.Admin SDK
authorized_clicks and authorized_days off to inherit the store’s download limits, or set them per file to mix evergreen downloads with time-limited ones. See the allowance for how the limits resolve.
3. Let the order deliver itself
There is no step three to configure. When the order is placed, the digital fulfillment provider runs automatically — it needs no address and no manual dispatch — and grants the buyer one download link per file, per purchased unit.Spree::DigitalAssetMailer then emails the links as a message of its own, so it survives a replaced order-confirmation template and can be re-sent from the order page.
The customer downloads by following the link’s token; each download is counted against the allowance and publishes a digital_link.downloaded event. If they exhaust their downloads or you replace the file mid-sale, an admin restores access by resetting the link from the order page.
To deliver something other than an uploaded file — a license key minted on demand, an entitlement from your own system — the delivery step is pluggable. See Build a Custom Digital Asset Provider.
4. Mixed carts work on their own
A cart with both physical and digital items needs nothing special. Spree splits the order into separate fulfillments per delivery profile, so the physical items collect an address and ship while the digital items skip straight to granting links. The delivery step only appears when at least one item actually needs shipping; an all-digital cart never sees it.Related documentation
- Products → Digital products — the concepts: assets, links, allowances, providers
- Build a Custom Digital Asset Provider — deliver a key or external file instead of an upload
- Fulfillments — delivery profiles, providers, and how orders are fulfilled

