Debug Checklist
A step-by-step checklist to diagnose a Coframe integration that isn't working
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.
Start here when Coframe does not appear to be working. The steps below are ordered: each one narrows the problem space before the next. Work through them in order before consulting the deeper troubleshooting pages.
On this page
01Step 1: Confirm cf.js loaded
Open browser DevTools and go to the Network tab. Filter for cf.js or
cf-static.
You should see a request to the edge worker (by default at
https://edge.cofra.me/cf.js) that returned a 200 status. The response body
contains both the baked-in project JSON and the compiled SDK bundle in a single
HTTP response — confirming this request succeeded means the SDK code reached
the browser.
If the request is missing or failed: an ad blocker or a Content Security
Policy may be preventing the script from loading. A blocked cf.js request
means the SDK never ran, regardless of what is in the page HTML. See
Testing and Validation for the
full network check procedure and
Common Integration Issues
for CSP and ad-blocker failure patterns.
02Step 2: Confirm window.Coframe exists and is initialized
In the browser DevTools console, run:
window.Coframe
window.Coframe.status.initializedGood result: window.Coframe is an object and
window.Coframe.status.initialized is true. The initialized flag is set
to true after init completes — it being true confirms the SDK ran to
completion on this page.
If window.Coframe is undefined: the cf.js request may have failed (go
back to Step 1) or the script was blocked before execution. Check the console
for script load errors.
If Coframe.status.initialized is false: the SDK loaded but did not
finish initialising. Common causes are a missing or delayed CFQ.config push,
or the SDK waiting for a signal such as waitForHydration, waitForFeatureFlag,
or waitForUserToken that never arrived. Continue to Steps 3 and 4.
03Step 3: Review console logs and Coframe.debug.logs
Filter the browser console by [Coframe] to see all log output from the SDK.
This filter surfaces initialization messages, configuration details, and any
warnings the SDK emits at runtime.
For programmatic access to the full SDK log history, inspect:
window.Coframe.debug.logsCoframe.debug.logs is an array of LogEntry objects — the SDK’s accumulated
warning and error log history since script load.
Good result: no errors in the [Coframe] console output and no error-level
entries in Coframe.debug.logs.
If you see errors or warnings: the log entries describe what the SDK encountered. See Common Integration Issues for recurring error patterns, and Missing Data if the integration appears healthy but data is absent or incomplete.
04Step 4: Confirm the project ID is configured
In the browser DevTools console, run:
window.Coframe.projectIdGood result: a non-empty string such as 'proj_abc123'. Coframe.projectId
is set from config.projectId during SDK initialisation. An empty string
('') means the SDK initialised without a valid project ID — either the
CFQ.config push was missing from the page, or the config object did not
include a projectId field.
The CFQ.config command is required. The SDK blocks at startup until this
command arrives, and the config object must contain at minimum a projectId.
A minimal example:
<script>
window.CFQ = window.CFQ || [];
window.CFQ.push({
config: {
projectId: 'proj_abc123'
}
});
</script>If Coframe.projectId is empty, check your installation snippet and confirm
the CFQ.config push is present on every page where Coframe should run. See
Common Integration Issues
for configuration failure patterns.
05Step 5: Isolate Coframe with ?cf_disabled
To confirm that a page-load or rendering problem is caused by Coframe, append
?cf_disabled to the page URL:
https://yoursite.com/landing?cf_disabledWhen the page URL contains the string cf_disable, the installation snippet’s
early-exit guard runs before the SDK is fetched. It logs the following warning
and returns immediately:
[Coframe] Disabled via URL parameterThe SDK is never loaded or executed. Both ?cf_disable and ?cf_disabled
match. This parameter is handled by the install-script IIFE — it is not a
behaviour of the edge worker or the browser SDK.
If the problem disappears with ?cf_disabled: Coframe is involved. Return
to the earlier steps to identify which stage is failing.
If the problem persists with ?cf_disabled: the issue is unrelated to
Coframe.
This parameter is also the recommended method for baseline LCP measurements. See Testing and Validation for the step-by-step Performance panel comparison procedure.
# Debug Checklist
A step-by-step checklist to diagnose a Coframe integration that isn't working
Start here when Coframe does not appear to be working. The steps below are
ordered: each one narrows the problem space before the next. Work through them
in order before consulting the deeper troubleshooting pages.
## Step 1: Confirm cf.js loaded
Open browser DevTools and go to the Network tab. Filter for `cf.js` or
`cf-static`.
You should see a request to the edge worker (by default at
`https://edge.cofra.me/cf.js`) that returned a `200` status. The response body
contains both the baked-in project JSON and the compiled SDK bundle in a single
HTTP response — confirming this request succeeded means the SDK code reached
the browser.
If the request is missing or failed: an ad blocker or a Content Security
Policy may be preventing the script from loading. A blocked `cf.js` request
means the SDK never ran, regardless of what is in the page HTML. See
[Testing and Validation](../docs/testing-and-validation.html) for the
full network check procedure and
[Common Integration Issues](../docs/common-integration-issues.html)
for CSP and ad-blocker failure patterns.
## Step 2: Confirm window.Coframe exists and is initialized
In the browser DevTools console, run:
JS
```
window.Coframe
window.Coframe.status.initialized
```
Good result: `window.Coframe` is an object and
`window.Coframe.status.initialized` is `true`. The `initialized` flag is set
to `true` after init completes — it being `true` confirms the SDK ran to
completion on this page.
If `window.Coframe` is undefined: the `cf.js` request may have failed (go
back to Step 1) or the script was blocked before execution. Check the console
for script load errors.
If `Coframe.status.initialized` is `false`: the SDK loaded but did not
finish initialising. Common causes are a missing or delayed `CFQ.config` push,
or the SDK waiting for a signal such as `waitForHydration`, `waitForFeatureFlag`,
or `waitForUserToken` that never arrived. Continue to Steps 3 and 4.
## Step 3: Review console logs and Coframe.debug.logs
Filter the browser console by `[Coframe]` to see all log output from the SDK.
This filter surfaces initialization messages, configuration details, and any
warnings the SDK emits at runtime.
For programmatic access to the full SDK log history, inspect:
JS
```
window.Coframe.debug.logs
```
`Coframe.debug.logs` is an array of `LogEntry` objects — the SDK’s accumulated
warning and error log history since script load.
Good result: no errors in the `[Coframe]` console output and no error-level
entries in `Coframe.debug.logs`.
If you see errors or warnings: the log entries describe what the SDK
encountered. See
[Common Integration Issues](../docs/common-integration-issues.html)
for recurring error patterns, and
[Missing Data](../docs/missing-data.html) if the integration appears
healthy but data is absent or incomplete.
## Step 4: Confirm the project ID is configured
In the browser DevTools console, run:
JS
```
window.Coframe.projectId
```
Good result: a non-empty string such as `'proj_abc123'`. `Coframe.projectId`
is set from `config.projectId` during SDK initialisation. An empty string
(`''`) means the SDK initialised without a valid project ID — either the
`CFQ.config` push was missing from the page, or the config object did not
include a `projectId` field.
The `CFQ.config` command is required. The SDK blocks at startup until this
command arrives, and the config object must contain at minimum a `projectId`.
A minimal example:
HTML
```
<script>
window.CFQ = window.CFQ || [];
window.CFQ.push({
config: {
projectId: 'proj_abc123'
}
});
</script>
```
If `Coframe.projectId` is empty, check your installation snippet and confirm
the `CFQ.config` push is present on every page where Coframe should run. See
[Common Integration Issues](../docs/common-integration-issues.html)
for configuration failure patterns.
## Step 5: Isolate Coframe with ?cf_disabled
To confirm that a page-load or rendering problem is caused by Coframe, append
`?cf_disabled` to the page URL:
TEXT
```
https://yoursite.com/landing?cf_disabled
```
When the page URL contains the string `cf_disable`, the installation snippet’s
early-exit guard runs before the SDK is fetched. It logs the following warning
and returns immediately:
PLAINTEXT
```
[Coframe] Disabled via URL parameter
```
The SDK is never loaded or executed. Both `?cf_disable` and `?cf_disabled`
match. This parameter is handled by the install-script IIFE — it is not a
behaviour of the edge worker or the browser SDK.
If the problem disappears with `?cf_disabled`: Coframe is involved. Return
to the earlier steps to identify which stage is failing.
If the problem persists with `?cf_disabled`: the issue is unrelated to
Coframe.
This parameter is also the recommended method for baseline LCP measurements.
See [Testing and Validation](../docs/testing-and-validation.html) for
the step-by-step Performance panel comparison procedure.
## Related links
- [Testing and Validation](../docs/testing-and-validation.html) — full
verification checklist for a new or changed integration, including LCP impact
measurement and flicker checks
- [Common Integration Issues](../docs/common-integration-issues.html)
— recurring failure patterns and quick fixes
- [Missing Data](../docs/missing-data.html) — when the integration
appears healthy but analytics data is absent or incomplete
- [Coframe Global](../docs/coframe-global.html) — full reference for
`window.Coframe` properties, `status` sub-fields, and `Coframe.debug`
utilities
- [Preview and Debug](../docs/preview-and-debug.html) — URL parameters
(`?cf_disabled`, `coframe_variant_id`, `coframe_should_send_events`) and
`Coframe.debug` usage examples