Skip to content

Developer guidelines

Every game listed on FreeGameStore must feel native to the platform: free, private, open-source, installable, and playable on phones, tablets, and desktops. This page folds the old standalone Guidelines page into the docs.

Platform rules

These rules are not optional:

  • Free means free. No freemium mechanics, ads, paid plans, paywalls, or “upgrade to unlock” flows.
  • No tracking. No analytics SDKs, tracking cookies, fingerprinting, or unnecessary data collection.
  • Open source. Games should be public, MIT-licensed, and inspectable on GitHub.
  • Real games, not demos. A listing must be playable and complete enough for players to understand the core loop.
  • Works everywhere. Games must work on mobile, tablet, and desktop viewports and should be installable as PWAs.

Brand and naming

Use FreeGameStore as one PascalCase word. Do not write it as “Free Game Store” or all caps.

ContextFormatExample
GitHub repolowercase, no platform prefixchess
Package namelowercase + gamechessgame
Display namereadable title caseChess
Subdomainlowercase .freegamestore.onlinechess.freegamestore.online

Use the shared platform tokens and SDK components for chrome and common game UI. Start with Brand tokens and <GameShell>.

Visual system

The storefront and SDK use a neutral UI with an emerald accent. Games can have their own art direction inside the play area, but shared controls, menus, shell chrome, auth, leaderboard, and settings should use platform tokens.

TokenLightDarkUsage
--bg#fafaf9#0f0f0fPage background
--surface#ffffff#1a1a1aCard or panel background
--ink#1a1a1a#f0f0f0Primary text
--muted#6b6b6b#999999Secondary text
--border#e5e5e5#2a2a2aBorders
--accent#10b981#34d399Primary accent
--accent-soft#ecfdf5#1a2e26Accent backgrounds

Fonts are managed by the platform. Do not replace the shell font stack or ship custom UI fonts unless the game canvas itself needs an asset font.

Tech stack

New games should follow the platform stack unless a specific game engine needs a small variation.

LayerChoice
LanguageTypeScript
FrameworkReact
BundlerVite
StylingTailwind CSS and platform CSS variables
HostingCloudflare Pages
Package managerpnpm
RuntimeNode 20.19 or newer

Game engines

Pick the smallest proven engine that fits the game:

EngineUse case
HTML5 CanvasClassic 2D games and custom loops
Phaser2D arcade games with physics
PixiJSSprite-heavy 2D rendering
KaplayLightweight 2D games
Three.js / React Three Fiber3D games and 3D puzzles
Babylon.jsAdvanced 3D scenes with physics

Templates

Use fgs init my-game --template <name> to start from a platform template.

TemplateFlagBest for
CanvascanvasPlatformers, shooters, Snake, Pac-Man, Frogger
GridgridMinesweeper, Sudoku, 2048, Match-3, Word Search
CardscardsSolitaire, Memory, card games
3D3dRacing, bowling, 3D puzzles
Phaserphaser2D arcade games with physics
KaplaykaplaySimple 2D games
PixiJSpixiSprite-heavy games
Babylon.jsbabylonAdvanced 3D games

Project structure

A typical game repo uses a root workspace and a web app:

game-name/
package.json
pnpm-workspace.yaml
web/
index.html
package.json
vite.config.ts
public/
manifest.json
src/
main.tsx
index.css
App.tsx
components/
hooks/
game/

Publishing

The normal flow is:

  1. Open a submission or use the Console to provision the game.
  2. Build from a template and run the game locally.
  3. Run fgs check.
  4. Push to main.
  5. Cloudflare Pages builds and deploys the game to its subdomain.
  6. The storefront lists the game after metadata and compliance checks pass.

For the full walkthrough, see Publish to the storefront.

Compliance checklist

Before listing, every game should satisfy:

  • Playable core loop with no placeholder title-screen-only release.
  • Mobile support at 320px and desktop support at 1024px and wider.
  • Touch controls where needed, plus keyboard or mouse controls where expected.
  • No production console errors.
  • PWA manifest and offline behavior.
  • No tracking, analytics, remote ads, or paid upgrade flows.
  • Shared platform shell and brand tokens for common UI.
  • Platform mute respected by every sound source. See Custom audio that respects mute.
  • Source repo and license available.

The automated suite is documented in All checks.