VaultSync 1.7.4 progress update: safer backups, better Linux support, cleaner logs, and .NET 10
Hey everyone,
Quick progress update on VaultSync v1.7.4.
This is not the final release post yet, but the release branch is getting close enough that I wanted to share what changed, what has been hardened, and what still needs testing before I cut the release.
The short version: v1.7.4 is mostly a stability and release-readiness update. It moves VaultSync to .NET 10, improves backup safety, fixes several metadata import edge cases, cleans up diagnostics, and prepares better Linux packaging.
Main changes
Safer backup behavior
A lot of the backup work in v1.7.4 is about making VaultSync fail safer.
One important fix prevents recursive backup growth. In some edge cases, especially around unavailable external or network destinations, backup output could end up somewhere that later runs might scan again.
VaultSync now has centralized source/destination safety checks and reserved backup-artifact exclusions, so it should not back up its own backup output.
Backup cleanup is also more conservative now.
VaultSync can prune stale database entries when the recorded backup folder is missing from a destination that is actually reachable. But if a drive is offline, disconnected, sleeping, or unresolved, VaultSync should not assume the backup was deleted.
That should help avoid false cleanup behavior around external drives, NAS paths, or temporary mount issues.
Metadata import hardening
Metadata import got a lot of attention in this update.
Some of the main improvements:
- Startup metadata import now checks reachable backup destinations
- Source stores are treated as read-only during UI imports
- Linux rooted backup paths can be remapped to the active destination
- SQLite sidecar journal files can be recovered through a temporary copy
- Missing backup history can be rebuilt from timestamped backup folders
- Locked tombstone exports are deferred locally for retry instead of being dropped
- Manual metadata refresh should no longer hang the UI or map temporary roots
This should make VaultSync more reliable when moving metadata between machines, recovering a destination, or working with Linux-mounted backup locations.
Linux packaging improvements
Linux tarballs now include rootless install/uninstall scripts.
The install flow sets up the launcher, icon, and vaultsync command without needing a system-wide installer.
I also added VS Code Linux debug configs for the UI, CLI, and tests to make Linux-side development less awkward.
Linux-specific fixes also landed around tray behavior, metadata path mapping, mounted backup destinations, and debug build crashes.
Cleaner diagnostics and logs
The in-app log console has been cleaned up so rows are easier to read, with clearer time/source/message fields while still preserving the raw log lines for copying and export.
Runtime errors are now captured in the in-app logs without needing verbose logging first.
Normal app runs should also no longer show caught first-chance SQLite/WinRT probe exceptions in diagnostics unless first-chance diagnostics are explicitly enabled.
Those were internally handled provider/framework probes, but they made normal logs look scarier than they were.
The log console copy button was also fixed to use the console window clipboard instead of relying only on the main window.
Backups page is less noisy
Passive Backups refreshes no longer wake destinations just to update reachability.
That means VaultSync should be less annoying around sleeping drives, unavailable network shares, or disconnected storage.
It should only touch those destinations when it actually needs to, such as during backup execution or manual tests.
Backup delete and progress visibility
Backup delete cards now stay visible and show more useful deletion progress details.
This should make overlapping or longer delete operations less mysterious, especially when VaultSync is removing larger backup trees.
.NET 10 migration
VaultSync Core, CLI, UI, and tests have been moved to .NET 10.
That also meant updating release scripts, CI/release asset paths, publish commands, installer metadata, and development docs around the new target framework.
This is one of the larger internal changes in this update, but the goal is simple: keep the project current and make the next releases easier to maintain.
Development preset cleanup
The built-in development presets now skip more nested generated output folders, including things like:
**/bin/****/Intermediate/**.import- render/cache style folders
This should reduce backup noise for projects that generate build/cache files deep inside the project tree.
What’s New popup cleanup
The in-app What’s New dialog has been redesigned into more of a release digest.
It also now reads only the current release section instead of accidentally carrying older changelog sections into the dialog.
Smaller cleanup
There was also some internal cleanup to reduce duplicated code, including shared helpers for:
- Byte-size formatting
- Detached async command handling
- Backup path containment
- Config write retry behavior
- CLI JSON serialization
Nothing flashy, but it should make the codebase easier to maintain and reduce slightly different implementations of the same logic.
Thanks again for the patience and for all the bug reports. A lot of this release is directly aimed at the edge cases people have been hitting in real use.
And as always: keep backing up your data.