SDK Status Dashboard
← HomeFour third-party SDKs, four different loading patterns, one hook each. Each card below calls useWatchWindot with a single dot-notation path and renders the lifecycle state in real time. The same hook handles sync globals, property mutations, deep nesting, and incremental namespace building. The script tags that inject each SDK are loaded separately in the page layout and are not shown in the snippet.
function SDKCard({ name, path, options }) {
const { value, status, error } =
useWatchWindot(path, options);
return (
<div>
<h3>{name}</h3>
<p>Path: {path}</p>
<p>Status: {status}</p>
{value != null && <p>Type: {typeof value}</p>}
{error && <p>Error: {error.message}</p>}
</div>
);
}analytics
Sync inline global. The array exists the moment the script executes, so detection is immediate.
Path: acmeDataLayer
Status: watching
pixel
Two-phase init with property mutation. The stub object exists immediately, but loaded flips from false to true after 500ms. A custom ready predicate filters for the real value.
Path: acmePx.loaded
Status: watching
payments
Deep nested path (3 levels). The stub exists at load time, but ui.components is assigned ~800ms later via incremental property assignment.
Path: acmePayments.ui.components
Status: watching
maps
Incremental namespace building. The root, maps sub-namespace, and Map constructor arrive in 3 separate stages at different times.
Path: acme.maps.Map
Status: watching