{"_id":"@capawesome/capacitor-app-icon","_rev":"4-97ecf3e682fda5b6f6b5a4298b4696f3","name":"@capawesome/capacitor-app-icon","dist-tags":{"latest":"0.1.2"},"versions":{"0.0.1":{"name":"@capawesome/capacitor-app-icon","version":"0.0.1","keywords":["capacitor","plugin","native"],"author":{"name":"Robin Genz","email":"mail@robingenz.dev"},"license":"MIT","_id":"@capawesome/capacitor-app-icon@0.0.1","maintainers":[{"name":"robingenz","email":"mail@robingenz.dev"}],"homepage":"https://capawesome.io/docs/plugins/app-icon/","bugs":{"url":"https://github.com/capawesome-team/capacitor-plugins/issues"},"dist":{"shasum":"d51a36e2feee35c0a251268299c7c8bf166d5a26","tarball":"https://registry.npmjs.org/@capawesome/capacitor-app-icon/-/capacitor-app-icon-0.0.1.tgz","fileCount":38,"integrity":"sha512-AjJ2fxcYtJ+5rZ6PgJSQET3xoCtEr1eKQeDK+NhbYPgnuTg82aZytSRs06NZH1ApG+AbYb+r2+iJzXna5TYfKw==","signatures":[{"sig":"MEQCIDE2P0ZHRwHD6uRfak/j67FD3CvGjTdprW+zbmo7PvjSAiBni9VTTjfAfledXwvRiFxd5ACJPMZDpDwFtM6gL8HbgQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":55083},"main":"dist/plugin.cjs.js","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","module":"dist/esm/index.js","funding":[{"url":"https://github.com/sponsors/capawesome-team/","type":"github"},{"url":"https://opencollective.com/capawesome","type":"opencollective"}],"gitHead":"8dd31ce5d3f16f94fb71d033f47512e99908f4e4","scripts":{"fmt":"npm run eslint -- --fix && npm run prettier -- --write && npm run swiftlint -- --fix --format","lint":"npm run eslint && npm run prettier -- --check && npm run swiftlint -- lint","build":"npm run clean && npm run docgen && tsc && rollup -c rollup.config.mjs","clean":"rimraf ./dist","watch":"tsc --watch","docgen":"docgen --api AppIconPlugin --output-readme README.md --output-json dist/docs.json","eslint":"eslint . --ext ts","verify":"npm run verify:ios && npm run verify:android && npm run verify:web","prettier":"prettier \"**/*.{css,html,ts,js,java}\"","swiftlint":"node-swiftlint","verify:ios":"cd ios && pod install && xcodebuild -workspace Plugin.xcworkspace -scheme Plugin -destination generic/platform=iOS && cd ..","verify:web":"npm run build","prepublishOnly":"npm run build","verify:android":"cd android && ./gradlew clean build test && cd ..","ios:pod:install":"cd ios && pod install --repo-update && cd ..","ios:spm:install":"cd ios && swift package resolve && cd .."},"_npmUser":{"name":"robingenz","email":"mail@robingenz.dev"},"capacitor":{"ios":{"src":"ios"},"android":{"src":"android"}},"repository":{"url":"git+https://github.com/capawesome-team/capacitor-plugins.git","type":"git"},"_npmVersion":"11.13.0","description":"Capacitor plugin to change the app icon at runtime.","directories":{},"_nodeVersion":"24.16.0","eslintConfig":{"extends":"@ionic/eslint-config/recommended"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"8.57.0","rimraf":"6.1.2","rollup":"4.53.3","swiftlint":"2.0.0","typescript":"5.9.3","@capacitor/cli":"8.0.0","@capacitor/ios":"8.0.0","@capacitor/core":"8.0.0","@capacitor/docgen":"0.3.1","@capacitor/android":"8.0.0","@ionic/eslint-config":"0.4.0","prettier-plugin-java":"2.6.7"},"peerDependencies":{"@capacitor/core":">=8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/capacitor-app-icon_0.0.1_1783405207514_0.7954995997441703","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@capawesome/capacitor-app-icon","version":"0.1.0","keywords":["capacitor","plugin","native","capacitor-plugin","app icon","alternate icon","change app icon","dynamic app icon","custom app icon","icon switcher","launcher icon"],"author":{"name":"Robin Genz","email":"mail@robingenz.dev"},"license":"MIT","_id":"@capawesome/capacitor-app-icon@0.1.0","maintainers":[{"name":"robingenz","email":"mail@robingenz.dev"}],"homepage":"https://capawesome.io/docs/sdks/capacitor/app-icon/","bugs":{"url":"https://github.com/capawesome-team/capacitor-plugins/issues"},"dist":{"shasum":"93084fb897740234fd809071dc90148d98ea34d5","tarball":"https://registry.npmjs.org/@capawesome/capacitor-app-icon/-/capacitor-app-icon-0.1.0.tgz","fileCount":38,"integrity":"sha512-pD0zqxtQlkvO/ya+iRtHF08urx7vhsgstcQ15F5MfA+pgP2u8nStSzmr11/8ByWqXT67OkEgb7w/SSwdnQke3g==","signatures":[{"sig":"MEYCIQCln6xK3RH0IpLPk1LUPUQsZMYGdINOBpn7+7AOE+EkPgIhAKcIhemtAbpcbj76mij4iqCEN9HycJV3txt8vJnnBkgb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@capawesome%2fcapacitor-app-icon@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":60633},"main":"dist/plugin.cjs.js","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","module":"dist/esm/index.js","funding":[{"url":"https://github.com/sponsors/capawesome-team/","type":"github"},{"url":"https://opencollective.com/capawesome","type":"opencollective"}],"gitHead":"1ce17b1fd14c43b2f1d5d3c2da82221e1d1dca37","scripts":{"fmt":"npm run eslint -- --fix && npm run prettier -- --write && npm run swiftlint -- --fix --format","lint":"npm run eslint && npm run prettier -- --check && npm run swiftlint -- lint","build":"npm run clean && npm run docgen && tsc && rollup -c rollup.config.mjs","clean":"rimraf ./dist","watch":"tsc --watch","docgen":"docgen --api AppIconPlugin --output-readme README.md --output-json dist/docs.json","eslint":"eslint . --ext ts","verify":"npm run verify:ios && npm run verify:android && npm run verify:web","prettier":"prettier \"**/*.{css,html,ts,js,java}\"","swiftlint":"node-swiftlint","verify:ios":"cd ios && pod install && xcodebuild -workspace Plugin.xcworkspace -scheme Plugin -destination generic/platform=iOS && cd ..","verify:web":"npm run build","prepublishOnly":"npm run build","verify:android":"cd android && ./gradlew clean build test && cd ..","ios:pod:install":"cd ios && pod install --repo-update && cd ..","ios:spm:install":"cd ios && swift package resolve && cd .."},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a94b3e9c-cad4-44b2-b45b-c5fa060d241b"}},"capacitor":{"ios":{"src":"ios"},"android":{"src":"android"}},"repository":{"url":"git+https://github.com/capawesome-team/capacitor-plugins.git","type":"git"},"_npmVersion":"11.16.0","description":"Capacitor plugin to change the app icon at runtime on Android and iOS.","directories":{},"_nodeVersion":"24.18.0","eslintConfig":{"extends":"@ionic/eslint-config/recommended"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"8.57.0","rimraf":"6.1.2","rollup":"4.53.3","swiftlint":"2.0.0","typescript":"5.9.3","@capacitor/cli":"8.0.0","@capacitor/ios":"8.0.0","@capacitor/core":"8.0.0","@capacitor/docgen":"0.3.1","@capacitor/android":"8.0.0","@ionic/eslint-config":"0.4.0","prettier-plugin-java":"2.6.7"},"peerDependencies":{"@capacitor/core":">=8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/capacitor-app-icon_0.1.0_1784015488640_0.9737180497202411","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@capawesome/capacitor-app-icon","version":"0.1.1","keywords":["capacitor","plugin","native","capacitor-plugin","app icon","alternate icon","change app icon","dynamic app icon","custom app icon","icon switcher","launcher icon"],"author":{"name":"Robin Genz","email":"mail@robingenz.dev"},"license":"MIT","_id":"@capawesome/capacitor-app-icon@0.1.1","maintainers":[{"name":"robingenz","email":"mail@robingenz.dev"}],"homepage":"https://capawesome.io/docs/sdks/capacitor/app-icon/","bugs":{"url":"https://github.com/capawesome-team/capacitor-plugins/issues"},"dist":{"shasum":"e22c1d61a2d44b1c19f7262207a8b647295aedbe","tarball":"https://registry.npmjs.org/@capawesome/capacitor-app-icon/-/capacitor-app-icon-0.1.1.tgz","fileCount":38,"integrity":"sha512-5x4C9pUn6RM1vQrL+BxcmY9/VIMfbH0a0uMkEGQylY6WubO8gNYTQ23e9XIN2mchP6IAh2W5fZPcHSSAm3kP2w==","signatures":[{"sig":"MEUCIAqQOsp/dffKWBZxS7HvpwXEcXhCwMVtkmHDsy1iV7U/AiEA0lhmeVFPjjDaQdpZF8poBNWHG5i2GPLn5jKv/VqsEM4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@capawesome%2fcapacitor-app-icon@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":60642},"main":"dist/plugin.cjs.js","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","module":"dist/esm/index.js","funding":[{"url":"https://github.com/sponsors/capawesome-team/","type":"github"},{"url":"https://opencollective.com/capawesome","type":"opencollective"}],"gitHead":"3e61f4b412f9f3f512c21169bb135bbb23a67e6d","scripts":{"fmt":"npm run eslint -- --fix && npm run prettier -- --write && npm run swiftlint -- --fix --format","lint":"npm run eslint && npm run prettier -- --check && npm run swiftlint -- lint","build":"npm run clean && npm run docgen && tsc && rollup -c rollup.config.mjs","clean":"rimraf ./dist","watch":"tsc --watch","docgen":"docgen --api AppIconPlugin --output-readme README.md --output-json dist/docs.json","eslint":"eslint . --ext ts","verify":"npm run verify:ios && npm run verify:android && npm run verify:web","prettier":"prettier \"**/*.{css,html,ts,js,java}\"","swiftlint":"node-swiftlint","verify:ios":"cd ios && pod install && xcodebuild -workspace Plugin.xcworkspace -scheme Plugin -destination generic/platform=iOS && cd ..","verify:web":"npm run build","prepublishOnly":"npm run build","verify:android":"cd android && ./gradlew clean build test && cd ..","ios:pod:install":"cd ios && pod install --repo-update && cd ..","ios:spm:install":"cd ios && swift package resolve && cd .."},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a94b3e9c-cad4-44b2-b45b-c5fa060d241b"}},"capacitor":{"ios":{"src":"ios"},"android":{"src":"android"}},"repository":{"url":"git+https://github.com/capawesome-team/capacitor-plugins.git","type":"git"},"_npmVersion":"11.16.0","description":"Capacitor plugin to change the app icon at runtime on Android and iOS.","directories":{},"_nodeVersion":"24.18.0","eslintConfig":{"extends":"@ionic/eslint-config/recommended"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"8.57.0","rimraf":"6.1.2","rollup":"4.53.3","swiftlint":"2.0.0","typescript":"5.9.3","@capacitor/cli":"8.0.0","@capacitor/ios":"8.0.0","@capacitor/core":"8.0.0","@capacitor/docgen":"0.3.1","@capacitor/android":"8.0.0","@ionic/eslint-config":"0.4.0","prettier-plugin-java":"2.6.7"},"peerDependencies":{"@capacitor/core":">=8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/capacitor-app-icon_0.1.1_1784102940200_0.8052408627852068","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@capawesome/capacitor-app-icon","version":"0.1.2","description":"Capacitor plugin to change the app icon at runtime on Android and iOS.","main":"dist/plugin.cjs.js","module":"dist/esm/index.js","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","author":{"name":"Robin Genz","email":"mail@robingenz.dev"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/capawesome-team/capacitor-plugins.git"},"bugs":{"url":"https://github.com/capawesome-team/capacitor-plugins/issues"},"funding":[{"type":"github","url":"https://github.com/sponsors/capawesome-team/"},{"type":"opencollective","url":"https://opencollective.com/capawesome"}],"homepage":"https://capawesome.io/docs/sdks/capacitor/app-icon/","keywords":["capacitor","plugin","native","capacitor-plugin","app icon","alternate icon","change app icon","dynamic app icon","custom app icon","icon switcher","launcher icon"],"scripts":{"verify":"npm run verify:ios && npm run verify:android && npm run verify:web","verify:ios":"cd ios && pod install && xcodebuild -workspace Plugin.xcworkspace -scheme Plugin -destination generic/platform=iOS && cd ..","verify:android":"cd android && ./gradlew clean build test && cd ..","verify:web":"npm run build","lint":"npm run eslint && npm run prettier -- --check && npm run swiftlint -- lint","fmt":"npm run eslint -- --fix && npm run prettier -- --write && npm run swiftlint -- --fix --format","eslint":"eslint . --ext ts","prettier":"prettier \"**/*.{css,html,ts,js,java}\"","swiftlint":"node-swiftlint","docgen":"docgen --api AppIconPlugin --output-readme README.md --output-json dist/docs.json","build":"npm run clean && npm run docgen && tsc && rollup -c rollup.config.mjs","clean":"rimraf ./dist","watch":"tsc --watch","ios:pod:install":"cd ios && pod install --repo-update && cd ..","ios:spm:install":"cd ios && swift package resolve && cd ..","prepublishOnly":"npm run build"},"devDependencies":{"@capacitor/android":"8.0.0","@capacitor/cli":"8.4.2","@capacitor/core":"8.0.0","@capacitor/docgen":"0.3.1","@capacitor/ios":"8.0.0","@ionic/eslint-config":"0.4.0","eslint":"8.57.0","prettier-plugin-java":"2.9.7","rimraf":"6.1.2","rollup":"4.62.3","swiftlint":"2.0.0","typescript":"5.9.3"},"peerDependencies":{"@capacitor/core":">=8.0.0"},"eslintConfig":{"extends":"@ionic/eslint-config/recommended"},"capacitor":{"ios":{"src":"ios"},"android":{"src":"android"}},"publishConfig":{"access":"public"},"gitHead":"7c1937ed10b7de86ca2c1cdc3539a2735fd69a00","_id":"@capawesome/capacitor-app-icon@0.1.2","_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-byUqkI03wbUrBq0/4SrVP/CRPTjUC4xm/3L/k0MQ6KcObuPMSDn4qbceHKnyQeBBQ1eRk+vVmxW9uQGZjzMUbQ==","shasum":"3f10d6d4202ab7baa1c461fea6a66c31fdcdb168","tarball":"https://registry.npmjs.org/@capawesome/capacitor-app-icon/-/capacitor-app-icon-0.1.2.tgz","fileCount":38,"unpackedSize":60689,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@capawesome%2fcapacitor-app-icon@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDaH9mddwmrQxjpj2eHn9rWUiyJ9IuOs5VK1pVZ38TR6AIgA1Iu5EF6Xil8XoRnv+NbvIyd1WOLpV/pcVQCkvEAujs="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a94b3e9c-cad4-44b2-b45b-c5fa060d241b"}},"directories":{},"maintainers":[{"name":"robingenz","email":"mail@robingenz.dev"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/capacitor-app-icon_0.1.2_1788337292596_0.6201789855883459"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-07T06:20:07.306Z","modified":"2026-09-02T08:21:33.066Z","0.0.1":"2026-07-07T06:20:07.791Z","0.1.0":"2026-07-14T07:51:28.783Z","0.1.1":"2026-07-15T08:09:00.346Z","0.1.2":"2026-09-02T08:21:32.714Z"},"bugs":{"url":"https://github.com/capawesome-team/capacitor-plugins/issues"},"author":{"name":"Robin Genz","email":"mail@robingenz.dev"},"license":"MIT","homepage":"https://capawesome.io/docs/sdks/capacitor/app-icon/","keywords":["capacitor","plugin","native","capacitor-plugin","app icon","alternate icon","change app icon","dynamic app icon","custom app icon","icon switcher","launcher icon"],"repository":{"type":"git","url":"git+https://github.com/capawesome-team/capacitor-plugins.git"},"description":"Capacitor plugin to change the app icon at runtime on Android and iOS.","maintainers":[{"name":"robingenz","email":"mail@robingenz.dev"}],"readme":"# Capacitor App Icon Plugin\n\nCapacitor plugin to change the app icon at runtime.\n\n<div class=\"capawesome-z29o10a\">\n  <a href=\"https://cloud.capawesome.io/\" target=\"_blank\">\n    <img alt=\"Deliver Live Updates to your Capacitor app with Capawesome Cloud\" src=\"https://cloud.capawesome.io/assets/banners/cloud-build-and-deploy-capacitor-apps.png?t=1\" />\n  </a>\n</div>\n\n## Features\n\n- 🎨 **Alternate icons**: Switch the home-screen icon between the icons your app declares.\n- 🔍 **Current icon**: Read the name of the icon that is currently in use.\n- 🔄 **Reset**: Restore the default icon at any time.\n- 🤝 **Compatibility**: Works alongside the [App Shortcuts](https://capawesome.io/docs/sdks/capacitor/app-shortcuts/) and [Badge](https://capawesome.io/docs/sdks/capacitor/badge/) plugins.\n- 📦 **CocoaPods & SPM**: Supports CocoaPods and Swift Package Manager for iOS.\n- 🔁 **Up-to-date**: Always supports the latest Capacitor version.\n\nMissing a feature? Just [open an issue](https://github.com/capawesome-team/capacitor-plugins/issues) and we'll take a look!\n\n## Use Cases\n\nThe App Icon plugin is typically used to personalize or refresh the app's appearance on the home screen, for example:\n\n- **Seasonal campaigns**: Switch to a themed icon for events like Christmas and restore the default icon afterwards.\n- **Premium personalization**: Let paying users choose their favorite icon from a set of alternate icons.\n- **In-app icon picker**: Build a settings screen that lists all icons and highlights the one currently in use.\n- **Brand updates**: Roll out a new logo as an alternate icon and switch to it at runtime.\n\n## Compatibility\n\n| Plugin Version | Capacitor Version | Status         |\n| -------------- | ----------------- | -------------- |\n| 0.x.x          | >=8.x.x           | Active support |\n\n## Installation\n\nYou can use our **AI-Assisted Setup** to install the plugin.\nAdd the [Capawesome Skills](https://github.com/capawesome-team/skills) to your AI tool using the following command:\n\n```bash\nnpx skills add capawesome-team/skills --skill capacitor-plugins\n```\n\nThen use the following prompt:\n\n```\n Use the `capacitor-plugins` skill from `capawesome-team/skills` to install the `@capawesome/capacitor-app-icon` plugin in my project.\n```\n\nIf you prefer **Manual Setup**, install the plugin by running the following commands and follow the platform-specific instructions below:\n\n```bash\nnpm install @capawesome/capacitor-app-icon\nnpx cap sync\n```\n\nThis plugin cannot add icons dynamically. Every icon you want to switch to must be **declared by the app beforehand**. The following sections describe how to declare alternate icons on each platform.\n\n### Android\n\nOn Android, each alternate icon is declared as an [`<activity-alias>`](https://developer.android.com/guide/topics/manifest/activity-alias-element) that points at the launcher activity. The plugin enables the requested alias and disables the others.\n\nOpen your `AndroidManifest.xml` and remove the launcher `<intent-filter>` from your `.MainActivity`. Then add one `<activity-alias>` for the default icon and one for each alternate icon. Exactly one alias must be `android:enabled=\"true\"` (the default icon); all others must be `android:enabled=\"false\"`.\n\n```xml\n<!-- Remove the <intent-filter> from the MainActivity. -->\n<activity\n    android:name=\".MainActivity\"\n    android:exported=\"true\"\n    ... />\n\n<!-- The default icon (enabled). -->\n<activity-alias\n    android:name=\".AppIconDefault\"\n    android:enabled=\"true\"\n    android:exported=\"true\"\n    android:icon=\"@mipmap/ic_launcher\"\n    android:roundIcon=\"@mipmap/ic_launcher_round\"\n    android:targetActivity=\".MainActivity\">\n    <intent-filter>\n        <action android:name=\"android.intent.action.MAIN\" />\n        <category android:name=\"android.intent.category.LAUNCHER\" />\n    </intent-filter>\n</activity-alias>\n\n<!-- An alternate icon (disabled). -->\n<activity-alias\n    android:name=\".Christmas\"\n    android:enabled=\"false\"\n    android:exported=\"true\"\n    android:icon=\"@mipmap/ic_launcher_christmas\"\n    android:roundIcon=\"@mipmap/ic_launcher_christmas_round\"\n    android:targetActivity=\".MainActivity\">\n    <intent-filter>\n        <action android:name=\"android.intent.action.MAIN\" />\n        <category android:name=\"android.intent.category.LAUNCHER\" />\n    </intent-filter>\n</activity-alias>\n\n<!-- Another alternate icon (disabled). -->\n<activity-alias\n    android:name=\".Halloween\"\n    android:enabled=\"false\"\n    android:exported=\"true\"\n    android:icon=\"@mipmap/ic_launcher_halloween\"\n    android:roundIcon=\"@mipmap/ic_launcher_halloween_round\"\n    android:targetActivity=\".MainActivity\">\n    <intent-filter>\n        <action android:name=\"android.intent.action.MAIN\" />\n        <category android:name=\"android.intent.category.LAUNCHER\" />\n    </intent-filter>\n</activity-alias>\n```\n\nThe icon name passed to `setIcon(...)` is the alias name **without the leading dot** (e.g. `Christmas`). Add the referenced icon resources (e.g. `@mipmap/ic_launcher_christmas`) to your `res/mipmap-*` folders.\n\n> [!NOTE]\n> The behavior after a change depends on the launcher. Some launchers apply the new icon only after the app's task is closed, and a few kill the app despite the plugin requesting otherwise. Shortcuts that were pinned to a now-disabled alias may stop working.\n\n### iOS\n\nOn iOS, alternate icons are declared as additional app icon sets in the asset catalog. Add one icon set per alternate icon (e.g. `Christmas` and `Halloween`) next to your primary `AppIcon` in `Assets.xcassets` and register the names (space-separated) in the build settings of your app target:\n\n```\nASSETCATALOG_COMPILER_ALTERNATE_APPICON_NAMES = \"Christmas Halloween\";\nASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES;\n```\n\nIn Xcode, these settings are called **Alternate App Icon Sets** and **Include All App Icon Assets** in the *Asset Catalog Compiler* section of the build settings.\n\nThe icon name passed to `setIcon(...)` is the name of the icon set (e.g. `Christmas`), case-sensitive. The primary icon (`AppIcon`) is restored with `resetIcon(...)`.\n\n> [!WARNING]\n> Do **not** give an alternate icon set a name that starts with `AppIcon` (e.g. `AppIconChristmas`). In our testing on physical devices running iOS 26, alternate icons whose name shares the primary icon set's `AppIcon` prefix are not rendered on the home screen: `setIcon(...)` succeeds, but the system displays a blank placeholder icon instead of the alternate icon. The iOS Simulator is not affected, so make sure to test on a real device. This is an undocumented iOS behavior; using names without the `AppIcon` prefix is safe on all iOS versions.\n\n> [!NOTE]\n> The system shows a user-visible alert every time the icon changes, and the icon cannot be changed while the app is in the background.\n\n## Configuration\n\nNo configuration required for this plugin.\n\n## Usage\n\nThe following examples show how to check for alternate icon support, read the current icon, set an alternate icon, and reset to the default icon.\n\n### Check if changing the app icon is supported\n\nUse `isAvailable()` to check whether the current device supports alternate icons. On Android, this always resolves to `true`; on iOS, it resolves to the value of `supportsAlternateIcons`. Only available on Android and iOS:\n\n```typescript\nimport { AppIcon } from '@capawesome/capacitor-app-icon';\n\nconst isAvailable = async () => {\n  const { available } = await AppIcon.isAvailable();\n  return available;\n};\n```\n\n### Get the current icon\n\nRead the name of the icon that is currently in use, for example to highlight it in an icon picker. Returns `null` if the default icon is in use. Only available on Android and iOS:\n\n```typescript\nimport { AppIcon } from '@capawesome/capacitor-app-icon';\n\nconst getCurrentIcon = async () => {\n  const { icon } = await AppIcon.getCurrentIcon();\n  return icon;\n};\n```\n\n### Set an alternate icon\n\nChange the app icon to an alternate icon that your app has declared beforehand (see [Installation](#installation)). Only available on Android and iOS:\n\n```typescript\nimport { AppIcon } from '@capawesome/capacitor-app-icon';\n\nconst setIcon = async () => {\n  await AppIcon.setIcon({ icon: 'Christmas' });\n};\n```\n\n### Reset to the default icon\n\nRestore the default app icon at any time. Only available on Android and iOS:\n\n```typescript\nimport { AppIcon } from '@capawesome/capacitor-app-icon';\n\nconst resetIcon = async () => {\n  await AppIcon.resetIcon();\n};\n```\n\n## API\n\n<docgen-index>\n\n* [`getCurrentIcon()`](#getcurrenticon)\n* [`isAvailable()`](#isavailable)\n* [`resetIcon()`](#reseticon)\n* [`setIcon(...)`](#seticon)\n* [Interfaces](#interfaces)\n\n</docgen-index>\n\n<docgen-api>\n<!--Update the source file JSDoc comments and rerun docgen to update the docs below-->\n\n### getCurrentIcon()\n\n```typescript\ngetCurrentIcon() => Promise<GetCurrentIconResult>\n```\n\nGet the name of the icon that is currently in use.\n\nReturns `null` if the default icon is in use.\n\nOnly available on Android and iOS.\n\n**Returns:** <code>Promise&lt;<a href=\"#getcurrenticonresult\">GetCurrentIconResult</a>&gt;</code>\n\n**Since:** 0.1.0\n\n--------------------\n\n\n### isAvailable()\n\n```typescript\nisAvailable() => Promise<IsAvailableResult>\n```\n\nCheck if changing the app icon is supported on the current device.\n\nOn Android, this always resolves to `true`.\nOn iOS, this resolves to the value of `supportsAlternateIcons`.\n\nOnly available on Android and iOS.\n\n**Returns:** <code>Promise&lt;<a href=\"#isavailableresult\">IsAvailableResult</a>&gt;</code>\n\n**Since:** 0.1.0\n\n--------------------\n\n\n### resetIcon()\n\n```typescript\nresetIcon() => Promise<void>\n```\n\nRestore the default app icon.\n\nOnly available on Android and iOS.\n\n**Since:** 0.1.0\n\n--------------------\n\n\n### setIcon(...)\n\n```typescript\nsetIcon(options: SetIconOptions) => Promise<void>\n```\n\nChange the app icon to the alternate icon with the given name.\n\nThe icon must be declared by the app beforehand. See the setup instructions\nfor [Android](https://capawesome.io/docs/sdks/capacitor/app-icon/#android) and\n[iOS](https://capawesome.io/docs/sdks/capacitor/app-icon/#ios) for more information.\n\nOnly available on Android and iOS.\n\n| Param         | Type                                                      |\n| ------------- | --------------------------------------------------------- |\n| **`options`** | <code><a href=\"#seticonoptions\">SetIconOptions</a></code> |\n\n**Since:** 0.1.0\n\n--------------------\n\n\n### Interfaces\n\n\n#### GetCurrentIconResult\n\n| Prop       | Type                        | Description                                                                                  | Since |\n| ---------- | --------------------------- | -------------------------------------------------------------------------------------------- | ----- |\n| **`icon`** | <code>string \\| null</code> | The name of the icon that is currently in use. Returns `null` if the default icon is in use. | 0.1.0 |\n\n\n#### IsAvailableResult\n\n| Prop            | Type                 | Description                                                              | Since |\n| --------------- | -------------------- | ------------------------------------------------------------------------ | ----- |\n| **`available`** | <code>boolean</code> | Whether or not changing the app icon is supported on the current device. | 0.1.0 |\n\n\n#### SetIconOptions\n\n| Prop       | Type                | Description                                                                                                                                                                                                 | Since |\n| ---------- | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **`icon`** | <code>string</code> | The name of the alternate icon to use. On Android, this is the name of the `&lt;activity-alias&gt;` (without the leading dot). On iOS, this is the name of the alternate app icon set in the asset catalog. | 0.1.0 |\n\n</docgen-api>\n\n## FAQ\n\n### How is this plugin different from other similar plugins?\n\nIt changes the app icon at runtime on both Android and iOS through one fully typed API — switching to a declared alternate icon, reading the icon currently in use, resetting to the default, and checking whether the device supports alternate icons. It documents the platform realities honestly, from Android's launcher-dependent behavior to the system alert iOS shows on every change, so there are no surprises in production. The plugin is actively maintained against the latest Capacitor and OS versions.\n\n### Can I add new app icons at runtime?\n\nNo, this plugin cannot add icons dynamically. Every icon you want to switch to must be declared by the app beforehand, as an `<activity-alias>` in the `AndroidManifest.xml` on Android and as an alternate app icon set in the asset catalog on iOS. See the [Installation](#installation) section for detailed setup instructions.\n\n### What icon name do I pass to `setIcon`?\n\nOn Android, it is the name of the `<activity-alias>` without the leading dot (e.g. `Christmas`). On iOS, it is the name of the alternate app icon set in the asset catalog.\n\n### Why is the new icon not applied immediately on Android?\n\nThe behavior after a change depends on the launcher. Some launchers apply the new icon only after the app's task is closed, and a few even kill the app despite the plugin requesting otherwise. Also note that shortcuts pinned to a now-disabled alias may stop working.\n\n### Why does iOS show an alert when the icon changes?\n\nThe system shows a user-visible alert every time the icon changes. This is standard iOS behavior and cannot be suppressed. Also note that the icon cannot be changed while the app is in the background.\n\n### How do I know if the device supports alternate icons?\n\nCall `isAvailable()` before offering an icon picker. On Android, it always resolves to `true`. On iOS, it resolves to the value of `supportsAlternateIcons`.\n\n### Can I use this plugin with Ionic, React, Vue or Angular?\n\nYes, 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.\n\n## Related Plugins\n\n- [App Shortcuts](https://capawesome.io/docs/sdks/capacitor/app-shortcuts/): Manage app shortcuts and quick actions on the home screen.\n- [App Update](https://capawesome.io/docs/sdks/capacitor/app-update/): Assist your users with native app updates.\n- [Badge](https://capawesome.io/docs/sdks/capacitor/badge/): Access and update the badge number of the app icon.\n\n## Newsletter\n\nStay up to date with the latest news and updates about the Capawesome, Capacitor, and Ionic ecosystem by subscribing to our [Capawesome Newsletter](https://cloud.capawesome.io/newsletter/).\n\n## Changelog\n\nSee [CHANGELOG.md](https://github.com/capawesome-team/capacitor-plugins/blob/main/packages/app-icon/CHANGELOG.md).\n\n## License\n\nSee [LICENSE](https://github.com/capawesome-team/capacitor-plugins/blob/main/packages/app-icon/LICENSE).\n","readmeFilename":"README.md"}