diff --git a/.gitbook.yaml b/.gitbook.yaml
index 4402c5a16..e454be0e2 100644
--- a/.gitbook.yaml
+++ b/.gitbook.yaml
@@ -1 +1 @@
-root: ./docs/plugins/
+root: ./docs/
diff --git a/README.md b/README.md
index d154d44a7..0c85da882 100644
--- a/README.md
+++ b/README.md
@@ -188,7 +188,7 @@ Let us know or submit a PR! Take a look at [the Developer Guide](https://github.
Ibby Hadeed - [@ihadeed](https://github.com/ihadeed)
-Daniel Sogl - [@sogldaniel](https://twitter.com/sogldaniel)
+Daniel Sogl - [LinkedIn](https://www.linkedin.com/in/daniel-sogl)
Tim Lancina - [@timlancina](https://twitter.com/timlancina)
diff --git a/docs/README.md b/docs/README.md
new file mode 100644
index 000000000..51d042424
--- /dev/null
+++ b/docs/README.md
@@ -0,0 +1,40 @@
+# Awesome Cordova Plugins
+
+Awesome Cordova Plugins is a curated set of wrappers for Cordova plugins that make adding any native functionality you need to your [Ionic](https://ionicframework.com/) mobile app easy.
+
+Awesome Cordova Plugins wraps plugin callbacks in a Promise or Observable, providing a common interface for all plugins and making it easy to use plugins with Angular change detection.
+
+## Features
+
+- **TypeScript wrappers** for all major Cordova plugins
+- **Promise and Observable** support for modern async patterns
+- **Angular integration** with automatic change detection via `/ngx` imports
+- **Framework-agnostic** — works with Angular, React, or plain TypeScript
+- **Capacitor compatible** — use Cordova plugins in Capacitor projects
+
+## Quick Start
+
+Install the core library and any plugin wrapper you need:
+
+```bash
+npm install @awesome-cordova-plugins/core
+npm install @awesome-cordova-plugins/camera
+```
+
+Then install the corresponding Cordova plugin:
+
+```bash
+ionic cordova plugin add cordova-plugin-camera
+```
+
+See the [Installation](installation.md) guide for detailed framework-specific setup instructions.
+
+## Need Help?
+
+- Browse the [Plugin List](plugins/) to find the wrapper you need
+- Check the [FAQ](faq.md) for common issues and solutions
+- [Report an issue](https://github.com/danielsogl/awesome-cordova-plugins/issues) or contribute on GitHub
+
+## Maintainer
+
+[Daniel Sogl](https://www.linkedin.com/in/daniel-sogl)
diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md
index 2c8170a1d..41735fc06 100644
--- a/docs/SUMMARY.md
+++ b/docs/SUMMARY.md
@@ -1,225 +1,266 @@
# Table of contents
-* [Initial page](README.md)
-* [Plugins](plugins/README.md)
- * [Push Notifications - WonderPush](plugins/wonderpush.md)
- * [Kommunicate](plugins/kommunicate.md)
- * [Power Optimization](plugins/power-optimization.md)
- * [BLE](plugins/ble.md)
- * [Text To Speech Advanced](plugins/text-to-speech-advanced.md)
- * [NativeView](plugins/native-view.md)
- * [Web Intent](plugins/web-intent.md)
- * [Chooser](plugins/chooser.md)
- * [Device](plugins/device.md)
- * [Open Native Settings](plugins/open-native-settings.md)
- * [CleverTap](plugins/clevertap.md)
- * [PSPDFKit-Cordova](plugins/pspdfkit-cordova.md)
- * [File Transfer](plugins/file-transfer.md)
- * [AdMob Pro](plugins/admob-pro.md)
- * [In App Update](plugins/in-app-update.md)
- * [OpenALPR](plugins/openalpr.md)
- * [AllInOneSDK](plugins/all-in-one-sdk.md)
- * [AdMob](plugins/admob.md)
- * [Native Keyboard](plugins/native-keyboard.md)
- * [Vibes](plugins/vibes.md)
- * [Safari View Controller](plugins/safari-view-controller.md)
- * [Device Accounts](plugins/device-accounts.md)
- * [Media Capture](plugins/media-capture.md)
- * [Pollfish](plugins/pollfish.md)
- * [OCR](plugins/ocr.md)
- * [Fingerprint AIO](plugins/fingerprint-aio.md)
- * [BiometricWrapper](plugins/biometric-wrapper.md)
- * [Firebase Authentication](plugins/firebase-authentication.md)
- * [Status Bar](plugins/status-bar.md)
- * [BluetoothLE](plugins/bluetooth-le.md)
- * [ZBar](plugins/zbar.md)
- * [Android ExoPlayer](plugins/android-exoplayer.md)
- * [Mobile Messaging](plugins/mobile-messaging.md)
- * [Device Orientation](plugins/device-orientation.md)
- * [Insomnia](plugins/insomnia.md)
- * [Photo Library](plugins/photo-library.md)
- * [Bluetooth Classic Serial Port](plugins/bluetooth-classic-serial-port.md)
- * [Push](plugins/push.md)
- * [FileTransferManager](plugins/background-upload.md)
- * [App Center Analytics](plugins/app-center-analytics.md)
- * [Anyline](plugins/anyline.md)
- * [iOS DocumentPicker](plugins/document-picker.md)
- * [Theme Detection](plugins/theme-detection.md)
- * [DbResult](plugins/unvired-cordova-sdk.md)
- * [Background Fetch](plugins/background-fetch.md)
- * [Cloud Settings](plugins/cloud-settings.md)
- * [Spotify Auth](plugins/spotify-auth.md)
- * [Globalization](plugins/globalization.md)
- * [FTP](plugins/ftp.md)
- * [File](plugins/file.md)
- * [Health](plugins/health.md)
- * [Web Server](plugins/web-server.md)
- * [Background Mode](plugins/background-mode.md)
- * [Social Sharing](plugins/social-sharing.md)
- * [Sms Retriever](plugins/sms-retriever.md)
- * [Spinner Dialog](plugins/spinner-dialog.md)
- * [System Alert Window Permission](plugins/system-alert-window-permission.md)
- * [StarPRNT](plugins/star-prnt.md)
- * [Badge](plugins/badge.md)
- * [Launch Navigator](plugins/launch-navigator.md)
- * [SumUp](plugins/sum-up.md)
- * [Youtube Video Player](plugins/youtube-video-player.md)
- * [Document Viewer](plugins/document-viewer.md)
- * [Taptic Engine](plugins/taptic-engine.md)
- * [ABBYY Real-Time Recognition](plugins/abbyy-rtr.md)
- * [Media](plugins/media.md)
- * [WebSocket Server](plugins/web-socket-server.md)
- * [Firebase Messaging](plugins/firebase-messaging.md)
- * [Music Controls](plugins/music-controls.md)
- * [Calendar](plugins/calendar.md)
- * [Call Directory](plugins/call-directory.md)
- * [Iamport Cordova](plugins/iamport-cordova.md)
- * [Video Editor](plugins/video-editor.md)
- * [Tealium](plugins/tealium.md)
- * [Camera Preview](plugins/camera-preview.md)
- * [Firebase Analytics](plugins/firebase-analytics.md)
- * [Image Picker](plugins/image-picker.md)
- * [Shake](plugins/shake.md)
- * [Local Notifications](plugins/local-notifications.md)
- * [Android Permissions](plugins/android-permissions.md)
- * [App Center Low Memory](plugins/app-center-low-memory.md)
- * [App Center Push](plugins/app-center-push.md)
- * [Native Audio](plugins/native-audio.md)
- * [Geolocation](plugins/geolocation.md)
- * [PayTabs](plugins/paytabs.md)
- * [3D Touch](plugins/three-dee-touch.md)
- * [FirebaseCrash](plugins/firebase-crash.md)
- * [Toast](plugins/toast.md)
- * [File Opener](plugins/file-opener.md)
- * [PreviewAnyFile](plugins/preview-any-file.md)
- * [SmartlookSetupConfigBuilder](plugins/smartlook.md)
- * [Firebase Config](plugins/firebase-config.md)
- * [Keychain](plugins/keychain.md)
- * [WifiWizard2](plugins/wifi-wizard-2.md)
- * [Header Color](plugins/header-color.md)
- * [Dfu Update](plugins/dfu-update.md)
- * [Sqlite Db Copy](plugins/sqlite-db-copy.md)
- * [Gao De Location](plugins/gao-de-location.md)
- * [DNS](plugins/dns.md)
- * [Multiple Documents Picker](plugins/multiple-document-picker.md)
- * [Lottie Splash Screen](plugins/lottie-splash-screen.md)
- * [PlayInstallReferrer](plugins/play-install-referrer.md)
- * [LocalBackup](plugins/local-backup.md)
- * [Native Geocoder](plugins/native-geocoder.md)
- * [Coordinates](plugins/hyper-track.md)
- * [ApproovHTTP](plugins/approov-advanced-http.md)
- * [Answers](plugins/fabric.md)
- * [UriHelper](plugins/nfc.md)
- * [Dialogs](plugins/dialogs.md)
- * [Firebase Dynamic Links](plugins/firebase-dynamic-links.md)
- * [Metrix](plugins/metrix.md)
- * [Health Kit](plugins/health-kit.md)
- * [Intercom](plugins/intercom.md)
- * [Camera](plugins/camera.md)
- * [Secure Storage](plugins/secure-storage.md)
- * [Native Storage](plugins/native-storage.md)
- * [App Preferences](plugins/app-preferences.md)
- * [In App Review](plugins/in-app-review.md)
- * [Flashlight](plugins/flashlight.md)
- * [Facebook](plugins/facebook.md)
- * [Wechat](plugins/wechat.md)
- * [App Version](plugins/app-version.md)
- * [Checkout](plugins/checkout.md)
- * [Android Full Screen](plugins/android-full-screen.md)
- * [Secure Storage Echo](plugins/secure-storage-echo.md)
- * [Device Motion](plugins/device-motion.md)
- * [IBeacon](plugins/ibeacon.md)
- * [Keyboard](plugins/keyboard.md)
- * [Deeplinks](plugins/deeplinks.md)
- * [Firebase](plugins/firebase.md)
- * [App Availability](plugins/app-availability.md)
- * [Background Geolocation](plugins/background-geolocation.md)
- * [Diagnostic](plugins/diagnostic.md)
- * [Ionic Webview](plugins/ionic-webview.md)
- * [Broadcaster](plugins/broadcaster.md)
- * [Uptime](plugins/uptime.md)
- * [Mixpanel](plugins/mixpanel.md)
- * [Action Sheet](plugins/action-sheet.md)
- * [HTTP](plugins/http.md)
- * [OneSignal](plugins/onesignal.md)
- * [Firebase Vision](plugins/firebase-vision.md)
- * [Appsflyer](plugins/appsflyer.md)
- * [Google Plus](plugins/google-plus.md)
- * [Network](plugins/network.md)
- * [SQLite Porter](plugins/sqlite-porter.md)
- * [Touch ID](plugins/touch-id.md)
- * [App Center Crashes](plugins/app-center-crashes.md)
- * [ios-aswebauthenticationsession-api](plugins/ios-aswebauthenticationsession-api.md)
- * [FCM](plugins/fcm.md)
- * [RewardVideo](plugins/admob-plus.md)
- * [CustomUISDK](plugins/custom-uisdk.md)
- * [Foreground Service](plugins/foreground-service.md)
- * [Sign In With Apple](plugins/sign-in-with-apple.md)
- * [Location Accuracy](plugins/location-accuracy.md)
- * [Barcode Scanner](plugins/barcode-scanner.md)
- * [App Center Shared](plugins/app-center-shared.md)
- * [BranchIo](plugins/branch-io.md)
- * [PushapePush](plugins/pushape-push.md)
- * [TealiumInstallReferrer](plugins/tealium-installreferrer.md)
- * [Zeroconf](plugins/zeroconf.md)
- * [Purchases](plugins/purchases.md)
- * [Instagram](plugins/instagram.md)
- * [Splash Screen](plugins/splash-screen.md)
- * [Launch Review](plugins/launch-review.md)
- * [Speech Recognition](plugins/speech-recognition.md)
- * [Document Scanner](plugins/document-scanner.md)
- * [Apple Wallet](plugins/apple-wallet.md)
- * [SQLite](plugins/sqlite.md)
- * [App Rate](plugins/app-rate.md)
- * [Vibration](plugins/vibration.md)
- * [Build Info](plugins/build-info.md)
- * [Photo Viewer](plugins/photo-viewer.md)
- * [Google Nearby](plugins/google-nearby.md)
- * [Stripe](plugins/stripe.md)
- * [Analytics Firebase](plugins/analytics-firebase.md)
- * [AES256](plugins/aes-256.md)
- * [Screen Orientation](plugins/screen-orientation.md)
- * [Webengage](plugins/webengage.md)
- * [AdjustAppStoreSubscription](plugins/adjust.md)
- * [Line Login](plugins/line-login.md)
- * [Is Debug](plugins/is-debug.md)
- * [Clipboard](plugins/clipboard.md)
- * [File Path](plugins/file-path.md)
- * [Native Page Transitions](plugins/native-page-transitions.md)
- * [WheelSelector Plugin](plugins/wheel-selector.md)
- * [Email Composer](plugins/email-composer.md)
- * [BlinkId](plugins/blinkid.md)
- * [Call Number](plugins/call-number.md)
- * [Battery Status](plugins/battery-status.md)
- * [Firebase X](plugins/firebase-x.md)
- * [Google Analytics](plugins/google-analytics.md)
- * [ServiceDiscovery](plugins/service-discovery.md)
- * [PDFGenerator](plugins/pdf-generator.md)
- * [MLKitTranslate](plugins/mlkit-translate.md)
- * [Usabilla](plugins/usabilla-cordova-sdk.md)
- * [BioCatch](plugins/biocatch.md)
- * [Bluetooth Serial](plugins/bluetooth-serial.md)
- * [Video Player](plugins/video-player.md)
- * [Streaming Media](plugins/streaming-media.md)
- * [Firebase Crashlytics](plugins/firebase-crashlytics.md)
- * [Zoom](plugins/zoom.md)
- * [SMS](plugins/sms.md)
- * [Imap](plugins/imap.md)
- * [Ge Tui Sdk Plugin](plugins/ge-tui-sdk-plugin.md)
- * [TealiumAdIdentifier](plugins/tealium-adidentifier.md)
- * [UrbanAirShip](plugins/urbanairship.md)
- * [In App Browser](plugins/in-app-browser.md)
- * [In App Purchase 2](plugins/in-app-purchase-2.md)
- * [Code Push](plugins/code-push.md)
- * [Android Notch](plugins/android-notch.md)
- * [Network Interface](plugins/network-interface.md)
- * [Printer](plugins/printer.md)
- * [Browser Tab](plugins/browser-tab.md)
- * [Dynamsoft Barcode Scanner](plugins/dynamsoft-barcode-scanner.md)
- * [GCDWebServer](plugins/gcdwebserver.md)
- * [Smtp Client](plugins/smtp-client.md)
- * [Cashfree PG](plugins/cashfree-pg/README.md)
- * [Save Dialog](plugins/save-dialog/README.md)
+* [Welcome](README.md)
* [Installation](installation.md)
* [FAQ](faq.md)
+## Plugins
+
+* [Overview](plugins/README.md)
+ * ["In App Purchase 3"](plugins/in-app-purchase-3/README.md)
+ * [3D Touch](plugins/three-dee-touch/README.md)
+ * [ABBYY Real-Time Recognition](plugins/abbyy-rtr/README.md)
+ * [Action Sheet](plugins/action-sheet/README.md)
+ * [Adjust](plugins/adjust/README.md)
+ * [AdMob](plugins/admob/README.md)
+ * [AdMob Plus](plugins/admob-plus/README.md)
+ * [AdMob Pro](plugins/admob-pro/README.md)
+ * [AdvancedImagePicker](plugins/advanced-image-picker/README.md)
+ * [AES256](plugins/aes-256/README.md)
+ * [Airship](plugins/airship/README.md)
+ * [AllInOneSDK](plugins/all-in-one-sdk/README.md)
+ * [Analytics Firebase](plugins/analytics-firebase/README.md)
+ * [Android ExoPlayer](plugins/android-exoplayer/README.md)
+ * [Android Full Screen](plugins/android-full-screen/README.md)
+ * [Android Notch](plugins/android-notch/README.md)
+ * [Android Permissions](plugins/android-permissions/README.md)
+ * [Anyline](plugins/anyline/README.md)
+ * [App Availability](plugins/app-availability/README.md)
+ * [App Center Analytics](plugins/app-center-analytics/README.md)
+ * [App Center Crashes](plugins/app-center-crashes/README.md)
+ * [App Center Low Memory](plugins/app-center-low-memory/README.md)
+ * [App Center Push](plugins/app-center-push/README.md)
+ * [App Center Shared](plugins/app-center-shared/README.md)
+ * [App Preferences](plugins/app-preferences/README.md)
+ * [App Rate](plugins/app-rate/README.md)
+ * [App Review](plugins/app-review/README.md)
+ * [App Version](plugins/app-version/README.md)
+ * [Apple Wallet](plugins/apple-wallet/README.md)
+ * [Applovin](plugins/applovin/README.md)
+ * [Appsflyer](plugins/appsflyer/README.md)
+ * [Audio Management](plugins/audio-management/README.md)
+ * [Background Fetch](plugins/background-fetch/README.md)
+ * [Background Geolocation](plugins/background-geolocation/README.md)
+ * [Background Mode](plugins/background-mode/README.md)
+ * [BackgroundUpload](plugins/background-upload/README.md)
+ * [Badge](plugins/badge/README.md)
+ * [Barcode Scanner](plugins/barcode-scanner/README.md)
+ * [Barkoder](plugins/barkoder/README.md)
+ * [Battery Status](plugins/battery-status/README.md)
+ * [BioCatch](plugins/biocatch/README.md)
+ * [BiometricWrapper](plugins/biometric-wrapper/README.md)
+ * [BLE](plugins/ble/README.md)
+ * [BlinkId](plugins/blinkid/README.md)
+ * [Bluetooth Classic Serial Port](plugins/bluetooth-classic-serial-port/README.md)
+ * [Bluetooth Serial](plugins/bluetooth-serial/README.md)
+ * [BluetoothLE](plugins/bluetooth-le/README.md)
+ * [BranchIo](plugins/branch-io/README.md)
+ * [Brightness](plugins/brightness/README.md)
+ * [Broadcaster](plugins/broadcaster/README.md)
+ * [Browser Tab](plugins/browser-tab/README.md)
+ * [Build Info](plugins/build-info/README.md)
+ * [Calendar](plugins/calendar/README.md)
+ * [Call Directory](plugins/call-directory/README.md)
+ * [Call Number](plugins/call-number/README.md)
+ * [Camera](plugins/camera/README.md)
+ * [Camera Preview](plugins/camera-preview/README.md)
+ * [CFPaymentGateway](plugins/cashfree-pg/README.md)
+ * [Checkout](plugins/checkout/README.md)
+ * [Chooser](plugins/chooser/README.md)
+ * [Chooser](plugins/chooser-simple-file/README.md)
+ * [CleverTap](plugins/clevertap/README.md)
+ * [Clipboard](plugins/clipboard/README.md)
+ * [Cloud Settings](plugins/cloud-settings/README.md)
+ * [Code Push](plugins/code-push/README.md)
+ * [Contacts](plugins/contacts/README.md)
+ * [cordova-plugin-hypertrack-v3](plugins/hyper-track/README.md)
+ * [Crashlytics](plugins/fabric/README.md)
+ * [Crop Plugin Privacy](plugins/crop-plugin-privacy/README.md)
+ * [CustomUiSdk](plugins/custom-ui-sdk/README.md)
+ * [CustomUISDK](plugins/custom-uisdk/README.md)
+ * [Deeplinks](plugins/deeplinks/README.md)
+ * [Device](plugins/device/README.md)
+ * [Device Accounts](plugins/device-accounts/README.md)
+ * [Device eMagnetometer](plugins/magnetometer/README.md)
+ * [Device Motion](plugins/device-motion/README.md)
+ * [Device Orientation](plugins/device-orientation/README.md)
+ * [Dfu Update](plugins/dfu-update/README.md)
+ * [Diagnostic](plugins/diagnostic/README.md)
+ * [Dialogs](plugins/dialogs/README.md)
+ * [DNS](plugins/dns/README.md)
+ * [Document Downloader](plugins/downloader/README.md)
+ * [Document Scanner](plugins/document-scanner/README.md)
+ * [Document Viewer](plugins/document-viewer/README.md)
+ * [dynamsoft-barcode-scanner](plugins/dynamsoft-barcode-scanner/README.md)
+ * [Email Composer](plugins/email-composer/README.md)
+ * [Facebook](plugins/facebook/README.md)
+ * [FbSdk](plugins/fbsdk/README.md)
+ * [FCM](plugins/fcm/README.md)
+ * [FFMpeg](plugins/ffmpeg/README.md)
+ * [File](plugins/file/README.md)
+ * [File MD5](plugins/file-md5/README.md)
+ * [File Opener](plugins/file-opener/README.md)
+ * [File Path](plugins/file-path/README.md)
+ * [File Transfer](plugins/file-transfer/README.md)
+ * [FileChooser Plugin](plugins/file-chooser/README.md)
+ * [Fingerprint AIO](plugins/fingerprint-aio/README.md)
+ * [Firebase](plugins/firebase/README.md)
+ * [Firebase Analytics](plugins/firebase-analytics/README.md)
+ * [Firebase Authentication](plugins/firebase-authentication/README.md)
+ * [Firebase Config](plugins/firebase-config/README.md)
+ * [Firebase Crashlytics](plugins/firebase-crashlytics/README.md)
+ * [Firebase Dynamic Links](plugins/firebase-dynamic-links/README.md)
+ * [Firebase Messaging](plugins/firebase-messaging/README.md)
+ * [Firebase Model](plugins/firebase-model/README.md)
+ * [Firebase Vision](plugins/firebase-vision/README.md)
+ * [Firebase X](plugins/firebase-x/README.md)
+ * [FirebaseCrash](plugins/firebase-crash/README.md)
+ * [Flashlight](plugins/flashlight/README.md)
+ * [Foreground Service](plugins/foreground-service/README.md)
+ * [FTP](plugins/ftp/README.md)
+ * [Gao De Location](plugins/gao-de-location/README.md)
+ * [gcdwebserver](plugins/gcdwebserver/README.md)
+ * [Ge Tui Sdk Plugin](plugins/ge-tui-sdk-plugin/README.md)
+ * [Genius Scan](plugins/genius-scan/README.md)
+ * [Geolocation](plugins/geolocation/README.md)
+ * [Globalization](plugins/globalization/README.md)
+ * [Google Analytics](plugins/google-analytics/README.md)
+ * [Google Nearby](plugins/google-nearby/README.md)
+ * [Google Plus](plugins/google-plus/README.md)
+ * [Header Color](plugins/header-color/README.md)
+ * [Health](plugins/health/README.md)
+ * [Health Kit](plugins/health-kit/README.md)
+ * [HTTP](plugins/approov-advanced-http/README.md)
+ * [HTTP](plugins/http/README.md)
+ * [Iamport Cordova](plugins/iamport-cordova/README.md)
+ * [IBeacon](plugins/ibeacon/README.md)
+ * [Image Picker](plugins/image-picker/README.md)
+ * [ImageResizer](plugins/image-resizer/README.md)
+ * [Imap](plugins/imap/README.md)
+ * [In App Browser](plugins/in-app-browser/README.md)
+ * [In App Purchase 2](plugins/in-app-purchase-2/README.md)
+ * [In App Review](plugins/in-app-review/README.md)
+ * [In App Update](plugins/in-app-update/README.md)
+ * [Insomnia](plugins/insomnia/README.md)
+ * [Instagram](plugins/instagram/README.md)
+ * [Intercom](plugins/intercom/README.md)
+ * [Ionic Webview](plugins/ionic-webview/README.md)
+ * [iOS DocumentPicker](plugins/document-picker/README.md)
+ * [ios-aswebauthenticationsession-api](plugins/ios-aswebauthenticationsession-api/README.md)
+ * [IRoot](plugins/i-root/README.md)
+ * [Is Debug](plugins/is-debug/README.md)
+ * [Keyboard](plugins/keyboard/README.md)
+ * [Keychain](plugins/keychain/README.md)
+ * [Kommunicate](plugins/kommunicate/README.md)
+ * [Launch Navigator](plugins/launch-navigator/README.md)
+ * [Launch Review](plugins/launch-review/README.md)
+ * [Lets Cooee](plugins/lets-cooee/README.md)
+ * [Line Login](plugins/line-login/README.md)
+ * [Local Notifications](plugins/local-notifications/README.md)
+ * [LocalBackup](plugins/local-backup/README.md)
+ * [Location Accuracy](plugins/location-accuracy/README.md)
+ * [Lottie Splash Screen](plugins/lottie-splash-screen/README.md)
+ * [Market](plugins/market/README.md)
+ * [Media](plugins/media/README.md)
+ * [Media Capture](plugins/media-capture/README.md)
+ * [Metrix](plugins/metrix/README.md)
+ * [Mixpanel](plugins/mixpanel/README.md)
+ * [MLKitTranslate](plugins/mlkit-translate/README.md)
+ * [Mobile Accessibility](plugins/mobile-accessibility/README.md)
+ * [Mobile Messaging](plugins/mobile-messaging/README.md)
+ * [Multiple Documents Picker](plugins/multiple-document-picker/README.md)
+ * [Music Controls](plugins/music-controls/README.md)
+ * [Native Audio](plugins/native-audio/README.md)
+ * [Native Geocoder](plugins/native-geocoder/README.md)
+ * [Native Keyboard](plugins/native-keyboard/README.md)
+ * [Native Page Transitions](plugins/native-page-transitions/README.md)
+ * [Native Storage](plugins/native-storage/README.md)
+ * [NativeView](plugins/native-view/README.md)
+ * [Network](plugins/network/README.md)
+ * [Network Interface](plugins/network-interface/README.md)
+ * [Network Permission](plugins/network-permission/README.md)
+ * [newrelic mobile](plugins/newrelic/README.md)
+ * [NFC](plugins/nfc/README.md)
+ * [OCR](plugins/ocr/README.md)
+ * [OneSignal](plugins/onesignal/README.md)
+ * [Open Native Settings](plugins/open-native-settings/README.md)
+ * [OpenALPR](plugins/openalpr/README.md)
+ * [OpenInstall](plugins/openinstall/README.md)
+ * [PayTabs](plugins/paytabs/README.md)
+ * [PDFGenerator](plugins/pdf-generator/README.md)
+ * [Photo Library](plugins/photo-library/README.md)
+ * [Photo Viewer](plugins/photo-viewer/README.md)
+ * [PlayInstallReferrer](plugins/play-install-referrer/README.md)
+ * [Pollfish](plugins/pollfish/README.md)
+ * [Power Management](plugins/power-management/README.md)
+ * [Power Optimization](plugins/power-optimization/README.md)
+ * [Preview/Open Any File](plugins/preview-any-file/README.md)
+ * [Printer](plugins/printer/README.md)
+ * [PSPDFKit-Cordova](plugins/pspdfkit-cordova/README.md)
+ * [Purchases](plugins/purchases/README.md)
+ * [Push](plugins/push/README.md)
+ * [Push Notifications - WonderPush](plugins/wonderpush/README.md)
+ * [PushapePush](plugins/pushape-push/README.md)
+ * [Safari View Controller](plugins/safari-view-controller/README.md)
+ * [SaveDialog](plugins/save-dialog/README.md)
+ * [Screen Orientation](plugins/screen-orientation/README.md)
+ * [Screenshot](plugins/screenshot/README.md)
+ * [Secure Storage](plugins/secure-storage/README.md)
+ * [Secure Storage Echo](plugins/secure-storage-echo/README.md)
+ * [ServiceDiscovery](plugins/service-discovery/README.md)
+ * [Shake](plugins/shake/README.md)
+ * [ShortcutsAndroid](plugins/shortcuts-android/README.md)
+ * [Sign In With Apple](plugins/sign-in-with-apple/README.md)
+ * [Smartlook](plugins/smartlook/README.md)
+ * [SMS](plugins/sms/README.md)
+ * [Sms Retriever](plugins/sms-retriever/README.md)
+ * [SmsRetrieverApi](plugins/sms-retriever-api/README.md)
+ * [Smtp Client](plugins/smtp-client/README.md)
+ * [Social Sharing](plugins/social-sharing/README.md)
+ * [SocketsTcp](plugins/sockets-tcp/README.md)
+ * [SocketsUdp](plugins/sockets-udp/README.md)
+ * [Speech Recognition](plugins/speech-recognition/README.md)
+ * [Spinner Dialog](plugins/spinner-dialog/README.md)
+ * [Splash Screen](plugins/splash-screen/README.md)
+ * [Spotify Auth](plugins/spotify-auth/README.md)
+ * [SQLite](plugins/sqlite/README.md)
+ * [Sqlite Db Copy](plugins/sqlite-db-copy/README.md)
+ * [SQLite Porter](plugins/sqlite-porter/README.md)
+ * [SSLCertificateChecker](plugins/ssl-certificate-checker/README.md)
+ * [StarPRNT](plugins/star-prnt/README.md)
+ * [Status Bar](plugins/status-bar/README.md)
+ * [Streaming Media](plugins/streaming-media/README.md)
+ * [Stripe](plugins/stripe/README.md)
+ * [SumUp](plugins/sum-up/README.md)
+ * [System Alert Window Permission](plugins/system-alert-window-permission/README.md)
+ * [Taptic Engine](plugins/taptic-engine/README.md)
+ * [Tealium](plugins/tealium/README.md)
+ * [TealiumAdIdentifier](plugins/tealium-adidentifier/README.md)
+ * [TealiumInstallReferrer](plugins/tealium-installreferrer/README.md)
+ * [Text To Speech Advanced](plugins/text-to-speech-advanced/README.md)
+ * [Theme Detection](plugins/theme-detection/README.md)
+ * [Toast](plugins/toast/README.md)
+ * [Touch ID](plugins/touch-id/README.md)
+ * [Unique Device ID](plugins/unique-device-id/README.md)
+ * [Unvired Cordova SDK](plugins/unvired-cordova-sdk/README.md)
+ * [Uptime](plugins/uptime/README.md)
+ * [UrbanAirShip](plugins/urbanairship/README.md)
+ * [Usabilla](plugins/usabilla-cordova-sdk/README.md)
+ * [Vibes](plugins/vibes/README.md)
+ * [Vibration](plugins/vibration/README.md)
+ * [Video Editor](plugins/video-editor/README.md)
+ * [Video Player](plugins/video-player/README.md)
+ * [WE Cap Inbox](plugins/we-cap-inbox/README.md)
+ * [Web Intent](plugins/web-intent/README.md)
+ * [Web Server](plugins/web-server/README.md)
+ * [Webengage](plugins/webengage/README.md)
+ * [Webim](plugins/webim/README.md)
+ * [WebSocket Server](plugins/web-socket-server/README.md)
+ * [Wechat](plugins/wechat/README.md)
+ * [WheelSelector Plugin](plugins/wheel-selector/README.md)
+ * [WifiWizard2](plugins/wifi-wizard-2/README.md)
+ * [Youtube Video Player](plugins/youtube-video-player/README.md)
+ * [ZBar](plugins/zbar/README.md)
+ * [Zeroconf](plugins/zeroconf/README.md)
+ * [Zip](plugins/zip/README.md)
+ * [Zoom](plugins/zoom/README.md)
diff --git a/docs/faq.md b/docs/faq.md
index aaca9c36a..d5e2b09f3 100644
--- a/docs/faq.md
+++ b/docs/faq.md
@@ -1,87 +1,80 @@
# FAQ
-### [Cordova Management Tips](https://ionicframework.com/docs/native/community#cordova-management-tips)
+### Cordova Management Tips
-**1\) Use the** [**Ionic CLI**](https://ionicframework.com/docs/cli) **to add/update/delete plugins.**
+**1) Use the [Ionic CLI](https://ionicframework.com/docs/cli) to add/update/delete plugins.**
-Instead of directly editing `config.xml` and `package.json`. Use `ionic` in front of Cordova commands for a better experience and additional functionality \(`ionic cordova build ios` instead of `cordova build ios`\).
+Instead of directly editing `config.xml` and `package.json`. Use `ionic` in front of Cordova commands for a better experience and additional functionality (`ionic cordova build ios` instead of `cordova build ios`).
-**2\) Upgrade plugins by removing, then re-adding them.**
+**2) Upgrade plugins by removing, then re-adding them.**
-```text
-$ ionic cordova plugin remove cordova-plugin-camera
-$ ionic cordova plugin add cordova-plugin-camera
+```bash
+ionic cordova plugin remove cordova-plugin-camera
+ionic cordova plugin add cordova-plugin-camera
```
-**3\) Install explicit versions.**
+**3) Install explicit versions.**
To ensure that the same version of a plugin is always installed via `npm install`, specify the version number:
-```text
-$ ionic cordova plugin add cordova-plugin-camera@4.3.2
+```bash
+ionic cordova plugin add cordova-plugin-camera@4.3.2
```
-**4\) Restore Cordova in an existing Ionic project**
+**4) Restore Cordova in an existing Ionic project**
Useful when adding new developers to a project. `ionic cordova prepare` restores platforms and plugins from `package.json` and `config.xml`. The version to be installed is taken from `package.json` or `config.xml`, if found in those files. In case of conflicts, `package.json` is given precedence over `config.xml`.
-**5\) Troubleshoot Cordova issues with Ionic CLI commands**
+**5) Troubleshoot Cordova issues with Ionic CLI commands**
* `ionic doctor list`: Detects [common issues](https://ionicframework.com/docs/cli/commands/doctor-list) and suggests steps to fix them
* `ionic repair`: Remove, then [regenerate](https://ionicframework.com/docs/cli/commands/repair) all dependencies
-### [Understanding Version Numbers](https://ionicframework.com/docs/native/community#understanding-version-numbers)
+### Understanding Version Numbers
-For any given Ionic Native plugin, the Ionic Native \(TypeScript code\) and Cordova \(native code\) version numbers will not match. The Ionic Native version number is found in `package.json`:
+For any given plugin, the Awesome Cordova Plugins (TypeScript code) and Cordova (native code) version numbers will not match. The Awesome Cordova Plugins version number is found in `package.json`:
-```text
-"@ionic-native/camera": "^5.3.0",
+```json
+"@awesome-cordova-plugins/camera": "^6.0.0"
```
-CopyCopied
-
The Cordova plugin version number is found in both `package.json` and `config.xml`:
-```text
-"cordova-plugin-camera": "4.0.3",
+```json
+"cordova-plugin-camera": "4.0.3"
```
-CopyCopied
-
-```text
+```xml
```
-CopyCopied
+When checking for new native functionality or bug fixes, look for new versions on the Cordova plugin GitHub page itself (here's the [Camera one](https://github.com/apache/cordova-plugin-camera), for example).
-When checking for new native functionality or bug fixes, look for new versions on the Cordova plugin GitHub page itself \(here's the [Camera one](https://github.com/apache/cordova-plugin-camera), for example\).
+To check for new Awesome Cordova Plugins releases (may include exposing methods recently added by the Cordova plugin, etc.), see the [releases page](https://github.com/danielsogl/awesome-cordova-plugins/releases).
-To check for new Ionic Native releases \(may include exposing methods recently added by the Cordova plugin, etc.\), see [here](https://github.com/ionic-team/ionic-native/releases).
+### Troubleshooting Failed Builds
-### [Troubleshooting Failed Builds](https://ionicframework.com/docs/native/community#troubleshooting-failed-builds)
-
-Research the build error\(s\) by checking out these resources:
+Research the build error(s) by checking out these resources:
* Google & [StackOverflow](https://stackoverflow.com/): Many issues are documented online
-* Ask the [Ionic Community Ionic Forum](https://forum.ionicframework.com/) \(see the Ionic Native category\)
-* See the Ionic Customer Success [Knowledge Base](https://ionic.zendesk.com/)
+* Ask the [Ionic Community Forum](https://forum.ionicframework.com/)
+* Check the plugin's GitHub issues page
-#### [Cordova Plugin Conflicts](https://ionicframework.com/docs/native/community#cordova-plugin-conflicts)
+#### Cordova Plugin Conflicts
-Plugins can conflict with each other when they share the same underlying native dependencies or when more than one plugin tries to access the same native code at once. For example, common libraries like the Google Play Services version \(Google Maps is using GPS v24.2 but Firebase wants GPS v27.1\). Keeping these plugins updated regularly can help with this.
+Plugins can conflict with each other when they share the same underlying native dependencies or when more than one plugin tries to access the same native code at once. For example, common libraries like the Google Play Services version (Google Maps is using GPS v24.2 but Firebase wants GPS v27.1). Keeping these plugins updated regularly can help with this.
-Another tip is to ensure that your app uses only one plugin per specific feature/functionality \(example: Push Notifications\).
+Another tip is to ensure that your app uses only one plugin per specific feature/functionality (example: Push Notifications).
-### [Recommended Upgrade Strategy](https://ionicframework.com/docs/native/community#recommended-upgrade-strategy)
+### Recommended Upgrade Strategy
-The most Ionic stable apps are routinely updated, especially at the native layer. Keeping native plugins up to date ensures your project has the latest security fixes, new features, and improved performance.
+The most stable apps are routinely updated, especially at the native layer. Keeping native plugins up to date ensures your project has the latest security fixes, new features, and improved performance.
-Update your project's plugins one at a time, ideally in separate code branches. This reduces the surface area that issues can arise from - if you update everything in your project at once, it's sometimes hard to tell where the problem stems from.
+Update your project's plugins one at a time, ideally in separate code branches. This reduces the surface area that issues can arise from — if you update everything in your project at once, it's sometimes hard to tell where the problem stems from.
-#### [When should I update?](https://ionicframework.com/docs/native/community#when-should-i-update-)
+#### When should I update?
-* When a new feature/bug is released: Run `npm outdated` to see a list of available updates.
-* When new major versions are released: Official blogs, such as the [Cordova blog](https://cordova.apache.org/blog/)and [Ionic blog](https://ionicframework.com/blog/), will publish announcements and news.
+* When a new feature/bug fix is released: Run `npm outdated` to see a list of available updates.
+* When new major versions are released: Official blogs, such as the [Cordova blog](https://cordova.apache.org/blog/) and [Ionic blog](https://ionicframework.com/blog/), will publish announcements and news.
* Evaluate the nature of the update: is it a shiny new feature or critical security fix?
* Timing: Where does it fit in against your team's project goals?
-
diff --git a/docs/installation.md b/docs/installation.md
index 1599685f7..72762152c 100644
--- a/docs/installation.md
+++ b/docs/installation.md
@@ -1,22 +1,18 @@
# Installation
-[Apache Cordova](https://cordova.apache.org/) is an open source native runtime that allows developers to build native mobile apps with HTML, CSS, and JavaScript. Similar to [Capacitor](https://capacitorjs.com/), Ionic’s own native runtime, Cordova allows developers to access native device features, such as camera, keyboard, and geolocation, using a system of plugins. A plugin is a small amount of add-on code that provides JavaScript interface to native components. They allow your app to use native device capabilities beyond what is available to pure web apps.
+[Apache Cordova](https://cordova.apache.org/) is an open source native runtime that allows developers to build native mobile apps with HTML, CSS, and JavaScript. Similar to [Capacitor](https://capacitorjs.com/), Ionic's own native runtime, Cordova allows developers to access native device features, such as camera, keyboard, and geolocation, using a system of plugins. A plugin is a small amount of add-on code that provides JavaScript interface to native components. They allow your app to use native device capabilities beyond what is available to pure web apps.
-For developers using Ionic with Cordova, our team has developed a collection of TypeScript wrappers for open source Cordova plugins that make it easy to add native functionality to any Ionic app. See [Ionic Native](https://github.com/ionic-team/ionic-native).
+These plugins are submitted and maintained by the community. While community members are generally quick to find and fix issues, certain plugins may not function properly.
-These plugins are submitted and maintained by the Ionic community. While community members are generally quick to find and fix issues, certain plugins may not function properly.
-
-For professional developers and teams that require dedicated native plugin support & SLAs, ongoing maintenance, and security patches, please explore our [premium options](https://ionicframework.com/native), including plugin support and pre-built solutions for common native use cases.
-
-### [Capacitor Support](https://ionicframework.com/docs/native/community#capacitor-support)
+### Capacitor Support
In addition to Cordova, Awesome Cordova Plugins also works with [Capacitor](https://capacitorjs.com/), Ionic's official native runtime. Basic usage below. For complete details, [see the Capacitor documentation](https://capacitorjs.com/docs/cordova/using-cordova-plugins).
-### [Usage](https://ionicframework.com/docs/native/community#usage)
+### Usage
All plugins have two components - the native code (Cordova) and the TypeScript code (Awesome Cordova Plugins). Cordova plugins are also wrapped in a `Promise` or `Observable` in order to provide a common plugin interface and modernized development approach.
-Using the [Camera plugin](https://ionicframework.com/docs/native/camera) as an example, first install it:
+Using the [Camera plugin](plugins/camera.md) as an example, first install it:
```bash
# Install Cordova plugin
@@ -29,9 +25,9 @@ npm install @awesome-cordova-plugins/camera
npm install @awesome-cordova-plugins/core
```
-Next, begin using the plugin, following the various framework usage options below. For FAQ, see [here](https://ionicframework.com/docs/native/faq).
+Next, begin using the plugin, following the various framework usage options below. For FAQ, see [here](faq.md).
-### [Angular (Standalone)](https://ionicframework.com/docs/native/community#angular)
+### Angular (Standalone)
Angular apps can use either Cordova or Capacitor to build native mobile apps. Register the plugin as a provider in your application bootstrap. For Angular, the import path should end with `/ngx`. Angular's change detection is automatically handled.
@@ -80,7 +76,7 @@ export class PhotoService {
}
```
-### [React](https://ionicframework.com/docs/native/community#react)
+### React
React apps must use Capacitor to build native mobile apps. However, Awesome Cordova Plugins (and therefore, Cordova plugins) can still be used.
@@ -123,7 +119,7 @@ const Tab1: React.FC = () => {
};
```
-### [ES2015+/TypeScript](https://ionicframework.com/docs/native/community#vanilla-javascript)
+### ES2015+/TypeScript
ES2015+ and TypeScript apps can use either Cordova or Capacitor to build native mobile apps. To use any plugin, import the class from the appropriate package and use its static methods:
@@ -136,4 +132,3 @@ document.addEventListener('deviceready', () => {
.catch((e) => console.log('Error occurred while taking a picture', e));
});
```
-
diff --git a/docs/plugins/README.md b/docs/plugins/README.md
index c21e584cb..38045c371 100644
--- a/docs/plugins/README.md
+++ b/docs/plugins/README.md
@@ -1,20 +1,23 @@
# Plugins
-## 15.0.0 - 2042-12-03
+Browse the full list of available plugin wrappers in the sidebar. Each plugin page includes:
-### Fixed
+- **Installation commands** for the Cordova plugin and TypeScript wrapper
+- **Link to the plugin repository** for native documentation
+- **Supported platforms** (Android, iOS, Browser, etc.)
-* Removed humans, they weren't doing fine with animals.
+## Installing a Plugin
-### Changed
+Every plugin requires two packages: the native Cordova plugin and the Awesome Cordova Plugins TypeScript wrapper.
-* Animals are now super cute, all of them.
-
-## 14.0.0 - 2042-10-06
-
-### Added
-
-* Introduced animals into the world, we believe they're going to be a neat addition.
+```bash
+# Install the Cordova plugin
+ionic cordova plugin add
+# Install the TypeScript wrapper
+npm install @awesome-cordova-plugins/
+```
+## Missing a Plugin?
+If you can't find a plugin wrapper, [open an issue](https://github.com/danielsogl/awesome-cordova-plugins/issues) or [submit a PR](https://github.com/danielsogl/awesome-cordova-plugins/blob/main/DEVELOPER.md) to add it.
diff --git a/docs/plugins/admob-plus/README.md b/docs/plugins/admob-plus/README.md
index 3b87ad062..76b0168ca 100644
--- a/docs/plugins/admob-plus/README.md
+++ b/docs/plugins/admob-plus/README.md
@@ -1,4 +1,4 @@
-# AdMob
+# AdMob Plus
```
$ ionic cordova plugin add cordova-admob-plus
@@ -9,6 +9,8 @@ $ npm install @awesome-cordova-plugins/admob-plus
Plugin Repo: [https://github.com/admob-plus/admob-plus](https://github.com/admob-plus/admob-plus)
+AdMob Plus is the successor of cordova-plugin-admob-free, which provides a cleaner API and build with modern tools.
+
## Supported platforms
- Android
diff --git a/docs/plugins/background-geolocation/README.md b/docs/plugins/background-geolocation/README.md
index dba05e670..aa3ae5ee1 100644
--- a/docs/plugins/background-geolocation/README.md
+++ b/docs/plugins/background-geolocation/README.md
@@ -15,7 +15,5 @@ more detail, please see https://github.com/mauron85/cordova-plugin-background-ge
## Supported platforms
- Android
- - iOS
-
-
+- iOS
diff --git a/docs/plugins/fabric/README.md b/docs/plugins/fabric/README.md
index 0d894a505..5d8ab82d2 100644
--- a/docs/plugins/fabric/README.md
+++ b/docs/plugins/fabric/README.md
@@ -1,4 +1,4 @@
-# Answers
+# Crashlytics
```
$ ionic cordova plugin add cordova-fabric-plugin --variable FABRIC_API_KEY=XXX --variable FABRIC_API_SECRET=xxx
@@ -9,7 +9,7 @@ $ npm install @awesome-cordova-plugins/fabric
Plugin Repo: [https://www.npmjs.com/package/cordova-fabric-plugin](https://www.npmjs.com/package/cordova-fabric-plugin)
-API for interacting with the Answers kit.
+API for interacting with the Crashlytics kit.
https://docs.fabric.io/crashlytics/index.html
diff --git a/docs/plugins/hyper-track/README.md b/docs/plugins/hyper-track/README.md
index 1d4febf12..4fe273c1f 100644
--- a/docs/plugins/hyper-track/README.md
+++ b/docs/plugins/hyper-track/README.md
@@ -1,4 +1,4 @@
-# HyperTrackPlugin
+# cordova-plugin-hypertrack-v3
```
$ ionic cordova plugin add cordova-plugin-hypertrack-v3
diff --git a/docs/plugins/preview-any-file/README.md b/docs/plugins/preview-any-file/README.md
index d3513ab17..beae94d02 100644
--- a/docs/plugins/preview-any-file/README.md
+++ b/docs/plugins/preview-any-file/README.md
@@ -1,4 +1,4 @@
-# PreviewAnyFile
+# Preview/Open Any File
```
$
diff --git a/scripts/docs/generate-readmes.ts b/scripts/docs/generate-readmes.ts
index e4f63ffff..60fb4c529 100644
--- a/scripts/docs/generate-readmes.ts
+++ b/scripts/docs/generate-readmes.ts
@@ -27,6 +27,7 @@ import {
const ROOT = resolve(__dirname, '../..');
const PLUGINS_SRC = join(ROOT, 'src/@awesome-cordova-plugins/plugins');
+const DOCS_DIR = join(ROOT, 'docs');
const DOCS_OUT = join(ROOT, 'docs/plugins');
interface PluginMeta {
@@ -57,30 +58,37 @@ function parseLiteralValue(node: Node): string | number | boolean | string[] | u
function extractPluginMeta(symbol: TsSymbol | undefined): PluginMeta | undefined {
if (!symbol) return undefined;
- const decl = symbol.declarations?.[0];
- if (!decl || !isClassDeclaration(decl)) return undefined;
+ const declarations = symbol.declarations;
+ if (!declarations) return undefined;
- const decorators = getDecorators(decl);
- if (!decorators) return undefined;
+ // A symbol may have multiple declarations (e.g. an interface and a class
+ // sharing the same name). Search all declarations for the @Plugin() decorator.
+ for (const decl of declarations) {
+ if (!isClassDeclaration(decl)) continue;
- const pluginDec = decorators.find((d) => {
- const expr = d.expression;
- return isCallExpression(expr) && isIdentifier(expr.expression) && expr.expression.text === 'Plugin';
- });
- if (!pluginDec) return undefined;
+ const decorators = getDecorators(decl);
+ if (!decorators) continue;
- const callExpr = pluginDec.expression;
- if (!isCallExpression(callExpr)) return undefined;
+ const pluginDec = decorators.find((d) => {
+ const expr = d.expression;
+ return isCallExpression(expr) && isIdentifier(expr.expression) && expr.expression.text === 'Plugin';
+ });
+ if (!pluginDec) continue;
- const args = callExpr.arguments[0];
- if (!args || !isObjectLiteralExpression(args)) return undefined;
+ const callExpr = pluginDec.expression;
+ if (!isCallExpression(callExpr)) continue;
- const meta: Record = {};
- for (const prop of args.properties) {
- if (!isPropertyAssignment(prop) || !isIdentifier(prop.name)) continue;
- meta[prop.name.text] = parseLiteralValue(prop.initializer);
+ const args = callExpr.arguments[0];
+ if (!args || !isObjectLiteralExpression(args)) continue;
+
+ const meta: Record = {};
+ for (const prop of args.properties) {
+ if (!isPropertyAssignment(prop) || !isIdentifier(prop.name)) continue;
+ meta[prop.name.text] = parseLiteralValue(prop.initializer);
+ }
+ return meta as unknown as PluginMeta;
}
- return meta as unknown as PluginMeta;
+ return undefined;
}
function getCommentText(reflection: DeclarationReflection): string {
@@ -197,7 +205,6 @@ async function main(): Promise {
} as unknown as Parameters[0]);
// Extract @Plugin() decorator metadata during TypeScript conversion
- // @ts-expect-error — Converter extends EventDispatcher but 'on' is not in public type exports
app.converter.on(
Converter.EVENT_CREATE_DECLARATION,
(context: Context, reflection: DeclarationReflection) => {
@@ -224,6 +231,8 @@ async function main(): Promise {
mkdirSync(coreDocsDir, { recursive: true });
cpSync(join(ROOT, 'README.md'), join(coreDocsDir, 'README.md'));
+ // Track one entry per plugin slug for SUMMARY.md generation
+ const pluginEntries = new Map();
let count = 0;
for (const reflection of project.getReflectionsByKind(ReflectionKind.Class)) {
@@ -239,9 +248,13 @@ async function main(): Promise {
if (!slugMatch) continue;
const pluginSlug = slugMatch[1];
- const pluginName = getTagValue(classRef, 'name') ?? classRef.name;
+ const pluginName = getTagValue(classRef, 'name') ?? meta.pluginName ?? classRef.name;
const description = getCommentText(classRef);
+ // Only use the first class encountered per plugin slug (the main plugin class)
+ if (pluginEntries.has(pluginSlug)) continue;
+ pluginEntries.set(pluginSlug, pluginName);
+
const readmeContent = generateReadme(pluginName, pluginSlug, description, meta);
const outDir = join(DOCS_OUT, pluginSlug);
mkdirSync(outDir, { recursive: true });
@@ -249,7 +262,25 @@ async function main(): Promise {
count++;
}
- console.log(`${count} README files generated`);
+ // Generate SUMMARY.md
+ const sortedEntries = [...pluginEntries.entries()].sort((a, b) =>
+ a[1].localeCompare(b[1], undefined, { sensitivity: 'base' })
+ );
+
+ let summary = `# Table of contents\n\n`;
+ summary += `* [Welcome](README.md)\n`;
+ summary += `* [Installation](installation.md)\n`;
+ summary += `* [FAQ](faq.md)\n\n`;
+ summary += `## Plugins\n\n`;
+ summary += `* [Overview](plugins/README.md)\n`;
+
+ for (const [slug, name] of sortedEntries) {
+ summary += ` * [${name}](plugins/${slug}/README.md)\n`;
+ }
+
+ writeFileSync(join(DOCS_DIR, 'SUMMARY.md'), summary, 'utf-8');
+ console.log(`${count} plugin README files generated`);
+ console.log(`SUMMARY.md generated with ${sortedEntries.length} plugin entries`);
}
main().catch((err: unknown) => {