Local Backups
ZestSSH stores encrypted .zest backup files directly on the device filesystem. Local backups are the simplest backup method — no server or cloud account required.
Manual Export
Section titled “Manual Export”How to Export
Section titled “How to Export”- Go to Settings > Backup & Restore > Export Backup.
- Enter a backup password (minimum 12 characters).
- Tap Export.
- The encrypted
.zestfile is written to the platform-specific location (see below).
How to Import
Section titled “How to Import”- Go to Settings > Backup & Restore > Import Backup.
- Select a
.zestfile from your device. - Enter the backup password.
- ZestSSH decrypts and restores the data using additive merge (existing data is updated, new data is inserted, nothing is deleted).
See Encrypted Backups for full details on the .zest format and encryption.
Auto-Backup
Section titled “Auto-Backup”ZestSSH can automatically create backups on a schedule or when data changes.
- Go to Settings > Backup & Restore > Auto-Backup.
- Set a backup password. This password is stored in Flutter Secure Storage and used for all automatic backups.
- Choose an interval:
- Daily — Backup once every 24 hours.
- Weekly — Backup once every 7 days.
- Off — Disable auto-backup.
How Auto-Backup Works
Section titled “How Auto-Backup Works”Scheduled check: On every app launch, ZestSSH checks whether enough time has elapsed since the last auto-backup. If the interval has passed, an encrypted backup runs automatically in the background.
On-change backup: When auto-backup is enabled, ZestSSH can also trigger a backup when the app goes to background and data has changed. This ensures that recent configuration changes are captured promptly.
Auto-Backup Password
Section titled “Auto-Backup Password”The auto-backup password is stored in Flutter Secure Storage under a dedicated key (auto_backup_password). It is:
- Set once during auto-backup setup.
- Used for all subsequent automatic backups.
- Separate from any manual backup passwords you choose.
- Required — if no password is set, auto-backup is silently skipped.
File Retention
Section titled “File Retention”Auto-backups maintain a maximum of 3 files. When a new auto-backup completes:
- All files matching the
zestssh_auto_*.zestpattern in the backup directory are listed. - Files are sorted by modification time (newest first).
- Any files beyond the 3-file limit are deleted.
Manual backups (zestssh_backup_*.zest) are never automatically deleted.
Filename Convention
Section titled “Filename Convention”- Auto-backups:
zestssh_auto_YYYY-MM-DDTHH-MM-SS.zest - Manual backups:
zestssh_backup_YYYY-MM-DDTHH-MM-SS.zest
The distinct prefix allows auto-backup cleanup to only affect automatic files.
Storage Locations by Platform
Section titled “Storage Locations by Platform”| Platform | Location | Accessible to User | Survives Uninstall |
|---|---|---|---|
| Android | /storage/emulated/0/Download/ | Yes (Downloads folder) | Yes (shared storage) |
| iOS | Application Documents directory | Yes (via Files app) | No (app-scoped) |
| Windows | Documents\ZestSSH\backups\ | Yes | Yes |
| macOS | ~/Documents/ZestSSH/backups/ | Yes | Yes |
| Linux | ~/.local/share/documents/ZestSSH/backups/ or equivalent | Yes | Yes |
Platform Notes
Section titled “Platform Notes”Android: Backups are written to the shared Downloads folder, which is accessible to the user and other apps. The file is encrypted, so exposure is limited to the ciphertext.
iOS: Backups are written to the app’s Documents directory, which is visible in the iOS Files app under the ZestSSH section. However, this directory is deleted when the app is uninstalled. Consider using WebDAV or Google Drive as an additional destination for persistence.
Desktop: Backups go to a ZestSSH/backups subdirectory under the system Documents folder. This directory persists across app reinstallation.
Restore Flow
Section titled “Restore Flow”When importing a backup:
- The file is validated (must have
ZESTmagic bytes). - The version byte is checked.
- For encrypted backups (version 1), the password is required.
- Decryption occurs in memory (AES-256-GCM).
- Data is restored via additive merge into the database.
- Identity secrets (passwords, private keys) are written to secure storage after the database transaction succeeds.
- Files larger than 50 MB are rejected to prevent memory issues.
Survives Uninstall?
Section titled “Survives Uninstall?”The local backup destination reports survivesUninstall = false as a conservative default. On Android and iOS, app-scoped storage can be wiped on uninstall. On desktop, the Documents folder persists, but the flag encourages users to also configure a cloud destination.
For a backup that reliably survives uninstall, use WebDAV or Google Drive as a backup destination.
Google Drive Backup
Section titled “Google Drive Backup”In addition to local and WebDAV destinations, ZestSSH supports Google Drive as a backup destination:
- Uses the
drive.filescope — ZestSSH can only access files it created, never your other Drive files. - Backups are stored in a “ZestSSH Backups” folder in your Drive root.
- Authentication uses Google Sign-In (same account used for Firebase Auth).
- Survives app uninstall since files are on Google’s servers.
Setup is similar: go to Settings > Backup & Restore > Backup Destinations > Add > Google Drive and authenticate with your Google account.