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 R2 (GitHub Actions)
Package managerpnpm
RuntimeNode 20.19 or newer

Game engines

Pick the smallest proven engine that fits the game:

All engines track their latest major (a monthly build-gated refresh keeps them there).

EngineVersionPick it whenExample games
HTML5 CanvasFull control: no engine, you own loop/rendering/physicsSnake, Flappy, custom physics
KAPLAY3001Fastest playable game — beginner verb APIJam arcade, endless runners
Phaser4.2Production 2D: scenes, physics, tilemaps, tweensPlatformers, shooters, tile RPGs
PixiJS8.19Max WebGL rendering perf; you write the logicBullet-hell, sprite-heavy scenes
Excalibur.js0.32TypeScript-native typed Actor classes, physics built inTop-down action, structured mid-size games
LittleJS1.18Built-in particles + procedural ZzFX sound — juice, zero assetsBrick breakers, explosive arcade
Three.js / R3F0.185 / 93D as React components (JSX scene graph)Racing, bowling, 3D puzzles
Babylon.js9.16Full 3D engine — WebGPU, physics-ready meshes3D arenas, ambitious worlds

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
ExcaliburexcaliburTyped actor-based 2D
LittleJSlittlejsJuicy arcade, zero assets

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. GitHub Actions builds and deploys the game to Cloudflare R2 at 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.