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
| Browser | Method |
|---|---|
| Chrome / Edge | Click install icon in address bar |
| Firefox | Add to Home Screen |
| Safari | Share → Add to Home Screen |
Install on Mobile
iOS (Safari)
- Open
https://play.tinyemulator.comin Safari - Tap Share button
- Select "Add to Home Screen"
Android (Chrome)
- Open
https://play.tinyemulator.comin Chrome - Tap menu (⋮)
- Select "Add to Home Screen"
Offline Capabilities
TinyEmulator caches the following for offline use:
| Resource | Cache Strategy | Purpose |
|---|---|---|
| WASM Cores | Cache-first | Emulator cores (nes, snes, gba, etc.) |
| Game ROMs | IndexedDB (BrowserFS) | User-uploaded ROMs |
| Save States | IndexedDB + Cloud | Local + cloud sync |
| Favorites | localStorage | Offline favorites list |
| Cover Images | Blob cache | Cached 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>