David Alvarez 338ec870f5 UX: auto-start emulator, stop button, cleanup on navigate away
- Emulator auto-starts when Play page loads (no intermediate launch screen)
- Added ⏹ Stop button while game is running
- Back arrow and Stop both kill the emulator (js-dos CI.exit())
- Cleanup on unmount prevents background emulation
- Loading state shown while js-dos CDN loads
- Manual "Start Game" fallback if auto-start fails
2026-05-23 18:58:52 +02:00

Dostalgia

A nostalgic DOS game hub — upload, scrape artwork, and play classic DOS games directly in the browser via js-dos.

Quick Start (Docker)

docker build -t dostalgia .
docker run -p 8765:8765 -v $(pwd)/data:/data dostalgia

Development

Terminal 1 — Go API:

DOSTALGIA_DEV=1 go run .

Terminal 2 — Frontend dev server:

cd frontend && npm install && npm run dev

Open http://localhost:5173

Architecture

  • Backend: Single Go binary. No database — each game is a directory with a game.json file.
  • Frontend: Svelte SPA, embedded in the Go binary at build time.
  • Emulation: js-dos v8 loaded from CDN, runs DOSBox in WebAssembly.
  • Storage: /data/games/{id}/ — contains game.json, .jsdos bundle, and cover art.

API

Method Path Description
GET /api/games List all games
GET /api/games/:id Get game details
PATCH /api/games/:id Update game metadata
DELETE /api/games/:id Delete a game
POST /api/upload Upload a game ZIP (multipart)
POST /api/games/:id/cover Upload cover art
GET /api/igdb/search?q= Search IGDB (placeholder)

Game JSON Schema

{
  "id": "doom",
  "title": "Doom",
  "year": 1993,
  "genre": "FPS",
  "developer": "id Software",
  "publisher": "id Software",
  "description": "The iconic first-person shooter...",
  "bundle_type": "standard",
  "bundle_file": "doom.jsdos",
  "has_cover": true,
  "ready": true
}
S
Description
A nostalgic DOS game hub — upload, scrape artwork, and play your classic games in the browser
Readme MIT 5.6 MiB
Languages
Java 62.2%
Svelte 24.7%
JavaScript 8.8%
CSS 3.4%
Dockerfile 0.5%
Other 0.4%