Step 1: soft delete
Delete on an asset row moves it to the recycle bin.- The asset still serves at its URL. Nothing hosted or embedded breaks.
- It shows up in the Recycle bin view (toggle at the top of the Assets tab).
- It still counts against your storage budget.
Step 2: permanent delete
Permanent delete in the recycle bin actually removes the file.- The R2 object is deleted.
- The Cloudflare cache is purged (within minutes).
- The URL will 404 from now on. Anything referencing it stops working.
- Storage is freed, your budget usage drops.
Restore
From the recycle bin, Restore brings a soft-deleted asset back to active, no permission changes, no URL changes, just moves out of the bin.Storage stays used until permanent delete
The Assets tab meter includes soft-deleted files. This is the opposite of what you might expect, most trash bins in most products “free up space” on soft delete. Ours does not, because the URL still serves and R2 still stores the bytes. If you are running close to your plan’s storage budget, soft delete does not help. Permanent delete does.Dependents check
Before deleting, click the asset to see which variants reference this file. Substring match on the URL across every variant’s JS and CSS on the site. Zero dependents is safe to delete. Non-zero dependents means at least one variant will break if you delete the file, decide whether to update the variant first.Assets that were used a long time ago
The dependents check reads current variants. It does not know about:- Archived experiments, the variants are still in the archive; the URL might still be embedded in the archived variant’s JS/CSS.
- Cloned experiments, if the clone kept a hard-coded URL to the original’s asset, the dependents check catches it via string match, which is why we do string match rather than a metadata-only lookup.
- External embeds, an email you sent, a third-party site that hotlinks the URL. Nothing on our side can see those.