Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/xXmizzeryXx/zenodeployment/llms.txt

Use this file to discover all available pages before exploring further.

Manual upload is the most direct way to add games to Zeno. You supply a game folder from your computer, and Zeno handles validation, transferring the files to the Service Worker, and persisting everything to IndexedDB so the game is available on every future visit.

Required folder structure

Every game must be a self-contained folder with an index.html at the top level. All other assets — scripts, stylesheets, images, audio, fonts, and WASM — can be organised however you like inside the folder.
my-game/
├── index.html      ← required
├── game.js
├── style.css
├── assets/
│   ├── sprite.png
│   └── sound.ogg
└── ...
Zeno rejects any folder that does not contain index.html at the top level. Nested entry points such as my-game/src/index.html are not supported.
The Service Worker serves all asset types with the correct MIME type: JavaScript (.js), CSS (.css), images (.png, .jpg, .gif, .svg, .webp), audio (.ogg, .mp3, .wav), and WebAssembly (.wasm). Relative paths in index.html work as normal.

Method 1: Drag and drop

You can drop game folders directly anywhere on the games page. Zeno accepts up to five folders in a single drop.
1

Open the games page

Navigate to games.html. If your library is empty, the page shows a drop target in the centre of the screen.
2

Drag your game folder(s)

Drag one to five game folders from your file manager and drop them onto the page. A bulk drop zone auto-fills multiple slots from a single drag operation.
3

Wait for validation and loading

Zeno checks each folder for index.html. Valid folders are loaded immediately. Any folder that fails validation is skipped with a status message.

Method 2: ADD GAMES modal

The ADD GAMES button in the top bar opens a modal with a FOLDERS tab that gives you explicit control over each upload slot.
1

Open the modal

Click ADD GAMES in the top bar, or press the button in the empty-state screen. The modal opens on the FOLDERS tab by default.
2

Drop or browse for folders

The drop zone in the modal accepts folders by drag and drop or by clicking to open a system file picker. The picker supports webkitdirectory selection so you can choose an entire folder.
3

Review queued folders

Selected folders appear as pills below the drop zone, each showing the folder name. You can remove individual folders by clicking the × on each pill, or clear all with the CLEAR button.
4

Load the games

Click LOAD GAMES to begin. The button is disabled until at least one valid folder is queued. A progress overlay shows loading status for each game.
Each slot in the modal is independent. You can add between 1 and 5 game folders in a single session — you don’t need to fill all five before clicking LOAD GAMES.

What happens after upload

Once you confirm the upload, Zeno processes each folder in sequence:
  1. File buffers are read — every file in the folder is read into an ArrayBuffer.
  2. Registration message sent — Zeno sends a REGISTER_GAME message to the Service Worker via postMessage, transferring all file buffers and their paths and MIME types.
  3. SW confirms registration — the Service Worker responds with GAME_REGISTERED, confirming the files are in its in-memory store and ready to serve at /zeno-games/{gameId}/.
  4. Saved to IndexedDB — the game record (name, icon, and all File objects) is written to the zeno-games-db IndexedDB database so the library persists across page reloads.
  5. Card appears in the grid — the new game card is rendered immediately in the library.
File buffers are always cloned (.slice(0)) before being transferred to the Service Worker. The originals remain in memory so they can be re-sent if the SW restarts — see Playing games for details.

Build docs developers (and LLMs) love