The server item's layout (l) picks the renderer — what the creative is.
Each card below runs the real SDK against a sample item, shows the exact server payload, and logs the
instance events. Combine any of these with a placement behavior — the two
are orthogonal.
Demo creatives — clicks are disabled. Flip the live toggle on the
living demo to see real fill.
Image banners
Banner l:'banner'
…
Industry names: display banner, image ad.
Good for: the workhorse of display — every IAB size, guaranteed render, image + clickthrough with impression/click/viewability tracking built in.
Industry names: viewability-gated load, lazy load.
Good for: paying only for viewable impressions — the image bytes load when the slot actually scrolls into view. Watch the network panel: this one loaded on scroll.
Server-driven isolation: friendly iframe vs shadow DOM.
Good for: third-party markup — the server marks the item e:'iframe' and the SDK walls it into a friendly iframe. Inspect this unit: the creative lives in an <iframe>, the previous cards in a shadow root.
Industry names: HTML5 ad, rich media, custom creative.
Good for: anything an image can't do. md.html carries self-contained HTML5 that fills the slot box — scripts run, styles stay walled off in the friendly iframe. The counter below is the creative's own JS, live.
Industry names: carousel, swipe gallery, 3D cube, scratch & peel — every rich-media effect.
Good for: effects live in the creative, not the SDK — the SDK adds zero bytes for them. This card embeds a self-contained HTML5 swipe carousel hosted as a plain page. Needs https (on plain-http dev you'll see the error event instead — that's the SDK refusing an insecure embed, working as designed).
Server-filled macros — ${title} ${img} ${cta} ${url} ${spons} ${desc} —
render editorial-looking units without any creative production. Good for: in-feed and in-article
placements that must match the page.
layout1 · tall card
…
layout2 · strip
…
layout3 · half page
…
layout4 · billboard
…
layout5 · sponsored story
…
AdSense-style l:'g'
…
Macros: ${title} ${desc} ${adv} ${url} ${more}.
Good for: text-forward feed units and search-like placements.
VAST-normalized v payload — skip offset, quartile tracking, OM & SIMID
supported. Three placements; the content player is a separate surface.
Outstream placement:'inline'
…
Industry names: outstream, in-article video.
Good for: video revenue on pages with no video content — the unit builds its own muted stage in the article flow. This one is skippable after 5s (sk:1, so:5).
Good for: pages with no obvious slot — with no target, the SDK creates its own bottom bar. Runs on demand:
Hosted player l:'embed' · kind:'yt'
YouTube bridge
…
postMessage bridge — quartile events without any Google script on your page.
Good for: campaigns whose asset already lives on YouTube. The SDK embeds youtube-nocookie.com and maps player state to the standard start → firstquartile → … → complete events (watch the chip). Runs on demand:
Good for: a fixed-size creative in a smaller box — object-fit emulation for HTML/iframe creatives, downscale-only. This 970×250 billboard is served into a narrow column; drag the corner to resize it:
Good for: running expandables/pushdowns with zero page changes — the item itself carries the behavior. Live demo on the behaviors page, including the precedence rule (client behavior config beats item b).
Tracking sets mds
Server-side only — a legacy array of tracking sets (cpm_t/cpc_c/cpv) read when md is absent. It is not a multi-creative field: the creative always comes from md, so there is nothing to render here.