Reports errors from a WordPress site to a self-hosted ovos console error-monitoring instance:
- PHP errors — warnings, notices and fatals (uncaught exceptions included), batched into a single POST from the shutdown handler after the response went out. Fire-and-forget: every failure is swallowed, the HTTP call has a hard 1 s timeout — reporting can never break or noticeably slow the site.
- JavaScript errors — the bundled browser client captures window errors, unhandled rejections and failed fetch/XHR calls, with breadcrumbs and an optional masked DOM snapshot (replay-lite).
- Context — request variables (redacted before sending), logged-in user id, WordPress version, active theme, and source attribution: each error is tagged with the plugin or theme its file lives in.
Try the live demo → — a public instance filled with synthetic errors. No login, no sign-up: browse the grid, expand a row for the full backtrace and request context, filter the issues, look at the monitors. Changes are disabled, triage (check, star, resolve) is not — press ? for the keyboard map.
One console for everything you run, on infrastructure you control:
- Live — errors from PHP, browser JavaScript, WordPress, Node.js and OpenTelemetry services land the moment they happen; an error storm is ingested through Redis Streams without slowing the app that reported it.
- Issues, not noise — the same error a thousand times is one row with a count, fingerprinted into an issue with an open → resolved → regressed lifecycle.
- Trace correlation — a failed browser request and the PHP error behind it share one trace id, so a broken request lines up across services in a click.
- Uptime — dead-man's-switch heartbeats for cron jobs and health-URL probes, so you hear about the job that stopped running before your users do.
- Alerting — priority-gated, throttled email and chat notifications, per project.
- Ask your AI — point Claude or any MCP client at the console and ask about your errors, or hit
◇ AI EXPLAINon any row for a plain-English root-cause read.
Self-hosted, so stack traces and user data never leave your infrastructure — and no per-event bill that grows with your traffic. More on the product page; if you would rather not run it yourself, we host it for you from Vienna.
- WordPress 6.0+
- PHP 8.1+ (the
Requires PHPheader prevents activation on older hosts) - an ovos console instance reachable from this site
The plugin is not on wordpress.org — it installs from the release zip on this repository and then keeps itself up to date (see Automatic updates below).
- Download
ovos-console.zip— that link always resolves to the newest release; the releases page has the older ones and the changelog. - Go to Plugins → Add New Plugin → Upload Plugin, choose the zip, install and activate.
wp plugin install https://github.com/ovos/console-client-wordpress/releases/latest/download/ovos-console.zip --activateThe zip carries an ovos-console/ prefix, so it installs under that directory
name and later updates swap it cleanly. Configure it in the same breath —
wp config set writes the constants into wp-config.php, which take
precedence over the settings page and lock the corresponding fields:
wp config set OVOS_CONSOLE_ENABLED true --raw
wp config set OVOS_CONSOLE_URL https://console.example
wp config set OVOS_CONSOLE_API_KEY 'the project api_key'
wp config set OVOS_CONSOLE_JS_KEY 'the project js_key'Updating, and turning on unattended updates:
wp plugin update ovos-console
wp plugin auto-updates enable ovos-consoleTo install one specific version — a rollback, or pinning a fleet:
wp plugin install https://github.com/ovos/console-client-wordpress/releases/download/v0.4.6/ovos-console.zip --forceClone into wp-content/plugins — the directory name must be ovos-console:
cd wp-content/plugins
git clone git@github.com:ovos/console-client-wordpress.git ovos-consoleActivate the plugin in wp-admin. Update it with git pull, and leave
auto-updates off for this copy: applying an update from wp-admin replaces the
whole directory with the release zip, .git included.
From 0.4.5 on the plugin keeps itself current, with no updater plugin, license
key or update server involved. Its header declares this repository as its
Update URI, so WordPress core's own update flow (5.8+) asks the plugin for
its latest GitHub release: new versions appear under Dashboard → Updates
and install like any directory plugin, straight from the release zip.
- One-click, from Dashboard → Updates or the Plugins screen, or
wp plugin update ovos-console. - Unattended — flip Enable auto-updates in the Plugins list (
wp plugin auto-updates enable ovos-console) and core's twice-daily cron installs new versions on its own. - The check is fire-and-forget: an offline host, a rate-limited GitHub API or a missing asset just means "no update visible right now", never an error on your dashboard.
- A successful answer is cached for twelve hours. Check again on the updates screen bypasses core's own cache; to also drop the plugin's,
wp transient delete ovos_console_latest_release.
Sites still on 0.4.4 or older need one last manual install of a newer version; everything after that arrives through the updater.
- In your console instance, create a project (PROJECTS tab) and note its secret api_key and public js_key.
- For browser errors, enable JS errors on the project and allowlist this site's exact origin (
scheme://host[:port], e.g.https://www.example.com) in the project's JS origins. - In wp-admin go to Settings → ovos console, enter the console URL and both keys, tick Enabled, and save.
- Click Send test error — the settings page reports the console's response, and the error appears in the console grid within a second.
Every value lives under Settings → ovos console and can alternatively be set as a constant in wp-config.php — a defined constant wins and locks the corresponding field in the UI (handy for deploy-time configuration):
| Setting | Constant | Default | |
|---|---|---|---|
| Enabled | OVOS_CONSOLE_ENABLED |
false |
master switch for both PHP and browser reporting |
| Console URL | OVOS_CONSOLE_URL |
— | instance base URL, e.g. https://console.example |
| API key | OVOS_CONSOLE_API_KEY |
— | the project's secret api_key (PHP errors) |
| Log level | OVOS_CONSOLE_LOG_LEVEL |
4 |
send errors with syslog priority ≤ this (0 emergency … 7 debug) |
| Report 404s | OVOS_CONSOLE_REPORT_404 |
false |
front-end not-found requests as access events — rate-limited, static assets ignored, never turned into issues |
| Release label | OVOS_CONSOLE_RELEASE |
— | optional deploy label (git sha, version), max 64 chars |
| Report JS errors | OVOS_CONSOLE_JS_ENABLED |
true |
loads the bundled browser client on the front end |
| JS key | OVOS_CONSOLE_JS_KEY |
— | the project's public js_key (browser errors) |
| Trace correlation | OVOS_CONSOLE_JS_TRACE |
true |
W3C traceparent header on the page's same-origin fetch/XHR calls |
| DOM snapshot | OVOS_CONSOLE_SNAPSHOT |
false |
masked DOM snapshot with the first error per page load |
| Inline snapshot styles | OVOS_CONSOLE_SNAPSHOT_STYLES |
false |
embed the page's CSS so snapshots render styled |
| Load in wp-admin | OVOS_CONSOLE_JS_ADMIN |
false |
also report browser errors from wp-admin and the login page |
Example wp-config.php block:
define('OVOS_CONSOLE_ENABLED', true);
define('OVOS_CONSOLE_URL', 'https://console.example');
define('OVOS_CONSOLE_API_KEY', '...');
define('OVOS_CONSOLE_JS_KEY', '...');
define('OVOS_CONSOLE_RELEASE', '2026.07.13');TLS verification of the ingest call is on by default. For a console behind a self-signed certificate (intranet instances), disable it from an mu-plugin or your theme:
add_filter('ovos_console_sslverify', '__return_false');ovos_console()->captureException($e, ['orderId' => 7]);
ovos_console()->captureMessage('checkout step skipped', 4); // priority 4 = warningBoth are safe to call unconditionally — when the plugin is disabled or unconfigured the calls are no-ops.
- The repository root is the plugin directory — for local development, symlink/junction it into
wp-content/plugins/ovos-console. assets/console-client.jsis a bundled copy of the console's browser client (intentionally ES5 — do not modernize); it is synced from the console repository on client releases, never edited here.readme.txtis the wordpress.org-format readme; this file is for GitHub.- Releasing: push a
v*tag whose version matches the plugin header and readme.txt stable tag (e.g.git tag v0.1.0 && git push origin v0.1.0) — the release workflow verifies the versions, builds the zip viagit archiveand publishes a GitHub release withovos-console.zipattached.
