How Do I Sell Physical and Digital Products Together?
VeloCMS lets you mix physical and digital products in the same store — set the product type per item, and digital assets can even be attached at the variant level.
You can sell both physical and digital products from the same VeloCMS store — there's no separate module or toggle to switch between modes. The product type is set per item, so your catalog can have a printed book, a PDF download, and a tote bag sitting side by side.
Read the full transcript
If you want to sell a digital product — presets, an ebook, a template pack — you do not need WooCommerce, and you do not need Shopify. VeloCMS has a real store built in. I'll list a download, wire up the delivery, and follow it from your shop all the way to the buyer's inbox.
It starts under Products, then New. I'll give it a name — Cinematic Lightroom Presets — set the price to twenty-four dollars, and choose Digital as the type. Watch what happens: all the shipping fields disappear, because there's nothing to ship.
A digital product needs one real thing: the actual file. I attach the preset pack right here, and that's the file every single buyer gets automatically. I never touch it again after this — set it once, and it delivers itself forever.
The second it's saved, it's live in your shop — and your shop already matches your theme, not some bolt-on checkout that clashes with your site. Here it is on Salas Film Lab, in exactly the same look as the rest of the blog.
Buyers pay by card through Stripe, or with PayPal — both are built in, no extra plugin to install. They get a clean checkout on your own domain, and you keep the sale instead of handing it to a marketplace.
Here's the part that saves your evenings. The moment a payment clears, VeloCMS emails the buyer a private download link that expires on its own — so nobody's passing your file around, and you're never manually sending anything at midnight.
A real digital store — products, checkout, and automatic delivery — with no WooCommerce and no Shopify. Try it at velocms dot org.
How do I specify that a product is digital?
When creating or editing a product, look for the Product Type selector near the top of the form — it defaults to Physical. Switch it to Digital and a new section appears: Digital Asset. You can upload a file up to 2GB directly to Cloudflare R2 from here. Supported formats include PDF, ZIP, MP3, MP4, EPUB, and PNG/JPG. After upload, the filename and size appear in the asset slot. Every time a customer buys this product, they get a secure, time-limited download link in their order confirmation email — not a permanent public URL.
Can a single product have both digital and physical variants?
Yes, and this is one of the more powerful things the variant system supports. Say you're selling a photography course — you might offer a Physical tier (printed workbook shipped to the customer) and a Digital tier (PDF download, instant delivery). Add both as variants, set the product type on the variant row to either Physical or Digital, and attach the PDF file to the Digital variant row. At checkout, VeloCMS routes each variant correctly — physical variants go through the shipping flow, digital variants deliver the file link immediately after payment.
Digital orders skip the shipping step at checkout entirely — no address is collected and no shipping zone is required. If a cart contains a mix of physical and digital items, VeloCMS collects a shipping address for the physical items only.
How are digital download links protected?
Download links are signed with a time-limited token — they expire 48 hours after the order is placed by default. The expiry window is configurable in Admin → Shop → Digital Products → Link Expiry. After expiry, the customer can log into their order history and generate a fresh download link — they're not locked out permanently, they just can't use the original email link forever. This stops link sharing while staying reasonable for legitimate customers.
What happens if a customer refunds a digital product?
When you issue a refund on a digital order from Admin → Shop → Orders, VeloCMS revokes the download link immediately — any further attempts to download return a 410 Gone response. If the 48-hour window had already expired before the refund, there's nothing to revoke. You can also manually revoke download access for any order at any time from the order detail page without issuing a refund, which is useful if you suspect unauthorized sharing.