Coming Soon to the Unity Asset Store

TinySave

Drop-in Save System for Unity

Stop wrestling with save systems. TinySave makes saving and loading game state effortless with an attribute-based API that just works.

[SaveField] 
public int health = 100;

[SaveField] 
public string playerName;

// When you want to save
await SaveManager.SaveAsync("slot1");

// When you want to load
await SaveManager.LoadAsync("slot1");
csharp

Key Features

Drop-In Integration

Add [SaveField] to your fields and call SaveAsync. That's it.

Async/Await API

Modern async API that doesn't block your game loop.

AES-256 Encryption

Optional encryption to protect save data from tampering.

Migration System

Seamlessly migrate save data when your game's structure changes.

Custom Serialization

Full control with ISaveCustom for complex types.

Comprehensive Testing

Battle-tested with editor and play mode tests included.

How It Works

1. Mark Your Fields

Add the [SaveField] attribute to any field or property you want to save. TinySave automatically discovers and serializes them.

[SaveField] 
public int score;

[SaveField] 
public Vector3 position;

[SaveField] 
public List<string> inventory;
csharp

2. Save and Load

Use the simple async API to save and load your game state. No boilerplate, no hassle.

await SaveManager.SaveAsync("slot1");

await SaveManager.LoadAsync("slot1");
csharp

3. Advanced Features (Optional)

Need more control? Implement ISaveCustom for custom serialization, use ISaveCallbacks for lifecycle hooks, or enable encryption for production builds.

public class Player : MonoBehaviour, ISaveCallbacks
{
    void OnBeforeSave() { /* cleanup */ }
    void OnAfterLoad() { /* reinitialize */ }
}
csharp

Frequently Asked Questions

What is TinySave and how is it different from PlayerPrefs?

TinySave is a drop-in save system for Unity that uses attributes to mark which fields should be saved. Unlike PlayerPrefs (which only handles primitives and requires manual key management), TinySave automatically serializes complex types like Vector3, Lists, Dictionaries, and custom classes. It features an async API, optional AES-256 encryption, migration system for game updates, and comprehensive lifecycle callbacks.

How difficult is TinySave to integrate into an existing project?

TinySave is designed for minimal integration effort. Add [SaveField] attributes to fields you want to save, then call SaveManager.SaveAsync() and LoadAsync(). No manual serialization code, no boilerplate. For existing projects, you can gradually migrate by adding attributes to fields - TinySave works alongside your existing save systems.

Does TinySave support complex data types like custom classes?

Yes! TinySave automatically handles Unity types (Vector3, Quaternion, Color, etc.), collections (Lists, Dictionaries, Arrays), and serializable custom classes. For types that need special handling, implement the ISaveCustom interface to define custom serialization logic. The system uses JSON.NET for reliable serialization with full type preservation.

Can TinySave encrypt save data to prevent cheating?

Yes! TinySave includes optional AES-256 encryption to protect save files from tampering. Enable encryption in your SaveManager settings, and all save data will be encrypted with a secure key. This is particularly important for games with competitive elements, leaderboards, or in-app purchases where data integrity matters.

How does TinySave handle game updates when my data structure changes?

TinySave includes a migration system for seamless game updates. Implement IMigration interfaces to define migration logic when your save format changes. For example, if you rename a field or change how inventory works, write a migration that transforms old saves to the new format. The system tracks save versions and automatically runs necessary migrations.

What happens if I need to run code before saving or after loading?

TinySave provides lifecycle callbacks through the ISaveCallbacks interface. Implement OnBeforeSave() to clean up references or prepare data before saving. Use OnAfterSave(), OnBeforeLoad(), and OnAfterLoad() to reinitialize systems, rebuild runtime data structures, or handle post-load setup. These callbacks integrate seamlessly with Unity's component lifecycle.

Does TinySave support multiple save slots?

Yes! TinySave supports multiple save slots through slot names. Call SaveManager.SaveAsync('slot1'), SaveAsync('slot2'), etc. You can also use SaveManager.GetAllSlots() to list saved games, DeleteSlot() to remove saves, and GetSlotMetadata() to display save information (last save time, play time, etc.) in your load game menu.

Join the Priority List

Join Unity developers waiting for TinySave to launch

Get notified when TinySave becomes available on the Unity Asset Store

Explore the Documentation

Learn about TinySave's features, API, and integration guides