For game developers

Your game on filudi.com and on portals

You upload a static bundle. Filudi serves it from its own origin, shows it in a frame on filudi.com and gives you statistics about the people who play it. The same bundle runs on CrazyGames, Poki and Playgama through the same SDK.

How a game runs

A bundle is an HTML entry and its files, zipped. You upload it from the console; the API unpacks it and serves every version under play.filudi.com, each game on an origin of its own. filudi.com embeds the game in a sandboxed frame. The frame and the bundle talk through the SDK: the page passes a game token, limited to your game, the locale and the consent state; the game reports when it is ready, when play starts and stops, when a save or a score is written.

Nothing else reaches the game. A bundle never sees the player's own token, the cookie of another site or the page around it. Within those limits a game is any web page: a canvas, WebGL, WebAssembly, audio, a service worker for its own files.

On portals

On CrazyGames, Poki and Playgama the SDK detects the host and maps every call to the portal's own SDK: ads, saves, locale, gameplay signals. A game built for Filudi needs no second build to ship there, and a game already on a portal keeps its behaviour once it moves to the Filudi SDK.

The SDK in ten lines

One package, no runtime dependency, under 12 kB gzipped. Every method is safe to call on every host: a feature the host does not have returns status: 'unavailable' and nothing throws.

import { sdk } from '@filudi/game-sdk';

const { player, locale } = await sdk.init({ gameId: 'gloop' });
sdk.ready();                                   // the hub hides its loader
sdk.gameplay.start();                          // real play begins

const save = await sdk.save.get<MySave>();     // local first, synced in the background
await sdk.save.set(next, { version: save.version + 1 });

await sdk.leaderboard.submit('height', 2340);  // signed with the play session
sdk.track('level_complete', { level: 12 });    // batched, shows up in your statistics
await sdk.ads.interstitial();                  // unavailable on filudi.com, served on portals

The review step

A new game is pending until staff approves it. While pending you configure it, upload drafts and preview them on their own origin; nothing is public. Each version you upload is a draft until you request its review from the console. Staff checks the bundle and activates it: that version becomes the one filudi.com serves. Only staff activates a version.

Statistics

Across every site that lists your game, filterable by site, host, version and locale: active players per day and over rolling 7 and 30 days, new and returning players, sessions with their mean and median length, retention by first-play week, a funnel from frame loaded to account linked, events by name, splits by host, version, locale and device, and your leaderboards. Every table exports as CSV.

Where your game runs

By default a game runs on filudi.com only. Switch its distribution to any portal in the console and approved third-party sites may list it once it has a live version. The console shows which sites list your game.

Not offered yet

filudi.com has no ad network yet and shows developers usage statistics only.