# Options Reference

All options are stored in the WordPress `wp_options` table with the `ajaxpress_` prefix. Options marked with (Pro) require an active license.

## Navigation

| Option | Type | Default | Description |
|--------|------|---------|-------------|
| `enable_navigation` | bool | `true` | Enable SPA navigation on the frontend |
| `enable_admin_spa` | bool | `false` | Enable SPA navigation in wp-admin (Pro) |
| `enable_prefetch` | bool | `false` | Prefetch pages on link hover (Pro) |
| `prefetch_on_mousedown` | bool | `false` | Prefetch on mousedown instead of hover (Pro) |
| `prefetch_ignore_visited` | bool | `false` | Skip prefetch for already-visited URLs (Pro) |
| `disable_for_admins` | bool | `false` | Disable SPA for logged-in administrators (Pro) |
| `block_keyboard_reload` | bool | `false` | Block F5, Ctrl+R, Cmd+R reload shortcuts (Pro) |

## Content Exclusions

| Option | Type | Default | Description |
|--------|------|---------|-------------|
| `ignore_elements` | string | `''` | CSS selectors for persistent elements, one per line (Pro) |
| `ignore_links` | string | `''` | URL patterns to exclude from SPA, one per line (Pro) |

## Loader Type

| Option | Type | Default | Description |
|--------|------|---------|-------------|
| `loader_type` | string | `'progressbar'` | Active loader: `progressbar`, `spinner`, or `none` |

## Progress Bar

| Option | Type | Default | Description |
|--------|------|---------|-------------|
| `progressbar` | bool | `true` | Progress bar enabled (legacy, use `loader_type`) |
| `progressbar_position` | string | `'top'` | Position: `top` or `bottom` |
| `progressbar_class` | string | `''` | Custom CSS class (Pro) |
| `progressbar_id` | string | `''` | Custom CSS ID (Pro) |
| `progressbar_color` | string | `'#3b82f6'` | Bar color (hex) (Pro) |
| `progressbar_weight` | string | `'normal'` | Thickness: `thin` (3px), `normal` (7px), `large` (12px), `custom` (Pro) |
| `progressbar_weight_custom` | int | `7` | Custom thickness in pixels (Pro) |
| `progressbar_opacity` | int | `100` | Opacity percentage (0-100) (Pro) |
| `progressbar_animate` | bool | `true` | Wave animation (Pro) |
| `progressbar_animation_speed` | string | `'2'` | Animation speed in seconds (Pro) |
| `progressbar_auto_hide` | bool | `true` | Auto-hide after loading (Pro) |

## Spinner

| Option | Type | Default | Description |
|--------|------|---------|-------------|
| `loader` | bool | `false` | Spinner enabled (legacy, use `loader_type`) |
| `loader_layout` | string | `'icon_only'` | Layout: `icon_only`, `icon_left`, `icon_top`, `icon_right`, `icon_bottom`, `text_only` (Pro) |
| `loader_class` | string | `''` | Custom CSS class (Pro) |
| `loader_id` | string | `''` | Custom CSS ID (Pro) |
| `animate_cursor` | bool | `false` | Show loading cursor (Pro) |
| `cursor_mode` | string | `'wait'` | Cursor style: `wait` or `progress` (Pro) |
| `disable_mouse_clicks` | bool | `false` | Disable clicks while loading (Pro) |
| `loader_image` | string | `''` | Spinner image URL (Pro) |
| `loader_image_size` | int | `40` | Image size in pixels (Pro) |
| `loader_image_rotation` | bool | `false` | Rotate the image (Pro) |
| `loader_gap` | int | `10` | Gap between image and text (Pro) |
| `loader_message` | string | `'Loading...'` | Loading text message (Pro) |
| `loader_color` | string | `'#000000'` | Text color (Pro) |
| `loader_font_family` | string | `'inherit'` | Font family (Pro) |
| `loader_font_weight` | string | `'normal'` | Font weight (Pro) |
| `loader_font_size` | int | `14` | Font size in pixels (Pro) |
| `loader_letter_spacing` | int | `0` | Letter spacing in pixels (Pro) |
| `loader_background` | string | `'#ffffff'` | Overlay background color (Pro) |
| `loader_background_opacity` | int | `80` | Overlay opacity percentage (Pro) |

## Scroll

| Option | Type | Default | Description |
|--------|------|---------|-------------|
| `scroll_to_top` | bool | `true` | Scroll to top after navigation (Pro) |

## Content Animation

| Option | Type | Default | Description |
|--------|------|---------|-------------|
| `content_animation` | bool | `true` | Enable page transition animation (Pro) |
| `content_animation_name` | string | `'fade'` | Animation: `fade`, `slide`, `scale`, `flip` (Pro) |
| `content_animation_duration` | string | `'0.3'` | Duration in seconds (Pro) |

## Custom CSS

| Option | Type | Default | Description |
|--------|------|---------|-------------|
| `custom_css` | string | `''` | Custom CSS injected into pages (Pro) |

## Cloudflare

| Option | Type | Default | Description |
|--------|------|---------|-------------|
| `cf_auto_purge` | bool | `false` | Auto-purge cache on content changes (Pro) |
| `cf_bypass_patterns` | string | `''` | URL patterns to bypass cache, newline-separated (Pro) |
| `cf_bypass_cookies` | string | `''` | Cookie names to bypass cache, newline-separated (Pro) |

## Internal Options

These are managed internally and not exposed in the settings UI:

| Option | Type | Description |
|--------|------|-------------|
| `ajaxpress_license` | array | License data: `key`, `status`, `plan_name`, `plan_type`, `expires_at` |
| `ajaxpress_cf_api_token` | string | Encrypted Cloudflare API token |
| `ajaxpress_cf_cache_enabled` | bool | Cloudflare cache is deployed |
| `ajaxpress_cf_zone_id` | string | Cloudflare zone ID |
| `ajaxpress_cf_zone_name` | string | Cloudflare zone domain name |
| `ajaxpress_cf_route_id` | string | Cloudflare worker route ID |
| `ajaxpress_cf_route_pattern` | string | Route pattern (e.g., `example.com/*`) |
| `ajaxpress_cf_account_id` | string | Cloudflare account ID |
| `ajaxpress_diagnostic_permission` | string | Diagnostic opt-in: `allowed`, `denied`, or empty |
| `ajaxpress_deactivate_feedbacks` | array | Stored deactivation feedback entries |
| `ajaxpress_migrated_version` | string | Last completed migration version |

## User Meta

| Meta Key | Type | Description |
|----------|------|-------------|
| `ajaxpress_tour_completed` | bool | Onboarding tour completed |
| `ajaxpress_tour_mode` | string | Tour mode: `quick` or `extended` |
| `ajaxpress_tour_dismissed_at` | int | Timestamp when tour was dismissed |
