@capawesome/capacitor-badge

中文文档
8.0.4发布于 2026/10/08MITTypeScriptESM + CJS零依赖构建来源已验证近 30 天下载 89.2万

Capacitor plugin to access and update the badge number of the app icon on Android, iOS, and Web.

原始使用文档
文档目录42 节
  1. Features
  2. Use Cases
  3. Compatibility
  4. Demo
  5. Installation
  6. Android
  7. iOS
  8. Configuration
  9. Examples
  10. Usage
  11. Get the current badge count
  12. Set the badge count
  13. Increase or decrease the badge count
  14. Clear the badge count
  15. Check if badges are supported
  16. Check and request permissions
  17. API
  18. get()
  19. set(...)
  20. increase()
  21. decrease()
  22. clear()
  23. isSupported()
  24. checkPermissions()
  25. requestPermissions()
  26. Interfaces
  27. Type Aliases
  28. Quirks
  29. FAQ
  30. Why is the badge not showing on my Android device?
  31. Can the plugin display an Android notification badge (dot) …
  32. Does the badge count persist after a reboot or app restart?
  33. How can I automatically clear the badge when the app is res…
  34. Why does checkPermissions() always return granted on Androi…
  35. Why does clearing the badge also remove my notifications on…
  36. Does this plugin work on the Web?
  37. Can I use this plugin with Ionic, React, Vue or Angular?
  38. Related Plugins
  39. Newsletter
  40. Changelog
  41. License
  42. Credits

Capacitor Badge Plugin

Capacitor plugin to access and update the badge number of the app icon.

Features

The Capacitor Badge plugin is one of the most complete app icon badge solutions for Capacitor apps. Here are some of the key features:

  • 🖥️ Cross-platform: Supports Android, iOS, and Web (PWA).
  • 🔢 Badge management: Get, set, increase, decrease, and clear badge counts.
  • 💾 Persistent badges: Badge count persists after reboot or app restart.
  • 🔄 Auto-clear option: Automatically reset counter when resuming the app.
  • 🔐 Permission handling: Check and request badge display permissions.
  • ⚙️ Configurable: Customize persistence and auto-clear behaviors.
  • 🤝 Compatibility: Works alongside the App Icon and Firebase Cloud Messaging plugins.
  • 🔁 Up-to-date: Always supports the latest Capacitor version.

Missing a feature? Just open an issue and we'll take a look!

Use Cases

The Badge plugin is typically used to show a count on the app icon that reflects pending items, for example:

  • Unread messages: Show the number of unread chat messages or emails on the app icon.
  • Pending notifications: Keep the badge in sync with the notifications the user has not yet seen.
  • Open tasks: Display the number of open to-dos, reminders, or items in a shopping cart.
  • Automatic reset: Clear the counter automatically when the user resumes the app using the autoClear configuration option.

Compatibility

Plugin VersionCapacitor VersionStatus
8.x.x>=8.x.xActive support
7.x.x7.x.xDeprecated
6.x.x6.x.xDeprecated
5.x.x5.x.xDeprecated

Demo

A working example can be found here: robingenz/capacitor-plugin-demo

Installation

You can use our AI-Assisted Setup to install the plugin. Add the Capawesome Skills to your AI tool using the following command:

npx skills add capawesome-team/skills --skill capacitor-plugins

Then use the following prompt:

 Use the `capacitor-plugins` skill from `capawesome-team/skills` to install the `@capawesome/capacitor-badge` plugin in my project.

If you prefer Manual Setup, install the plugin by running the following commands and follow the platform-specific instructions below:

npm install @capawesome/capacitor-badge
npx cap sync

Android

Variables

If needed, you can define the following project variable in your app’s variables.gradle file to change the default version of the dependency:

  • $shortcutBadgerVersion version of me.leolin:ShortcutBadger (default: 1.1.22)

This can be useful if you encounter dependency conflicts with other plugins in your project.

iOS

Privacy manifest

Add the NSPrivacyAccessedAPICategoryUserDefaults dictionary key to your Privacy Manifest (usually ios/App/PrivacyInfo.xcprivacy):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>NSPrivacyAccessedAPITypes</key>
    <array>
      <!-- Add this dict entry to the array if the file already exists. -->
      <dict>
        <key>NSPrivacyAccessedAPIType</key>
        <string>NSPrivacyAccessedAPICategoryUserDefaults</string>
        <key>NSPrivacyAccessedAPITypeReasons</key>
        <array>
          <string>CA92.1</string>
        </array>
      </dict>
    </array>
  </dict>
</plist>

Configuration

These configuration values are available:

PropTypeDescriptionDefault
persistbooleanConfigure whether the plugin should restore the counter after a reboot or app restart. Only available on Android and iOS.true
autoClearbooleanConfigure whether the plugin should reset the counter after resuming the application. On iOS, this will also clear all notifications. Only available on Android and iOS.false

Examples

In capacitor.config.json:

{
  "plugins": {
    "Badge": {
      "persist": true,
      "autoClear": false
    }
  }
}

In capacitor.config.ts:

/// <reference types="@capawesome/capacitor-badge" />

import { CapacitorConfig } from '@capacitor/cli';

const config: CapacitorConfig = {
  plugins: {
    Badge: {
      persist: true,
      autoClear: false,
    },
  },
};

export default config;

Usage

The following examples show how to get, set, increase, decrease, and clear the badge count, check whether badges are supported, and check and request permissions.

Get the current badge count

Read the current badge count. The count won't be lost after a reboot or app restart:

import { Badge } from '@capawesome/capacitor-badge';

const get = async () => {
  const result = await Badge.get();
  return result.count;
};

Set the badge count

Set the badge count to a specific value. On iOS, setting the count to 0 will remove the badge and also clear all notifications:

import { Badge } from '@capawesome/capacitor-badge';

const set = async (count: number) => {
  await Badge.set({ count });
};

Increase or decrease the badge count

Increment or decrement the badge count by one, for example when a new message arrives or is read:

import { Badge } from '@capawesome/capacitor-badge';

const increase = async () => {
  await Badge.increase();
};

const decrease = async () => {
  await Badge.decrease();
};

Clear the badge count

Remove the badge from the app icon. On iOS, this will also clear all notifications:

import { Badge } from '@capawesome/capacitor-badge';

const clear = async () => {
  await Badge.clear();
};

Check if badges are supported

Check whether the badge count is supported on the current device, for example since not every Android launcher supports badges:

import { Badge } from '@capawesome/capacitor-badge';

const isSupported = async () => {
  const result = await Badge.isSupported();
  return result.isSupported;
};

Check and request permissions

Check and request the permission to display the badge:

import { Badge } from '@capawesome/capacitor-badge';

const checkPermissions = async () => {
  const result = await Badge.checkPermissions();
};

const requestPermissions = async () => {
  const result = await Badge.requestPermissions();
};

API

get()

get() => Promise<GetBadgeResult>

Get the badge count. The badge count won't be lost after a reboot or app restart.

Default: 0.

Returns: Promise<GetBadgeResult>


set(...)

set(options: SetBadgeOptions) => Promise<void>

Set the badge count.

ParamType
optionsSetBadgeOptions

increase()

increase() => Promise<void>

Increase the badge count.


decrease()

decrease() => Promise<void>

Decrease the badge count.


clear()

clear() => Promise<void>

Clear the badge count.

On iOS, this will remove the badge and also clear all notifications.


isSupported()

isSupported() => Promise<IsSupportedResult>

Check if the badge count is supported.

Returns: Promise<IsSupportedResult>


checkPermissions()

checkPermissions() => Promise<PermissionStatus>

Check permission to display badge.

Returns: Promise<PermissionStatus>


requestPermissions()

requestPermissions() => Promise<PermissionStatus>

Request permission to display badge.

Returns: Promise<PermissionStatus>


Interfaces

GetBadgeResult

PropType
countnumber

SetBadgeOptions

PropTypeDescription
countnumberThe badge count to set. On iOS, setting the count to 0 will remove the badge and also clear all notifications.

IsSupportedResult

PropType
isSupportedboolean

PermissionStatus

PropTypeDescription
displayPermissionStatePermission state of displaying the badge.

Type Aliases

PermissionState

'prompt' | 'prompt-with-rationale' | 'granted' | 'denied'

Quirks

On Android there is no official API to set a badge, so not all launchers support badges. This plugin uses ShortcutBadger, which relies on vendor-specific mechanisms. All supported launchers are listed there. On stock Android launchers, such as the Pixel Launcher, no badge is displayed.

On Web, the app must run as an installed PWA (in the taskbar or dock).

FAQ

Why is the badge not showing on my Android device?

Android provides no official API to set a badge on the launcher icon. This plugin therefore uses ShortcutBadger under the hood, which relies on vendor-specific mechanisms offered by some manufacturers (such as Samsung, Xiaomi, HTC and Sony). Only the launchers listed as supported launchers can display the badge. On stock Android launchers, most notably the Pixel Launcher, no badge is displayed. You can use the isSupported() method to check whether badges are supported on the current device.

Can the plugin display an Android notification badge (dot) instead?

No. Since Android 8.0, the launcher displays a notification badge only while the app has an active notification. The badge is derived from that notification and disappears as soon as the notification is dismissed, so it cannot be set independently of one. On stock Android it is also a dot without a count. If your app already displays notifications, the badge is shown automatically without any plugin call.

Does the badge count persist after a reboot or app restart?

Yes, by default the badge count is restored after a reboot or app restart. You can disable this behavior by setting the persist configuration option to false, see the Configuration section.

How can I automatically clear the badge when the app is resumed?

Set the autoClear configuration option to true to reset the counter after resuming the application. Note that on iOS, this will also clear all notifications. See the Configuration section for an example.

Why does checkPermissions() always return granted on Android and Web?

Only iOS requires a permission to display a badge. On Android and Web no permission is needed, so the permission state is always granted.

Why does clearing the badge also remove my notifications on iOS?

On iOS, calling clear() or setting the badge count to 0 removes the badge and also clears all notifications. This is platform behavior and cannot be changed by the plugin.

Does this plugin work on the Web?

Yes, but the app must run as an installed PWA (in the taskbar or dock). Also make sure to check whether the browser supports badges using the isSupported() method.

Can I use this plugin with Ionic, React, Vue or Angular?

Yes, the plugin is framework-agnostic. It works in any Capacitor app regardless of the web framework, including Ionic with Angular, React, or Vue, as well as plain JavaScript projects.

Newsletter

Stay up to date with the latest news and updates about the Capawesome, Capacitor, and Ionic ecosystem by subscribing to our Capawesome Newsletter.

Changelog

See CHANGELOG.md.

License

See LICENSE.

Credits

This plugin is based on the Capacitor Badge plugin. Thanks to everyone who contributed to the project!

版本与发布记录

@capawesome/capacitor-badge 共发布 15 个版本,首次发布于 2022/08/05;过去 12 个月发布了 6 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
8.0.4latest2026/10/081 个月前
8.0.32026/09/022 个月前
8.0.22026/04/166 个月前
8.0.12026/02/198 个月前
8.0.02025/12/1710 个月前
7.0.0-dev.1765885034dev2025/12/1610 个月前

关于 @capawesome/capacitor-badge 的常见问题

@capawesome/capacitor-badge 是什么?

Capacitor plugin to access and update the badge number of the app icon on Android, iOS, and Web.

如何安装 @capawesome/capacitor-badge?

在项目目录运行 npm install @capawesome/capacitor-badge,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@capacitor/core(>=8.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@capawesome/capacitor-badge 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@capawesome/capacitor-badge 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@capawesome/capacitor-badge 可以商用吗?

@capawesome/capacitor-badge 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@capawesome/capacitor-badge 的下载量有多少?

根据 npm 官方下载统计,@capawesome/capacitor-badge 在 2026/10/09 – 2026/11/07 这 30 天内被下载 892,099 次,日均约 29,737 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@capawesome/capacitor-badge 还在维护吗?

最新版本 8.0.4 发布于 2026/10/08(1 个月前);至今共发布 15 个版本,其中过去 12 个月发布了 6 个;首次发布于 2022/08/05。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。