Which open issues stop which PS5 games in AnyPS5, the tool that ports PS5 executables to Linux and Windows, ranked by how many games a fix would move, plus how much of the PS5's system libraries and GPU AnyPS5 implements.
Live: https://alxcbtw.github.io/anyps5-roadmap/. A merge to main goes live within minutes. Otherwise
GitHub's schedule rebuilds the page: an hourly build, and a check several times an hour that builds once an upstream
issue or PR changed and costs no API quota when nothing did (.github/workflows/update-check.yml). GitHub runs
schedules best effort and started both far less often than their cron asks, so the rebuilds come irregularly: in
mid-October 2026 about 1.7 hours apart at the median and at most about 5 hours apart
(#70 has the details).
A community project, not an official AnyPS5 page. Every stage and link on it comes from public GitHub data and links its source.
boykopovar/AnyPS5 on GitHub data/blockers.json, data/games.json
issues, PRs, discussions, comments, reviews curated by people; always wins
| |
| gh api graphql, only what changed |
v |
data/cache/raw.json --> mine.py ----------> model.py <--------+
keyword rules titles, blockers, chains
per line |
PlayStation title list ---------------> identity.py: title IDs -> games (merges, review list)
|
evaluate.py: stage, confidence, stage history per game
|
store pages, Wikidata ----------------> images.py: a cover URL per game (never the image)
|
progress.json, COMPATIBILITY.md, PM4 sources --> coverage.py, assemble.py
|
v
site/roadmap.json, feed.json --> the web app (web/), classic.html, ROADMAP.md, llms.txt
|
v
the live roadmap.json, feed.json --> feed.py --> site/feed.json (last 50 items)
- Mine.
collect.pyreads the upstream issues, PRs and discussions of the last 60 days (all open ones) with their comments, replies, reviews, review threads and cross-references. Each run lists only what changed since the last one and reads only the threads that changed, within a GraphQL budget.mine.pyreads title IDs, game names, stages, OS, GPU, the build (main, main plus named PRs, or patches), the author and error lines from that text, one line at a time, plus the last error line of a fenced log and the "Furthest point" of a Game bring-up discussion form. A quoted line is not the quoter's report, and a report posted twice counts once. - Group.
identity.pyputs the title IDs of one game together: by a person's word (data/games.json), by the PlayStation Store's (one store concept), or when their names agree once spelling, symbols, editions and short forms such as GTA are set aside. Anything less certain goes to a review list instead.images.pyfinds each game's cover on the PlayStation Store or Steam CDN; docs/images.md has the sources and terms. - Curate.
data/blockers.jsonholds what mining gets wrong or cannot see: blockers, the order in which they stop each game, and hand reviews of mined stages. A curated fact always wins. - Render.
assemble.pywritessite/roadmap.json. The page,ROADMAP.mdandllms.txtare rendered from that file alone, so people and tools see the same data.feed.pycompares it with theroadmap.jsonthat is live before the deploy and adds what changed tofeed.json.
The code is in anyps5_roadmap/; CONTRIBUTING.md
has a module map.
Python 3.11 or newer; nothing to install. On Windows, use py -3 for python3.
git clone https://github.com/AlxcBTW/anyps5-roadmap && cd anyps5-roadmap
python3 -m unittest discover -s tests # fixture tests, no network
python3 roadmap.py --offline --no-network --cache tests/fixtures/raw.json --curated tests/fixtures/curated.json --games tests/fixtures/games.json --out build/site
gh auth login # only for live data
python3 roadmap.py --out build/site # live build; open build/site/classic.html
cd web && npm ci && npm run dev # the app (Node 24) at http://localhost:5173The live build needs the GitHub CLI and saves what it fetched in
data/cache/. After that, python3 roadmap.py --offline --out build/site rebuilds from the cache in
seconds, which is the quick way to try a change to data/blockers.json. Add
--upstream-checkout <path to an AnyPS5 clone> for the PM4 coverage line.
- Stages, lowest to highest: Converts, Loads, Starts, First draw, Presents, Menus, Ingame,
Playable. A stage counts only when it was reached on AnyPS5
main, or onmainplus PRs that are merged now. - Games hold all of their title IDs (PPSA for PS5, CUSA for PS4; region variants share a game) and
aliases ("GTA V" for Grand Theft Auto V). Each has a
stage(qualifying reports only), aconfidence(checked by hand, or how many different people report that stage onmain: a count, not a verification), anunverified_claim(a mined Menus or higher on main that nobody has reviewed yet; never ranked on), astage_on_branches(how far it gets with open PRs or local patches, and the PRs it needs; never ranked on), itsopen_blockersin the order they stop it, atimelineof the dates its stage rose, and a coverimagelinked from the PlayStation Store or Steam.identitylists every merge with its reasons, and the matches waiting for review. - Titles (one per title ID) keep the same fields for that ID alone and name their
game. - Blockers are upstream issues, PRs (
pr-N) or crash sites listed in a tracker issue (N~symbol). Each has its fix PRs and a score:3 × one_fix_away + 2 × frontier + total(games for which it is the only open stop, the first open stop, or any stop; a game counts once, whatever its title IDs). originsays where a fact comes from:curated(data/blockers.json),upstream(COMPATIBILITY.md),github(native "blocked by" links) ormined(text rules).- Changes are in feed.json, a JSON Feed 1.1 that feed readers can follow. Each snapshot that changed something adds one item: blockers resolved, blockers that enter, leave or move in the ranking, games whose stage or first open blocker changed, and games that took in another title ID, each linked on the page. The feed keeps the last 50 items, so a reader that checks every few hours misses nothing.
Every field is described in AGENTS.md and in the published llms.txt.
- On the page: each game and each blocker opens a panel with a "Report a correction" link. It opens an issue form with the title ID, the stage on the page and its source already filled in.
- As a pull request: edit
data/blockers.json, ordata/games.jsonto join or separate the title IDs of a game. CONTRIBUTING.md walks through a first data fix in five minutes. CI shows what the change does to the ranking and the stages, and the page is rebuilt a few minutes after the merge.
Bugs in AnyPS5 itself belong in AnyPS5's issues.
- Mining reads text with keyword rules, one line at a time. Negations and context are handled only roughly, so a stage of Menus or higher stays an unverified claim until someone reviews it.
- The order of mined blockers is a heuristic: the latest recorded stop first, then issues by date.
- Reports that only exist on Discord are invisible until someone copies them to GitHub.
- Titles without a PPSA or CUSA ID (some homebrew) appear only when curated.
- A homebrew app without a title ID of its own shows its initials instead of a cover.
The full list, as of the last build, is under "Known gaps in the data" in the page's Data view and in
roadmap.json → gaps.
The code is under the MIT license. Text quoted on the page and in the data (issue titles, sentences, error lines) belongs to its authors in the upstream repository; it is quoted with a link to its source and is not relicensed. Game covers are not stored here: the page links them where the PlayStation Store and Steam publish them, and they belong to their publishers (docs/images.md). The PlayStation title list is andshrew/PlayStation-Titles (MIT). The Geist fonts are under the SIL Open Font License (site/fonts/OFL.txt).
Not affiliated with the AnyPS5 project or with Sony Interactive Entertainment. PlayStation and PS5 are trademarks of Sony Interactive Entertainment.
Contributions follow the code of conduct.
