# rrweb: Recorder API
URL: https://generaltranslation.com/en-US/docs/rrweb/reference/recorder.mdx
---
title: Recorder API
description: Capture an rrweb event stream and localized text overlay. Reference for the gt-rrweb recorder API.
---
Import recorder values from `gt-rrweb`. Recording requires React and the optional `@rrweb/record` peer dependency.
## Overview [#overview]
| API | Description |
| --- | --- |
| [`GTRecorder`](#gt-recorder) | Mounts recorder configuration and the recording overlay. |
| [`useRecorder`](#use-recorder) | Starts and stops the module-level recorder. |
| [`RecordingOverlay`](#recording-overlay) | Renders the built-in stop control in a portal. |
| [`RecorderBundle`](#recorder-bundle) | Completed event stream, locale list, and overlay. |
| [`RecorderConfig`](#recorder-config) | Source-first locale list passed to `start()`. |
| [`RecorderStatus`](#recorder-status) | Recorder lifecycle state. |
| [`FrameOption`](#frame-option) | Capture frame configuration. |
| [`DEFAULT_CONTENT_SELECTOR`](#content-selector) | Default framed content selector. |
| [`GT_EVENT`](#gt-event) | Custom rrweb event tags embedded in the stream. |
## `GTRecorder` [#gt-recorder]
Mount `GTRecorder` once inside the app's translation provider. It renders nothing while idle and shows `RecordingOverlay` while recording.
| Prop | Description | Type | Optional | Default |
| --- | --- | --- | --- | --- |
| `enabled` | Enables recorder configuration and rendering. | `boolean` | Yes | `true` |
| `contentSelector` | Selects the region to frame. | `string` | Yes | `DEFAULT_CONTENT_SELECTOR` |
| `frame` | Reflows the selected region into a capture frame. | `FrameOption` | Yes | `'none'` |
| `expose` | Adds a `window[name]` handle with `start` and `stop` for automation. | `string \| false` | Yes | `false` |
| `onComplete` | Receives the finished bundle after each successful stop. | `(bundle: RecorderBundle) => void` | Yes | — |
| `harvest` | Configures locale overlay generation. | `HarvestOptions` | Yes | `{}` |
| `labels` | Overrides the recording and stop labels. | `{ rec?: string; stop?: string }` | Yes | Built-in labels |
```tsx
```
Recorder configuration is snapshotted when a session starts. Prop changes during capture do not change that session's frame, harvest options, or completion callback.
## `useRecorder` [#use-recorder]
`useRecorder()` subscribes to the module-level recorder and returns the following values:
| Value | Description | Type |
| --- | --- | --- |
| `status` | Current lifecycle state. | `RecorderStatus` |
| `isRecording` | Whether `status` is `recording`. | `boolean` |
| `start` | Starts a session after fonts are embedded. | `(config: RecorderConfig) => Promise` |
| `stop` | Stops capture, harvests translations, and returns the bundle. | `() => Promise` |
Concurrent `start()` calls are ignored. Calling `stop()` without an active recording returns `null`; calling it while startup is preparing cancels the pending session and returns `null`.
## `RecordingOverlay` [#recording-overlay]
`RecordingOverlay` is the portal-based control used by `GTRecorder`. It accepts `onStop`, an optional numeric `aspect`, and optional `rec` and `stop` label overrides. Most applications do not mount it directly.
## `RecorderBundle` [#recorder-bundle]
| Field | Description | Type | Optional | Default |
| --- | --- | --- | --- | --- |
| `events` | rrweb events, including embedded locale and overlay events. | `eventWithTime[]` | No | — |
| `locales` | Traced locales with the source locale first. | `string[]` | No | — |
| `overlay` | Locale to rrweb node-id translation maps. | `Record>` | No | — |
The bundle is JSON-serializable. A failed or unconfigured harvest leaves `overlay` empty without invalidating the event stream.
## `RecorderConfig` [#recorder-config]
`RecorderConfig` contains one required field, `locales: readonly string[]`. Put the locale visible during capture first; subsequent locales are harvested after capture stops.
## `RecorderStatus` [#recorder-status]
`RecorderStatus` is `'idle' | 'recording' | 'preparing'`. `preparing` covers both font preparation before capture and locale harvesting after capture.
## `FrameOption` [#frame-option]
`FrameOption` is `'none' | '16:9' | { aspect: number }`. A positive custom aspect is expressed as width divided by height; invalid custom values behave like no frame.
## `DEFAULT_CONTENT_SELECTOR` [#content-selector]
`DEFAULT_CONTENT_SELECTOR` is `main, [data-gt-content]`.
## `GT_EVENT` [#gt-event]
| Field | Tag | Purpose |
| --- | --- | --- |
| `nav` | `gt-nav` | Records SPA navigation. |
| `locales` | `gt-locales` | Records the traced locale list and source locale. |
| `i18n` | `gt-i18n` | Stores the harvested overlay after the full snapshot. |