

Backup and Restore. Four lines say what is set up — how often it runs, what it covers, how many are kept, where the off-site copy goes — and the saved backups are listed below, each one openable into the parts it was taken in.
Nimble Backup protects the WordPress database and wp-content on a schedule or on demand. A run produces one archive per part of the site — the database, plugins, themes, uploads, and the rest of wp-content — which share a date and an id, so they can be restored together as one backup or one at a time.
Each finished backup can also be sent to storage you own: S3-compatible object storage, Dropbox, Google Drive or OneDrive/SharePoint. Nothing is sent anywhere until you set a destination up, and nothing passes through NimblePlugins at any point.
It also includes a migration workflow for moving a WordPress site between servers without FTP.
Working data is stored below wp-content/uploads/nimble-backup/. Backup and migration directories receive Apache and IIS deny rules plus non-index files, and archive filenames include a random suffix.
Local backups protect against application-level failures, bad updates and accidental changes. They sit on the same server as the site, and so are not a substitute for an off-site copy if the disk or the hosting account goes away — which is what the destinations above are for.
The Migration tabs create one package containing the WordPress database and wp-content, then transfer it directly from a source WordPress site to a destination WordPress site using a random, expiring token.
The destination validates the archive before extraction, rejects unsafe paths and symbolic links, and creates a verified local pre-import recovery point before overwriting existing data. The transfer token can be manually revoked as soon as the migration is complete.
Migration also supports different WordPress database table prefixes and performs serialization-safe source-to-destination URL replacement after import.
Nimble Backup implements the public nimble_security_recovery_point_providers contract. When Nimble Security requires a recovery point before a destructive response action, Backup creates and verifies the recovery point synchronously. If it cannot do so safely, Security receives an error and can stop the destructive action.
No incident content, credentials or archive contents are exchanged through this contract. Only the recovery-point reference is returned.
Nimble Backup exposes its native Operations health provider through nimble_backup_operations_health contract 1.1. The provider reports aggregate backup, schedule, storage, integrity, restore and migration state without exposing archive contents, filesystem paths, credentials, destination details or transfer tokens.
Backup archives stay on the WordPress installation unless you configure an off-site destination yourself, in which case a copy also goes to the account you named with the provider you chose. Nimble Backup never uploads anything to NimblePlugins, and no NimblePlugins cloud service is involved in backup, restore or migration at any point.
The optional migration feature only communicates with the source site URL explicitly entered by an administrator, authenticated by a short-lived token.
Nimble Backup keeps everything it creates in one protected folder inside the uploads directory, resolved at runtime with wp_upload_dir(): backup archives, migration packages, database dumps and working files all live under uploads/nimble-backup/. That folder is created with an .htaccess file, a web.config file and an index.php silence file, so the archives are not reachable over the web.
Restoring a backup, and completing a migration, writes files back into wp-content. That is the purpose of the plugin: a backup that cannot be restored is not a backup. The WordPress plugin guidelines allow this for backup and migration plugins, and Nimble Backup keeps that write as narrow as it can:
uploads/nimble-backup/ and deleted when the job finishes. A database dump is data, not something the server executes; it is only ever read back statement by statement through $wpdb during a restore the administrator started.uploads/nimble-backup/ like any other.Another plugin can offer credentials this site already holds, so a destination need not be set up twice:
add_filter( 'nimble_backup_credential_sources', function ( array $sources, string $provider ) {
if ( 'dropbox' !== $provider ) {
return $sources;
}
$sources['my-plugin'] = array(
'label' => 'My Plugin',
// Called only when the administrator presses the button. Return this
// plugin's own field names => values, or a WP_Error saying why not.
'fetch' => static function ( string $provider ) {
return array(
'app_key' => '…',
'app_secret' => '…',
'refresh_token' => '…',
);
},
);
return $sources;
}, 10, 2 );
The callable is what keeps this cheap and private: drawing the button costs nothing, and the credentials are read at the moment somebody asks for them rather than on every page render.
Destinations themselves are pluggable the same way, through nimble_backup_destinations.
Nimble Backup does not contact NimblePlugins. It sends nothing anywhere that you have not configured yourself.
Off-site storage is the one feature that contacts a service outside your own servers, and only after you choose one and enter its credentials. Four are available, none of them enabled by default and none of them contacted until you set one up:
The same answers apply to all four:
There are two further outbound requests, and neither involves a third party:
Backup archives contain whatever your site contains, including personal data in the database. They stay on your server unless you configure off-site storage, in which case a copy also goes to the bucket you named, under your own account with that provider. The plugin sends no telemetry, no usage statistics and no file contents to NimblePlugins, ever.
The secret key for off-site storage is stored encrypted, with a key derived from this installation’s own salts. Define AUTH_KEY and AUTH_SALT in wp-config.php if they are not already: wp-config.php is never part of a backup, so the stored key then cannot be opened using the contents of an archive. Without them WordPress keeps the salts in the database, which is inside every archive. The settings screen says which of the two applies to your site.
A migration token is valid for 24 hours from the moment it is generated, after which the download endpoint refuses it. You can revoke a token at any time from the Export tab. Migration packages are not deleted automatically once transferred, so remove the package from the source site when the migration is done.