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.

Zeno runs entirely in your browser, but it requires a real HTTP or HTTPS origin to register its Service Worker. This guide walks you through serving Zeno’s files, opening the dashboard, adding your first game, and playing it — no account, no backend, and no build step required.

Requirements

  • A modern browser with Service Worker support: Chrome, Edge, Firefox, or Safari 16.4+
  • Any HTTP or HTTPS server — file:// URLs are not supported
1

Serve Zeno's files over HTTP

Clone or download the Zeno repository, then start any static file server from the project root. Two zero-install options:
npx serve .
python3 -m http.server 8080
Once the server is running, open http://localhost:8080 (or the port your server reports) in your browser.
If you want a permanent public URL, Firebase Hosting is a free option that works with Zeno’s existing firebase.json. Install the Firebase CLI and run:
npm install -g firebase-tools
firebase login
firebase deploy --only hosting
The firebase.json in the repository already sets public to ., so no extra configuration is needed.
2

Open the dashboard and enter your name

The dashboard (index.html) loads automatically when you open the root URL. On first visit, Zeno prompts you for your name — this is stored in localStorage and used for the personalized greeting on the home screen. The cloak system, wallpaper preferences, and R2 base URL are also stored here.The app grid on the dashboard links to the Game Library, Browser, Terminal, GBA, and Settings.
3

Add your first game

Navigate to Games from the app grid. Zeno supports three ways to add games:Upload from your computer — drag a game folder into one of the five slots, or click ADD GAMES to open the slot modal. Each slot checks that an index.html exists at the top level before accepting the folder. You can drop up to five folders at once and the bulk drop zone fills the slots automatically.Your game folder must follow this structure:
my-game/
├── index.html      ← required
├── game.js
├── style.css
├── assets/
│   ├── sprite.png
│   └── sound.ogg
└── ...
All assets — JS, CSS, images, audio, fonts, and WASM — are served by the Service Worker with correct MIME types. Relative paths in index.html work as normal.Git import — paste a repository URL from GitHub, GitLab, Forgejo, Gitea, or any compatible forge. You can also use owner/repo shorthand, which defaults to git.gay. Zeno scans the repo tree for top-level folders containing index.html, shows you a checklist of found games, and downloads only the ones you select.R2 import — paste a full Cloudflare R2 link (https://pub-xxx.r2.dev/game-name/index.html) or just a folder name if you have already saved a base URL. R2 games are iframed directly — no files are downloaded or registered with the Service Worker.
Git import on GitHub is limited to 60 unauthenticated API requests per hour. If you are on a network that blocks raw.githubusercontent.com, use a Forgejo instance such as git.gay or codeberg.org instead.
4

Click a game card to play

Each loaded game appears as a card in the library. Click any card to launch the game in a fullscreen modal iframe. A fullscreen toggle is available in the modal header.Before the iframe opens, Zeno pings the Service Worker to confirm the game’s files are still registered. If the SW was restarted by the browser (a normal browser memory-saving measure), Zeno automatically re-registers the files from the stored copies in IndexedDB — so you never see a blank screen or a 404.Games saved via upload or Git import are persisted to IndexedDB and restored automatically the next time you open the page. R2 games persist as a URL reference only.

Build docs developers (and LLMs) love