{"id":381161,"date":"2026-10-13T07:33:14","date_gmt":"2026-10-13T07:33:14","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/sanctuary-ranger-crash-recorder\/"},"modified":"2026-10-13T07:18:08","modified_gmt":"2026-10-13T07:18:08","slug":"sanctuary-ranger-crash-recorder","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/sanctuary-ranger-crash-recorder\/","author":23521188,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.3.1","stable_tag":"trunk","tested":"7.0.7","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Sanctuary Ranger Crash Recorder","header_author":"Rachel M. Harrison Coaching","header_description":"A flight recorder for your site. Keeps a rolling log of recent activity, freezes a snapshot when a fatal error happens, alerts you, and can optionally quarantine a repeatedly crashing plugin.","assets_banners_color":"365d5a","last_updated":"2026-10-13 07:18:08","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/rachel-m-harrison.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":41,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":[],"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3743144,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3743144,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3743144,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3743144,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":[],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[5790,2679,22682,5603,8541],"plugin_category":[54,59],"plugin_contributors":[270094],"plugin_business_model":[],"class_list":["post-381161","plugin","type-plugin","status-publish","hentry","plugin_tags-crash","plugin_tags-debugging","plugin_tags-fatal-error","plugin_tags-monitoring","plugin_tags-troubleshooting","plugin_category-security-and-spam-protection","plugin_category-utilities-and-tools","plugin_contributors-rachelmharrisoncoaching","plugin_committers-rachelmharrisoncoaching"],"banners":{"banner":"https:\/\/ps.w.org\/sanctuary-ranger-crash-recorder\/assets\/banner-772x250.png?rev=3743144","banner_2x":"https:\/\/ps.w.org\/sanctuary-ranger-crash-recorder\/assets\/banner-1544x500.png?rev=3743144","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/sanctuary-ranger-crash-recorder\/assets\/icon-128x128.png?rev=3743144","icon_2x":"https:\/\/ps.w.org\/sanctuary-ranger-crash-recorder\/assets\/icon-256x256.png?rev=3743144","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>When a WordPress site hits a fatal error, you usually get a stack trace and nothing about what led up to it. Sanctuary Ranger keeps a short rolling log of recent activity and freezes a snapshot the moment a fatal error happens.<\/p>\n\n<p><strong>What it records (cheap events only):<\/strong><\/p>\n\n<ul>\n<li>Which WordPress milestone the request reached (plugins_loaded, init, template_redirect and so on)<\/li>\n<li>Outbound HTTP calls: host, path, status and duration. Query strings are never stored.<\/li>\n<li>PHP warnings, notices and deprecations (file, line, message)<\/li>\n<li>Failed emails (error message only)<\/li>\n<li>Request method, path, PHP and WordPress version<\/li>\n<li>The list of active plugins and the theme name (stored in the snapshot on your own site, used to build a replay)<\/li>\n<li>Which plugin, theme or WordPress core file the error came from<\/li>\n<\/ul>\n\n<p><strong>What it never records:<\/strong> cookies, authentication headers, POST bodies, query-string values, email contents or recipients.<\/p>\n\n<p><strong>Optional features (all off by default):<\/strong><\/p>\n\n<ul>\n<li>Email alert when a fatal error is recorded (max one every 10 minutes)<\/li>\n<li>Webhook alert: sends a one-line summary to an HTTPS URL you provide<\/li>\n<li>Auto-quarantine: deactivates a plugin you have explicitly ticked if it causes repeated fatal errors within a time window you choose<\/li>\n<li>Replay in WordPress Playground: build a throwaway copy of the crash environment to experiment in. Clearly labelled as approximate<\/li>\n<li>Early recorder (optional): one small must-use file that starts the recorder before other plugins, installed and removed with a button<\/li>\n<li>Hook trace (developer option): also records the last WordPress hooks that ran in the crashing request. It adds some overhead, so leave it off on busy sites<\/li>\n<\/ul>\n\n<p>Sanctuary Ranger does not prevent crashes or fix them. It helps you find the cause faster.<\/p>\n\n<p><strong>Optional Pro add-on<\/strong><\/p>\n\n<p>Everything described above is free and fully working. A separate add-on, Sanctuary Ranger Pro, is sold on rachel-m-harrison.com and adds crash grouping, Slack, Discord and Microsoft Teams alert formats, and a weekly digest email. It is installed as its own plugin and needs a license key ($39 per year for one site). This plugin contains no locked features and works the same with or without it.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin contacts no external service by default. If you click \"Open in Playground\" on a snapshot, your browser opens https:\/\/playground.wordpress.net with a blueprint in the link. The blueprint contains the PHP version and the WordPress.org slugs of your active plugins, and it stays in the part of the address after \"#\", which browsers do not send to servers. Playground then downloads those plugins from WordPress.org. This plugin itself sends nothing, and nothing happens until you click. Playground terms and privacy policy: https:\/\/wordpress.org\/about\/privacy\/<\/p>\n\n<p>The \"Go Pro\" button on the Tools &gt; Sanctuary Ranger screen is a plain link to https:\/\/rachel-m-harrison.com\/rmh-shop\/?buy=sanctuary-ranger-pro. Nothing is sent to that address unless you click it.<\/p>\n\n<p>If you enter a webhook URL in Tools &gt; Sanctuary Ranger, the plugin sends a POST request containing a one-line error summary and your site URL to that address when a fatal error occurs. You choose the destination; the plugin does not use any third-party service of its own.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code> or install it from the Plugins screen.<\/li>\n<li>Activate it.<\/li>\n<li>Open Tools &gt; Sanctuary Ranger to view snapshots and adjust settings.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20is%20the%20data%20stored%3F\"><h3>Where is the data stored?<\/h3><\/dt>\n<dd><p>In a protected folder inside your uploads directory. By default events are kept in two rotating files of about 512 KB each, and the 20 newest crash snapshots are kept. Both sizes can be changed in the settings. Uninstalling the plugin deletes everything.<\/p><\/dd>\n<dt id=\"can%20i%20try%20it%20in%20wordpress%20playground%3F\"><h3>Can I try it in WordPress Playground?<\/h3><\/dt>\n<dd><p>Yes. Recording, snapshots, the crash screen box and quarantine all work in Playground. Email cannot be sent from Playground, webhooks may be blocked by the browser, and recorded data lasts only for the Playground session.<\/p><\/dd>\n<dt id=\"does%20replay%20copy%20my%20site%3F\"><h3>Does Replay copy my site?<\/h3><\/dt>\n<dd><p>No. It rebuilds the PHP version and the active plugins that can be installed from WordPress.org, at their latest versions. Your content, settings, custom or paid plugins and the request that crashed are not copied, so the crash may not reproduce. It is a quick throwaway place to experiment.<\/p><\/dd>\n<dt id=\"what%20does%20the%20early%20recorder%20change%3F\"><h3>What does the early recorder change?<\/h3><\/dt>\n<dd><p>Only if you click \"Install early recorder\" does it add one small file, wp-content\/mu-plugins\/sanctuary-ranger-early.php, which starts this plugin before other plugins. It does nothing while this plugin is deactivated. \"Remove early recorder\" or deleting this plugin removes it.<\/p><\/dd>\n<dt id=\"are%20there%20hooks%20for%20developers%3F\"><h3>Are there hooks for developers?<\/h3><\/dt>\n<dd><p>Yes. The <code>bbcr_snapshot_saved<\/code> action fires after a snapshot is saved (arguments: snapshot ID, snapshot data). The <code>bbcr_webhook_body<\/code> filter changes the webhook payload before it is sent. Others: <code>bbcr_max_snapshots<\/code>, <code>bbcr_buffer_max_bytes<\/code>, <code>bbcr_max_events<\/code>, <code>bbcr_alert_throttle<\/code>.<\/p><\/dd>\n<dt id=\"are%20any%20features%20limited%20or%20locked%3F\"><h3>Are any features limited or locked?<\/h3><\/dt>\n<dd><p>No. Every feature in this plugin is included and free. The only limits are the storage settings above, which control disk space. Sanctuary Ranger Pro is a separate paid add-on with additional features (crash grouping, Slack\/Discord\/Teams alert formats and a weekly digest); it does not unlock or remove anything here.<\/p><\/dd>\n<dt id=\"what%20does%20sanctuary%20ranger%20pro%20add%3F\"><h3>What does Sanctuary Ranger Pro add?<\/h3><\/dt>\n<dd><p>Crash grouping (identical errors counted together with first seen and last seen), Slack, Discord and Microsoft Teams formats for the webhook alert, and a weekly digest email. It is a separate plugin that needs this one and a license key.<\/p><\/dd>\n<dt id=\"can%20auto-quarantine%20break%20my%20site%3F\"><h3>Can auto-quarantine break my site?<\/h3><\/dt>\n<dd><p>It only deactivates plugins you tick, and only after repeated fatal errors. Do not tick plugins that must stay running, such as payment or checkout plugins.<\/p><\/dd>\n<dt id=\"does%20it%20catch%20errors%20from%20plugins%20that%20load%20before%20it%3F\"><h3>Does it catch errors from plugins that load before it?<\/h3><\/dt>\n<dd><p>It records fatal errors from any code that runs after Sanctuary Ranger loads, including earlier-loading plugins' fatals at shutdown, but it cannot log events from before it was loaded.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.3.1<\/h4>\n\n<ul>\n<li>Fix: a syntax error on the snapshot screen's replay help text that could stop the plugin from loading.<\/li>\n<li>New: a Settings link on the Plugins screen.<\/li>\n<li>New: a short, plain note about the optional Pro add-on on the Sanctuary Ranger screen. Nothing in this plugin is locked.<\/li>\n<li>Tested up to WordPress 7.0.<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>New: \"Replay in WordPress Playground\" on every crash snapshot. Builds an approximate copy (PHP version plus the active plugins that are on WordPress.org) in a throwaway Playground site. Open it with one click or download the blueprint.<\/li>\n<li>New: \"Likely cause\" now recognises themes, must-use plugins and WordPress core, not only plugins.<\/li>\n<li>New: optional early recorder, a single must-use file you install or remove with a button. Never installed automatically.<\/li>\n<li>Snapshots now store the list of active plugins and the theme name, on your site only, so a replay can be built.<\/li>\n<\/ul>\n\n<h4>0.2.1<\/h4>\n\n<ul>\n<li>Added developer hooks: the bbcr_snapshot_saved action and the bbcr_webhook_body filter.<\/li>\n<li>Webhook alerts now use wp_safe_remote_post, which refuses private network addresses.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>New: optional hook trace (developer setting, off by default) records the last hooks that ran in the crashing request.<\/li>\n<li>Works in WordPress Playground: recording no longer depends on file locking, and the screen explains Playground limits.<\/li>\n<\/ul>\n\n<h4>0.1.8<\/h4>\n\n<ul>\n<li>Snapshot retention, log size, quarantine threshold and window are now fully configurable. No arbitrary caps.<\/li>\n<li>Added filters: bbcr_max_snapshots, bbcr_buffer_max_bytes, bbcr_max_events, bbcr_alert_throttle.<\/li>\n<\/ul>\n\n<h4>0.1.7<\/h4>\n\n<ul>\n<li>Clearer wording in the quarantine settings.<\/li>\n<\/ul>\n\n<h4>0.1.6<\/h4>\n\n<ul>\n<li>Renamed to Sanctuary Ranger Crash Recorder. Settings and data carry over.<\/li>\n<\/ul>\n\n<h4>0.1.5<\/h4>\n\n<ul>\n<li>New: \"Latest crash\" banner at the top of the Sanctuary Ranger screen.<\/li>\n<\/ul>\n\n<h4>0.1.4<\/h4>\n\n<ul>\n<li>Crash screen box and snapshots now show a short error headline; the stack trace is stored separately.<\/li>\n<li>Server paths are trimmed from messages, traces and file locations.<\/li>\n<\/ul>\n\n<h4>0.1.3<\/h4>\n\n<ul>\n<li>Fix: snapshots now show the milestone where the crash happened instead of \"shutdown\".<\/li>\n<li>Fix: each request's summary line is now timestamped at the start of the request.<\/li>\n<\/ul>\n\n<h4>0.1.2<\/h4>\n\n<ul>\n<li>New: administrators see a Sanctuary Ranger box with the error and a snapshot link on the crash screen.<\/li>\n<\/ul>\n\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>Fix: fatal errors are now recorded when WordPress's own fatal error handler ends the request.<\/li>\n<li>Fix: uninstall cleanup no longer depends on GLOB_BRACE.<\/li>\n<li>Replace error_reporting() call.<\/li>\n<li>Add status line to the Sanctuary Ranger screen.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Records what led up to a fatal error, alerts you, and can optionally deactivate a repeatedly crashing plugin.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/381161","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=381161"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/rachelmharrisoncoaching"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=381161"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=381161"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=381161"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=381161"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=381161"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=381161"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}