PulseForUmbraco 1.0.0
dotnet add package PulseForUmbraco --version 1.0.0
NuGet\Install-Package PulseForUmbraco -Version 1.0.0
<PackageReference Include="PulseForUmbraco" Version="1.0.0" />
<PackageVersion Include="PulseForUmbraco" Version="1.0.0" />
<PackageReference Include="PulseForUmbraco" />
paket add PulseForUmbraco --version 1.0.0
#r "nuget: PulseForUmbraco, 1.0.0"
#:package PulseForUmbraco@1.0.0
#addin nuget:?package=PulseForUmbraco&version=1.0.0
#tool nuget:?package=PulseForUmbraco&version=1.0.0
Pulse for Umbraco
Your Umbraco site's operational health monitor. Pulse scans your content, configuration, performance, and security — giving you an actionable health score and one-click remediation from inside the backoffice.
✨ Features
🏥 Health Scanning & Scoring
- 40+ built-in rules across 5 categories — Content Health, Site Setup, Performance, Access & Security, and Content Quality
- Overall health score (0–100) with per-category breakdowns
- Severity levels — OK, Advisory, Attention, and Urgent — so you know what to fix first
- Real-time scan progress — see which rule is being evaluated and track completion
🔧 One-Click Remediation
- Empty recycle bins, disable stale users, delete unused document/data types — directly from the dashboard
- Per-rule rescan to verify your fix worked
- "How to Fix" guidance — contextual remediation steps in a sidebar for every rule
🎯 Custom Scans
- Pick specific rules and run a targeted scan without affecting your persisted results
- Save and manage presets — create named rule selections for repeatable scans
- Results are read-only and do not trigger notifications or affect your score history
📊 History & Trend Analysis
- Score sparkline tracks your site health over time
- Trend alerts detect score drops, sustained declines, and new critical issues
- Up to 90 historical scan snapshots
⏰ Scheduled Scans
- Choose a preset (every 6h, 12h, daily, weekly) or set a custom interval
- Configure preferred scan time and day of week
- Manage the schedule from the backoffice Settings view — changes take effect immediately
🔔 Notifications
- Email digests when your score drops below a threshold or new urgent issues appear
- Weekly digest emails — automated summary of your site health delivered on schedule
- Backoffice banner alerts — dismissible per-notification
- Configurable cooldown to avoid inbox flooding
- Test email endpoint to verify SMTP before relying on alerts
👤 Issue Assignments & Collaboration
- Assign issues to backoffice users directly from the drilldown view
- Email notifications sent to the assignee on assignment
- Inline feedback panel — add comments and track progress per issue
- To-do list — each user can view their open assignments
- Comment editing and deletion with author/admin permissions
🚫 Suppressions
- Suppress entire rules or individual items with an optional reason and expiry
- Suppressed items are excluded from scoring — your score reflects what matters
🏆 Achievements
- Earn badges by running scans, fixing issues, exporting reports, completing the tour, and more
- Progress tracker with categorised achievement cards
- Unlocked automatically as you use Pulse
🌐 Multi-Site Support
- Site picker in the dashboard for installations with multiple root content nodes
- Per-site scans run on demand and are scoped to the selected site
📈 Site Stats
- At-a-glance content, media, and member statistics for your Umbraco installation
- Useful context alongside your scan results
📥 CSV Export
- Download a full scan report as CSV — share with your team or archive for compliance
🎓 Guided Tour
- Built-in interactive tour walks new users through the dashboard on first visit
📋 Requirements
| Requirement | Version |
|---|---|
| Umbraco | 17+ |
| .NET | 10+ |
| Database | SQL Server or SQLite |
🚀 Installation
Install via NuGet:
dotnet add package PulseForUmbraco
Or via the Package Manager Console:
Install-Package PulseForUmbraco
Pulse automatically creates its database tables on first startup — no manual migration steps required.
⚙️ Configuration
Add the following section to your appsettings.json to customise Pulse's behaviour. All settings are optional — sensible defaults are applied.
{
"Umbraco": {
"Pulse": {
"Enabled": true,
"ScanIntervalHours": 24,
"InitialDelaySeconds": 60,
"BatchSize": 500,
"LargeMediaThresholdMB": 5,
"MaxContentDepth": 7,
"MaxDocTypeProperties": 50,
"StaleUserDays": 90,
"StaleContentDays": 180,
"ThinContentWordThreshold": 300,
"ReadabilityMinScore": 30,
"MetaDescriptionAliases": "metaDescription,seoMetaDescription,description",
"ListViewContentThreshold": 50,
"TrendAlertScoreDropThreshold": 10,
"TrendAlertConsecutiveDeclines": 3,
"TrendAlertSnapshotWindow": 10,
"Schedule": {
"Preset": "Daily",
"CustomIntervalHours": 24,
"PreferredHourUtc": 2,
"PreferredDayOfWeek": "Sunday"
},
"Notifications": {
"EmailEnabled": false,
"EmailRecipients": "",
"EmailFrom": "",
"ScoreThreshold": 70,
"NotifyOnNewCritical": true,
"NotifyOnScoreDrop": true,
"ScoreDropThreshold": 10,
"BackofficeBannerEnabled": true,
"CooldownHours": 24
}
}
}
}
Configuration reference
| Setting | Default | Description |
|---|---|---|
Enabled |
true |
Enable or disable the background scanner |
ScanIntervalHours |
24 |
Fallback interval between scans |
InitialDelaySeconds |
60 |
Delay before the first scan after startup |
BatchSize |
500 |
Max content items processed per batch |
LargeMediaThresholdMB |
5 |
Media files larger than this are flagged |
MaxContentDepth |
7 |
Content nodes deeper than this are flagged |
MaxDocTypeProperties |
50 |
Doc types with more properties are flagged |
StaleUserDays |
90 |
Users inactive longer than this are flagged |
StaleContentDays |
180 |
Published pages not updated within this are flagged |
ThinContentWordThreshold |
300 |
Pages with fewer words are flagged as thin content |
ReadabilityMinScore |
30.0 |
Flesch-Kincaid score below which content is flagged |
ListViewContentThreshold |
50 |
Doc types with more children without list view are flagged |
Schedule presets
| Preset | Interval |
|---|---|
Every6Hours |
Every 6 hours |
Every12Hours |
Every 12 hours |
Daily |
Once per day at the preferred hour |
Weekly |
Once per week on the preferred day and hour |
Custom |
Uses CustomIntervalHours |
Disabled |
No automatic scanning |
Tip: The schedule can also be managed from the Settings tab in the Pulse backoffice section — changes take effect immediately without restarting.
🏗️ Scan Rules
Content Health
| Rule | Description |
|---|---|
| Unused Document Types | Doc types with zero published content |
| Orphaned Media | Media items not referenced by any content |
| Missing Templates | Doc types configured without an assigned template |
| Recycle Bin Bloat | Excessive items in content/media recycle bins |
| Excessive Nesting | Content nodes nested deeper than the configured threshold |
| Empty Content Nodes | Published pages with no property values |
| Unused Data Types | Data types not used by any doc type |
| Missing Alt Text | Media images without alt text |
| Broken Internal Links | Content referencing deleted or unpublished pages |
| Never Published Content | Content nodes that have never been published |
| Unpublished Content | Previously published content that is now unpublished |
| Unpublished Changes | Published content with pending draft changes |
| Empty Media Folders | Media folders containing no items |
| Unused Compositions | Compositions not referenced by any document, media, or member type |
Site Setup
| Rule | Description |
|---|---|
| Environment & Debug Mode | Hosting environment is set to Development on a non-dev server |
| Hostname & Domain Bindings | Root content nodes without hostnames or orphaned domain assignments |
| Missing Mandatory Cultures | Variant content missing one or more mandatory language cultures |
| Custom 404 Page | No custom 404 error page configured or referenced page is missing |
| SMTP Email Delivery | No SMTP settings configured for outbound email |
| HTTPS Enforcement | Site is not enforcing HTTPS via UseHttps or domains use HTTP scheme |
| Log Retention Policy | Serilog file-sink log retention is not configured, risking unbounded disk growth |
Performance
| Rule | Description |
|---|---|
| Oversized Media Files | Media files exceeding the configured size threshold |
| Content Version Cleanup | Version cleanup policy is not enabled or nodes have excessive versions |
| Overloaded Document Types | Doc types whose property count exceeds the configured threshold |
| Duplicate Media Files | Identical media files uploaded multiple times (filename + size match) |
| List View Not Enabled | Content nodes with many children but no list view on their doc type |
| Page HTTP Status Codes | Pages returning unexpected HTTP status codes (e.g., 404, 500) |
Access & Security
| Rule | Description |
|---|---|
| User Password Policy Strength | Back-office user password policy does not meet minimum requirements |
| Member Password Policy Strength | Front-end member password policy does not meet minimum requirements |
| Unsafe Upload Extensions | Allowed file upload extensions that could enable remote code execution |
| TLS Certificate Expiry | TLS/SSL certificate for any configured hostname expiring within the configured threshold |
| Dormant User Accounts | Back-office users inactive beyond the configured threshold |
| Sensitive File Exposure | Sensitive files accessible via the web server |
| Security Response Headers | Missing or weak HTTP security headers (HSTS, X-Content-Type-Options, X-Frame-Options, Referrer-Policy, and more) |
| Outdated NuGet Packages | NuGet packages with known vulnerabilities or outdated versions |
| External Script Audit | Script tags loading from external domains — a supply-chain attack vector |
| Excessive Admin Accounts | Too many users in the Administrators group |
| Cookie Security Attributes | Missing or weak cookie security attributes (Secure, HttpOnly, SameSite) |
| Content Security Policy | Missing or misconfigured Content-Security-Policy header and key CSP directives |
Content Quality
| Rule | Description |
|---|---|
| Stale Content | Published pages not updated within the configured threshold |
| Thin Content | Pages with fewer words than the configured threshold |
| Readability | Content with poor Flesch-Kincaid readability scores |
| Missing Meta Description | Pages missing a meta description tag in rendered HTML |
| Missing Open Graph Tags | Pages missing og:title, og:description, or og:image meta tags for social sharing |
🖥️ Dashboard Tabs
| Tab | Description |
|---|---|
| Overview | Health score ring, severity bar, category cards, filterable rules table, and trend sparkline |
| Content Health | Focused view of content/structure rules |
| Site Setup | Configuration and setup rules |
| Performance | Performance-related rules |
| Access & Security | User and access control rules |
| Content Quality | Content freshness, readability, and SEO rules |
| Custom Scan | Pick individual rules, run targeted scans, and save/load presets |
| Suppressions | Manage all active rule/item suppressions |
| History & Trends | Score history chart and trend degradation alerts |
| Settings | Scan schedule and notification settings configuration |
👥 Authors
- Paul de Quant — @pauldequant
- Jon Roberts
Built with ❤️ for the Umbraco community
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Microsoft.EntityFrameworkCore (>= 10.0.3)
- Microsoft.EntityFrameworkCore.Sqlite (>= 10.0.3)
- Microsoft.EntityFrameworkCore.SqlServer (>= 10.0.3)
- Umbraco.Cms.Api.Common (>= 17.1.0 && < 18.0.0)
- Umbraco.Cms.Api.Management (>= 17.1.0)
- Umbraco.Cms.Web.Common (>= 17.1.0)
- Umbraco.Cms.Web.Website (>= 17.1.0 && < 18.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.0 | 41 | 3/16/2026 |