A Windows XP-style desktop for playing classic Flash, HTML5, and DOS games in the browser.
- Authentic Windows XP shell, Explorer, Notepad, themes, and display settings
- Flash emulation with Ruffle and DOS emulation with js-dos
- Draggable game windows, task switching, fullscreen, and volume controls
- Favorites, recently played games, categories, search, and deep links
- Automatic offline support for the desktop and optional game downloads
- Internet Games catalog backed by Flashpoint Archive
Install dependencies and run the test suite:
bun install --frozen-lockfile
bun run testBuild and serve the production site locally:
bun run devOpen http://127.0.0.1:8000. The development server also provides the local
/api/games proxy used by Internet Games. It builds automatically when source
files change and starts immediately when dist/ is already current. Use
bun run dev -- --rebuild to force a rebuild or --no-sync to serve the
existing output unchanged.
site/— authored static siteworker/— Cloudflare Worker for the Internet Games catalogtools/— build, validation, and asset maintenance scriptstests/— Bun/TypeScript testsdist/— generated production build; ignored by Git
Included games are defined in site/js/games.js. Flash games use type: "swf";
DOS and HTML5 games use type: "iframe".
{
type: "swf",
title: "Display Name",
icon: "assets/icons/game.png",
category: "Racing",
frameRate: 45,
aspectRatio: 480 / 360,
spoofUrl: "example.com",
}The Windows XP shell is cached automatically. Included games can be downloaded individually or all at once from Settings > Offline. The shared Ruffle runtime is downloaded when the first Flash game is selected.
Games installed through Internet Games are stored separately in IndexedDB and Cache Storage. GameZIP titles are installed fully; Legacy titles cache additional files as they are requested.
Icon sources and checksums live in site/assets/icons/SOURCES.json. Validate
them with:
bun run validate:iconsPushes to main run tests, build the site, deploy and smoke-test the Cloudflare
Worker, and then publish to GitHub Pages. Pull requests run the same validation
without deploying.
The repository requires these GitHub Actions secrets:
CLOUDFLARE_ACCOUNT_IDCLOUDFLARE_API_TOKEN
The API token needs Workers Scripts: Edit for the account and Workers
Routes: Edit for the 4st.li zone.
To deploy the Worker manually:
bun run deploy:workerRuffle is pinned in tools/ruffle-release.json. A weekly workflow checks for
new stable releases and opens a reviewable pull request.
Test game compatibility, controls, frame rate, and categorization before
submitting a pull request. Run bun run test before pushing.