The official website for KytyPS5 — a free and open-source PlayStation 5 emulator for Windows, Linux and macOS. Live at kytyps5.github.io.
Dark-first, premium, accessible and fast. Built with React 19, Vite, TypeScript, Tailwind CSS v4, Radix UI primitives, Framer Motion and Lucide icons.
npm install
npm run dev # start the dev server
npm run test # Vitest suite
npm run build # typecheck + production build (regenerates derived data first)
npm run preview # preview the production buildnpm run build regenerates all derived data (GitHub snapshot, compat exports, sitemap), so a
fresh checkout builds cleanly. Set GITHUB_TOKEN when building to avoid anonymous rate limits.
src/content/compat/*.md— community game-status reports (one per game + OS); the source of the compatibility pages and the launcher's status export.src/data/games.json— the deduplicated PS5 title database (imported — don't hand-edit).public/data/*— derived JSON served statically (regenerated at build time).scripts/— data generators, the compat sync/conversion tooling and validators.
Game-status reports come from KytyPS5's Game Emulation
Status Report issues. Every 30 minutes the Mirror game-status issues workflow mirrors each
unconverted issue here as an issue labeled compat — one per (game, OS). To convert one into a
report, comment /compat on it: the Convert compat issue to report PR workflow writes
src/content/compat/<game>-<os>.md and opens a single PR for that game (re-running /compat
updates the same PR). One report file per (game, OS) keeps the games separate — a Linux report
never overwrites a Windows one, and the site shows each OS's own status.
Issues whose fields don't parse cleanly can be fixed before converting: comment /setos
<windows|linux|macos> when the OS text doesn't generalize, /setid <PPSA-XXXXX> when the
serial is missing or unknown, /settitle <title> to correct the game title, or /setstatus
<doesnt-boot|logo|main-menu|in-game> to override or correct the compatibility status. Each records
the value in a ## Overrides section of the mirror's body (and updates the mirror title); the
/compat conversion then uses those values, which win over the ones parsed from the issue. Run
/compat afterwards to convert. When a command fails (e.g. /compat on a non-mirror, or an
unrecognized value), the workflow posts the reason back on the issue as a comment.
Site code is licensed under GPL-2.0 (see LICENSE). The KytyPS5 name, screenshots and all
project facts belong to the KytyPS5 project (GPL-2.0).