Skip to main content

Documentation Index

Fetch the complete documentation index at: https://jam.dev/docs/llms.txt

Use this file to discover all available pages before exploring further.

A custom recording domain connects your website or web app to Jam so Recording Links capture console logs, network requests, and user interactions alongside screen recordings. Without a custom domain, screen recordings still work, but developer logs are not included. Connecting a custom domain allows Jam to:
  • Serve recording links from your domain
  • Capture console logs and network requests
  • Attach developer logs directly to Jams
  • Support Intercom-requested Jams
You need write access to your website to complete the three steps below.

Setup

1

Install the Recorder and Capture scripts

Jam’s Recorder and Capture scripts must be served from the same origin as your site so that recordings and logs are correctly associated.First, find your Team ID in Jam. Go to Settings → SDK, where your correct Team ID is pre-filled.Paste the following snippet into the <head> tag of your site. For best results, add it to all pages, or at minimum on the URL that will host your recording route.
<html>
  <head>
    <!-- Lets users record their screen from your site -->
    <meta name="jam:team" content="my-team-id-from-dashboard" />
    <script type="module" src="https://js.jam.dev/recorder.js"></script>

    <!-- Captures user events and developer logs -->
    <script type="module" src="https://js.jam.dev/capture.js"></script>
  </head>
</html>
What each script does:
  • recorder.js displays the recording interface when a Recording Link is opened, and lets users record directly from your site.
  • capture.js captures console logs, network requests, and click and key interactions while a recording is in progress.
Wait for both scripts to load successfully on your target URL before verifying your domain. Check that your Content Security Policy isn’t blocking them.
Performance note: Jam caches assets aggressively to reduce load. Place the <script> tags as early as possible in <head>. Using async, defer, or lazy import() can skip early logs and requests.
2

Update your Content Security Policy (if applicable)

If your site does not define any Content Security Policy directives, skip this step.If your site sets a CSP with frame-src or script-src, add *.jam.dev to both. Otherwise, the Jam scripts will be blocked.
<meta
  http-equiv="Content-Security-Policy"
  content="frame-src 'self' *.jam.dev; script-src 'self' *.jam.dev;"
/>
3

Verify your domain

After installing the scripts, verify your domain in Jam before connecting it. Verification checks that the scripts load and work correctly.
  1. Go to Settings → SDK.
  2. Click Verify.
  3. Paste the URL where the Jam scripts are installed (for example, example.com or example.com/recorder).
  4. Click Check setup.
Jam verifies that:
  • The page is publicly accessible
  • The URL does not redirect
  • Query parameters are preserved
  • Both the Recorder and Capture scripts are installed
If verification succeeds, your domain is connected and Recording Links will capture console logs and network requests.
If your app redirects users from the recording URL (for example, sending unauthenticated users to a login page) keep all jam- query parameters through the redirect. The most important is jam-recording=.... Open your recording URL in an incognito window before verifying to check for unexpected redirects or parameter stripping.

Domain and subdomain behavior

In most cases, a recorder installed on the root domain (example.com) can capture events from subdomains (sub.example.com), and vice versa. Safari limitation: In Safari, logs are only captured when the recorder and capture scripts run on the exact same subdomain. If Safari support is important for your team, install the recorder on the same subdomain where your users are active.

Current limitations

LimitationDetails
Browser supportFully supported in Chrome (including Incognito) and Firefox (including Private Windows). Supported in most Safari windows. Not supported in Safari Private Windows.
IframesIf the Capture script is installed inside an iframe, top-level page logs will not be captured.
Script loadingScripts loaded with async, defer, or lazy import() may miss early console logs and network requests.
Verification requiredInstalling scripts alone is not sufficient. You must verify your domain in Settings → SDK.

FAQ

Yes. The <meta name="jam:team" /> tag must be present on any page where recorder.js is installed. It is optional on pages that only include capture.js. Logs are only captured from pages where the Capture script is running.
Not currently. Contact Jam if you have specific customization requirements. This is an area under active evaluation.
No. Jam’s Recorder and Capture scripts must be used together. Due to browser storage and cross-origin restrictions, partial integrations or mixing with external recording systems are not supported.

If verification fails

Common causes of verification failure:
  • Team ID mismatch
  • Scripts not installed on the target URL
  • Scripts blocked by your CSP
  • URL requires authentication
  • URL redirects before scripts load
  • Query parameters are stripped during redirect
  • Recorder and Capture scripts are on different domains
Fix the issue and retry verification.