# Notifications utilize native system integration where supported

- **Pattern:** `ab-001370` (`extension-ux-performance.badge-notifications.native-notifications`)
- **Severity:** low
- **Lifecycle:** active
- **Last modified:** 2026-04-18
- **Canonical URL:** https://auditbuffet.com/patterns/ab-001370
- **License:** CC-BY-4.0 — attribute to AuditBuffet Pattern Catalog (https://auditbuffet.com/patterns/ab-001370)

## Why it matters

Cramming multi-item data into a newline-joined `type: 'basic'` message discards rich OS notification affordances — per-item titles, action buttons, progress bars, image thumbnails — that users expect from native apps on macOS, Windows, and ChromeOS. Worse, `requireInteraction: true` on informational notifications blocks the OS from auto-dismissing them, forcing users to manually dismiss every stale update. The extension feels second-class, and on ChromeOS it violates platform UX conventions that reviewers flag during Chrome Web Store submission.

## Severity rationale

Low because the extension still delivers information but with degraded ergonomics rather than a functional failure.

## Remediation

Use `type: 'list'` for multi-item notifications with one row per item, `type: 'progress'` for long-running operations, and `buttons` for actionable quick replies. Reserve `requireInteraction: true` only for time-critical alerts. In `background.js`:

```js
chrome.notifications.create({
  type: 'list',
  iconUrl: 'icons/48.png',
  title: '3 New Messages',
  message: '',
  items: [{ title: 'Alice', message: 'hi' }, { title: 'Bob', message: 'ok' }],
  buttons: [{ title: 'View All' }],
});
```

## Detection

- **ID:** `native-notifications`
- **Severity:** `low`
- **What to look for:** Examine `chrome.notifications.create` calls for notification type and feature usage. Check whether notifications use `type: 'list'` or `type: 'progress'` where semantically appropriate, rather than always defaulting to `type: 'basic'` with all information jammed into a single message string. Check for `buttons` arrays on notifications that could provide actionable quick-reply or dismiss options. Look for use of `requireInteraction: true` only on genuinely urgent notifications. Count all instances found and enumerate each.
- **Pass criteria:** Notifications use the appropriate `type` for their content (list items use `type: 'list'`, progress uses `type: 'progress'`). Actionable notifications include `buttons` for quick actions. `requireInteraction` is reserved for genuinely time-sensitive events. At least 1 implementation must be confirmed.
- **Fail criteria:** All notifications use `type: 'basic'` regardless of content structure. Multi-item notifications cram everything into `message` as a newline-joined string. `requireInteraction: true` appears on low-priority or informational notifications.
- **Skip (N/A) when:** The extension does not use `chrome.notifications` API.
- **Detail on fail:** Describe the missed integration. Example: `"'5 new emails' notification uses type:'basic' with all senders joined in the message — type:'list' with individual items would be more readable"` or `"requireInteraction:true on informational update notifications — blocks OS notification dismissal unnecessarily."`
- **Remediation:** Use richer notification types where appropriate:

  ```js
  // For multiple items, use type:'list'
  chrome.notifications.create({
    type: 'list',
    iconUrl: 'icons/icon48.png',
    title: '3 New Messages',
    message: '',
    items: [
      { title: 'Alice', message: 'See you at 3pm?' },
      { title: 'Bob', message: 'PR approved' },
      { title: 'Carol', message: 'Meeting rescheduled' },
    ],
    buttons: [{ title: 'View All' }],
  });
  ```

---

Taxons: user-experience

HTML version: https://auditbuffet.com/patterns/ab-001370
