# How to install and activate xSpeed

> Install from the plugin directory or a ZIP, and understand exactly what activation does — and what it deliberately does not do.

- Category: Getting Started
- Canonical: https://xspeedcache.com/docs/installing/

---

Installing xSpeed is an ordinary WordPress plugin install, and it takes a couple of minutes. This guide covers both routes — the plugin directory and a ZIP upload — and then the part worth reading carefully: what activation actually does to your site, and what it deliberately leaves alone.

---

## Requirements

- **WordPress 6.0 or newer.** Tested up to 7.1.
- **PHP 7.4 or newer.** Works on 7.4; 8.1+ is recommended and noticeably faster.
- **An administrator account.** You need the `manage_options` capability to install plugins and to open xSpeed's settings.

---

## Install from the WordPress plugin directory

The normal route, and the one that keeps you on automatic updates.

1. In your WordPress admin, go to **Plugins → Add New Plugin**.
2. Search for **xSpeed Cache**. Check the author reads **WPDeveloper** — several unrelated plugins have similar names.
3. Click **Install Now**, and then **Activate**.
4. You're redirected to the setup wizard. The plugin installs to `wp-content/plugins/xspeed/`.

---

## Install from a ZIP file

Use this for a specific version, for a site with no outbound access to WordPress.org, or to install **xSpeed Cache Pro**.

1. Download the `.zip` file — the free plugin from WordPress.org, or Pro from your WPDeveloper account.
2. Go to **Plugins → Add New Plugin → Upload Plugin**.
3. Choose the file and click **Install Now**.
4. Click **Activate Plugin**.

Pro is a second plugin that runs beside the free one rather than replacing it, so install the free plugin first and keep it active — Pro does nothing without it. Once both are active, enter your key under **xSpeed Cache → Settings → License**. [Free vs Pro — what's included](https://xspeedcache.com/docs/free-vs-pro/) covers how the two fit together.

---

## What happens when you activate

xSpeed is deliberately conservative on activation. It prepares the ground and then stops, because writing a cache drop-in and editing `wp-config.php` are changes that should follow a decision you made, not a button you clicked to make a plugin appear in a list.

In one request, it:

- **Creates the cache directory** — `wp-content/cache/xspeed/`, with a silence file so it can't be browsed — and installs a small table for speed-test and scan history.
- **Sets defaults**, but only on a genuinely fresh install. On a clear site you installed yourself that means the Balanced set: GZIP on, browser cache headers on, HTML and CSS minification on. If another plugin already owns the page cache — or has left its cache file behind — it instead writes an explicit *off* for every free on/off switch, so nothing about your markup or delivery changes. And if another plugin installed xSpeed on your behalf, everything stays off **except** page caching — that plugin was asked for site speed, so the cache is the one thing it may assume.
- **Flags the wizard redirect** — a one-shot marker consumed on your next admin page load.

> ⚠️ **When you install xSpeed yourself, activation does not install the cache drop-in, edit `wp-config.php`, or start caching.**
>
> `wp-content/advanced-cache.php`, the `define( 'WP_CACHE', true )` line and the `.htaccess` rewrite block are all written by the *enable page caching* action — from the wizard, the [Page Cache](https://xspeedcache.com/docs/page-cache/) panel, the top bar's master switch, or an AI agent. Until then your site serves exactly as it did before. The one exception is the install another plugin performed on your behalf, described above: there, activation switches page caching on straight away, and nothing else.

**Bulk activation is handled differently.** If you activated several plugins at once, the wizard redirect is skipped — pulling you out of that flow to a wizard is not what you asked for. The same applies to AJAX and cron requests, which have no page load to redirect; to anyone without administrator rights; to a site that has already completed the wizard; and to an install another plugin performed, which has its own onboarding that ours would interrupt. In every one of those cases the plugin is installed and working, you simply arrive at the dashboard instead.

One exception is worth knowing about, because it looks like a contradiction. During an **update**, WordPress runs deactivate → delete files → install → activate, which removes `advanced-cache.php` while your caching setting is still on. Activation notices that mismatch and puts the drop-in back, so an update never leaves you silently uncached.

---

## After activation

On a fresh install you land on the setup wizard automatically, on your first admin page load. It checks your environment, offers three starting points, and applies the one you pick — see [How to run the setup wizard](https://xspeedcache.com/docs/setup-wizard/).

If you'd rather skip it, the dashboard is under **xSpeed Cache** in the left menu, and every setting the wizard writes is available there. The wizard itself never goes away: it stays in the menu as **xSpeed Cache → Setup Wizard**, permanently re-runnable, at `wp-admin/admin.php?page=xspeed-onboarding`.

---

## Troubleshooting

**The setup wizard didn't open.** The redirect is a one-shot flag, and it's consumed even when it isn't used — so if you activated in bulk, over AJAX, or as a non-administrator, it's already spent. Nothing is wrong: open **xSpeed Cache → Setup Wizard** from the menu and run it whenever you like.

**Caching still isn't active.** That is the expected state after activation, not a fault — activation only turns caching on when another plugin installed xSpeed for you. Open the dashboard and use the **Caching** switch in the top bar, or run the wizard. If another plugin's `advanced-cache.php` is already in place, switching it on asks first and names the owner — confirm with **Take over and enable**. If it still refuses, the message names the reason: a cache file xSpeed can't read, a `wp-config.php` that isn't writable, or a `WP_CACHE` line already set to false.

**You're on nginx and hits are slower than expected.** Page caching works, but through the PHP drop-in rather than the server. nginx configuration lives outside WordPress, so xSpeed generates the block and asks you to paste it into your `server { }` and reload. Check with `curl -s -o /dev/null -D - https://yoursite.com/ | grep -i x-xspeed-cache` while logged out — see [Understanding cache HITs and MISSes](https://xspeedcache.com/docs/hits-and-misses/).

---

## Related

- [What is xSpeed Cache?](https://xspeedcache.com/docs/what-is-xspeed/)
- [How to run the setup wizard](https://xspeedcache.com/docs/setup-wizard/)
- [A tour of the xSpeed dashboard](https://xspeedcache.com/docs/dashboard-tour/)
