RetiPie

Game Requirements

File types, size limits, and runtime rules for HTML5 games on RetiPie, from the index.html entry point to bundling every asset with your upload.

Every game on RetiPie is a self-contained HTML5 application. This page covers the technical requirements, file types, and size limits your game must meet.

Entry point

Your game must include an index.html file. This is the file RetiPie loads when a player opens your game. For ZIP uploads, index.html must be at the root of the archive (or inside a single root folder, which is automatically stripped).

Upload types

You can upload a game in one of two ways:

  • Single HTML file: up to 5 MB, with everything inlined.
  • ZIP archive: for multi-file games and engine exports. The limits below apply.

File types

A ZIP can contain any web asset your game needs: HTML, CSS, JavaScript, JSON, images, audio, video, fonts, WebAssembly, and engine data files such as .pck or .data. Files with an unfamiliar extension are accepted and flagged for the moderation review.

Each file is served with the content type of its extension. Unfamiliar extensions are served as application/octet-stream, which your game can load with fetch.

These are rejected:

  • Executables and libraries: .exe, .dll, .so, .dylib, .com, .scr, .pif, .msi, .gadget
  • Scripts for other interpreters: .bat, .cmd, .sh, .ps1, .psm1, .vbs, .wsf, .hta, .php, .phar, .py, .rb, .pl, .cgi, .reg
  • App packages and disk images: .apk, .aab, .ipa, .jar, .war, .deb, .rpm, .dmg, .iso, .img
  • Nested archives: .zip, .rar, .7z, .tar

Gzip files (.gz) and Brotli files (.br) are allowed. They are stored as you uploaded them, except Unity build outputs, which RetiPie decompresses. See Unity WebGL Export.

ZIP archive limits

If you upload a ZIP file:

  • Maximum ZIP size: 500 MB
  • Maximum files in archive: 1,000
  • Maximum single file in archive: 200 MB
  • Maximum path length: 240 characters
  • Maximum total extracted size: 500 MB
  • Decompression ratio limit: 100x (zip bomb protection)

File size limits apply to the extracted files. For Unity builds, they apply to the files after RetiPie decompresses them.

Content validation

Every upload goes through several validation steps:

Executable content detection

Every file in a ZIP is checked for Windows, Linux, and macOS executable headers, whatever its extension. A file that starts with one is rejected. A single HTML upload must contain text, not binary data.

Ad and tracking script scanning

All HTML and JavaScript files are scanned for known ad network domains and tracking scripts. If any are detected, the upload is rejected.

Third-party ad and tracking scripts are not allowed on RetiPie. This includes Google AdSense, Facebook Pixel, Google Analytics, Unity Ads, and many others. Read the full No Ads Policy for details.

File name checks

File names are kept exactly as they are in the ZIP, so the paths your game uses keep working. Spaces and non-Latin characters are fine.

An upload is rejected if any file name:

  • contains .. or starts with /
  • contains a backslash (\) or a control character
  • has an empty or . folder segment, such as assets//main.js or assets/./main.js
  • appears twice in the archive
  • is longer than 240 characters

Runtime environment

Isolated game origin

Every game is served from its own origin, separate from RetiPie and from other games. In the RetiPie mobile app, a game runs as a full-screen page in the app's WebView. On the web, such as the device preview in Slice, it runs in a sandboxed iframe.

Security restrictions

For security, the game runtime blocks a few things at the browser level. What this means in practice:

  • External resources don't load. Scripts, fonts, images, or styles from CDNs and other servers are blocked — everything must be bundled with your upload.
  • No outbound network calls. Your game can't call external APIs or servers at runtime.
  • No nested iframes. Your game can't embed other pages.
  • No Web Workers, Service Workers, or threads. Workers are blocked, and SharedArrayBuffer isn't available, so engine exports must be single-threaded.
  • No scripts from blob: or data: URLs. Load scripts from files in your upload or inline them in your HTML.
  • Dynamic code execution (eval, new Function) is blocked. Regular bundled JavaScript is unaffected; if your engine has an option to avoid eval-style output, use it.
  • WebAssembly works. Engines that compile to WASM, such as Unity and Godot, run single-threaded builds.

Bundle all assets with your game. External fonts from Google Fonts, scripts from CDNs, images from other servers — none of these will load at runtime. Include all assets in your ZIP or HTML file.

Thumbnail

Game thumbnails are optional but recommended. They appear in the game feed and on your game's page.

  • Accepted formats: PNG, JPEG, WebP
  • Maximum size: 2 MB

FAQ

On this page