@capgo/capacitor-privacy-screen
v8.3.14
Published
Protect app content in Android screenshots and obscure the iOS app switcher snapshot.
Readme
@capgo/capacitor-privacy-screen
Keep sensitive screens private in your Capacitor app: block screenshots and screen recording on Android and hide your content in the iOS app switcher. Built for banking, health and messaging apps.
🤖 Building with an AI coding agent? Install Capgo skills so Claude Code, Codex, Cursor, Copilot, or Gemini CLI know how to install and use
@capgo/capacitor-privacy-screenin your Capacitor app:npx skills add Cap-go/capgo-skills. Then ask your agent: "Add @capgo/capacitor-privacy-screen to my Capacitor app and wire it up." Agent setup guides · Hosted MCP
Key features
- Enable and disable:
enable()anddisable()turn protection on and off at runtime. - Android: sets
FLAG_SECURE, which blocks screenshots and screen recording, with a configurable overlay in recent apps. - iOS: hides app content from the app switcher snapshot with a light or dark blur, or your launch screen.
- State:
isEnabled()reports the current state. - Platforms: iOS and Android. A Capacitor port of PrivacyScreenPlugin. Web only tracks the enabled state.
Protect sensitive app content from appearing in Android screenshots and iOS app-switcher previews.
Capgo's Privacy Screen plugin is a Capacitor port of PrivacyScreenPlugin with a modern native implementation for Capacitor 8.
Documentation
The most complete doc is available here: https://capgo.app/docs/plugins/privacy-screen/
Compatibility
| Plugin version | Capacitor compatibility | Maintained | | -------------- | ----------------------- | ---------- | | v8.*.* | v8.*.* | ✅ | | v7.*.* | v7.*.* | On demand | | v6.*.* | v6.*.* | ❌ |
Note: The major version of this plugin follows the major version of Capacitor. Use the version that matches your Capacitor installation. Only the latest major version is actively maintained.
Install
You can use our AI-Assisted Setup to install the plugin. Add the Capgo skills to your AI tool using the following command:
npx skills add https://github.com/cap-go/capacitor-skills --skill capacitor-pluginsThen use the following prompt:
Use the `capacitor-plugins` skill from `cap-go/capacitor-skills` to install the `@capgo/capacitor-privacy-screen` 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 @capgo/capacitor-privacy-screen
npx cap syncConfiguration
Protection is disabled by default. Enable it on native startup with Capacitor config:
import type { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = {
appId: 'com.example.app',
appName: 'Example',
webDir: 'dist',
plugins: {
PrivacyScreen: {
enabled: true,
android: {
dimBackground: true,
privacyModeOnActivityHidden: 'splash',
},
ios: {
blurEffect: 'dark',
},
},
},
};
export default config;Usage
import { PrivacyScreen } from '@capgo/capacitor-privacy-screen';
await PrivacyScreen.enable({
android: {
dimBackground: true,
privacyModeOnActivityHidden: 'splash',
},
ios: {
blurEffect: 'dark',
},
});
const { enabled } = await PrivacyScreen.isEnabled();
await PrivacyScreen.disable();
await PrivacyScreen.enable();
// Perform a flow where screenshots or previews should be protected.
await PrivacyScreen.disable();Use JavaScript calls when protection should only apply to specific screens or flows.
Behavior
- Android uses
WindowManager.LayoutParams.FLAG_SECURE, which hides app content from screenshots, screen recording, and the recent apps preview. - Android can show a temporary dim or splash overlay for recent-apps and activity-hidden states.
- iOS places app content in a secure rendering subtree while enabled and adds a temporary overlay while the app resigns active so the app-switcher snapshot does not expose your content, with optional light or dark blur.
- Web keeps an in-memory enabled flag for API parity, but browsers cannot enforce native privacy-screen behavior.
API
Capacitor API for protecting app content from screenshots, screen recording, and native app-switcher previews.
enable(...)
enable(config?: PrivacyScreenConfig | undefined) => Promise<PrivacyScreenActionResult>Enables privacy screen protection.
On Android this sets FLAG_SECURE, which also blocks screenshots and screen recording.
On iOS this places app content in a secure rendering subtree while enabled
and adds an overlay while the app is backgrounded so app content does not
appear in the app-switcher snapshot.
| Param | Type | Description |
| ------------ | ------------------------------------------------------------------- | ------------------------------------ |
| config | PrivacyScreenConfig | Optional platform-specific behavior. |
Returns: Promise<PrivacyScreenActionResult>
disable()
disable() => Promise<PrivacyScreenActionResult>Disables privacy screen protection.
Use this only when you explicitly want the current screen to remain visible in system previews.
Returns: Promise<PrivacyScreenActionResult>
isEnabled()
isEnabled() => Promise<PrivacyScreenStatus>Returns the current enabled state.
Returns: Promise<PrivacyScreenStatus>
getPluginVersion()
getPluginVersion() => Promise<PluginVersionResult>Returns the native implementation version marker.
Returns: Promise<PluginVersionResult>
Interfaces
PrivacyScreenActionResult
Result returned when privacy protection is toggled.
| Prop | Type | Description |
| ------------- | -------------------- | --------------------------------------- |
| success | boolean | Whether the native operation completed. |
PrivacyScreenConfig
Native startup and runtime configuration for privacy protection.
| Prop | Type | Description | Default |
| ------------- | ---------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | ------------------ |
| enabled | boolean | Enable privacy protection automatically when the native plugin loads. This option is read from Capacitor config only. | false |
| android | { dimBackground?: boolean; preventScreenshots?: boolean; privacyModeOnActivityHidden?: 'none' | 'dim' | 'splash'; } | Android-only behavior. | |
| ios | { blurEffect?: 'none' | 'light' | 'dark'; } | iOS-only behavior. | |
PrivacyScreenStatus
Current privacy screen state.
| Prop | Type | Description |
| ------------- | -------------------- | ------------------------------------------------ |
| enabled | boolean | Whether privacy protection is currently enabled. |
PluginVersionResult
Plugin version payload.
| Prop | Type | Description |
| ------------- | ------------------- | ----------------------------------------------------------- |
| version | string | Version identifier returned by the platform implementation. |
