For publishers · Free widget
A free, playable games widget for your site. One script tag, no game licensing, no account required — configure it below and grab the code.
no signup to try it · no invoice to cancel · remove it by deleting two lines
Try it live
PRODUCTIVITY
Most habit advice assumes you have a spare hour and a clean slate. The people who actually stuck with something usually didn't — they just made the next step small enough to survive a bad day.
Here's what that looked like in practice, and why the habits that lasted had almost nothing to do with willpower.
If any of this sounds familiar, it's probably because the same trick — shrink the step, remove the friction — shows up everywhere people manage to keep going.
Live preview — full width, so 100% actually reads as 100%
Size
The feed is a portrait card — 320×570 (or your sidebar's own width) is the shape it's designed for. % height needs a parent with a set height.
Look
Restricts the feed to one category, or leave it on "All games".
Preview clips
Language
Loading
Attribution
Kept only for aggregate impression counts against your site.
Your embed code
Why publishers use it
Every game is sourced, licensed and hosted by us. You embed a feed — we carry the relationship with providers.
Width and height are reserved up front, so the widget never pushes your content around while it loads.
Readers tap and play in place — a real interaction, not a static thumbnail hoping for a click.
No revenue share, no minimum traffic, no invoice. Copy the tag, paste it, done.
Every attribute the script reads, for anyone who'd rather hand-write the tag than use the panel above.
| Attribute | Type | Default | Description |
|---|---|---|---|
| data-target | selector | — | Optional. CSS selector of an existing element to render into. Without it, the widget creates its own container right where the <script> tag sits. |
| data-width | px or % | 320 | Widget width. Accepts a pixel value (320) or a percentage (100%). |
| data-height | px or % | 570 | Widget height. % requires the parent element to have an explicit height. The feed is a portrait card — very short or very wide boxes will crop it. |
| data-radius | px | 14 | Corner radius of the widget frame. |
| data-category | enum | — (all) | arcade / puzzle / action / racing / kids / ... Omit the attribute (or leave it empty) for all games — don't write "all" as the value, that's read as a category name and returns nothing. |
| data-autoplay | enum | inview | inview / hover / off — when muted preview clips start playing. |
| data-lang | en / fr / es / de | en | Language of titles and UI labels. |
| data-lazy | true / false | true | Delays loading the widget until it scrolls into view. |
| data-pub | text | — | Optional. Your domain, kept only for aggregate impression counts — nothing about individual visitors. |
The widget loads plays-games.com itself in a sandboxed frame — the same feed, sign-in, and play button your own visitors would see on the site. There's no separate "widget version" to fall out of sync.
If your page is already built by React, Vue or similar, the auto-init script can miss elements added after the initial load. Call it manually once your container exists:
PlaysGamesWidget.init({ target: '#pg-widget-1', width: 320, height: 570, category: 'all', autoplay: 'inview', });
No. Every game in the feed is sourced, licensed and hosted by plays-games.com. Embedding the widget doesn't put any rights obligation on your site.
The widget doesn't drop third-party cookies on your visitors. If you set data-pub, we log aggregate impression counts against that value — nothing tied to an individual visitor.
It loads asynchronously and, with data-lazy on, defers until the widget scrolls into view. Width and height are reserved up front so it never causes layout shift.
Yes. No account is required to try it — copy the snippet above and it works immediately.
Switch to the "Iframe only" tab above the code block. It's plain HTML, so it survives editors that sanitize out scripts (some blog platforms, some newsletter tools). You lose the automatic lazy-loading and the JS API for SPAs, but the widget itself is identical.
Delete the lines you pasted. Nothing else gets installed on your site.