A small web app for the public tapHLE app compatibility database: where each early iPhone OS app currently stands when run under tapHLE on Windows. It is a live database (humans and coding agents submit results, a moderator approves them), not a file in the emulator repository.
It tracks three kinds of items in a hierarchy:
- Apps — an application tested in tapHLE (identity from its
Info.plist). - Versions — a specific version of an app.
- Reports — a single tester's (or agent's, or telemetry run's) result for a version: a 1–5 star rating plus the Windows host, tapHLE version, and the current frontier.
Ratings and every extra field are defined in config.php (see
config.example.php). Ratings follow tapHLE's scale; a coding agent may confirm
up to 3 stars, and 4–5 stars require human testing. The database holds structured
data only — narrative debugging notes live in the emulator repository under
dev-docs/app-notes/.
This is a fork of app-compatibility-db by hikari_no_yume, the web app that also powers touchHLE's app database.
Copyright © 2023 hikari_no_yume, and © 2026 the tapHLE contributors for
modifications. All the code here is licensed under
MPL-2.0. All HTML and CSS that the app
can output is additionally licensed under
CC0-1.0 so databases produced with it
can be freely archived and redistributed. Submitted database content is under
CC BY 4.0 (see SITE_CONTENT_LICENSE_* in the config).
tapHLE's own compatibility ratings are always produced by a tapHLE run; touchHLE or HyperHLE results are testing leads only and are never imported as ratings.
config.example.php: tapHLE branding, tapHLE's 1–5 rating scale, and the fields — appbundle_identifier/developer, versionbundle_version/min-OS, and reportsource_type(human/agent/telemetry),taphle_version, andfrontier.- A small JSON API so tapHLE telemetry and coding agents can work with the
database without the interactive GitHub sign-in:
POST /api/reportsubmits a result (token-authenticated, always landing unapproved for moderator review), andGET /api/appsreads the public list so an agent can choose what to work on. SeeAPI.md. The code is confined toinclude/api.phpand the twotemplates/api_*.phptfiles plus two routes inhtdocs/index.php, to keep the diff against upstream small. printExternalUsername()ininclude/util.phponly links to GitHub for agithub:identity. API identities such astelemetry:taphlehave no profile page, so linking them would point at a GitHub account that does not exist.
Pull upstream fixes with the upstream remote:
git fetch upstream && git log --oneline HEAD..upstream/main.
Requires git, PHP 7.4/8, and the SQLite 3 CLI.
cp config.example.php config.php, then editconfig.php: fill the GitHub OAuth keys and any API tokens (keep them secret —config.phpis git-ignored).- Create the database:
sqlite3 app_db.sqlite3 '.read schema.sql' - Serve locally:
cd htdocs && php -S localhost:8000
Use the example nginx + PHP-FPM config. The app can serve from a domain root or
from a subpath — set SITE_BASE_PATH in config.php (the tapHLE deployment uses
/compatibility) and register the GitHub OAuth callback at the matching URL.
The SQLite database file and the directory containing it must be writeable by the web server: SQLite creates journal files alongside the database, so a writeable file in a read-only directory fails on every write.
Unlike upstream, htdocs/privacy.html is committed rather than git-ignored.
This is a single deployment, so version-controlling the policy keeps it
reviewable and means a deploy is just a pull. Upstream ignores it because each
operator needs their own; anyone forking this repo should replace it. It still
carries bracketed placeholders (contact, jurisdiction, retention periods) that
must be filled in before it is truthful.
schema.sql: SQL schema (apps, versions, reports, screenshots, users)config.example.php: configuration example/documentationAPI.md: the programmatic API —GET /api/apps,POST /api/reportprivacy.example.html: example privacy policynginx-config-example.conf: example nginx confightdocs/index.php: sole entry point and routertemplates/: templates and view/controller codeinclude/: utility functions and model code