# rrweb: Quickstart URL: https://generaltranslation.com/en-US/docs/rrweb/quickstart.mdx --- title: Quickstart description: Record a product walkthrough once and replay it with your published translations. related: links: - /docs/rrweb/guides/recording-walkthroughs - /docs/rrweb/guides/replaying-recordings --- `gt-rrweb` records a browser walkthrough with rrweb, maps the captured text to your existing translation catalogs, and plays the same session in each locale. The recorder uses React, while the replayer is available as either a React component or a framework-agnostic function. **Requirements:** - React 18 or later for recording - A browser application with published translation catalogs - A function that loads one catalog by locale ## Quickstart [#quickstart] ### 1. Install the packages Install `gt-rrweb` and the rrweb packages used for capture and playback. ```bash npm install gt-rrweb @rrweb/record @rrweb/replay @rrweb/types ``` ```bash yarn add gt-rrweb @rrweb/record @rrweb/replay @rrweb/types ``` ```bash bun add gt-rrweb @rrweb/record @rrweb/replay @rrweb/types ``` ```bash pnpm add gt-rrweb @rrweb/record @rrweb/replay @rrweb/types ``` ### 2. Expose translation hashes The recorder matches rendered [``](/docs/react/reference/components/t) content to its published translation by DOM hash. Enable [`_tagIds`](/docs/react/reference/config#tag-ids) in your existing config: ```json title="gt.config.json" { "_tagIds": true } ``` ### 3. Add the recorder Mount [`GTRecorder`](/docs/rrweb/reference/recorder#gt-recorder) once inside your translation provider. Pass the same catalog loader your app uses, then call [`useRecorder()`](/docs/rrweb/reference/recorder#use-recorder) from any descendant control. ```tsx title="src/RecordingTools.tsx" 'use client'; import { GTRecorder, useRecorder, type RecorderBundle } from 'gt-rrweb'; import loadTranslations from './loadTranslations'; function download(bundle: RecorderBundle) { const url = URL.createObjectURL( new Blob([JSON.stringify(bundle)], { type: 'application/json' }) ); const link = document.createElement('a'); link.href = url; link.download = 'walkthrough.json'; link.click(); URL.revokeObjectURL(url); } function Controls() { const { start, stop, status } = useRecorder(); return (
); } export default function RecordingTools() { return ( <> ); } ``` The first locale passed to `start()` is the source recording. Stopping waits for the locale harvest, calls `onComplete`, and returns the same bundle. ### 4. Record the walkthrough Start recording, complete the flow in the source locale, and stop. Form input values are masked, mousemove telemetry is omitted, and clicks, navigation, DOM changes, scroll position, and page content remain part of the recording. ### 5. Replay the bundle Import the saved JSON and render [`GTReplayer`](/docs/rrweb/reference/replayer#gt-replayer): ```tsx title="src/Walkthrough.tsx" 'use client'; import { GTReplayer } from 'gt-rrweb/replay'; import bundle from './walkthrough.json'; export default function Walkthrough() { return ; } ``` The player starts in the recorded source locale and shows locale controls when the bundle contains additional locales. ## Next steps - /docs/rrweb/guides/recording-walkthroughs - /docs/rrweb/guides/replaying-recordings