Bodholdt Backup for OneDrive Docs
Everything you need to set up, configure, and get the most out of the plugin.
Don't have it yet? Bodholdt Backup for OneDrive is free: get it from its plugin page.
What Bodholdt Backup for OneDrive is
Bodholdt Backup for OneDrive makes a complete copy of your WordPress site, both your database and your files, then stores it safely in your own Microsoft OneDrive account. You stay in control of where your backups live; there’s no third-party storage service in the middle. It can run on a schedule or on demand, only re-uploads the files that actually changed, and brings everything back from the Your Backups tab if something goes wrong. When you need to move your site to a new host or domain, you install WordPress there, connect this plugin to the same OneDrive account, and restore.
Quick start (about 15 minutes)
- Install & activate the plugin: download the free ZIP (no email, no account), then Plugins → Add New → Upload Plugin, choose the
bodholdt-onedrive-backup.zipfile, Install Now, Activate. - Connect OneDrive. Create a free Microsoft app registration (plan on about 15 minutes, once; we walk you through it below), paste the Client ID and Client Secret into Settings, and click Authorize OneDrive Access.
- Pick a schedule (Daily, Weekly, Hourly, or Manual only) and a notification email.
- Run your first backup. Click Start Backup Now on the Dashboard and watch the progress bar.
A first-run setup wizard walks you through these same steps in one flow: Welcome → Connect OneDrive → Schedule → Run Your First Backup.
Installation
Step 1: Install the plugin
- Download the free plugin ZIP.
- Log in to your WordPress Dashboard.
- Go to Plugins → Add New.
- Click Upload Plugin and select the
bodholdt-onedrive-backup.zipfile. - Click Install Now, then Activate.
After activating, a handy “Set up” / “Backups” link appears next to the plugin in your Plugins list for one-click access to the dashboard.
Step 2: There is no step 2
There is no license key to enter and no License tab to find, because the plugin is free in a single edition and contains no license client at all. Nothing is locked, nothing unlocks, and there is no activation limit or dashboard that has to be released before you can use it. Go straight on to connecting OneDrive.
What you get, and what it costs
There is one edition and it is free. There is no license key, no tier, no trial, and no activation limit, because the plugin contains no license client to enforce one.
- Full and incremental backups, scheduled or manual, to a OneDrive account you own.
- Full restore, and selective restore so you can bring back only the database, plugins, themes, uploads, or core files.
- Cloud browser, activity log, multisite network backup, and up to 500 backups kept.
- An email report after every backup attempt, success or failure, with a plain-language diagnosis when something goes wrong, plus a warning before your Azure client secret expires, once you paste the expiry date Azure shows you into Settings.
- Updates in your WordPress dashboard, with no key to enter.
- Install it on as many sites as you like.
The paid Complete plan that used to sit alongside this is retired as of 2026-09-01. Every backup and restore feature it had is in the list above, and so are the dashboard updates it was once the only way to get. Its Slack and Discord delivery now lives in the separate Bodholdt Backup Pro companion. If you hold an older paid backup license, your backups and restores carry on, but that paid build no longer receives updates. To keep getting them, install the free edition from its product page. Your existing archives stay where they are.
Getting the same news in Slack or Discord
The email report above is part of this plugin and always has been. If you would rather have those events arrive in a chat channel, or you want a scheduled summary of how a site is doing rather than one message per run, that is a separate paid companion plugin, Bodholdt Backup Pro. It posts five backup events to your own Slack or Discord webhook, each with its own toggle, and sends a per-site backup-health digest weekly or daily. One license covers both the OneDrive and the Google Drive plugin.
It takes no backups of its own and it is not required for anything. Install it, or don’t; this plugin behaves identically either way.
Connecting to OneDrive
Before you connect: the plugin encrypts your OneDrive credentials with the AUTH_KEY and AUTH_SALT security keys in your site’s wp-config.php file (or a BODHOLDT_BACKUP_KEY). They need real values of at least 32 characters each, not the “put your unique phrase here” placeholder. If WordPress was set up with its standard installer, these keys were created for you. If they are missing or still placeholders, the plugin pauses backups rather than storing anything in plaintext. Adding them is a one-time job for whoever manages your hosting. Never paste these keys into an email or a support ticket.
Backups are stored in your own personal or business Microsoft OneDrive. To let the plugin talk to OneDrive securely, you create a free Microsoft “app registration” once. You don’t need a paid Microsoft 365 subscription. Any Microsoft account comes with 5 GB of free OneDrive storage (upgrade your OneDrive, or use Microsoft 365’s included 1 TB, for larger sites).
Step 1: Create your Microsoft app credentials
The plugin’s Settings tab has a built-in “How do I get these?” guide. Here are the same steps:
- Open the Microsoft Entra admin center at
https://entra.microsoft.com/and sign in with your regular Microsoft account. - Click New registration. Give it a name you’ll recognize (e.g., “My Site Backup”). Under Supported account types, choose “Accounts in any organizational directory and personal Microsoft accounts”. Click Register.
- Set the Redirect URI. Go to Authentication → Add a platform → Web, paste the exact Redirect URI shown in the blue information box on the plugin’s Settings tab, then click Configure.
- Create a Client Secret. Go to Certificates & secrets → New client secret, add a description (e.g., “Backup”), pick an expiry, and click Add. Copy the Value immediately. You won’t be able to see it again. (Copy the Value, not the Secret ID.)
- Set API permissions. Go to API permissions → Add a permission → Microsoft Graph → Delegated permissions, then add
Files.ReadWriteandoffline_access. Click Grant admin consent if it’s available. - Go back to your app’s Overview page and copy the Application (client) ID.
Step 2: Save your credentials
- On the Bodholdt Backup Dashboard (or Settings tab), find the OneDrive Connection card.
- Enter your Client ID and Client Secret (from the steps above).
- Make sure your Microsoft app has the Redirect URI listed in the blue information box.
- Click Save Settings (in the wizard this button is Save & Connect OneDrive).
Step 3: Authorize the connection
- After saving, an Authorize OneDrive Access button appears.
- Click it to sign in with your Microsoft account.
- Grant the requested permissions (Microsoft opens a confirmation page; click Accept).
- You’re redirected back to the dashboard with a success message: OneDrive connected!.
Your backups land in Your OneDrive → Apps → Bodholdt Backup → [Site Name] (the full path is /Apps/Bodholdt Backup/[Site Name]/).
Settings & backups
Backup schedule & precision timing
- Frequency: choose Manual Only, Hourly, Daily, or Weekly.
- Start Time: set a specific start time (e.g., 03:00 AM) so backups run during your real off-peak hours.
- Timezone: the schedule automatically syncs with your WordPress Timezone setting.
Note: backups rely on WP-Cron. On low-traffic sites a scheduled backup may be slightly delayed until a visitor arrives, unless you have a server-side cron trigger.
What to back up & backup mode
You can choose which parts of your site are included (database, plugins, themes, uploads). Backups can run as Full or Incremental: incremental backups keep a manifest of your files and only upload the ones that have changed since last time, so they’re fast and lightweight. The database is always exported in full (databases don’t merge incrementally), and you can force a full backup from the Dashboard at any time. Common developer junk (e.g. __pycache__/, *.pyc) is excluded by default, and you can add your own file-exclusion patterns.
Retention policy (smart lifecycle)
- Backups to Keep: enter a number (e.g., 10) to set your retention limit. You can keep anywhere from 1 to 500 backups. It is a number you set, not something you buy.
- Auto-pruning: after every upload, the plugin scans your OneDrive folder and, if the number of backups exceeds your limit, automatically deletes the oldest ones to free up space.
The field will not accept a number above 500, and a larger value sent another way is reduced to 500 when the settings are saved.
Notifications
- Notification Email: the address that receives success and failure alerts. A failure email names what went wrong and suggests a fix, and the Logs tab shows the same suggested fix for the same failure.
- Slack and Discord: not part of this plugin. They live in the separate Bodholdt Backup Pro companion, which posts the same events to a webhook you own with a toggle per event. It also posts two this plugin never emails: a restore starting, and a database view that would stop the next backup. Nothing here depends on it.
Upload chunking
The archive is uploaded to OneDrive in 5 MB chunks through a resumable upload session, so an interrupted transfer picks up where it stopped. Each chunk retries up to 3 times before the run reports a failure.
Running a manual backup
- Open the Dashboard.
- Click Start Backup Now.
- The progress bar tracks the job in real time as it:
- Exports the database.
- Compresses your files.
- Uploads the archive to OneDrive (folder:
/Apps/Bodholdt Backup/[Site Name]/). - Enforces retention, checking and deleting old backups if the limit is exceeded.
If you refresh the admin tab while a backup is mid-run, the progress bar re-attaches and picks up where it was.
The cloud browser & logs
The Your Backups tab (the cloud browser) lists every backup in your OneDrive, with date, size, and restore/delete actions, right inside WordPress, so you can view, download, restore, or remove any backup without leaving the dashboard. The Logs tab shows your paginated backup history with status pills (success / error / running) and per-row troubleshooting hints. The Dashboard also keeps a running tally of how many backups you’ve made and the total size kept safe.
Restoring & migrating
Migrating to a new site or a new Microsoft app registration? Reuse the same Client ID and Client Secret. A new app registration is a different client, so it cannot see backups an earlier client uploaded and your backup list will come up empty, at exactly the moment you are relying on it. Copy the existing Client ID and Client Secret into the new site before you authorize, and confirm your backups are listed before you decommission the old one.
You restore any backup straight from your OneDrive, from the Your Backups tab, right inside WordPress. Your OneDrive credentials and tokens are always encrypted at rest (Sodium preferred, AES-256-CBC with HMAC fallback).
Restore in place (same site)
- Open the Your Backups tab.
- Choose a backup and click Restore.
- The plugin takes a safety snapshot first, then rolls your site back.
Selective restore (free on every install) lets you choose exactly what comes back: database, plugins, themes, uploads, or core. Your must-use plugins (mu-plugins) and the standard WordPress drop-ins (object-cache.php, advanced-cache.php, db.php, maintenance.php) travel with the Plugins selection, and your language files (wp-content/languages/) travel with Core. So if you switch Plugins off to save space, that backup does not contain your must-use plugins, and switching Core off leaves the language files out. The same rule decides what a selective restore brings back.
Moving to a new server or domain
A restore runs inside WordPress, so the destination needs a working WordPress install. This release does not ship a standalone installer.php that runs outside WordPress.
- Install WordPress on the new server or domain.
- Install and activate Bodholdt Backup for OneDrive there, and connect it to the same Microsoft OneDrive account.
- Open the Your Backups tab. Your existing backups are listed there, because they live in your OneDrive rather than on the old server.
- Choose the backup you want and click Restore.
Two things to set up first. The new site must use the same database table prefix as the backup. And run the same plugin version on both sites.
Post-restore steps
After logging in, do these final checks.
1. Flush permalinks
- Go to Settings → Permalinks.
- Click Save Changes (you don’t need to change anything). This rebuilds your
.htaccessfile and fixes 404 errors.
2. For Multisite networks only
A network-mode restore brings back every subsite and the shared tables. Restoring onto the same site needs nothing further.
Restoring a network onto a fresh WordPress install on another server does need one manual step, because wp-config.php is never included in a backup: that install needs the multisite constants in its own wp-config.php before the network will load.
- Connect to the new server via FTP or File Manager.
- Edit
wp-config.php. - Paste your Multisite configuration constants just above the line that says “That’s all, stop editing”. Example:
define( 'WP_ALLOW_MULTISITE', true ); define( 'MULTISITE', true ); define( 'SUBDOMAIN_INSTALL', true ); // Set to false if using subdirectories define( 'DOMAIN_CURRENT_SITE', 'your-new-domain.com' ); define( 'PATH_CURRENT_SITE', '/' ); define( 'SITE_ID_CURRENT_SITE', 1 ); define( 'BLOG_ID_CURRENT_SITE', 1 ); - Save the file and refresh your dashboard.
- Go to My Sites → Network Admin → Sites and make sure every sub-site URL matches the new domain.
One thing surprises people on a staging restore: Network Admin lives on the original network’s main-site hostname, the row at wp_blogs.blog_id = 1. If your live network’s main site was example.com and you restored onto staging.example.com, Network Admin is at https://example.com/wp-admin/network/ and the staging link 404s. To move Network Admin onto the new hostname, update siteurl and home for blog 1, wp_blogs.domain for blog 1, wp_site.domain, and DOMAIN_CURRENT_SITE. That is the standard WordPress procedure for moving a multisite network to a new domain, not a plugin behavior.
Backups & Multisite
On a multisite network the plugin backs up the entire network by default. One backup captures every blog plus the shared user, sitemeta, and blogs tables, and restoring recreates the full multisite layout. Network admins who want per-customer isolation can switch to per-site mode in Settings, where each subsite backs up its own content only (per-site backups are content-only, so a full network restore isn’t possible from them). One thing to check after switching: on the network’s primary site, a per-site backup stops before uploading if another plugin has created a table at the network’s base prefix that this plugin cannot place on one side of the boundary. Nothing is uploaded and nothing on your site is changed; the backup log explains why, and the bodholdt_od_blog_local_tables filter is how you declare such a table. Subsites are not affected. Retention and connection settings are network-wide, so you configure them once.
What’s in a backup
Every backup zip contains:
database.sqlis the SQL dump (single-site, per-blog, or network depending on your mode).bodholdt-manifest.jsondescribes the mode, blog layout, plugin/WP versions, and tables dumped; the restore engine reads it first.- Your selected portions of
wp-content/themes/,wp-content/plugins/, andwp-content/uploads/. Must-use plugins and the standard drop-ins are in there when Plugins is selected. - When Core is selected:
wp-admin/,wp-includes/,wp-content/languages/, the WordPress files at your site root, and.htaccess, which is the start-up file most sites rely on to boot.wp-config.phpis never included. The backup zip is not encrypted, so keep your cloud folder private.
Security & privacy
- OneDrive credentials and OAuth tokens are encrypted at rest (Sodium preferred, AES-256-CBC with HMAC fallback).
- There is no license client in the build at all, so nothing checks a key or limits how many sites you use it on. Outside your own site, the plugin talks to two places: Microsoft, for your backups, and bodholdtlabs.com, for updates. The update check asks bodholdtlabs.com for the current version number, and the request carries your plugin version and your site address in its user agent and nothing else. I count those checks by site, to see how many sites run the plugin. When you install an update, it downloads from bodholdtlabs.com, and I count that download by file, version and time. To turn the update check off, add
add_filter( 'bodholdt_od_update_check_enabled', '__return_false' );to a must-use plugin. - All admin forms are protected by nonces and capability checks, backups are assembled in a staging directory outside your web root, and concurrent runs are blocked by atomic locks.
Troubleshooting
- “No OneDrive token.” On the plugin dashboard click Disconnect, then re-authorize the connection, unless the client secret has expired (see below). Tokens can expire if the site is inactive for long periods.
- Backups stopped after months of working? Your Azure client secret has most likely expired (Microsoft caps them at 24 months). Create a new client secret in Certificates & secrets, paste its Value into the plugin’s Settings tab and save. Reconnecting alone will not fix an expired secret. If you entered the expiry date, the plugin dashboard also says “Microsoft app secret expired on [date]. Backups stop until you paste a new secret.”
- White screen or fatal error after a restore. If a plugin crashes the site, rename that plugin’s folder via FTP (e.g.
wp-content/plugins/jet-engine→_jet-engine) to disable it, then log in and reactivate it. If every page returns a 500, check whether your.htaccessor.user.initells PHP to load a file on every request, and whether that file is on the site. - A restore silently fails with “Fetching download link…” disappearing. This usually means the staging directory isn’t writable. The plugin falls back automatically in two steps: the prepared directory under
/var/lib/, then a private directory in your system temp folder. Both sit outside your web document root, on purpose, because a staging directory inside the site is rejected by a security check. To pin a specific location, adddefine( 'BODHOLDT_OD_DIR', '/var/lib/bodholdt-staging/onedrive/' );to yourwp-config.php, using an absolute path outside your web root. Defining this constant turns the automatic fallback off. From then on it is the only staging path the plugin will use, so if it is missing or not writable by the user your web server runs as, backups and restores stop rather than falling back. Create the directory first, and make sure its parent exists and is writable by that same user: this plugin does not create the parent for you. - A backup failed. The plugin emails you the error with a suggested fix, and the Logs tab shows every backup with diagnosis hints.
- Backups seem delayed. Scheduled backups run via WP-Cron, which fires when someone visits your site. On very low-traffic sites, add a real server-side cron trigger.
Frequently asked questions
Do I need a paid Microsoft 365 subscription?
No. Every Microsoft account includes 5 GB of free OneDrive storage. For larger sites you can upgrade your OneDrive storage or use a Microsoft 365 subscription (which includes 1 TB).
Do I need a license key?
No, and there is no longer one to buy. The plugin is free in a single edition with no activation limit: full and incremental backups, scheduling, full restore, selective restore, an email after every backup attempt, and updates in your dashboard with no key to enter.
Will backups slow down my site?
No. Backups run in the background via WordPress cron; visitors don’t notice them.
How does incremental backup work?
The plugin keeps a manifest that records a SHA-256 fingerprint of every file the last full backup walked, and only uploads files whose fingerprint changed since then. The database is always exported in full, and you can force a full backup anytime from the Dashboard.
Can I restore to a different server?
Reinstall the plugin on the new server, connect the same Microsoft OneDrive account, and restore your latest backup from the cloud browser. (The standalone migration installer described in older versions is not part of this release.)
I have an older paid backup license. What happens to it?
Your backups, scheduled runs and restores all carry on. Two things in the old answer here were not true, and we would rather correct them than leave them up. First, the paid update channel was stood down when the paid editions were retired, so a paid build no longer receives updates through it. To keep getting updates, install the free edition from the product page: it is the same backup engine, it updates normally, and your existing archives stay exactly where they are. Second, if a paid license lapses, its Slack and Discord messages stop. That chat delivery now lives in Bodholdt Backup Pro, a separate paid companion, rather than in the free edition. If you want Slack or Discord messages from Bodholdt Backup Pro, install the free edition first. Backup Pro stays quiet for a cloud while an older paid build is active on it.
Is my data encrypted?
Your OneDrive credentials and OAuth tokens are encrypted at rest (Sodium preferred, AES-256-CBC with HMAC fallback). The backup files themselves are standard ZIP archives; if you want zip-level encryption, encrypt them yourself before they’re placed in wp-content.
Does this work with WordPress Multisite?
Yes. By default one backup captures the entire network (every blog plus shared tables), and restoring recreates the full layout. Network admins can switch to per-site mode for per-customer isolation; see Backups & Multisite above for the one thing to check on the network’s primary site. Settings are network-wide, so you configure them once.
Support
This plugin is free, and I support it the same way as everything else here: open a ticket on the Support page and I will answer, usually within a business day or two. Bug reports are always read.
The Long Keep (gamification)
The Long Keep is the calm layer of play for your OneDrive backups. The idea is the same as a night watch: reward the steady, scheduled protection that keeps your site safe.
- A clean-backup streak that grows with every successful scheduled run and resets if one fails, so it always tells the truth. Manual runs do not affect it.
- A live protection Shield gauge that reflects how current your last successful backup is.
- Levels and trophies for first backups, long streaks, and the total data you have protected.
The whole arcade is off by default, so the admin stays plain until you opt in, and it is free like the rest of the plugin. Turn it on any time from the Long Keep Arcade section of the plugin’s Settings. Sound effects are off by default, and animations respect your browser’s reduced-motion setting.
Everything the arcade tracks (your XP, level, streak, and trophies) is stored in your own WordPress database. Nothing is sent to us or to any third party.