Repository navigation
Releases: vaazh-studios/backupkit
Releases · vaazh-studios/backupkit
Release list
BackupKit 0.3.0
SyncPolicy.shrinkGuard(on by default: more than half of at least four remote entries) refuses a run that would delete most of the backup and answers the newUnavailableReason.ShrinkSuspected;SyncSnapshot.allowShrink = truelifts it for a confirmed run. Source-breaking for exhaustivewhenoverUnavailableReason;SyncPolicyandSyncSnapshotgained constructor parameters, so recompile against 0.3.0.- Google Drive: files above 5 MB upload through Drive's resumable protocol in 8 MiB chunks, streamed from disk for local files, continuing from what Drive holds after a dropped connection. The 5 MB
Transporterror is gone. backupkit-test:FakeCloudStoragegainsreportUnknownSizes,failFetchesContainingand put gating (gatePutsContaining,putStarted,releasePuts()).
BackupKit 0.2.0
- New artifact
com.vocabloot:backupkit-test:FakeCloudStorage,MemorySyncStateStore,MemoryRestoreRecordStore, the fakes the library's own tests run on, so an app can unit-test its sync and restore code without a cloud. - Library code unchanged from 0.1.0; the public API of
backupkitis identical. - README rewritten as a landing page; long-form guides moved to the docs site.
BackupKit 0.1.0
Changelog
0.1.0 (2026-09-06)
CloudStorage: filesystem-style transport withICloudStorage(iOS) andGoogleDriveStorage(Android, app-data folder, silent Play Services token,DriveConsenthelper).SyncEngine: complete-or-absent reconciliation with resume, identity reset, the empty-over-existing guard, andinspect()for restore offers.FileSyncStateStore: atomic JSON state file over kotlinx-io.- Typed errors:
CloudStorageException(CloudError). SyncEngine.probe()(typed inspection with a pinnedSourceRef),WriteHold,CloudStorage.prefetch.CloudKitStorage(iOS): custom-zone CloudKit transport with long-lived media saves, with a change-token checkpoint, cached batch reads and typed error mapping. Pick it overICloudStoragefor app data the user never opens as files.RestoreEngine: resumable restore with a required-first commit boundary, three-strike optional files, durableRestoreRecordand source revalidation. Files carry an opaquegroup; aRestorePlacementreceives each group once its files are local and answersPlacedorRejected;RestoreProgresscounts files and groups;resume(resetAttempts = true)is the explicit retry. Marked@ExperimentalRestoreApiuntil Vocabloot's device pass on it lands.