Changelog
See what's new in Oh Dear.
Improvements
-
Updated the Lighthouse checker to correctly audit HTTP sites when requested. This avoids automatic upgrades to HTTPS caused by modern browsers and ensures more accurate results.
-
Significantly improved marketing site performance:
- Converted over 100 SVGs to sprites for faster rendering.
- Reduced overall JavaScript bundle size.
- Removed unused libraries from marketing pages, including Chart.js.
- Authentication-related scripts now load only on login and registration pages.
- Replaced Axios with the browser’s native
fetch()API. - Removed the Gill Sans webfont, reducing unnecessary font loading.
- Applied multiple frontend optimizations to improve load speed and responsiveness.
-
Improved menu performance by only initializing interactive components when needed, reducing page-load overhead.
-
Enhanced blog performance and SEO:
- Fixed Open Graph metadata for blog posts.
- Improved image loading with preloading and prefetching.
- Added missing author, timestamp, and alt-text metadata.
- Ensured SEO tags are consistently passed to the main blog views.
-
Improved user seeding logic so new Oh Dear users always land on the Oh Dear team after login, instead of a reseller team.
Fixes
- Fixed Lighthouse checks incorrectly failing when disabled metrics or categories exceeded thresholds.
- Fixed a metadata issue where the monitor name was used instead of the site name in blog Open Graph data.
New
- Added support for mobile Lighthouse checks, allowing performance audits to better reflect mobile user experiences.
Improvements
- Improved sitemap URL reachability to ensure more reliable sitemap checks.
- The Public API now lets you set the new_links_only and force_crawl_urls broken link settings when creating or updating monitors.
Fixes
- Fixed an issue where cron titles could overflow the page width in the monthly report UI.
New
- Added Grok support to the AI checker.
Improvements
- Oh Dear is now compatible with PHP 8.5.
- The AI checker now shows a cost warning when selecting an hourly check frequency.
- Updated documentation for clarity and accuracy.
Fixes
- Preserved query strings in Status Page history and secret update links.
- Fixed Status Page history links to consistently use relative URLs.
- Fixed an issue in the Status Page template editor where typed text did not fully appear while editing.
- Fixed a broken link in the “How to configure maintenance windows” documentation.
New
- Added an anomaly detection Slack alert to flag potential worldwide issues when an unusually high number of notifications are being sent.
- Added new Claude models to the AI checker.
- Launched a new Careers section on the site.
Improvements
- Improved the AI checker browser session to return clear JSON validation errors instead of redirecting.
- Truncated large AI checker JSON outputs to keep results readable; users are guided to screenshots for visual verification when needed.
- Fine-tuned AI checker prompts to reduce token usage.
- Reduced the maximum token limit to 30,000.
- Cleaned up AI checker HTML output by trimming unnecessary SVGs, images, and extra markup.
Fixes
- Fixed a Passkeys issue caused by a missing configuration value after a package upgrade.
- Performance response time is now correctly included in the Monitors API response.
Improvements
- Simplified how VAT is handled in Stripe / Cashier.
- Enabled caching on status badges. Previously, when session middleware was active, Cloudflare ignored cache-control headers due to set-cookie behavior; this is now resolved.
- The used-ips endpoint is now cached through Cloudflare for improved performance.
- Sitemap payloads are now always encoded as UTF-8 to ensure correct display in notifications.
- Optimised sitemap generation memory usage to avoid OOM issues.
Fixes
- Corrected Japanese translations on status pages.
- Custom headers are now correctly sent during scheduled sitemap runs.
- Fixed a UI issue in the monthly uptime report email.
- Resolved a problem where the performance summary always returned “Error.”
- Request Timeline: fixed errors when totalTime was 0 and corrected percentage calculations.
- Lighthouse notification settings no longer overwrite frequency_* values.
- Fixed rounding issues for Lighthouse metric values in both notifications and the UI.
- Updated default metric thresholds for Lighthouse notifications.
- Prevented notifications from sending during an active maintenance period.
- Resolved false positive “problem fixed” events for skipped health checks
- The crawler now correctly reports URLs with new lines in the HTTP Host header as invalid.
New
- Added longer notification snooze options, including 6 months and 1 year.
Improvements
- Our robots.txt crawler now sends the correct headers.
- Disabling the scheduled task check no longer deletes its cron definitions.
- Application Health checks no longer validate SSL certificates, since SSL validation is already handled by the Certificate Health check.
Fixes
- Fixed a broken toggle in the DNS monitor settings.
- Fixed a server error that occurred when creating a Status Page update template with a very long title.
New
- Added support for multiple Lighthouse servers per continent to improve performance and regional accuracy.
- Improved compatibility with password managers by adding a well-known passkey endpoint.
- Added a Slack alert that triggers whenever the peak monitor count is updated.
Improvements
- Lighthouse checks are now dispatched hourly instead of daily. The scheduler now correctly determines whether a Lighthouse check has run recently, ensuring checks aren’t skipped when queue processing takes longer than expected.
New
- Added an option for resellers to allow managed team users to create, update, and delete monitors.
- The Status page now shows the full update history, not just the last 7 days.
Improvements
- Updated reseller documentation to clearly explain the different available user roles.
Fixes
- Fixed an issue where CLS input fields in Lighthouse settings did not accept decimal values.
- Adjusted sorting on the Broken Links report so ignored links now appear at the bottom of the list, making new or active issues easier to find.
New
- Added a request waterfall timeline to uptime checks, providing clearer insight into each stage of request execution.
- Added AI monitoring to the Oh Dear documentation features page.
- Introduced a feature allowing resellers to remove managed teams.
Improvements
- Improved performance records ingestion, resulting in faster data display across the UI.
- Updated copy across multiple sections: DNS, Broken Links, Lighthouse, and Uptime Monitoring pages, for clarity and consistency.
- On the Broken Links report UI, newly discovered links now appear at the top of the list, ensuring they are prioritized over ignored ones.
- Added a JavaScript client example to the MCP server documentation.
Bug Fixes
- Fixed an issue that broke the UI when updating notification throttling and frequency settings.
- Fixed an issue where, if two monitors went down simultaneously on the status page, only one monitor’s updates were displayed.
New
- Teams can now choose custom plans, providing more flexibility in managing subscriptions.
Improvements
- Improved uptime charts and the preview charts on the monitor list. Charts now correctly display when uptime data includes sub-millisecond values, instead of appearing as a flat line.
- Enhanced documentation for clarity.
New
- Added support for Stripe metered billing for resellers.
- Skipped non-unique URL checks in image sitemaps.
Improvements
- Refactored scheduled task logs:
- Logs are now retained for 45 days.
- At least 10 pingFinished entries are always kept.
- Better handling of pingStarting/pingFinished pairs.
- Improved scheduled task validation, only form fields relevant to the selected cron type are now validated.
- Refined UI across multiple sections for enhanced usability and visual consistency.
- Ensured all documentation categories are now included in the mobile menu.
- Added average packet loss to the uptime chart tooltip and fixed sub-millisecond display precision.
Bugfixes
- Fixed an issue where the secondary location tab showed incorrect HTTP response headers.
- Added unique wire keys to prevent input leakage on Uptime, Notifications, and Broken Links settings pages.
New
- Added a new UI section showcasing all our third-party integrations, everything you can connect to Oh Dear in one place.
- Added a visible meta payload in scheduled task details so users can easily see when there was an issue during execution.
Improvements
- The uptime secondary checker now runs from the same continent as the primary one, improving accuracy for users with regional geo-blocking and ensuring compliance for EU-based users who require checks to stay within their region.
- Added an “AI setup” option in the monitor creation flow. It’s currently in closed beta, with a “Coming soon” notice shown for all other users.
Improvements
- Improved UI on the monitor list, removing the small chart stutter that happened during poll refreshes.
- Polished the uptime settings interface for a cleaner experience.
- Uptime buckets on the status page are now timezone-aware.
- Status page queries have been optimized to load much faster.
Fixes
- Fixed an issue in the Crawler for URLs that contained .. (dot-dot) syntax.
- Fixed minor styling inconsistencies across the blog.
- Fixed an issue with the throttle_failed_interval_unit in Notification Settings that caused incorrect throttling behavior for some users.
Improvements
- in the uptime results we now show results from both uptime checkers, should the first one fail
- on the billing screen, you can now see your invoices without having to go to the Stripe portal
- added a OpenAPI spec to our API docs
- performance improvements
- fix bugs around whitelisting broken URLs
- building AI monitoring
- launched Request Mirror
- lauched DNS info
Improvements
Big performance improvements to our website, dashboard and uptime checks. more details
Major new features
- We've added 🏓 ping and 🔌 TCP Port monitoring. See: Introducing Ping & TCP port monitoring
- you can now customize the frequency of the checks more details
Updates
- we've published a new major version of our SDK
Gearing up for a big feature update that introduces Ping & TCP monitoring early next week 👀
This week, we introduced an option to prevent a status page from being index by search engines.
Meanwhile, we're also hard at work polishing the upcoming Ping / TCP monitor. We're now testing this extensively in our staging environment.
Improvements
- we've added notification logs: https://ohdear.app/news-and-updates/introducing-our-new-notification-logs
Meanwhile we're also focussing on launching our Ping / TCP checks
Improvements
- we've added a new uptime check location: Stockholm 🇸🇪
Improvements
- we are working on adding support for ping and TCP monitoring. You'll find some more info in this blog post.
- we slightly adjusted the layout of the app: we now use Inter as the base font.
Fixes
- we'll now deleted configured scheduled jobs monitors when the cron check is disabled
Improvements
- a new "Detected Certificates" tab was added to the certificate health check screen. This tab will show all certificates we dedected for a site.
- we added a troubleshooting screen for lighthouse checks
- add graph was adding to the lighthouse result history
- on the new "Usage" screen you can now see how much sites / scheduled jobs you are using against your plan limits
- for the PHP developers amongst you: you'll be happy to know our code base has reached PHPStan level 6 💪
- show application health client error deails in application health report alert message
- add named windows to 'start-maintenance' api endpoint
- add Cloudflare email script link to global broken links whitelist
- complete static analysis coverage for the entire application
Fixes
- small styling fixes
- fixed the 'domain' section in monthly reports for sites with unsupported RDAP TLDs
- fix seo meta tags for docs
- render correct site count when 'sites with issues' tab selected
- fix internal errors when handling partial payments
Improvements
- you can now name a maintaince period, both in our UI and via our API
- we've improved the perceived performance of the list of sites: we first render placeholders, so the users get a fast response, and then replace those with the actual data as soon as it is loaded.
- we can now notify you via Google Chat
- we now accept payments via Revolut
- our registration page has been streamlined
- we now mention our available payment methods on the pricing page and in the FAQ
- our internal workflow to publish the changelog you are now reading has been improved
Fixes
- ensure it is clear which things are clickable, by adding the cursor-pointer CSS class to those elements
- all broken links on the marketing website are fixed
- our crawler checks are scheduled more reliably
- we now correctly clean up old historical data
Improvements
- add additional (and standardise) url validation
- move uptime summary below uptime chart
Internal
- continuous improvements to static analysis coverage
- bug fixes
Fixes
- apply all custom headers to application health check
- apply correct host header checks for status pages and GTM scripts
Improvements
- restored uptime summary component in uptime/performance results
- add retries and delays when calling third-party APIs during monitoring
- increased static analysis level for internal testing
Fixes
- fix run result alerts in multiple check components
- clarify run result errors in multiple check components
- fixed performance chart scaling issues
- improved exception handling in checks and reports
- other bug fixes
Improvements
- updates to uptime redesign
- updates to check report page alert cards
Fixes
- fixed a an issue where performance metrics were sometimes not being stored for offline sites
Improvements
- automatically disable lighthouse reports that error (or time out) three times in a row an alert the team owner
- streamlined onboarding for new teams making it easier and faster to create your first site
Fixes
- added clearer alert text to distinguish between SSL certificate and domain-related subjects
- only use Google Tag Manager for Oh Dear domains on status pages
Internals
- removed backend dependencies
- fix dependency and build warnings for front-end assets
- the team is making final touches to an uptime and performance redesign (coming soon!)
Improvements
- redesigned and simplified Oh Dear blog
- added monthly report settings to API
- added tag filters to site API
Fixes
- added x.com to list of crawler ingore list defaults
- fixed API notification permissions issues
Improvements
- added support for passkey authentication
- added API support for snoozing to individual cron and health check items
- added support for monthly site settings via API
- internal admin updates to help customer support create custom pricing for enterprise users
- internal admin updates tracking cancellation reasons to understand customer usage
- removed unused team check history (site check history is still available)
Fixes
- fixed an issue with login via passkey authentication
- cleaned up site snooze history UI to clearly show active tabs
Improvements
- added performance charts and tables to monthly site report
- added lighthouse report summary to monthly site report
- internal reporting, guides and docs to help with support
Fixes
- fixed 'ignore' broken link issue with long URLs
Improvements
- Added changelog RSS feed
- Speed improvements to dashboard and performance graphs
Behind the scenes
- Removed all code related to new ping endpoint
- Fixed an issue with deleted site data not executing on schedule
- Fixed Clickhouse managed database issues (compute and sharding)
- Optimised Clickhouse ingress and queries for performance reporting
New features
- On the snooze screen of a check, we now display the history when the check has been snoozed
- We've activated new onboarding and offboarding email flows
Behind the scenes
- All of the uptime and performance statistics have been moved from MySQL to ClickHouse, unlocking future improvements
- By leveraging parallel testing, we made our test suite run 3x faster on GitHub Actions
Fixes
- Fixed a bug where times were not displayed in the correct timezone on the scheduled jobs log
- We’ve added help text on various notification screens, making them easier to use
- Our status page now gets automatically updated, even if the uptime check is snoozed
- We’ve improved the error handling of our DNS checker, making it more reliable
- The sitemap checker can now correctly process empty sitemaps
- We increased the maximum run time of the sitemap checkers, enabling checking larger sitemaps
- A bug was fixed that prevented status pages from being automatically refreshed
Improvements
🐘 We performed a couple of upgrades and we're now running our entire service on PHP 8.4 and Laravel 12 🥳
Improvements
- When a site is considered offline because of too many redirects, we add a visual indicator to the UI that shows where in the redirect process the limit was reached
- Add datetime tooltips for uptime & scheduled tasks, to more clearly show UTC/server/user timezones
Fixes
- Bugfix timestamp for scheduled task notifications not properly showing
- Allow longer application health check URLs on input validation
Internals
- Better insights & notifications to subscription updates
New features
- Allow toggling to only receive new broken links notifications (only when we detect that there are new broken links compared to the previous run)
Fixes
- Fixed some missing translations on certificate detail pages
Improvements
- New and improved ping.ohdear.app is now processing incoming traffic, around 5x faster than the old system 🎉
Fixes
- Fixed performance chart on dashboard rendering backwards in edge cases
- Bugfix custom thresholds for certificate expiration monitoring
Improvements
- Extended the Broken Links detail pages with fine-grained "Solutions", offering insights & actionable tips to resolve the detected problems
- Added ability to override robots.txt when crawling, allowing "force crawl" and "force do not crawl" URL options
- Tweaked blog layout for minor improvements
- Better internal management of our testimonials
- Applied response-caching for all marketing pages of the site (server-side rendering from 500ms -> 100ms)
Fixes
- Applied smarter rate limiting & retry logic when deliver bulk notifications to the same destination (ie: same Slack channels)
- Fixed dark-mode styling on the homepage for small top-banner missing CSS
- Fixed performance issue on uptime check pages not loading when sites were down for > 24hrs
- Fixed the "Feature announcements" posts on the blog not sorting properly
Improvements
- Automated deployments to staging & production for new ping-beta endpoint
- Updated layout for the blog
- Finished changes to the laravel-schedule-monitor package to include a default API URL and optional different ping endpoint
- Added caching to our Status Pages to better handle surges in traffic
- Updated Telegram Notification setup instructions for clarity
Fixes
- Fixed wrong IP for the New York Lighthouse server being reported in the IPs Oh Dear uses
Improvements
- Fixed message when certificates expire, to show actual time remaining before expiry instead of "soon"
- Affiliate page updated
- Introduction of this Changelog section 🥳
- Internal improvements to our helpdesk/support integrations
- Clarified the setup instructions for Telegram Notifications
Improvements
- Pass-through IP address for ping-beta customers
- Allow local testing of ping callbacks
- Show Sitemap and Sitemap URL issues separately
- Filter invalid Markdown tags when configuring a Status Page
- Replace bespoke cookie banner with Cookiebot
Fixes
- Prevent status update requests as a user is typing
Improvements
- Allow a sites' Friendly Name to be configured straight in the Add Site modal
- Ensure the check names are always human readable
- Expose Sitemap crawling issues more clearly to the end-user
- Add API documentation for creating status pages & status page sites
- Upgraded from Tailwind CSS 3 to Tailwind CSS 4
Beta releases
- A newly architected ping architecture for receiving cron jobs/scheduled tasks pingbacks is ready for internal testing
Activity
- The team is attending LaraconEU 2025 to meet with clients & like-minded developers 🥳
Improvements
- Redesigned the "Add Site" screen for simplicity, advanced options are now hidden by default
- Add download and uptime exports per site
- Add daily downtime summary export
- Add sync status page sites api endpoint
- Add create status page api endpoint
- Add delete status page site api endpoint
Fixes
- Fix for handling of bounced e-mail notifications