# S3 Versioning

* Versioning is a means of **keeping multiple variants of an object in the same bucket**.\\

* You can use versioning to **preserve, retrieve, and restore every version of every object stored in your S3 bucket**.\\

* With versioning, you can easily **recover from both unintended user actions and application failures**.\\

* When you enable versioning for a bucket, **if S3 receives multiple write requests for the same object simultaneously, it stores all of the objects**.

* If you enable versioning for a bucket, **S3 automatically generates a unique version ID for the object** being stored. In one bucket, for example, you **can have two objects with the same key, but different version IDs, such as `photo.gif` (version 111111) and `photo.gif` (version 121212)**.\\

* Buckets can be in **one of three states:**
  * **Unversioned (the default)**.
  * **Versioning-enabled**.
  * **Versioning-suspended**.

* **Once you version-enable a bucket, it can never return to an unversioned state**. However, you **can suspend versioning on that bucket**.\\

* The **versioning state applies to all (never some) of the objects in that bucket**.
