GuideJune 10, 20256 min read

Version History and Rollback: Time Travel for Your Dev Environment

Every push creates a snapshot. Every snapshot is restorable. ConfigSync gives you a complete version history of your development environment with one-command rollback.

Every Push Creates a Snapshot

Every time you run configsync push, ConfigSync creates a timestamped snapshot of all your tracked files and stores it in the cloud. This snapshot captures the exact state of your configuration at that moment — every file, every byte, every permission.

Snapshots are immutable. Once created, they cannot be modified or corrupted. They form a linear history of your development environment, similar to git commits for your dotfiles and secrets.

Browsing Your History

View your snapshot history with the history command:

View snapshot history
configsync history
Example output
ID Timestamp Machine Size ── ─────────────────── ────────────── ────── 47 2026-03-24 14:30:01 MacBook Pro 12.4 KB 46 2026-03-23 09:15:22 MacBook Pro 12.1 KB 45 2026-03-22 16:45:10 Linux Desktop 11.8 KB 44 2026-03-21 11:00:05 MacBook Pro 12.1 KB 43 2026-03-20 08:30:44 Linux Desktop 11.6 KB

Each snapshot shows its ID, creation timestamp, the machine it was pushed from, and the total size. The ID is what you use to reference a specific snapshot for restore or diff operations.

Filtering History

When you have snapshots from multiple machines, filtering helps you find what you need:

Filter history
# Show only snapshots from a specific machine configsync history --from "MacBook Pro" # Limit to the last 10 snapshots configsync history --limit 10 # Combine filters configsync history --from "MacBook Pro" --limit 5

Restoring a Snapshot

To roll back to any previous snapshot, use the --snapshot flag with pull:

Restore a snapshot
# Restore snapshot 42 configsync pull --snapshot 42

This replaces your current local configuration files with the exact contents from snapshot 42. Every tracked file is restored to the state it was in when that snapshot was created. Post-pull hooks still run after a snapshot restore, so any automated setup steps execute as usual.

Preview Before Restoring

Rolling back is a significant action. Before committing to it, preview what would change:

Dry run a restore
# See what would change without actually restoring configsync pull --snapshot 42 --dry-run

The dry run shows which files would be modified, added, or removed, along with a diff of the changes. This lets you verify that the snapshot contains what you expect before overwriting your current config.

You can also use configsync diff --snapshot 42 to see a detailed diff between your current local files and the snapshot. This is especially useful when you want to compare without any intent to restore.

Use Cases for Version History

Bad config change: You edited .zshrc and broke your shell. Instead of debugging, roll back to the last known good snapshot and your shell works again.

Rollback to yesterday: A tool upgrade modified several config files and introduced issues. Restore yesterday's snapshot to get back to your working state while you investigate.

Compare versions: Something changed but you are not sure when. Use configsync diff --snapshot with different snapshot IDs to pinpoint when a specific change was introduced.

Safety net: Because every push creates a snapshot, you always have a way back. Experiment freely with your configuration knowing that any previous state is one command away.

Snapshot Retention

How long snapshots are retained depends on your plan:

PlanRetention PeriodMax Snapshots
Free7 days25 snapshots
Pro30 daysUnlimited
Team90 daysUnlimited

For most developers, the Pro plan's 30-day retention covers any realistic rollback scenario. Teams benefit from 90 days for compliance and audit purposes. Even on the free plan, 25 snapshots with 7-day retention gives you a solid safety net.

Ready to try ConfigSync?

Sync your entire dev environment across machines in minutes. Free forever for up to 3 devices.