{"id":286309,"date":"2026-07-08T12:07:10","date_gmt":"2026-07-08T12:07:10","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/backupridge-backup-restore\/"},"modified":"2026-08-13T18:40:45","modified_gmt":"2026-08-13T18:40:45","slug":"backupridge","status":"publish","type":"plugin","link":"https:\/\/os.wordpress.org\/plugins\/backupridge\/","author":23460127,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.36.1","stable_tag":"1.36.1","tested":"7.0.4","requires":"6.7","requires_php":"8.0","requires_plugins":null,"header_name":"BackupRidge","header_author":"Stava Tech","header_description":"Reliable WordPress backup plugin with resumable backups and remote storage","assets_banners_color":"285373","last_updated":"2026-08-13 18:40:45","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/backupridge.com","header_author_uri":"https:\/\/stavatech.no","rating":0,"author_block_rating":0,"active_installs":0,"downloads":533,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.29.0":{"tag":"1.29.0","author":"stavatech","date":"2026-07-08 12:06:52"},"1.29.1":{"tag":"1.29.1","author":"stavatech","date":"2026-07-15 10:52:50"},"1.29.2":{"tag":"1.29.2","author":"stavatech","date":"2026-07-29 09:17:49"},"1.29.3":{"tag":"1.29.3","author":"stavatech","date":"2026-07-30 15:44:32"},"1.30.0":{"tag":"1.30.0","author":"stavatech","date":"2026-07-31 15:32:53"},"1.30.1":{"tag":"1.30.1","author":"stavatech","date":"2026-07-31 17:39:38"},"1.31.0":{"tag":"1.31.0","author":"stavatech","date":"2026-08-01 20:00:37"},"1.32.0":{"tag":"1.32.0","author":"stavatech","date":"2026-08-02 19:09:52"},"1.33.0":{"tag":"1.33.0","author":"stavatech","date":"2026-08-06 12:35:23"},"1.34.0":{"tag":"1.34.0","author":"stavatech","date":"2026-08-10 10:34:08"},"1.34.1":{"tag":"1.34.1","author":"stavatech","date":"2026-08-10 16:17:39"},"1.34.2":{"tag":"1.34.2","author":"stavatech","date":"2026-08-10 22:27:50"},"1.34.3":{"tag":"1.34.3","author":"stavatech","date":"2026-08-11 07:30:17"},"1.35.0":{"tag":"1.35.0","author":"stavatech","date":"2026-08-11 17:11:05"},"1.35.1":{"tag":"1.35.1","author":"stavatech","date":"2026-08-11 23:18:17"},"1.36.0":{"tag":"1.36.0","author":"stavatech","date":"2026-08-13 10:30:17"},"1.36.1":{"tag":"1.36.1","author":"stavatech","date":"2026-08-13 18:40:45"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon.svg":{"filename":"icon.svg","revision":3600265,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3600265,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3600265,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.29.0","1.29.1","1.29.2","1.29.3","1.30.0","1.30.1","1.31.0","1.32.0","1.33.0","1.34.0","1.34.1","1.34.2","1.34.3","1.35.0","1.35.1","1.36.0","1.36.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3600265,"resolution":"1","location":"assets","locale":"","width":1400,"height":900},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3600265,"resolution":"2","location":"assets","locale":"","width":1400,"height":900},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3600265,"resolution":"3","location":"assets","locale":"","width":1400,"height":900},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3600265,"resolution":"4","location":"assets","locale":"","width":1400,"height":900},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3600265,"resolution":"5","location":"assets","locale":"","width":1400,"height":900},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3600265,"resolution":"6","location":"assets","locale":"","width":1400,"height":900}},"screenshots":{"1":"Dashboard \u2014 backup status, history, and one-click start, stop, continue, and retry.","2":"Backup in progress \u2014 live phase timeline, per-destination upload progress, and an honest ETA.","3":"Settings \u2014 backup scope, schedules, and the performance and reliability tuning that adapts to your host.","4":"Remote Storage \u2014 add S3, R2, FTP, SFTP and more destinations, each with a connection test.","5":"Restore \u2014 choose exactly which components to restore before anything is touched.","6":"Log Viewer \u2014 the full per-job log, readable and downloadable, plus the one-click Support Bundle."}},"plugin_section":[],"plugin_tags":[151,10698,10718,4155,152],"plugin_category":[59],"plugin_contributors":[270580],"plugin_business_model":[],"class_list":["post-286309","plugin","type-plugin","status-publish","hentry","plugin_tags-backup","plugin_tags-cloud-backup","plugin_tags-database-backup","plugin_tags-migration","plugin_tags-restore","plugin_category-utilities-and-tools","plugin_contributors-stavatech","plugin_committers-stavatech"],"banners":{"banner":"https:\/\/ps.w.org\/backupridge\/assets\/banner-772x250.png?rev=3600265","banner_2x":"https:\/\/ps.w.org\/backupridge\/assets\/banner-1544x500.png?rev=3600265","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/backupridge\/assets\/icon.svg?rev=3600265","icon":"https:\/\/ps.w.org\/backupridge\/assets\/icon.svg?rev=3600265","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/backupridge\/assets\/screenshot-1.png?rev=3600265","caption":"Dashboard \u2014 backup status, history, and one-click start, stop, continue, and retry."},{"src":"https:\/\/ps.w.org\/backupridge\/assets\/screenshot-2.png?rev=3600265","caption":"Backup in progress \u2014 live phase timeline, per-destination upload progress, and an honest ETA."},{"src":"https:\/\/ps.w.org\/backupridge\/assets\/screenshot-3.png?rev=3600265","caption":"Settings \u2014 backup scope, schedules, and the performance and reliability tuning that adapts to your host."},{"src":"https:\/\/ps.w.org\/backupridge\/assets\/screenshot-4.png?rev=3600265","caption":"Remote Storage \u2014 add S3, R2, FTP, SFTP and more destinations, each with a connection test."},{"src":"https:\/\/ps.w.org\/backupridge\/assets\/screenshot-5.png?rev=3600265","caption":"Restore \u2014 choose exactly which components to restore before anything is touched."},{"src":"https:\/\/ps.w.org\/backupridge\/assets\/screenshot-6.png?rev=3600265","caption":"Log Viewer \u2014 the full per-job log, readable and downloadable, plus the one-click Support Bundle."}],"raw_content":"<!--section=description-->\n<p><strong>BackupRidge is the WordPress backup plugin engineered to finish \u2014 even on cheap shared hosting.<\/strong> Most backup plugins assume a fast server, then quietly die when a 30-second PHP limit or a missed WP-Cron event cuts them off. BackupRidge saves a checkpoint at every step and resumes across requests, a watchdog revives stalled jobs, and pacing adapts to your host's measured speed \u2014 so a full-site backup completes on hosting where other plugins give up.<\/p>\n\n<p>Back up your database and files on a schedule, send the archives off-site, restore the whole site or only the pieces you need, and migrate a site to a new domain or host \u2014 from a dashboard that reports what actually happened, per destination, with real logs.<\/p>\n\n<h4>Back up to storage you control<\/h4>\n\n<p>Every backup can upload to one or more destinations:<\/p>\n\n<ul>\n<li><strong>Amazon S3 backup<\/strong> \u2014 including any S3-compatible service<\/li>\n<li><strong>Cloudflare R2 backup<\/strong><\/li>\n<li><strong>FTP backup<\/strong> and <strong>SFTP backup<\/strong> to your own server<\/li>\n<li><strong>Local backup<\/strong> on the web server, protected from direct web access<\/li>\n<li><strong>Google Drive backup<\/strong>, <strong>Dropbox backup<\/strong>, <strong>OneDrive backup<\/strong>, and <strong>Backblaze B2 backup<\/strong> with <a href=\"https:\/\/backupridge.com\/pricing\">BackupRidge Pro<\/a><\/li>\n<\/ul>\n\n<p>Your archives live in accounts <em>you<\/em> own. There is no vendor cloud in the middle, and nothing about restore depends on our servers.<\/p>\n\n<h4>Built for hosts that kill long requests<\/h4>\n\n<ul>\n<li><strong>Resumable everything<\/strong> \u2014 database export, file archiving, and uploads all checkpoint and continue across requests, so strict execution limits pause a backup instead of killing it.<\/li>\n<li><strong>Backup watchdog<\/strong> \u2014 a cron-based watchdog detects stalled jobs (missed cron, loopback failures, hard process kills) and resumes them automatically.<\/li>\n<li><strong>Host-aware tuning<\/strong> \u2014 the plugin measures your server's real disk and upload throughput and sizes its work slices, archive parts, and pacing to match.<\/li>\n<li><strong>Backup intensity control<\/strong> \u2014 pace backup I\/O so a running backup doesn't slow down your live visitors.<\/li>\n<li><strong>Split archives<\/strong> \u2014 large sites are split into right-sized numbered parts that upload reliably and download individually.<\/li>\n<\/ul>\n\n<h4>Honest by design<\/h4>\n\n<ul>\n<li><strong>Restore is not a paywall.<\/strong> Restore, including component selection and migration receive, ships in this plugin at no cost \u2014 and archives are self-describing, so they restore on a brand-new install too.<\/li>\n<li><strong>Per-destination truth.<\/strong> If a backup reaches two destinations and fails a third, the job says exactly that \u2014 no false green checkmarks.<\/li>\n<li><strong>Real logs.<\/strong> Every job writes a readable log you can view and download, plus a one-click diagnostics bundle for support.<\/li>\n<li><strong>We publish our restore tests.<\/strong> Every release goes through an automated backup \u2192 wipe \u2192 restore drill; results are public at <a href=\"https:\/\/backupridge.com\/restore-log\">backupridge.com\/restore-log<\/a>.<\/li>\n<\/ul>\n\n<h4>Free Features<\/h4>\n\n<ul>\n<li><strong>Resumable backups<\/strong> \u2014 Long-running backups save progress and resume from the last checkpoint so they finish on any host, including shared hosting with 30-second limits.<\/li>\n<li><strong>Database backup<\/strong> \u2014 MySQL\/MariaDB export via mysqldump (when available) or native PHP streaming with optional table filtering and row-level resumption.<\/li>\n<li><strong>File backup<\/strong> \u2014 Back up wp-content (and optionally the full WordPress root) with exclusion patterns, compression, and optional archive splitting for large sites.<\/li>\n<li><strong>Local storage<\/strong> \u2014 Store completed backups on the server filesystem. Optional subfolder under uploads (base: <code>wp-content\/uploads\/backupridge<\/code>).<\/li>\n<li><strong>Remote storage<\/strong> \u2014 Add multiple destinations and upload completed backups to Amazon S3, Cloudflare R2, FTP, or SFTP.<\/li>\n<li><strong>Scheduled backups<\/strong> \u2014 Run backups automatically on a daily, weekly, or custom schedule via WP-Cron, with a REST endpoint available for triggering from an external system cron.<\/li>\n<li><strong>Restore<\/strong> \u2014 Restore from a local backup, remote storage, or an uploaded archive, with component-level selection (database, themes, plugins, uploads, core) so you only restore what you need.<\/li>\n<li><strong>Site migration (receive)<\/strong> \u2014 Bring another WordPress site into this one: upload its backup archive via Import Backup on the Dashboard (split\/multi-part archives supported) and restore it \u2014 old domain URLs are replaced with this site's URL automatically. The Migrate admin page handles live site-to-site transfer (receiving a push sent from BackupRidge Pro, plus history).<\/li>\n<li><strong>WP-CLI discover\/import<\/strong> \u2014 <code>wp backupridge discover<\/code> scans for archives already placed under <code>wp-content\/uploads\/backupridge\/backups\/<\/code> (e.g. copied over via <code>scp<\/code>) and registers them in Backup History; <code>wp backupridge import &lt;path&gt;<\/code> does the same for a single archive file anywhere on disk. Both are the scriptable equivalent of the Dashboard's \"Discover local backups\" \/ \"Import Backup\" buttons \u2014 useful for disaster-recovery runbooks that rebuild a site entirely from the command line.<\/li>\n<li><strong>WP-CLI remote orphan scan\/delete<\/strong> \u2014 <code>wp backupridge remote-orphans scan &lt;provider-id&gt;<\/code> lists archives on a remote storage destination that this site's Backup History no longer tracks, classified by likely cause; <code>wp backupridge remote-orphans delete &lt;provider-id&gt; &lt;group-key&gt;<\/code> removes one such group after confirmation (<code>--yes<\/code> to skip). The scriptable equivalent of the Dashboard's remote orphan scan, for agencies managing storage across many sites from the command line.<\/li>\n<li><strong>Dashboard<\/strong> \u2014 View backup status, history, progress, and logs. Start, stop, continue, or retry backups from the admin UI.<\/li>\n<li><strong>Backup watchdog<\/strong> \u2014 A cron-based watchdog recovers backups that stall due to missed cron events or loopback failures.<\/li>\n<li><strong>Custom backup filenames<\/strong> \u2014 Choose a filename prefix (BackupRidge, site URL, or site name) with automatic date\/time stamping.<\/li>\n<li><strong>Multi-part downloads<\/strong> \u2014 Download each archive part from the dashboard, or use Download All to queue sequential direct downloads (reliable on shared hosting).<\/li>\n<li><strong>Log viewer<\/strong> \u2014 Browse and download per-job log files directly from the admin UI.<\/li>\n<li><strong>Webhook notifications<\/strong> \u2014 Optional HTTP POST after a successful and\/or failed backup (you choose): generic JSON, Slack incoming webhook, or Discord webhook format; URL, format, and which outcomes to notify are in Settings.<\/li>\n<li><strong>Update-screen warning<\/strong> \u2014 See a notice on WordPress update screens when no backup has been created in the last 24 hours.<\/li>\n<\/ul>\n\n<h4>Pro Features<\/h4>\n\n<ul>\n<li><strong>More cloud providers + OAuth<\/strong> \u2014 Connect Google Drive, Dropbox, OneDrive, and Backblaze B2 with easy OAuth sign-in\u2014no manual API keys required.<\/li>\n<li><strong>Incremental backups<\/strong> \u2014 Only back up files that changed since the last run, reducing time and storage.<\/li>\n<li><strong>Archive encryption<\/strong> \u2014 AES-256-GCM authenticated encryption for backup archives before upload (legacy AES-256-CBC archives are still decryptable for restore). The encryption key can be downloaded from Settings \u2192 Encryption and imported on another site \u2014 save a copy before you need it, since the key lives only on this site and encrypted backups cannot be recovered without it.<\/li>\n<li><strong>Advanced scheduling<\/strong> \u2014 Multiple independent schedules with time-of-day, day-of-week, 5-field cron expression support, and per-schedule settings overrides.<\/li>\n<li><strong>Backup verification<\/strong> \u2014 SHA-256 integrity checks on every archive part after backup completes.<\/li>\n<li><strong>System cron integration<\/strong> \u2014 Managed system cron setup and WP-CLI commands for triggering and automating backups, instead of relying on WP-Cron.<\/li>\n<li><strong>Custom filename templates<\/strong> \u2014 Build filenames from placeholders (<code>{type}<\/code>, <code>{seq}<\/code>, and more) instead of a fixed prefix.<\/li>\n<li><strong>Tiered (GFS) retention<\/strong> \u2014 Grandfather-Father-Son backup retention: keep a shrinking set of daily, weekly, monthly, and yearly backups instead of only the most recent N, with per-schedule overrides and a live preview of exactly what a policy would keep and delete before you save it.<\/li>\n<\/ul>\n\n<h4>Requirements<\/h4>\n\n<p>PHP 8.0 or higher, WordPress 6.7 or higher. The backup directory (default <code>wp-content\/uploads\/backupridge<\/code>) must be writable by the web server.<\/p>\n\n<h3>Support<\/h3>\n\n<p><strong>Without a license:<\/strong> please open a thread in BackupRidge's support forum \u2014 the Support tab on this plugin's directory page. We read every thread.<\/p>\n\n<p><strong>Pro license holders<\/strong> get a priority support channel: use the <strong>Support<\/strong> link in the plugin footer (Dashboard, Settings, Log Viewer, etc.) or go directly to <a href=\"https:\/\/backupridge.com\/contact\">backupridge.com\/contact<\/a>. When your license is active, the in-plugin link automatically carries your license key and plan so your ticket is prioritised at intake.<\/p>\n\n<p>Whichever channel you use, attaching diagnostics up front avoids back-and-forth over \"what PHP version \/ what host \/ is cron working?\":<\/p>\n\n<ul>\n<li><strong>Log Viewer<\/strong> (BackupRidge \u2192 Logs) \u2014 copy or download the log for a specific backup job as plain text.<\/li>\n<li><strong>Support Bundle<\/strong> (also in the Log Viewer) \u2014 a one-click report combining your host environment, host capabilities, WP-Cron status, and a redacted summary of your settings. Copy it to your clipboard or download it as a <code>.txt<\/code> file and attach it to your ticket.<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>BackupRidge can upload backup archives to third-party cloud storage services configured by the user. No data is sent to any external service unless the user explicitly configures a storage provider.\nLinks to backupridge.com and stavatech.no are informational website links and do not receive backup data from the plugin.<\/p>\n\n<h4>Amazon S3<\/h4>\n\n<p>Used to store backup archives via the S3 API. Signed requests with user-provided credentials and backup files are transmitted when the user configures S3 storage.\n* <a href=\"https:\/\/aws.amazon.com\/agreement\/\">AWS Customer Agreement<\/a>\n* <a href=\"https:\/\/aws.amazon.com\/privacy\/\">AWS Privacy Notice<\/a><\/p>\n\n<h4>Cloudflare R2<\/h4>\n\n<p>Used to store backup archives via S3-compatible API calls. Signed requests with user-provided credentials and backup files are transmitted when the user configures R2 storage.\n* <a href=\"https:\/\/www.cloudflare.com\/terms\/\">Cloudflare Terms<\/a>\n* <a href=\"https:\/\/www.cloudflare.com\/privacypolicy\/\">Cloudflare Privacy Policy<\/a><\/p>\n\n<h4>FTP<\/h4>\n\n<p>Used to upload backup archives to a host, port, and credentials supplied by the site administrator. Data is transmitted only when the user configures FTP storage.\nThis connection targets a user-selected server endpoint (self-hosted or third-party chosen by the site owner), so no single provider Terms or Privacy policy applies.<\/p>\n\n<h4>SFTP<\/h4>\n\n<p>Used to upload backup archives over SSH file transfer to a host, port, and credentials (or key) supplied by the site administrator. Data is transmitted only when the user configures SFTP storage.\nThis connection targets a user-selected server endpoint (self-hosted or third-party chosen by the site owner), so no single provider Terms or Privacy policy applies.<\/p>\n\n<h4>Google Drive (BackupRidge Pro only)<\/h4>\n\n<p>Not included in the WordPress.org download. When installed separately, BackupRidge Pro can upload backups via the Google Drive API using OAuth and user-granted access. Backup file data and metadata needed for the upload are sent to Google when the user configures this provider and runs a backup. Setup requires enabling the Google Drive API on your Google Cloud project (not only OAuth credentials). See https:\/\/backupridge.com\/docs\/cloud-storage#google-drive<\/p>\n\n<ul>\n<li><a href=\"https:\/\/policies.google.com\/terms\">Google Terms of Service<\/a><\/li>\n<li><a href=\"https:\/\/policies.google.com\/privacy\">Google Privacy Policy<\/a><\/li>\n<\/ul>\n\n<h4>Dropbox (BackupRidge Pro only)<\/h4>\n\n<p>Not included in the WordPress.org download. When installed separately, BackupRidge Pro can upload backups via the Dropbox API using OAuth. Backup file data is sent to Dropbox when the user configures this provider and runs a backup. Setup requires enabling file permissions on your Dropbox app and clicking Submit in the Permissions tab before OAuth. See https:\/\/backupridge.com\/docs\/cloud-storage#dropbox<\/p>\n\n<ul>\n<li><a href=\"https:\/\/www.dropbox.com\/terms\">Dropbox Terms<\/a><\/li>\n<li><a href=\"https:\/\/www.dropbox.com\/privacy\">Dropbox Privacy Policy<\/a><\/li>\n<\/ul>\n\n<h4>Microsoft OneDrive (BackupRidge Pro only)<\/h4>\n\n<p>Not included in the WordPress.org download. When installed separately, BackupRidge Pro can upload backups via Microsoft Graph \/ OneDrive using OAuth. Backup file data is sent to Microsoft when the user configures this provider and runs a backup. Setup requires an Azure app registration with a redirect URI of wp-admin\/admin.php (no query string) and account types matching your Microsoft sign-in. See https:\/\/backupridge.com\/docs\/cloud-storage#onedrive<\/p>\n\n<ul>\n<li><a href=\"https:\/\/www.microsoft.com\/servicesagreement\">Microsoft Services Agreement<\/a><\/li>\n<li><a href=\"https:\/\/privacy.microsoft.com\/privacystatement\">Microsoft Privacy Statement<\/a><\/li>\n<\/ul>\n\n<h4>Backblaze B2 (BackupRidge Pro only)<\/h4>\n\n<p>Not included in the WordPress.org download. When installed separately, BackupRidge Pro can upload backups to Backblaze B2 via the Backblaze B2 Native API. It calls <code>https:\/\/api.backblazeb2.com<\/code> to authorize the session with the user-provided Key ID and Application Key, then uploads the backup archive parts. Backup file data is sent to Backblaze only when the user configures this provider and runs a backup.<\/p>\n\n<ul>\n<li><a href=\"https:\/\/www.backblaze.com\/company\/policy\/terms-of-service\">Backblaze Terms of Service<\/a><\/li>\n<li><a href=\"https:\/\/www.backblaze.com\/company\/policy\/privacy\">Backblaze Privacy Policy<\/a><\/li>\n<\/ul>\n\n<h4>HTTP webhooks (backup status)<\/h4>\n\n<p>When webhooks are enabled in Settings, the plugin can send an HTTP POST to the URL you provide after a backup succeeds and\/or after it fails, depending on the checkboxes you set. Choices: generic JSON (job id, status, size, duration, timestamp), Slack incoming webhook (JSON with a text field), or Discord webhook (JSON with a content field). Data is sent only to your URL; the receiving service\u2019s terms apply if you use Slack or Discord.<\/p>\n\n<h4>REST \/ cron trigger (this plugin)<\/h4>\n\n<p>Optional: a REST URL with a secret key can be called by system cron so the site can run backup segments without WP-Cron or loopback. Requests go only to the same WordPress site; no third party receives data unless the site owner configures something else.<\/p>\n\n<p>Preferred authentication: send the key in the <code>X-BackupRidge-Cron-Key<\/code> request header. Legacy <code>?key=<\/code> query authentication remains supported for compatibility, but query strings can be logged by proxies and web servers.<\/p>\n\n<h3>Source Code<\/h3>\n\n<p>This plugin ships its full, human-readable source. Every minified script in <code>assets\/js\/dist\/<\/code> has its un-minified source in <code>assets\/js\/src\/<\/code>, and the minified stylesheet <code>assets\/css\/admin.min.css<\/code> has its source in <code>assets\/css\/admin.css<\/code>, inside the same plugin package, so each compiled file can be reviewed and rebuilt. No source is removed during packaging.<\/p>\n\n<p>Build tools and steps to regenerate the compiled assets:<\/p>\n\n<ul>\n<li>Requirements: Node.js 18+ and npm.<\/li>\n<li>Install dependencies: <code>npm install<\/code><\/li>\n<li>Build JS and CSS (terser minifies each <code>assets\/js\/src\/*.js<\/code> into <code>assets\/js\/dist\/<\/code>, and PostCSS\/cssnano minifies <code>assets\/css\/admin.css<\/code> into <code>assets\/css\/admin.min.css<\/code>): <code>npm run build<\/code><\/li>\n<\/ul>\n\n<p>PHP dependencies are managed with Composer (<code>composer install<\/code>). No third-party JavaScript libraries are bundled in a minified-only form; all shipped scripts are first-party and their sources are included as described above.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin zip via Plugins \u2192 Add New \u2192 Upload, or install it from the WordPress plugin directory.<\/li>\n<li>Activate the plugin through the Plugins screen.<\/li>\n<li>Go to BackupRidge in the admin menu to configure settings, storage, and schedules.<\/li>\n<li>Use the Dashboard to start a manual backup or view history and logs.<\/li>\n<\/ol>\n\n<p>For first-time setup, ensure the backup directory (Settings \u2192 Backup directory) is writable. The plugin creates <code>wp-content\/uploads\/backupridge<\/code> by default for backups, logs, and temporary files.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"my%20host%20has%20a%2030-second%20php%20limit.%20will%20backups%20actually%20complete%3F\"><h3>My host has a 30-second PHP limit. Will backups actually complete?<\/h3><\/dt>\n<dd><p>Yes \u2014 this is the problem BackupRidge was built around. A backup runs as a series of short slices: each slice saves a checkpoint before the host's time limit hits, then a WP-Cron event (or a loopback self-call, or even the dashboard status poll) continues from that checkpoint. A watchdog catches jobs that stall because cron never fired. Large sites on slow shared hosting take longer, but they finish.<\/p><\/dd>\n<dt id=\"does%20restoring%20cost%20anything%2C%20or%20is%20it%20locked%20behind%20a%20license%3F\"><h3>Does restoring cost anything, or is it locked behind a license?<\/h3><\/dt>\n<dd><p>Restore ships in this plugin at no cost, with no nags in the middle of it: full-site restore, component selection (database, themes, plugins, uploads, core), restore from remote storage, and restore of uploaded archives are all included. Each archive embeds a self-describing manifest, so it can be restored on a fresh WordPress install \u2014 you are never locked out of your own backups. We don't just claim restore works \u2014 every release runs an automated backup \u2192 wipe \u2192 restore drill, with results published at <a href=\"https:\/\/backupridge.com\/restore-log\">backupridge.com\/restore-log<\/a>.<\/p><\/dd>\n<dt id=\"where%20are%20backups%20stored%3F\"><h3>Where are backups stored?<\/h3><\/dt>\n<dd><p>By default, backups are stored in <code>wp-content\/uploads\/backupridge\/backups<\/code>. In Settings, you can optionally set a subfolder under <code>wp-content\/uploads\/backupridge\/<\/code> (for example <code>staging\/site-a<\/code>), but absolute custom paths are not allowed. You can also configure remote storage \u2014 Amazon S3, Cloudflare R2, FTP, SFTP, and more with BackupRidge Pro \u2014 to upload completed backups off-site. Archives always land in storage accounts you own.<\/p><\/dd>\n<dt id=\"can%20i%20back%20up%20to%20google%20drive%2C%20dropbox%2C%20or%20onedrive%3F\"><h3>Can I back up to Google Drive, Dropbox, or OneDrive?<\/h3><\/dt>\n<dd><p>Yes, with <a href=\"https:\/\/backupridge.com\/pricing\">BackupRidge Pro<\/a>, which adds Google Drive backup, Dropbox backup, OneDrive backup, and Backblaze B2 backup with OAuth sign-in. The base plugin includes Amazon S3, Cloudflare R2 (and any S3-compatible service), FTP, SFTP, and local storage.<\/p><\/dd>\n<dt id=\"can%20i%20resume%20a%20backup%20if%20it%20stops%3F\"><h3>Can I resume a backup if it stops?<\/h3><\/dt>\n<dd><p>Yes. BackupRidge saves progress at regular checkpoints and can resume from the last one. If a backup stalls, click \"Continue\" on the Dashboard to pick up where it left off. A built-in watchdog also detects stalled backups and re-schedules them automatically.<\/p><\/dd>\n<dt id=\"will%20a%20backup%20slow%20down%20my%20site%20while%20it%20runs%3F\"><h3>Will a backup slow down my site while it runs?<\/h3><\/dt>\n<dd><p>You can decide. The backup intensity setting (Unrestricted \/ Light \/ Moderate \/ Aggressive) paces file and upload batches so a running backup yields disk and CPU to live visitors. Auto-detect measures your host's disk throughput and recommends a preset; slower hosts get gentler pacing automatically.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20wp-cron%20is%20unreliable%20on%20my%20host%3F\"><h3>What happens if WP-Cron is unreliable on my host?<\/h3><\/dt>\n<dd><p>BackupRidge has several fallback mechanisms: a loopback self-call, a cron trigger REST endpoint for system cron, and the ability to run a backup segment during the dashboard status poll. Even on hosts where WP-Cron is disabled or unreliable, backups can make progress whenever someone visits the admin.<\/p><\/dd>\n<dt id=\"how%20large%20a%20site%20can%20backupridge%20handle%3F\"><h3>How large a site can BackupRidge handle?<\/h3><\/dt>\n<dd><p>There is no built-in size limit. Large sites are split into numbered archive parts sized to what your host and storage destination can reliably handle, and every phase \u2014 database export, archiving, upload \u2014 is resumable, so total runtime is not bounded by any single request. Multi-gigabyte sites complete on slow shared hosts; the work is spread across as many slices as the host needs.<\/p><\/dd>\n<dt id=\"can%20i%20restore%20specific%20parts%20of%20a%20backup%3F\"><h3>Can I restore specific parts of a backup?<\/h3><\/dt>\n<dd><p>Yes. The restore dialog lets you choose which components to restore: database, themes, plugins, uploads, and\/or core files. You can optionally save a safety copy of the current database on the server before starting (recommended for large sites only if you accept the extra time).<\/p><\/dd>\n<dt id=\"can%20i%20migrate%20a%20site%20to%20this%20one%3F\"><h3>Can I migrate a site to this one?<\/h3><\/dt>\n<dd><p>Yes, at no cost. Upload the backup archive exported from the other site via Import Backup on the Dashboard, then restore it \u2014 split (multi-part) archives are supported, and old domain URLs are replaced with this site's URL automatically during restore. The Migrate admin page is for live site-to-site transfer: it can receive a push from another BackupRidge install, and BackupRidge Pro adds pushing a migration directly to another site (including staging clones).<\/p><\/dd>\n<dt id=\"how%20do%20i%20restore%20to%20a%20new%20server%20after%20the%20old%20one%20is%20gone%3F\"><h3>How do I restore to a new server after the old one is gone?<\/h3><\/dt>\n<dd><p>Install WordPress and BackupRidge on the new host, then get the backup archive onto it: upload it via Import Backup on the Dashboard, drop the files into <code>wp-content\/uploads\/backupridge\/backups\/<\/code> over FTP\/SFTP and use Discover local backups, or \u2014 if the old site uploaded to remote storage \u2014 configure that same destination under Storage and use Find backups in this storage to locate and download it. Restore it from Backup History like any other backup; domain URLs are replaced automatically if you're moving to a new domain. A full step-by-step walkthrough ships with the plugin in <code>docs\/RESTORE_TO_NEW_SITE.md<\/code>.<\/p><\/dd>\n<dt id=\"i%27m%20switching%20from%20backwpup%20%E2%80%94%20what%20do%20i%20need%20to%20know%3F\"><h3>I'm switching from BackWPup \u2014 what do I need to know?<\/h3><\/dt>\n<dd><p>Scheduled backups, restore, and uploading each backup to several destinations at once are all included in the free version. S3, R2, FTP, SFTP, and local storage need no upgrade; Google Drive, Dropbox, and OneDrive require Pro \u2014 the same split BackWPup applies in its paid plans. Keep the backup archives made by your old plugin until BackupRidge has completed a few scheduled runs and you have verified a restore. Releases are incremental and changelog-driven: every version ships with a full changelog entry (see below), and settings are migrated automatically on update. Full walkthrough: <a href=\"https:\/\/backupridge.com\/docs\/switching\/backwpup\">backupridge.com\/docs\/switching\/backwpup<\/a>.<\/p><\/dd>\n<dt id=\"i%27m%20switching%20from%20all-in-one%20wp%20migration%20%E2%80%94%20is%20there%20a%20size%20limit%3F\"><h3>I'm switching from All-in-One WP Migration \u2014 is there a size limit?<\/h3><\/dt>\n<dd><p>No. BackupRidge has no size caps on backups, imports, or restores in any version. Large sites are handled by splitting archives into numbered parts and resuming from checkpoints, not by limiting how much data you can move. Backups are standard ZIP archives that any unzip tool can open \u2014 there is no proprietary format. Existing <code>.wpress<\/code> archives can't be imported, though: start with a fresh BackupRidge backup of your site instead. Full walkthrough: <a href=\"https:\/\/backupridge.com\/docs\/switching\/aiowm\">backupridge.com\/docs\/switching\/aiowm<\/a>.<\/p><\/dd>\n<dt id=\"how%20does%20archive%20splitting%20work%3F\"><h3>How does archive splitting work?<\/h3><\/dt>\n<dd><p>When a backup exceeds the configured maximum archive size, BackupRidge splits it into multiple numbered parts (e.g. <code>backup_001.zip<\/code>, <code>backup_002.zip<\/code>). All parts are uploaded to remote storage and can be downloaded individually or all at once via Download All (sequential direct downloads).<\/p><\/dd>\n<dt id=\"import%20backup%20is%20slow%20or%20fails%20with%20larger%20upload%20chunks.%20what%20should%20i%20change%3F\"><h3>Import Backup is slow or fails with larger upload chunks. What should I change?<\/h3><\/dt>\n<dd><p>Import Backup uploads use chunked <code>admin-ajax<\/code> requests. Larger chunks reduce request overhead and are often faster, but each chunk must fit PHP limits.<\/p>\n\n<p>BackupRidge automatically detects and applies a safe max chunk size from:<\/p>\n\n<ul>\n<li><code>upload_max_filesize<\/code><\/li>\n<li><code>post_max_size<\/code> (minus multipart form overhead)<\/li>\n<\/ul>\n\n<p>If uploads fail above a certain chunk size (for example above 8 MB), increase PHP limits so they are above your target:<\/p>\n\n<ul>\n<li><code>upload_max_filesize = 16M<\/code><\/li>\n<li><code>post_max_size = 24M<\/code><\/li>\n<\/ul>\n\n<p>Then set <strong>Settings \u2192 Upload \u2192 Upload chunk size<\/strong> to a value below those limits (8 MB in this example). Keep <code>post_max_size<\/code> higher than <code>upload_max_filesize<\/code>.<\/p><\/dd>\n<dt id=\"what%20is%20tiered%20%28gfs%29%20retention%2C%20and%20how%20many%20backups%20does%20it%20actually%20keep%3F\"><h3>What is tiered (GFS) retention, and how many backups does it actually keep?<\/h3><\/dt>\n<dd><p>By default, retention just keeps the most recent N backups and deletes the rest. <a href=\"https:\/\/backupridge.com\/pricing\">BackupRidge Pro<\/a> adds Grandfather-Father-Son (GFS) tiered retention: instead of one flat count, you set a count for each of five tiers \u2014 the last N backups, plus daily, weekly, monthly, and yearly. A single backup can satisfy several tiers at once and is stored only once, so this stays cheap on storage even though it spans a long history.<\/p>\n\n<p>Worked example: with daily scheduled backups and no tiered retention, a year of backups means 365 archives to store. With the default tiered policy (keep the last 1, 7 daily, 4 weekly, and 6 monthly), you instead keep about 18 archives at any one time \u2014 the last week in full daily detail, the last month or so in weekly snapshots, and roughly six months of history in monthly snapshots \u2014 with older backups outside those tiers pruned automatically as new ones arrive. Settings \u2192 Retention has a Preview button that shows exactly which existing backups a policy would keep and delete before you save it, and changes nothing until you do.<\/p><\/dd>\n<dt id=\"what%20is%20the%20difference%20between%20this%20plugin%20and%20backupridge%20pro%3F\"><h3>What is the difference between this plugin and BackupRidge Pro?<\/h3><\/dt>\n<dd><p>This plugin is complete backup software, not a demo: resumable full-site backups, scheduling, S3\/R2\/FTP\/SFTP\/local storage, full restore, and migration receive are all included, with no artificial limits. <a href=\"https:\/\/backupridge.com\/pricing\">BackupRidge Pro<\/a> adds the OAuth cloud providers (Google Drive, Dropbox, OneDrive, Backblaze B2), incremental backups, archive encryption, backup verification, advanced scheduling, system cron + WP-CLI integration, custom filename templates, and push migration\/staging.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20backups%20if%20backupridge%20disappears%3F\"><h3>What happens to my backups if BackupRidge disappears?<\/h3><\/dt>\n<dd><p>You keep everything. Backup archives are standard ZIP files containing your files and a plain SQL export, stored in your own hosting account and your own storage accounts \u2014 there is no BackupRidge cloud. Restore runs entirely on your server and never calls our infrastructure. The plugin is GPL-licensed, so the software itself remains yours to run.<\/p><\/dd>\n<dt id=\"what%20wordpress%20and%20php%20versions%20are%20supported%3F\"><h3>What WordPress and PHP versions are supported?<\/h3><\/dt>\n<dd><p>WordPress 6.7 or higher and PHP 8.0 or higher. The plugin is tested on WordPress 6.8, 6.9, and 7.0 with PHP 8.0 through 8.3.<\/p><\/dd>\n<dt id=\"is%20the%20backup%20directory%20protected%20from%20web%20access%3F\"><h3>Is the backup directory protected from web access?<\/h3><\/dt>\n<dd><p>Yes. BackupRidge creates an <code>.htaccess<\/code> file and an <code>index.php<\/code> file in the backup directory to prevent direct web access on Apache and most hosting environments. For Nginx, add a <code>location<\/code> block to deny access to the backup directory.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20data%20if%20i%20uninstall%20the%20plugin%3F\"><h3>What happens to my data if I uninstall the plugin?<\/h3><\/dt>\n<dd><p>Deleting BackupRidge from Plugins \u2192 Installed Plugins removes its settings, scheduled cron events, and its backup storage directory (<code>wp-content\/uploads\/backupridge<\/code>), including any backup archives stored there. If you want to keep your backups, move or download them to another location, or switch to a remote storage destination, before deleting the plugin. Simply deactivating the plugin (without deleting it) leaves all settings and stored backups untouched.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.36.1<\/h4>\n\n<p><strong>Bug fixes: Quick Connect cloud storage, incremental backup verification, and settings UI.<\/strong><\/p>\n\n<ul>\n<li>Fix: Quick Connect (Google Drive, Dropbox, OneDrive) no longer fails to connect on Pro installs that haven't set a custom OAuth relay URL -- affected every shipped Pro build.<\/li>\n<li>Feature: Restoring from a local backup now catches a corrupted archive part that passes size checks but no longer matches the backup's file-identity manifest.<\/li>\n<li>Fix: (Premium) Backup verification now catches an incremental\/differential backup whose baseline archive has degraded since it was created, instead of only reporting \"verified\" on the differential's own parts.<\/li>\n<li>Fix: (Premium) Incremental backups now force-rebaseline every enabled component together when any one of them is due, preventing a stale baseline pointer that could cause a later restore to silently skip data.<\/li>\n<li>Fix: Settings screens now show upgrade-to-Business\/Agency messaging instead of a misleading \"license inactive\" warning when a valid Personal-tier license opens a higher-tier-only feature.<\/li>\n<li>Fix: The Cancel button on the settings Reset-to-Defaults confirmation modal now closes the dialog without resetting form values.<\/li>\n<\/ul>\n\n<h4>1.36.0<\/h4>\n\n<p><strong>Tiered (GFS) backup retention (Premium), stronger archive\/restore verification, and license-signature hardening.<\/strong><\/p>\n\n<ul>\n<li>Feature: (Premium) Grandfather-Father-Son (GFS) tiered retention -- keep a shrinking set of daily, weekly, monthly, and yearly backups instead of only the most recent N, configurable globally and per schedule, with a live \"keeps ~N backups\" summary and a Preview button that shows exactly which existing backups a policy would keep and delete before you save it.<\/li>\n<li>Changed: Backup History rows now show a tier badge (daily\/weekly\/monthly\/yearly\/keep-last) explaining why a GFS-retained backup was kept.<\/li>\n<li>Feature: New <code>wp backupridge remote-orphans scan<\/code>\/<code>delete<\/code> WP-CLI commands list and remove untracked remote archives, the scriptable equivalent of the Dashboard's remote orphan scan -- useful for agencies managing storage across many sites.<\/li>\n<li>Feature: Backups now embed a per-file identity manifest in the archive, and post-backup verification checks it by name against the archive's actual contents -- catching a missing or duplicated file that a simple entry-count check could miss.<\/li>\n<li>Feature: Restoring from a local backup now verifies every archive part is present, readable, and non-empty before extraction starts, instead of proceeding on an archive set that quietly lost a part after the backup finished.<\/li>\n<li>Fix: Archive part-path verification now cross-checks the writer's reported parts against what's actually on disk, closing a gap where a corrupted part list could still pass verification.<\/li>\n<li>Changed: \"Discover local backups\" now previews what it would import before making changes, and skips backup files that belong to a different site.<\/li>\n<li>Fix: A failed retention pass is now surfaced to admins and in the job log instead of failing silently.<\/li>\n<li>Changed: License-gated settings (incremental backups, encryption, GFS retention) are now consistently gated on license state across every settings screen.<\/li>\n<li>Changed: License responses from the update server are now checked against an Ed25519 signature when using the default license server URL (log-only for now -- a bad signature is recorded but doesn't change plugin behavior yet).<\/li>\n<\/ul>\n\n<h4>1.35.1<\/h4>\n\n<p><strong>Reliability fixes for Pro license activation and the dashboard.<\/strong><\/p>\n\n<ul>\n<li>Fix: Pro license activation now completes successfully on installations that haven't configured a custom license server URL.<\/li>\n<li>Fix: The Backup History table no longer shows \"Local\" for backups stored only on a remote destination.<\/li>\n<li>Fix: URL Search &amp; Replace now sits next to Restore Points on the dashboard and stays collapsed until needed.<\/li>\n<li>Fix: The plugin build process no longer strips required files from the live plugin folder when preparing distribution copies.<\/li>\n<\/ul>\n\n<h4>1.35.0<\/h4>\n\n<p><strong>Confirm before uninstall deletes your data, plus dist-build and uninstall fixes.<\/strong><\/p>\n\n<ul>\n<li>Feature: Deleting the plugin with \"Remove data on uninstall\" enabled now asks for confirmation before wiping local backups and settings, and lets you opt in to also deleting backups from any configured remote storage destinations.<\/li>\n<li>Fix: Uninstalling the plugin no longer wipes settings and local backups when \"Remove data on uninstall\" is left disabled.<\/li>\n<li>Fix: The free-build packaging step now includes the minified JS for the pre-update snapshot, Restore Points, and migration features, which were missing from the distributed build and could leave those admin screens broken.<\/li>\n<\/ul>\n\n<h4>1.34.3<\/h4>\n\n<p><strong>Bugfix release.<\/strong><\/p>\n\n<ul>\n<li>Fix: WordPress admin pages load normally again in the free version. Versions 1.34.0 through 1.34.2 registered an admin hook for a feature that is not part of the free build, which prevented wp-admin from loading while the plugin was active. The website frontend and scheduled backups were not affected.<\/li>\n<\/ul>\n\n<h4>1.34.2<\/h4>\n\n<p><strong>Bugfix release.<\/strong><\/p>\n\n<ul>\n<li>Fix: Database restores on MariaDB hosts now commit the final imported table reliably; previously the last table in the dump could fail to persist even though the restore reported success.<\/li>\n<li>Fix: Backup time-remaining estimates no longer turn far too pessimistic while files are still being scanned, the \"throughput is decaying\" advisory is no longer raised when a phase is nearly finished, and its suggested remedy now says when the upload part size is already at your host's measured floor.<\/li>\n<\/ul>\n\n<p>For the complete version history (including 1.34.1 and earlier), see the plugin's SVN changelog.<\/p>","raw_excerpt":"Backups that finish \u2014 even on slow shared hosting. Resumable WordPress backup, restore, and migration to S3, R2, FTP, SFTP, and more.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/os.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/286309","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/os.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/os.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/os.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=286309"}],"author":[{"embeddable":true,"href":"https:\/\/os.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/stavatech"}],"wp:attachment":[{"href":"https:\/\/os.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=286309"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/os.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=286309"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/os.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=286309"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/os.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=286309"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/os.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=286309"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/os.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=286309"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}