npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@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-recorder in 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 recordAudio to 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-plugins

Then 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 sync

IOS

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):

  • $kotlinVersion version of org.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'
    }
}
an

line 2 in file android/app/build.gradle

Configuration

No configuration required for this plugin.

API

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'