-
Notifications
You must be signed in to change notification settings - Fork 0
Home
abduznik edited this page Jul 15, 2026
·
4 revisions
A pure C library that manages the precise lifecycle of emulator/game save files: identifying exactly which save belongs to which game, safely versioning it locally, and optionally handing it off to external transports for cross-device sync.
It is not an emulator, launcher, cloud service, process watchdog, or orchestration server. It is a local, passive, embeddable save lifecycle manager — infrastructure other apps link against or shell out to.
| Project | What it does | Why it's not this |
|---|---|---|
| Syncthing / cloud-mounted folders | Generic folder sync | Zero game-awareness, fuzzy matching, no identity layer |
| EmuSync, SaveSync, CrossSave-Cloud | Hobbyist folder/extension-based save backup | Extension-guessing, no precision identity, monolithic apps |
| RomM's save sync engine (4.9+) | Server-orchestrated multi-device sync | Sophisticated, but logic lives in the server backend — not embeddable |
| Ludusavi | Cross-platform save backup, manifest-driven | Excellent prior art, but Rust/CLI-GUI, not a C-ABI embeddable core |
| Freegosy | Precise per-emulator save strategies shipped | Logic embedded inside one Flutter app, not extractable/reusable |
- Philosophy — Core design principles
- Architecture-Overview — The six layers
- Layer-1-Interface — Dual entry points (C ABI + IPC binary)
- Layer-2-Registration-and-Identity — Registration and identity resolution
- Layer-3-Metadata-Store — Local metadata persistence
- Layer-4-Local-Save-and-Pull — Atomic save/pull operations
- Layer-5-Retention-and-Rotation — Automatic version rotation
- Layer-6-External-Transport — Pluggable transport contract
- API-Reference — All function signatures
- Data-Types-Reference — Enums, typedefs, and structs
- Testing-Guide — How to test the library
- Roadmap — Known future work
libsavesync Wiki