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 asassets//main.jsorassets/./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
SharedArrayBufferisn't available, so engine exports must be single-threaded. - No scripts from
blob:ordata: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 avoideval-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
Uploading Games
Package an HTML5 game as one HTML file or a ZIP, upload new versions, roll back to an earlier one, and learn how updates to a live game are reviewed.
ZIP Package Checklist
Prepare an HTML5 game ZIP for RetiPie with index.html at the root, bundled assets, allowed file types, and clean paths.