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.
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.