> For the complete documentation index, see [llms.txt](https://umber.gitbook.io/umber/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://umber.gitbook.io/umber/why-umber/zero-redundancy.md).

# Zero Redundancy

An asset typically gets copied many times on its way from idea to production: a designer saves versions locally, the file gets committed to a version-control system once it reaches engineering, QA keeps its own copy to avoid stepping on the dev team's changes, and production holds the final live copy. Every one of those copies costs storage, and the cost compounds with every release — by our estimate, most teams pay 30–40% more in cloud storage costs than necessary, just to keep redundant copies of assets around.

Umber avoids this by not copying a version even when it's deployed across multiple environments. An environment doesn't get its own copy of a file — it gets a pointer to the version it should serve. That makes Umber meaningfully more storage-efficient than typical cloud storage or file-based digital asset management systems, especially as the number of environments and releases grows.

## Catching the same file uploaded twice

Pointers stop copies between environments. Umber also watches for the copies people make by uploading the same file again. Every file is fingerprinted (SHA-256) when it's stored, so Umber can tell when an upload is byte-for-byte identical to something already there:

| Where the same file already is                               | What happens                                                                                                                         |
| ------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ |
| A version of the **same asset**, on the same target platform | The upload is refused and the existing version is named, so you can deploy it instead. You can still add it deliberately.            |
| A version of **another asset** in your workspace             | You're warned, and shown which asset has it. The upload isn't refused, because sharing one file across assets is sometimes intended. |
| An item in the **same collection**                           | The upload is refused and the existing item is named. You can still add it deliberately.                                             |

Only identical files are matched: a re-exported, resized or re-compressed file counts as different. For the details, see [Adding a Version](/umber/guides/adding-a-version.md#if-the-file-is-already-in-umber), [Creating a Virtual Asset](/umber/guides/creating-a-virtual-asset.md), and the [Versions API](/umber/api-reference-v2/virtual-assets/versions.md#duplicate-files) and [Collection Items API](/umber/api-reference-v2/collections/collection-items.md#duplicate-files).
