@capgo/capacitor-screen-recorder
v8.4.3
Published
Record device's screen
Readme
Capacitor-screen-recorder
Record the device screen from your Capacitor app, with optional audio, for bug reports, tutorials and demos.
🤖 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-screen-recorderin your Capacitor app:npx skills add Cap-go/capgo-skills. Then ask your agent: "Add @capgo/capacitor-screen-recorder to my Capacitor app and wire it up." Agent setup guides · Hosted MCP
Key features
- Start:
start()begins recording after the system consent prompt. - Stop:
stop()ends the recording. - Audio: set
recordAudioto capture sound with the video. - Native capture: ReplayKit on iOS, saved to the Photos library, and MediaProjection on Android.
- Platforms: iOS and Android. Not available on web.
Documentation
The most complete doc is available here: https://capgo.app/docs/plugins/screen-recorder/
Compatibility
| Plugin version | Capacitor compatibility | Maintained | | -------------- | ----------------------- | ---------- | | v8.*.* | v8.*.* | ✅ | | v7.*.* | v7.*.* | On demand | | v6.*.* | v6.*.* | ❌ | | v5.*.* | v5.*.* | ❌ |
Note: The major version of this plugin follows the major version of Capacitor. Use the version that matches your Capacitor installation (e.g., plugin v8 for Capacitor 8). 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-screen-recorder` 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-screen-recorder
npx cap syncIOS
add NSPhotoLibraryAddUsageDescription in your info.plist
Android
increase project's minSdk version to 23, it's required by the dependency HBRecorder
Add these permissions in your AndroidManifest.xml:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION" />Add JitPack Repository
Add JitPack repository to your Android app's build.gradle (android/app/build.gradle):
allprojects {
repositories {
google()
mavenCentral()
maven { url 'https://jitpack.io/' }
}
}Variables
This plugin will use the following project variables (defined in your app's variables.gradle file):
$kotlinVersionversion oforg.jetbrains.kotlin:kotlin-stdlib-jdk7(default:1.7.21)
If you have compilation issue Duplicate class androidx.lifecycle.ViewModelLazy
i found in this the solution who worked for me:
https://stackoverflow.com/questions/73406969/duplicate-class-androidx-lifecycle-viewmodellazy-found-in-modules-lifecycle-view
Add this
configurations {
all {
exclude group: 'androidx.lifecycle', module: 'lifecycle-runtime-ktx'
exclude group: 'androidx.lifecycle', module: 'lifecycle-viewmodel-ktx'
}
}
anline 2 in file android/app/build.gradle
Configuration
No configuration required for this plugin.
API
start(...)stop()addListener('onStopped', ...)removeAllListeners()getPluginVersion()- Interfaces
- Type Aliases
Capacitor Screen Recorder Plugin for recording the device screen. Allows you to capture video recordings of the screen with optional audio.
start(...)
start(options?: StartRecordingOptions | undefined) => Promise<void>Start recording the device screen.
Initiates screen recording with optional audio capture. The user will be prompted to grant screen recording permissions if not already granted. On iOS, the system recording UI will be displayed. On Android, the recording starts immediately after permission is granted.
| Param | Type | Description |
| ------------- | ----------------------------------------------------------------------- | --------------------------------- |
| options | StartRecordingOptions | - Recording configuration options |
Since: 1.0.0
stop()
stop() => Promise<void>Stop the current screen recording.
Stops the active screen recording and saves the video to the device's camera roll or gallery. On iOS, the system will show a preview of the recording. On Android, the video is saved directly to the gallery.
Since: 1.0.0
addListener('onStopped', ...)
addListener(eventName: 'onStopped', listenerFunc: (event: ScreenRecorderStoppedEvent) => void) => Promise<PluginListenerHandle>Listen for recordings that ended without {@link stop} being called.
| Param | Type | Description |
| ------------------ | ----------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| eventName | 'onStopped' | - onStopped |
| listenerFunc | (event: ScreenRecorderStoppedEvent) => void | - Called with a ScreenRecorderStoppedEvent (url and optional error) when the recording ended outside stop(). |
Returns: Promise<PluginListenerHandle>
Since: 8.4.0
removeAllListeners()
removeAllListeners() => Promise<void>Remove all listeners registered with {@link addListener}.
Since: 8.4.0
getPluginVersion()
getPluginVersion() => Promise<{ version: string; }>Get the native Capacitor plugin version.
Returns: Promise<{ version: string; }>
Since: 1.0.0
Interfaces
StartRecordingOptions
Options for {@link ScreenRecorderPlugin.start}.
| Prop | Type | Description | Default | Since |
| ----------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | ----- |
| recordAudio | boolean | Whether to record audio along with the screen video. | false | 1.0.0 |
| format | ScreenRecorderVideoFormat | 'video/mp4' | 'video/quicktime' | Video container format for the saved recording. Accepts mp4, mov, or MIME types video/mp4 and video/quicktime. iOS supports both mp4 and mov. Android records MPEG-4 (.mp4) regardless of this value. | 'mp4' | 8.3.0 |
PluginListenerHandle
| Prop | Type |
| ------------ | ----------------------------------------- |
| remove | () => Promise<void> |
ScreenRecorderStoppedEvent
Payload for the onStopped event.
Fired when a recording ends without {@link ScreenRecorderPlugin.stop} being called: the user stopped capture from the system UI (Android "Stop sharing"), the recorder hit a limit (max duration or max file size), or the system interrupted capture (iOS, for example an incoming call).
| Prop | Type | Description | Since |
| ----------- | ------------------- | ------------------------------------------------------------------------------------------------------------------ | ----- |
| url | string | Local URI of the finished recording (file:// on Android). Empty string when the file path could not be resolved. | 8.4.0 |
| error | string | Error message when the recording ended with a failure. | 8.4.0 |
Type Aliases
ScreenRecorderVideoFormat
Supported video container formats for screen recordings.
'mp4' | 'mov'
