跳到主要内容

PWA Setup

TinyEmulator can be installed as a Progressive Web App for offline use.

Current Configuration

TinyEmulator includes a manifest.json for PWA installation:

{
"short_name": "TinyEmulator",
"name": "TinyEmulator - Retro Game Emulator",
"icons": [
{
"src": "favicon.svg",
"sizes": "any",
"type": "image/svg+xml"
}
],
"start_url": ".",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
}

Install on Desktop

BrowserMethod
Chrome / EdgeClick install icon in address bar
FirefoxAdd to Home Screen
SafariShare → Add to Home Screen

Install on Mobile

iOS (Safari)

  1. Open https://play.tinyemulator.com in Safari
  2. Tap Share button
  3. Select "Add to Home Screen"

Android (Chrome)

  1. Open https://play.tinyemulator.com in Chrome
  2. Tap menu (⋮)
  3. Select "Add to Home Screen"

Offline Capabilities

TinyEmulator caches the following for offline use:

ResourceCache StrategyPurpose
WASM CoresCache-firstEmulator cores (nes, snes, gba, etc.)
Game ROMsIndexedDB (BrowserFS)User-uploaded ROMs
Save StatesIndexedDB + CloudLocal + cloud sync
FavoriteslocalStorageOffline favorites list
Cover ImagesBlob cacheCached cover art

Service Worker (Future Enhancement)

To add full offline support, add a Service Worker:

// sw.js
const CACHE_NAME = 'tinyemulator-v1';
const CACHE_URLS = [
'/',
'/index.html',
'/assets/index.js',
'/assets/index.css',
'/cores/nes-core.js',
'/cores/snes-core.js',
];

self.addEventListener('install', (event) => {
event.waitUntil(
caches.open(CACHE_NAME).then((cache) => cache.addAll(CACHE_URLS))
);
});

self.addEventListener('fetch', (event) => {
event.respondWith(
caches.match(event.request).then((response) => {
return response || fetch(event.request);
})
);
});

Register in index.html:

<script>
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/sw.js');
}
</script>