# Compatibility

## WordPress

- **Minimum:** WordPress 5.3
- **Tested up to:** WordPress 6.x
- **Multisite:** Supported

## PHP

- **Minimum:** PHP 5.6
- **Recommended:** PHP 8.0+
- **Tested:** PHP 5.6 through 8.2

## Browsers

AjaxPress requires modern browser APIs:
- `window.postMessage`
- `history.pushState` / `popstate`
- `element.animate()` (Web Animation API)
- `fetch` API

**Supported browsers:**
- Chrome 60+
- Firefox 60+
- Safari 12+
- Edge 79+ (Chromium-based)

**Not supported:**
- Internet Explorer (any version)
- Legacy Edge (pre-Chromium)

## Themes

AjaxPress is compatible with all WordPress themes. The iframe-based architecture ensures theme scripts and styles work without modification.

**Tested themes include:**
- Astra
- GeneratePress
- Kadence
- Divi
- OceanWP
- Flavor starter themes
- All FSE/Block themes

## Page Builders

Full compatibility with all major page builders:

- Elementor
- Bricks Builder
- Beaver Builder
- WPBakery Page Builder
- Oxygen Builder
- Breakdance
- Gutenberg/Block Editor

Page builder editor modes bypass SPA navigation automatically (they use admin URLs).

## Cache Plugins

AjaxPress works alongside server-side cache plugins:

- WP Rocket
- LiteSpeed Cache
- W3 Total Cache
- WP Super Cache
- Autoptimize
- Cloudflare (standalone)

The SPA loads full HTML pages, so server-cached pages work correctly. When using AjaxPress's Cloudflare edge caching alongside another cache plugin, both cache layers operate independently.

## Form Plugins

Forms work within SPA navigation -- submissions are intercepted and handled via the background iframe:

- Contact Form 7
- WPForms
- Gravity Forms
- Fluent Forms
- Formidable Forms
- Ninja Forms

## SEO Plugins

SEO plugins work normally because:
- Bots are excluded from SPA (detected and served normal pages)
- Each page retains its own `<head>` with meta tags inside the iframe
- `history.pushState` updates the URL for client-side analytics

Compatible with:
- Yoast SEO
- Rank Math
- All in One SEO
- The SEO Framework

## eCommerce

WooCommerce and other eCommerce plugins work out of the box. For payment pages with complex JavaScript, consider adding them to the exclusion list:

```
/checkout
/cart
/my-account
```

## Known Considerations

### JavaScript Lifecycle

Plugins that rely on `DOMContentLoaded` or `window.load` events firing on every page load will re-trigger naturally because each iframe gets a fresh document. No special handling is needed.

### Fixed/Sticky Elements

Elements positioned with `position: fixed` inside the iframe are fixed relative to the iframe viewport, not the browser window. For truly fixed elements that persist across navigations, use the persistence feature (`data-ajaxpress-persist`).

### WebSocket Connections

WebSocket connections established inside an iframe are maintained as long as that iframe exists. When the iframe is swapped during navigation, the connection is closed. For persistent WebSocket connections, establish them in the parent frame context.

## Server Requirements

### Web Servers

| Server | Status |
|--------|--------|
| Nginx | Fully supported |
| Apache | Fully supported |
| LiteSpeed | Fully supported |
| IIS | Supported |

No special server configuration is required. AjaxPress uses standard HTTP requests and WordPress REST API.

### Cloudflare Edge Caching

Requires a Cloudflare account with:
- Active zone for the domain
- API token with Workers Scripts, Workers Routes, and Cache Purge permissions
- Workers plan (free tier is sufficient)
