Recording Links
Integrate your website with Jam's Recording Links to automatically capture your web app's console logs, network requests, and more, with every Jam created from a Recording Link.
Last updated
Was this helpful?
Integrate your website with Jam's Recording Links to automatically capture your web app's console logs, network requests, and more, with every Jam created from a Recording Link.
Last updated
Was this helpful?
Any Engineer with write permissions to your website can implement Jam's Hosted Recorded Links (with full debugging context) in 5 minutes or less. You'll need to:
Register one or more Recording URLs with Jam (so we can generate links to your site)
Set up Jam's Recorder UX on your Recording URLs (so your users can start recording)
Install Jam's Capture Script across your site (so Jam can capture page context)
Once installed, recordings started from your Recording Links will include console logs, network requests, and other bug report data. Follow this short walk-through to get started with Jam Recording Links:
Navigate to your Jam team's settings page, and click the "Recording Links" tab.
Under Recording URLs: add, install, and verify the installation of one or more valid URLs. These will later be available to select when creating a Recording Link.
You will need at least one Recording URL for each domain you wish to record on. Recordings only have access to debug data from capture scripts on pages from the same domain (not subdomain!) that initiated the recording.
For example: a recorder installed on example.com/recorder
cannot see events from pages on sub.example.com
(and vice-versa).
Use Jam.js' Recorder script to initialize a recorder on your page. This will cause our Recorder UX to pop up over your page when users open your Recording Links.
If the user dismisses the Recorder UX before starting a recording, they must re-click your Recording Link to try again.
Once the user starts recording, the page will lock itself in Recording Mode, preventing the Recorder UX from being dismissed until the user stops recording.
Once the recording is complete, Jam will confirm that the user would like to discard their recording if they try to close the Recorder UX before the Jam has been submitted.
Once the Jam has been submitted, the Recorder UX will close automatically, restoring control to your page.
To verify this is working: create a Recording Link, then navigate to it. Does the Recorder UX pop up? (For not-yet-deployed sites, you must replace the Recording Link URL's host with your localhost equivalent)
Use Jam.js' Capture script to capture events (such as console logs, network events, clicks, and keypresses) on your pages. These will be shared with our Recorder UX to save with your users' recordings, and otherwise ignored.
We aggressively cache Jam.js assets to minimize load time—especially the Capture script!—prioritizing only critical code and deferring the rest to ensure your page continues to load and run rapidly.
Note: Jam.js' Capture script can only capture console and network requests made after it initializes.
The <script>
tag should be placed as early as possible on the page, and should only use a lazy-loaded import
when explicitly trading accuracy for un-cached load performance (e.g. on SEO-optimized pages).
(If your site does not specify CSP directives, you can skip this step.)
To fix this, modify your CSP header or meta tag to allow *.jam.dev
as both. For example:
Congratulations! You should now be able to capture logs on your domain. To verify your install is working correctly, simply click the Verify link in your Recording URL settings:
This will open your Recording URL to a special "verify" UI. If you see this, it means you've successfully installed the Recorder script. If you have successfully installed the Capture script, you will see a count of how many such tabs are currently open.
If you are testing not-yet-deployed code, try replacing the URL we open with your localhost equivalent
Q: Can I put the Recorder and Capture scripts on the same page? A: Yes! There is no danger in doing so.
Q: Can I programmatically create Recording Links directly on my page? A: Not at this time; an upcoming release will expose an API you can use to create Recording Links from anywhere—Slack, Zendesk, or directly on your site (or app).
Q: Can I customize the Recorder UI? A: Not at this time—but we'd like to make this more customizable. Please let us know what you'd like to do!
Q: Can I associate Jam data with recordings we manage? A: No; due to browser storage + message partitioning controls, Jam's Recording Links scripts only work when used together.
Log capture is fully-supported in Chrome (including Incognito Windows) and Firefox (including Private Windows), and supported in most Safari windows. Log capture from Safari Private Windows is not currently supported.
If the Capture script is installed within an iframe, the top level logs will not get captured, e.g. capturing logs in embedded Shopify apps.
When using the async
and defer
script attributes or lazy-loaded import(...)
calls with Jam's Capture script, we cannot guarantee it will run early enough to capture every console log, network request, or other capturable event.
To properly associate your users' recordings with the logs we collect, Jam's Recorder needs to be served under the same origin [] as your site or application.
🔜 Want to bundle Jam's recorder.js into your application's code with npm?
Events captured by Jam's Capture Script can only be associated to Jams initiated by a Recorder UX served under the same origin [] as your site or application.
Some sites specify Content-Security-Policy [] directives via either a header or meta tag. A frame-src
or script-src
directive that doesn't include *.jam.dev
will block Jam.js from including console logs with your user's Jams.