Framer
Install the Coframe SDK in a Framer site using Custom Code and a code override
Copy this guide and your current settings as a prompt for your AI agent.
Preview agent promptSee the guide, code and settings included when you copy.
This guide is for sites built and hosted on Framer. Installation has two parts:
adding the Coframe script to your site’s Custom Code head, and adding a
withCoframe code override to an element that appears on every page (such as
your header) to signal when the page has hydrated.
On this page
Set your project ID and options in the editor. Then follow the steps below using the updated code.
Open the editor to correct your Project ID before copying the installation code.
01Part 1 — Site settings
- In your Framer project, open Site Settings.
- Go to the General tab.
- Scroll down to Custom Code and find the Start of
<head>tag section. - Paste the installation script below into that field.
- Click Save.
Replace YOUR_PROJECT_ID with the project ID from your Coframe dashboard.
<script id='coframe-installation-script'>
(function () {
// Early exit for performance testing
if (/cf_disable/.test(location.search)) return console.warn('[Coframe] Disabled via URL parameter');
// Coframe config
const config = {
projectId: 'YOUR_PROJECT_ID',
startTime: Date.now(),
timeoutMs: 1000,
currentUrl: window.location.href,
waitForHydration: true, // Wait for the framework readiness signal
};
// Prevent duplicate installation
const script_id = 'coframe-sdk-js';
if (document.getElementById(script_id)) return console.warn('[Coframe] SDK already installed');
// Coframe queue setup
(window.CFQ = window.CFQ || []).push({ config });
// Coframe antiflicker CSS
const style = document.createElement('style');
style.id = 'coframe-antiflicker';
style.textContent =
':root { --cf-show: 0;}' +
'body { opacity: var(--cf-show) !important; transition: opacity 0.2s ease; }'
function hide() { document.head.appendChild(style); }
function show() {
document.documentElement.style.setProperty('--cf-show', '1');
style.parentNode && style.parentNode.removeChild(style);
}
hide(); setTimeout(show, config.timeoutMs);
// Coframe SDK JS
var edgeUrl = new URL('https://edge.cofra.me/cf.js');
edgeUrl.searchParams.set('config', encodeURIComponent(JSON.stringify(config)));
const script = document.createElement('script');
script.id = script_id;
script.async = true;
script.src = edgeUrl.toString();
script.onerror = () => { show(); console.error('[Coframe] SDK failed to load'); };
document.head.appendChild(script);
})();
</script>02Part 2 — withCoframe code override
Select an element that exists on all pages (for example, your site header). Then:
- In the right panel, go to Code overrides (bottom right).
- Click Add and name the override
withCoframe. - Click Edit code.
- Replace the file contents with the snippet below.
- Save the file.
- Apply the
withCoframeoverride to the element you selected. - Publish your site.
You must both create the override and apply it to the element. The override
fires a pageHydrated event after Framer’s React tree mounts, which tells the
SDK it is safe to apply variant changes.
import { useEffect } from "react"
import type { ComponentType } from "react"
export function withCoframe(Component): ComponentType {
return (props) => {
// @ts-ignore
useEffect(() => {
window.CFQ = window.CFQ || [];
window.CFQ.push({ pageHydrated: true })
}, [])
return <Component {...props} />
}
}03Verify it is working
After publishing your Framer site:
- Open the live site in a browser, then open the browser console and confirm
there are no
[Coframe]error messages. - In the Network tab, look for a request to
edge.cofra.me/cf.js. A successful200response means the SDK loaded correctly. - Check that a
coframe-sdk-jsscript element appears in the DOM (you can inspect the<head>in the Elements panel).
For a full walkthrough of how to validate the integration and confirm that Coframe is operating as expected, see Testing and Validation.
04Optional configuration
The default script is designed to work without additional configuration. Once the SDK is installed, you can tune behavior using the following guides:
- SDK options — timeout, disable conditions, and other core settings
- Identity settings — associate SDK activity with a known user identity
- Tracking settings — control which events and page interactions Coframe records
- Anti-flicker — understand how the anti-flicker mechanism works and how to adjust it for your performance requirements
# Framer
Install the Coframe SDK in a Framer site using Custom Code and a code override
This guide is for sites built and hosted on Framer. Installation has two parts:
adding the Coframe script to your site’s Custom Code head, and adding a
`withCoframe` code override to an element that appears on every page (such as
your header) to signal when the page has hydrated.
[Video: Video: Custom Code plus the withCoframe override, publishing, and verifying in DevTools (65s, narrated)](assets/videos/fig14-install-framer.mp4)
Watch: 65s — Custom Code plus the withCoframe override, publishing, and verifying in DevTools
## Part 1 — Site settings
- In your Framer project, open Site Settings.
- Go to the General tab.
- Scroll down to Custom Code and find the Start of `<head>` tag section.
- Paste the installation script below into that field.
- Click Save.
Replace `YOUR_PROJECT_ID` with the project ID from your Coframe dashboard.
HTML
```html
<script id='coframe-installation-script'>
(function () {
// Early exit for performance testing
if (/cf_disable/.test(location.search)) return console.warn('[Coframe] Disabled via URL parameter');
// Coframe config
const config = {
projectId: 'YOUR_PROJECT_ID',
startTime: Date.now(),
timeoutMs: 1000,
currentUrl: window.location.href,
waitForHydration: true, // Wait for the framework readiness signal
};
// Prevent duplicate installation
const script_id = 'coframe-sdk-js';
if (document.getElementById(script_id)) return console.warn('[Coframe] SDK already installed');
// Coframe queue setup
(window.CFQ = window.CFQ || []).push({ config });
// Coframe antiflicker CSS
const style = document.createElement('style');
style.id = 'coframe-antiflicker';
style.textContent =
':root { --cf-show: 0;}' +
'body { opacity: var(--cf-show) !important; transition: opacity 0.2s ease; }'
function hide() { document.head.appendChild(style); }
function show() {
document.documentElement.style.setProperty('--cf-show', '1');
style.parentNode && style.parentNode.removeChild(style);
}
hide(); setTimeout(show, config.timeoutMs);
// Coframe SDK JS
var edgeUrl = new URL('https://edge.cofra.me/cf.js');
edgeUrl.searchParams.set('config', encodeURIComponent(JSON.stringify(config)));
const script = document.createElement('script');
script.id = script_id;
script.async = true;
script.src = edgeUrl.toString();
script.onerror = () => { show(); console.error('[Coframe] SDK failed to load'); };
document.head.appendChild(script);
})();
</script>
```
## Part 2 — withCoframe code override
Select an element that exists on all pages (for example, your site header). Then:
- In the right panel, go to Code overrides (bottom right).
- Click Add and name the override `withCoframe`.
- Click Edit code.
- Replace the file contents with the snippet below.
- Save the file.
- Apply the `withCoframe` override to the element you selected.
- Publish your site.
You must both create the override and apply it to the element. The override
fires a `pageHydrated` event after Framer’s React tree mounts, which tells the
SDK it is safe to apply variant changes.
JSX
```jsx
import { useEffect } from "react"
import type { ComponentType } from "react"
export function withCoframe(Component): ComponentType {
return (props) => {
// @ts-ignore
useEffect(() => {
window.CFQ = window.CFQ || [];
window.CFQ.push({ pageHydrated: true })
}, [])
return <Component {...props} />
}
}
```
## Verify it is working
After publishing your Framer site:
- Open the live site in a browser, then open the browser console and confirm
there are no `[Coframe]` error messages.
- In the Network tab, look for a request to `edge.cofra.me/cf.js`. A
successful `200` response means the SDK loaded correctly.
- Check that a `coframe-sdk-js` script element appears in the DOM (you can
inspect the `<head>` in the Elements panel).
For a full walkthrough of how to validate the integration and confirm that
Coframe is operating as expected, see
[Testing and Validation](../docs/testing-and-validation.html).
## Optional configuration
The default script is designed to work without additional configuration. Once the
SDK is installed, you can tune behavior using the following guides:
- [SDK options](../docs/sdk-options.html) — timeout, disable conditions,
and other core settings
- [Identity settings](../docs/identity-settings.html) — associate SDK
activity with a known user identity
- [Tracking settings](../docs/tracking-settings.html) — control which
events and page interactions Coframe records
- [Anti-flicker](../docs/anti-flicker.html) — understand how the anti-flicker
mechanism works and how to adjust it for your performance requirements