Capture audio clips across iOS, Android, and the Web with a consistent Capacitor API.
The only free and up-to-date audio recording plugin for Capacitor:
- Same JavaScript API - Compatible interface with paid plugins
- Full feature set - Pause/resume, configurable bitrates, sample rates
- Cross-platform - iOS, Android, and Web support
- Modern implementation - Uses latest platform APIs
- Event listeners - Real-time recording status and error handling
Perfect for voice memo apps, audio messaging, podcast recording, and any app needing audio capture.
The most complete doc is available here: https://capgo.app/docs/plugins/audio-recorder/
npm install @capgo/capacitor-audio-recorder
npx cap syncstartRecording(...)pauseRecording()resumeRecording()stopRecording()cancelRecording()getRecordingStatus()checkPermissions()requestPermissions()addListener('recordingError', ...)addListener('recordingPaused', ...)addListener('recordingStopped', ...)removeAllListeners()getPluginVersion()- Interfaces
- Type Aliases
- Enums
Capacitor plugin contract for recording audio.
startRecording(options?: StartRecordingOptions | undefined) => Promise<void>Start recording audio using the device microphone.
| Param | Type | Description |
|---|---|---|
options |
StartRecordingOptions |
Recording configuration options. |
Since: 1.0.0
pauseRecording() => Promise<void>Pause the ongoing recording. Only available on Android (API 24+), iOS, and Web.
Since: 1.0.0
resumeRecording() => Promise<void>Resume a previously paused recording.
Since: 1.0.0
stopRecording() => Promise<StopRecordingResult>Stop the current recording and persist the recorded audio.
Returns: Promise<StopRecordingResult>
Since: 1.0.0
cancelRecording() => Promise<void>Cancel the current recording and discard any captured audio.
Since: 1.0.0
getRecordingStatus() => Promise<GetRecordingStatusResult>Retrieve the current recording status.
Returns: Promise<GetRecordingStatusResult>
Since: 1.0.0
checkPermissions() => Promise<PermissionStatus>Return the current permission state for accessing the microphone.
Returns: Promise<PermissionStatus>
Since: 1.0.0
requestPermissions() => Promise<PermissionStatus>Request permission to access the microphone.
Returns: Promise<PermissionStatus>
Since: 1.0.0
addListener(eventName: 'recordingError', listenerFunc: (event: RecordingErrorEvent) => void) => Promise<PluginListenerHandle>Listen for recording errors.
| Param | Type |
|---|---|
eventName |
'recordingError' |
listenerFunc |
(event: RecordingErrorEvent) => void |
Returns: Promise<PluginListenerHandle>
Since: 1.0.0
addListener(eventName: 'recordingPaused', listenerFunc: () => void) => Promise<PluginListenerHandle>Listen for pause events emitted when a recording is paused.
| Param | Type |
|---|---|
eventName |
'recordingPaused' |
listenerFunc |
() => void |
Returns: Promise<PluginListenerHandle>
Since: 1.0.0
addListener(eventName: 'recordingStopped', listenerFunc: (event: RecordingStoppedEvent) => void) => Promise<PluginListenerHandle>Listen for recording completion events.
| Param | Type |
|---|---|
eventName |
'recordingStopped' |
listenerFunc |
(event: StopRecordingResult) => void |
Returns: Promise<PluginListenerHandle>
Since: 1.0.0
removeAllListeners() => Promise<void>Remove all registered listeners.
Since: 1.0.0
getPluginVersion() => Promise<{ version: string; }>Get the native Capacitor plugin version.
Returns: Promise<{ version: string; }>
Since: 1.0.0
Options accepted by {@link CapacitorAudioRecorderPlugin.startRecording}.
| Prop | Type | Description | Since |
|---|---|---|---|
audioSessionCategoryOptions |
AudioSessionCategoryOption[] |
The audio session category options for recording. Only available on iOS. | 1.0.0 |
audioSessionMode |
AudioSessionMode |
The audio session mode for recording. Only available on iOS. | 1.0.0 |
bitRate |
number |
The audio bit rate in bytes per second. Only available on Android and iOS. | 1.0.0 |
sampleRate |
number |
The audio sample rate in Hz. Only available on Android and iOS. | 1.0.0 |
Result returned by {@link CapacitorAudioRecorderPlugin.stopRecording}.
| Prop | Type | Description | Since |
|---|---|---|---|
blob |
Blob |
The recorded audio as a Blob. Only available on Web. | 1.0.0 |
duration |
number |
The duration of the recording in milliseconds. | 1.0.0 |
uri |
string |
The URI pointing to the recorded file. Only available on Android and iOS. | 1.0.0 |
Result returned by {@link CapacitorAudioRecorderPlugin.getRecordingStatus}.
| Prop | Type | Description | Since |
|---|---|---|---|
status |
RecordingStatus |
The current recording status. | 1.0.0 |
Permission information returned by {@link CapacitorAudioRecorderPlugin.checkPermissions} and {@link CapacitorAudioRecorderPlugin.requestPermissions}.
| Prop | Type | Description | Since |
|---|---|---|---|
recordAudio |
PermissionState |
The permission state for audio recording. | 1.0.0 |
| Prop | Type |
|---|---|
remove |
() => Promise<void> |
Event emitted when an error occurs during recording.
| Prop | Type | Description | Since |
|---|---|---|---|
message |
string |
The error message. | 1.0.0 |
'prompt' | 'prompt-with-rationale' | 'granted' | 'denied'
Event emitted when a recording completes.
| Members | Value |
|---|---|
AllowAirPlay |
'ALLOW_AIR_PLAY' |
AllowBluetooth |
'ALLOW_BLUETOOTH' |
AllowBluetoothA2DP |
'ALLOW_BLUETOOTH_A2DP' |
DefaultToSpeaker |
'DEFAULT_TO_SPEAKER' |
DuckOthers |
'DUCK_OTHERS' |
InterruptSpokenAudioAndMixWithOthers |
'INTERRUPT_SPOKEN_AUDIO_AND_MIX_WITH_OTHERS' |
MixWithOthers |
'MIX_WITH_OTHERS' |
OverrideMutedMicrophoneInterruption |
'OVERRIDE_MUTED_MICROPHONE_INTERRUPTION' |
| Members | Value |
|---|---|
Default |
'DEFAULT' |
GameChat |
'GAME_CHAT' |
Measurement |
'MEASUREMENT' |
SpokenAudio |
'SPOKEN_AUDIO' |
VideoChat |
'VIDEO_CHAT' |
VideoRecording |
'VIDEO_RECORDING' |
VoiceChat |
'VOICE_CHAT' |
| Members | Value |
|---|---|
Inactive |
'INACTIVE' |
Recording |
'RECORDING' |
Paused |
'PAUSED' |
This plugin was inspired from: https://github.com/kesha-antonov/react-native-background-downloader
