# Rename, export and import saves

> Rename a slot, write a save to a file a player can send to a friend or to support, import such a file as a new slot, or move saves as bytes through your own...

Product: Rolly Save 1.0.0 | Sheet: guide | Updated: 2026-10-31 | HTML: https://rolly-docs.pages.dev/save/guides/share-saves/

## Rename a slot

**Rename Rolly Slot** moves the save of **From Slot Name** to **To Slot Name**: it copies the save, then deletes the source once the copy is written. A crash in between leaves both.

- It never overwrites: a target that holds a save fails with Slot Exists. Names that differ only in capital letters are one slot, so such a rename fails with Invalid Input.
- The current slot and an active run follow the rename.
- A save of either slot asked for while the rename runs lands after it, so a save of the old name is not deleted with it.
- It works on clients, on that machine's storage.

## Export a save to a file

**Export Rolly Slot to File** writes the newest valid copy of **Slot Name** to `<File Name>.<Export Extension>` in the export folder, through a temporary file, so a crash never leaves half a file. **File Name** takes 1 to 64 letters, digits, spaces, `_` and `-`, such as `Tavern Day 12`, without a space at either end and never a name Windows reserves, such as CON or COM1; any other name fails with Invalid Input and the setup message BadFileName.

An export replaces an earlier export of that name, but never a file that is no Rolly Save file: that fails with Name Collision and the setup message ForeignFile.

Files work on Windows, Mac and Linux. Elsewhere the file nodes fail with Invalid Input and the setup message Unsupported; check **Can Transfer Save Files** to hide them.

In Project Settings > Plugins > Rolly Save > Sharing Saves:

| Setting | Default | Does |
|---|---|---|
| Export Location | Saved Folder | Saved Folder: the game's `Saved` folder. Documents Folder: the player's Documents, in a folder named after the project |
| Export Folder | SaveExports | The folder inside it, 1 to 64 letters, digits, spaces, `_` and `-` |
| Export Extension | rollysave | 1 to 16 lowercase letters and digits |
| Max Import Size (MiB) | 64 (1 to 2,048) | Larger files and byte arrays are refused unread |

A setting that breaks its rule falls back to its default, with the setup message BadExportSetting.

## Import a file

1. **List Rolly Export Files** lists the export folder's files, newest first, with the map, play time and the rest of a slot list's metadata; each one's Slot Name is its file name. It lists the first 1,000 files by name; files that are no Rolly Save file are left out.
2. **Import Rolly Slot from File** takes a **File Name** from that list and a new **Slot Name**.

An import checks the file before anything reaches storage, cheapest checks first: its size against Max Import Size, unread when larger (Invalid Input); that it holds a slot's save, not a profile (Invalid Input); its checksums and the structure of every record (Damaged); its Game Data Version (Newer Version); and, for a save of a single-slot run, the first local player's run ledger (Run Ended, Older Copy, Newer Version), waiting while that profile loads. A missing file is Not Found. It then stores the file as the new slot, with Kind Imported; loading it later runs every check of a load on top.

An import never overwrites: a slot that holds a save fails with Slot Exists, and so does the active run's slot.

## Move saves as bytes

**Export Rolly Slot to Bytes** gives a slot's newest save as an array of bytes, and **Import Rolly Slot from Bytes** stores bytes as a new slot with the checks of a file import. Both work on every platform, for your own cloud storage or a share code; bytes larger than Max Import Size are refused unread.

## From C++

```cpp
Save->RenameSlot(TEXT("Slot 1"), TEXT("Tavern Day 12"));
if (URollySaveSubsystem::CanTransferFiles())
{
	Save->ExportToFile(TEXT("Tavern Day 12"), TEXT("Tavern Day 12"));
	Save->ImportFromFile(TEXT("Tavern Day 12"), TEXT("Imported 1"));
}
Save->ExportToBytes(TEXT("Slot 1"), [](const FRollySaveResult& Result, const TArray<uint8>& Bytes) {});
```
