- Go 97%
- Shell 3%
|
|
||
|---|---|---|
| .gitattributes | ||
| .gitignore | ||
| backup.go | ||
| build-release.sh | ||
| Containerfile.build | ||
| go.mod | ||
| go.sum | ||
| LICENSE | ||
| main.go | ||
| README.md | ||
Chrono Anchor
Save Profile Manager for Digimon Story: Time Stranger
Chrono Anchor is a small, single-binary, native desktop tool written in Go that gives Digimon Story: Time Stranger multiple independent save profiles. Switch between playthroughs, family members, or experimental runs in one click, with automatic, deduplicated backups protecting your saves every step of the way.
License
Chrono Anchor is released under the Prism Information License (PIL). See LICENSE for the full text.
Why Chrono Anchor
The game keeps a single set of saves in a single folder. If you want a second playthrough, or someone else in your household wants their own, you either overwrite your progress or shuffle folders by hand and hope you never mix them up.
Chrono Anchor treats each playthrough as a named profile. Switching profiles snapshots your current saves into the profile you are leaving, backs everything up, then restores the profile you picked into the live save folder. Nothing is changed until the backup succeeds.
Versions
| Build | Runs on | Binary |
|---|---|---|
| Linux (glibc) | Debian, Ubuntu, Fedora, Arch, SteamOS, any glibc 2.28+ distro | chronoanchor-linux-glibc |
| Linux (musl) | Alpine, Void musl, any musl-based distro | chronoanchor-linux-musl |
| Windows | Windows 10+ 64-bit | chronoanchor-windows.exe |
All three are 64-bit (x86_64 / amd64) builds, compressed with UPX. The Windows build runs without a console window.
Features
Profiles
- Create a profile from your current saves, or create an empty profile for a fresh game (your live save folder is cleared, after a backup is taken)
- Switch between profiles from a dropdown at the top of the window
- Duplicate the active profile to branch a playthrough before a risky decision
- Rename the active profile
- Delete a profile (requires typing the name and clicking twice, and the active profile can never be deleted)
- Profile names are validated so they are always safe to use as folder names (no
/ \ : * ? " < > |)
Backups
- Automatic backup before every change: switching, creating a profile, and creating from empty all back up first. If the backup fails, nothing is touched
- Incremental and deduplicated: every file is stored once, keyed by its SHA-256 hash. A new backup only copies files whose content is not already stored
- No-op when nothing changed: if your saves are identical to the latest backup, no new backup is written
- Manual "Backup now" button for a checkpoint whenever you want one
- One-click restore of any of the six most recent backups, shown in the window with timestamp, profile label, and file count
- Automatic pruning: the newest 20 backups are kept, and stored files that no remaining backup refers to are removed
- Restore safety checks: every stored file is verified to exist before the live folder is touched, and backups containing unsafe paths are rejected
Save folder detection
- Detect button finds likely save folders automatically
- Understands Steam installs on Linux (native and Flatpak) and Windows, including extra Steam library folders on other drives, by reading each library's
libraryfolders.vdf - Looks in the game's
gamedata/savedata/<SteamID64>/folder first, then in Steamuserdatafolders (Steam Cloud) as a fallback - On first launch with no folder configured, candidates are offered automatically
- You can always paste a path by hand
General
- Dark interface with a cyan accent, built with Gio
- No external services, no network access, no telemetry
- Plain files on disk (JSON config, JSON backup manifests, ordinary save files), so your data is easy to inspect and move
Quick Start
- Close the game. Chrono Anchor swaps the contents of the save folder, so the game should not be running.
- Download or build the binary for your platform (see Building) and run it.
- Click Detect, choose the folder it finds (or paste the path yourself), and click Apply.
- Type a name such as
Main Runand click New from current saves. Your existing saves become that profile. - Type another name and click New empty (fresh game) to start a second playthrough from scratch. Your first profile is preserved.
- Use the Profile dropdown at any time to switch between them.
Using Chrono Anchor
The profile dropdown
The large button at the top shows the active profile. Click it to open the list, then click a profile to switch to it. Switching does the following, in order:
- Backs up the live saves, labelled with the profile you are leaving (skipped if the folder is empty or unchanged since the last backup)
- Snapshots the live saves into the profile you are leaving
- Replaces the live save folder with the contents of the profile you chose
- Records the new active profile in the config
If step 1 fails, the switch is cancelled and nothing is changed.
Manage profiles
Type a name in the box, then pick an action:
| Button | What it does |
|---|---|
| New from current saves | Backs up, snapshots the current profile, then creates a new profile containing a copy of the live saves and makes it active |
| New empty (fresh game) | Backs up, snapshots the current profile, creates an empty profile, clears the live save folder, and makes the new profile active |
| Duplicate active | Copies the active profile to the name in the box. The copy is not activated |
| Rename active | Renames the active profile to the name in the box |
| Delete (named) | Deletes the profile whose name is typed in the box. Click twice to confirm. The active profile cannot be deleted, so switch away first |
Save folder
- Apply stores the path in the box as your save folder
- Detect searches for candidate folders and lists them as buttons. Click one to fill the path box, then click Apply
- Backup now creates a backup immediately (a message tells you if nothing had changed)
Restore a backup
The six newest backups are listed with their timestamp, label, and file count. Click one to replace the live saves with that backup. Restoring replaces the live save folder only. It does not rewrite any stored profile until the next time you switch away from the active one, at which point the restored saves are snapshotted into it. Because restoring does not create a new backup first, click Backup now beforehand if the current saves matter to you.
Where your data lives
Chrono Anchor stores everything in a ChronoAnchor folder inside your operating system's per-user config directory (the value returned by Go's os.UserConfigDir). On a typical Linux system that is ~/.config/ChronoAnchor, and on Windows it is %AppData%\ChronoAnchor.
ChronoAnchor/
config.json <- save folder path and active profile
profiles/
<profile name>/ <- one folder per profile (a copy of the save folder)
backups/
objects/<xx>/<sha256> <- every unique file, stored once by content hash
snapshots/<timestamp>-<label>.json <- one small manifest per backup
config.json looks like this:
{
"save_dir": "/path/to/your/save/folder",
"active": "Main Run"
}
The window footer always shows the exact backups location on your machine.
How backups work
Each backup is a manifest that maps every file in the save folder to a SHA-256 hash and size. File contents live once in backups/objects/, so ten backups of mostly unchanged saves cost very little disk space. When a backup would be identical to the previous one, it is skipped. After each new backup, only the newest 20 manifests are kept and any object file no longer referenced is deleted. If a manifest cannot be read during pruning, nothing is deleted.
Building
Prerequisites
- Go 1.26.1 or newer (only needed to build from source)
- A C toolchain, since Gio uses cgo on desktop platforms
- On Linux, the development headers Gio needs for X11, Wayland, and OpenGL or Vulkan. See the Gio installation guide for the package list for your distro
- Or use the Podman build below, which needs only Podman and brings its own toolchain
From source
From the project directory:
go build -o chronoanchor .
./chronoanchor
If go.sum is missing, generate it once (this needs network access):
go mod tidy
All release binaries with Podman
build-release.sh builds a cross-compilation container and extracts all three binaries into ./binaries:
./build-release.sh
The script requires go.sum to exist before it starts, and exits with a reminder if it does not. The build container is Alpine-based with pinned package versions and checksum-verified downloads of Go, Zig, and UPX:
| Output | How it is built |
|---|---|
chronoanchor-linux-musl |
Native musl toolchain |
chronoanchor-linux-glibc |
zig cc targeting glibc 2.28 |
chronoanchor-windows.exe |
mingw-w64, with -H=windowsgui to hide the console window |
All binaries are built with -trimpath -ldflags="-s -w" and compressed with upx --best --lzma.
Safety notes
- Close the game before switching, restoring, or creating profiles. The save folder is rewritten in full. Although I have just switched the profile with the game running, but I made sure to not be in the load menu in the game when I switched profiles.
- Switching and creating profiles always attempt a backup first, and abort if it fails.
- Only regular files are copied. Symlinks and special files inside the save folder are ignored.
- Chrono Anchor makes no network connections.
- The save folder location is auto-detected on a best-effort basis. The Steam app ID used for the Steam Cloud fallback (
1984270) comes from a third-party save location guide, so verify the result of Detect before relying on it, and use Backup now once after setup so you have a known-good checkpoint. - Keep your own off-machine copy of important saves. Chrono Anchor is a convenience tool, not a replacement for a real backup strategy.
Troubleshooting
| Message | Meaning |
|---|---|
set the save folder first |
No save folder is configured. Use Detect or paste a path, then Apply |
save folder not found: ... |
The configured folder no longer exists. Check the path and Apply again |
backup failed, nothing changed |
The pre-change backup could not be written. Check free disk space and permissions on the ChronoAnchor folder |
a profile with that name already exists |
Pick a different name |
switch to another profile before deleting the active one |
Activate a different profile first |
Nothing found automatically |
Detection could not find the game. Paste the save folder path manually |
backup is incomplete (... missing); nothing changed |
A stored file was removed from backups/objects. The live saves were not touched. Choose a different backup |
Contributing
Pull requests are welcome. Please open an issue first for bigger changes.
Thanks / Credits
- Gio (
gioui.org): the pure-Go immediate-mode GUI toolkit that powers the interface - The Go font collection, used for all interface text
- Everyone who has ever overwritten a save file by accident
Enjoy your timelines. Happy anchoring with Chrono Anchor.
Creator:
Chrono Anchor is an independent fan tool and is not affiliated with or endorsed by Bandai Namco or the makers of Digimon Story: Time Stranger.