add romm wiki as submodule

This commit is contained in:
Georges-Antoine Assi
2024-08-30 10:40:03 -04:00
parent bde9e995e9
commit 9675e476c1
19 changed files with 7 additions and 1109 deletions
+6
View File
@@ -0,0 +1,6 @@
[submodule "romm/romm.wiki"]
path = romm/romm.wiki
url = https://github.com/rommapp/romm.wiki.git
[submodule "romm.wiki"]
path = romm.wiki
url = https://github.com/rommapp/romm.wiki.git
View File
View File
Submodule
+1
Submodule romm.wiki added at c99aa90737
-63
View File
@@ -1,63 +0,0 @@
RomM provides support for various forms of authentication, granting flexibility in securing access to its features.
### Setup
You'll want to set the following env variable before starting RomM:
- `ROMM_AUTH_SECRET_KEY` is required and can be generated with `openssl rand -hex 32`
### Sessions
When the `/login` endpoint is called with valid credentials, a `session_id` is generated, stored as a cookie and sent to the browser. The same token is used to create a cache entry in Redis (or in-memory if Redis is disabled) which maps the token to the user. This way no sensitive information is stored on the client.
### Roles
A user can have one of the following roles:
- VIEWER: Can view platforms and ROMs, download ROMs, and edit own profile
- EDITOR: Can create/edit/delete platforms and ROMs
- ADMIN: Can view all users, and create/edit/disable/delete users
As permissions are additive, editors will have all permissions of the `viewer` role, and admins all those of the `editor` role.
## Basic Authentication
Requests can be made to protected API endpoints with an authorization header. The token is the base64 encoded value of `username:password`.
Example using cURL:
```bash
curl https://romm.local/api/platforms -H 'Authorization: Basic YWRtaW46aHVudGVyMg=='
```
## OAuth
Along with the above forms of authentication, we've added an endpoint to generate expiring, scope-limited authentication tokens (`/api/token`). Successfully authenticating with that endpoint with return an `access_token` valid for 15 minutes, and a [`refresh_token`](https://oauth.net/2/grant-types/refresh-token/) valid for 2 weeks. The `refresh_token` can be used to generate a new `access_token` when needed.
The `/api/token` endpoint requires a username, password, and a list of [scopes](https://oauth.net/2/scope/) in the format `read:roms write:roms read:platforms ...`. The list of scopes and endpoints are available to browse via Swagger UI or Redoc (see next section).
**Note: As of now, only the legacy [password grant type](https://oauth.net/2/grant-types/password/) is supported.** We plan to eventually add support for [Client Credentials](https://oauth.net/2/grant-types/client-credentials/).
### OpenAPI
The API endpoints are fully documented and compliant with the OpenAPI specification. Explore the API endpoints using the Swagger UI interface at `/api/docs` and the Redoc interface at `/api/redoc`, or view the raw JSON at `/openapi.json`.
For more information on OpenAPI, visit the [OpenAPI Specification](https://www.openapis.org/) website.
## FAQ
### Can I disable authentication?
No, authentication is required and enabled by default.
### I want to allow an EDITOR to edit ROMs but not delete them. Can I do that?
At this time, fine-grain control over permissions within a role is not supported. This decision was taking in order to simplify user management in the client, and authentication/permission code on the server.
### Is authentication safe/robust? Can I trust it?
We've done our best to build an authentication system that is simple, clear and comprehensible. We have automated tests which verify that access is granted when it should be, and blocked when not (invalid credentials, missing permissions, expired access tokens, etc.). That being said, we welcome any reviews of our authentication and permission flows, PRs to fix issues, and new tests to cover edge cases.
### I found an bug/issue with authentication. How do I report it?
Please report bugs in our authentication/permission system privately by [submitting a vulnerability report](https://github.com/zurdi15/romm/security/advisories/new).
-9
View File
@@ -1,9 +0,0 @@
While RomM supports every platform listed in the [Supported Platforms page](https://github.com/zurdi15/romm/wiki/Supported-Platforms), the list is not exhaustive, and you may have ROMs in your library for other platforms. To load those files into RomM, place them in a folder for each platform, and give it a name that's **all lowercase**, with **`-` to separate words**, and with **no white spaces**. For example, `pocket-challenge-v2` would map to `Pocket Challenge V2`, and display the default platform icon in the app.
Furthermore, only a portion of the supported platforms have custom icons built-in. If your library has platforms that aren't listed in [the platforms icons list](https://github.com/zurdi15/romm/tree/release/frontend/assets/platforms), RomM will display a default fallback icon.
If you'd like to load your own custom icons for missing platforms, you can mount `/var/www/html/assets/platforms` to some local folder and place all of your custom **`.ico`** platform icons in there. You'll also want to download the ones [provided in this project](https://github.com/zurdi15/romm/tree/release/frontend/assets/platforms) and place them in the same folder. If you'd like to use your own icons for platforms already supported by RomM, just replace the file with another using the exact same name.
**The name of the `.ico` file should match the slug of the platform on IGDB.** For example, the URL for the AmstradCPC is https://www.igdb.com/platforms/acpc, so the filename should be `acpc.ico`.
<img width="2459" alt="Screenshot 2023-09-15 at 10 45 04 AM" src="https://github.com/zurdi15/romm/assets/3247106/1831c206-b431-41c2-9761-49c132f40ee0">
-43
View File
@@ -1,43 +0,0 @@
[EmulatorJS](https://emulatorjs.org/) is a web-based emulator for various system; that is, it allows you to run old games in your web browser. It's based on [Emscripten](https://emscripten.org/), which is a toolchain for compiling C and C++ code to WebAssembly.
### Loading saves and states
Our integration with EmulatorJS automates the process of loading and saving save files and save states. Before starting the game, select a save and/or state file to load (if one is available). Anytime you save the game (or create a save state), the save and state files stored with RomM will be updated, so there's no need to manually download or upload them.
### Supported systems
Note that only the following systems are currently supported:
* 3DO
* Amiga
* Arcade/MAME
* Atari 2600
* Atari 5200
* Atari 7800
* Atari Jaguar
* Atari Lynx
* Commodore 64
* ColecoVision
* Neo Geo Pocket
* Neo Geo Pocket Color
* Nintendo 64
* Nintendo Entertainment System (NES)
* Nintendo Family Computer (Famicom)
* Nintendo DS
* Game Boy
* Game Boy Color
* Game Boy Advance
* PC-FX
* PlayStation (PS)
* Sega 32X [currently disabled - broken](https://github.com/EmulatorJS/EmulatorJS/issues/579)
* Sega CD
* Sega Game Gear
* Sega Master System
* Sega Genesis/Megadrive
* Sega Saturn
* Super Nintendo Entertainment System (SNES)
* Super Famicom
* TurboGraphx-16/PC Engine
* Virtual Boy
* WonderSwan
* WonderSwan Color
-27
View File
@@ -1,27 +0,0 @@
This is a complete list of available environment variables; required variables are marked with a `✓`.
|Variable|Description|Required|Default|
|---|---|:---:|---|
|IGDB_CLIENT_ID|Client ID for IGDB API|||
|IGDB_CLIENT_SECRET|Client secret for IGDB API|||
|MOBYGAMES_API_KEY|Mobygames secret API key|||
|STEAMGRIDDB_API_KEY|SteamGridDB secret API key|||
|DB_HOST|Host name of MariaDB instance|✓|`localhost`|
|DB_PORT|Port number of MariaDB instance||`3306`|
|DB_NAME|Should match MYSQL_DATABASE in mariadb||`romm`|
|DB_USER|Should match MYSQL_USER in mariadb|✓||
|DB_PASSWD|Should match MYSQL_PASSWORD in mariadb|✓||
|ROMM_AUTH_SECRET_KEY|Generate a key with `openssl rand -hex 32`|✓||
|ROMM_HOST|Host name of ROMM instance||`localhost`|
|DISABLE_CSRF_PROTECTION|Disables [CSRF protection](https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html) (not recommended)||`false`|
|DISABLE_DOWNLOAD_ENDPOINT_AUTH|Disable auth on download endpoint (WebRcade, Tinfoil)||`false`|
|SCAN_TIMEOUT|Timeout for the background scan/rescan tasks (in seconds)||`14400`|
|ENABLE_RESCAN_ON_FILESYSTEM_CHANGE|Enable rescanning of library when filesystem changes||`false`|
|RESCAN_ON_FILESYSTEM_CHANGE_DELAY|Delay in minutes before rescanning library when filesystem changes||`5`|
|ENABLE_SCHEDULED_RESCAN|Enable scheduled rescanning of library||`false`|
|SCHEDULED_RESCAN_CRON|Cron expression for scheduled rescanning||`"0 3 * * *"`|
|ENABLE_SCHEDULED_UPDATE_SWITCH_TITLEDB|Enable scheduled updating of Switch TitleDB index||`false`|
|SCHEDULED_UPDATE_SWITCH_TITLEDB_CRON|Cron expression for scheduled updating of Switch TitleDB||`"0 4 * * *"`|
|ENABLE_SCHEDULED_UPDATE_MAME_XML|Enable scheduled updating of MAME XML index||`false`|
|SCHEDULED_UPDATE_MAME_XML_CRON|Cron expression for scheduled updating of MAME XML||`"0 5 * * *"`|
|TZ|Sets the timezone||`UTC`|
-28
View File
@@ -1,28 +0,0 @@
## SteamGridDB
To access the SteamGridDB API, create an account by linking your Steam account, and head to your [API Preferences page](https://www.steamgriddb.com/profile/preferences/api). Copy (or generate) the API key and use it to set `STEAMGRIDDB_API_KEY`.
## Mobygames
To access the Mobygames API, [create a MobyGames account](https://www.mobygames.com/user/register/) and then visit your profile page. Click the 'API' link under your user name to sign up for an API key. Copy the key shown and use it to set `MOBYGAMES_API_KEY`.
## IGDB
To access the IGDB API you'll need a Twitch account and a valid phone number for 2FA verification. Up-to-date instructions are available in the [IGDB API documentation](https://api-docs.igdb.com/#account-creation). When registering your application in the Twitch Developer Portal, fill out the form like so:
* Name: Something **unique or random** like `correct-horse-battery-staple` or `KVV8NDXMSRFJ2MRNPNRSL7GQT`
* OAuth Redirect URLs: `localhost`
* Category: `Application Integration`
* Client Type: `Confidential`
> [!IMPORTANT]
> **The name you pick has to be unique! Picking an existing name will fail silently, with no error messages. We recommend using `romm-<random hash>`, like `romm-3fca6fd7f94dea4a05d029f654c0c44b`**
Note the client ID and secret that appear on screen, and use them to set `IGDB_CLIENT_ID` and `IGDB_CLIENT_SECRET` in your environment variables.
|![IGDB_Creation](https://github.com/rommapp/romm/assets/3247106/7a93bf68-f6d9-46a5-ab72-719f2d5ec9d3)|![IGDB_Secret](https://github.com/rommapp/romm/assets/3247106/7a9dc056-52be-41c4-aec5-e2758aa520b5)|
|---|---|
## SteamGridDB
To access steamGridDB API, you need to login into their [website](https://www.steamgriddb.com/) with a [steam account](https://store.steampowered.com/join). Once logged in, go to your [API tab under the preferences page](https://www.steamgriddb.com/profile/preferences/api). Copy the key shown and use it to set `STEAMGRIDDB_API_KEY`.
-3
View File
@@ -1,3 +0,0 @@
![romm_banner_thin](https://github.com/rommapp/romm/assets/34356590/101d4dfc-6bf1-4ce3-80b1-fe2877d18b81)
Official Website: https://romm.app
-99
View File
@@ -1,99 +0,0 @@
This quick start guide will help you get a RomM instance up and running. It is split into 3 parts:
- Prepare
- Build
- Configure
## Prepare
This guide will assume that you already have the following done, if not - stop here and come back when you do.
* Docker and Docker Compose installed
* OpenSSL installed
* A Twitch account (optional)
* 2-factor authentication set up on your Twitch account
* *This is required to get a dev account and an IGDB key*
* A MobyGames account (optional)
* Your Roms organized in the correct format
#### Twitch and MobyGames API Keys
Head over to [API key docs](https://github.com/rommapp/romm/wiki/Generate-API-Keys) to get your Twitch and/or MobyGames keys, then come back here
#### Generating Authentication Keys
This step will generate a key that is used in the authorization of RomM. Without this, you will be unable to log in and use the platform
Run the following command in a terminal:
```sh
openssl rand -hex 32
```
Then copy the output and save it to the `ROMM_AUTH_SECRET_KEY` variable in the docker-compose file. It should look like this:
```sh
~$: openssl rand -hex 32
03a054b6ca27e0107c5eed552ea66becd9f3a2a8a91e7595cd462a593f9ecd09
```
## Build
Now that we have everything gathered, we can begin getting your instance set up!
1. Download a copy of the latest [docker-compose.example.yml](https://github.com/rommapp/romm/blob/release/examples/docker-compose.example.yml) file from GitHub
2. Edit the file and modify the following values to configure the database
* `MYSQL_ROOT_PASSWORD`: Sets the root password of the database. Use a unique and secure password (*use a password generator for simplicity*)
* `MYSQL_DATABASE`: Sets the database name for RomM. This can be modified - but it's not necessary
* `MYSQL_USER`: User to connect to the database with. This can be modified - but it's not necessary
* `MYSQL_PASSWORD`: Password for the user to connect to the database with. Use a unique and secure password (*use a password generator for simplicity*)
3. Modify the following values in the **environment** to configure the application. *-- Other values can be changed, but should not be done unless you know what you are doing, and are outside the scope of this guide*
* `DB_NAME`: Name of the database set in the database section
* `DB_USER`: Name of the user to connect to the database
* `DB_PASSWD`: Password of the user to connect to the database
4. Modify the following values in the **volumes** to configure the application
* `/path/to/library`: Path to the directory where your rom files will be stored
* `/path/to/assets`: Path to the directory where you will store your saves, etc
* `/path/to/config`: Path to the directory where you will store the config.yml
5. Save the file as *docker-compose.yml* instead of *docker-compose.example.yml*. It should look soomething like this:
![336102458-386dbff4-85ca-4926-86e4-48dc47771451](https://github.com/user-attachments/assets/081f8991-92ae-4129-8923-124f8146ab5b)
6. Open the terminal and navigate to the directory containing the docker-compose file
7. Run `docker compose up -d` to kick off the docker pull. You will see it pull the container and set up the volumes and network:
<img src="https://github.com/rommapp/romm/assets/3247106/ee1c96aa-e3a3-438b-ac18-9f26dad7b9db" width="780">
8. Run `docker ps -f name=romm` to verify that the containers are running
9. Open a web browser and navigate to `http://localhost:8080`, where you should be greeted with the RomM setup page
10. Go through the setup wizard, setting your admin username and password
11. Log in with the credentials you set in the setup flow
## Configure
Now that the container is running, we will configure it by importing your roms
#### Uploading Your Roms via Web Interface
This method is certainly viable, but not recommended if you have a lot of roms and/or multiple platforms. It is good for adding after the fact as your collection grows, but wouldn't be recommended for the first set up, nor for multi-file roms
1. Log into RomM with your user credentials
2. Navigate to *Library* -> *Upload roms*
3. Select the platform, then click *ADD ROMS* and select the roms you want to upload in the file selector that appears
4. Click *UPLOAD* to begin uploading the roms
5. Repeat for all the roms/platforms you have
<img src="https://github.com/rommapp/romm/assets/3247106/3e398e7a-d653-472c-9f11-82b2f0b52840" width="780">
#### Importing Your Roms via Scanner
This method is generally the fastest and recommended for first time setup
1. Stop your RomM instance. `docker compose down` if you are in the terminal and directory containing the docker-compose file, otherwise `docker stop romm`
2. Go to the library folder created by RomM, set in the docker-compose file under *:/romm/library* and create a folder named `roms`
3. Copy your platform folders/rom files into the `roms` folder you created
4. Start the RomM instance back up. `docker compose up -d` if you are in the terminal and directory containing the docker-compose file, otherwise `docker start romm`
5. Log into RomM with your user credentials
6. Navigate to *Library* -> *Scan*
7. The system will now begin scanning the rom files and applying metadata to them. You can click on any of the items that it has tagged to see the metadata it pulled without having to stop the scan
8. After the scan completes, click the RomM logo to go back to the main screen. You should see the platforms and recent games it has scanned. You are now ready to rock and RomM!
-160
View File
@@ -1,160 +0,0 @@
Here are some basic configurations for popular reverse proxies. Some installations may require modifications to config options not listed below.
## Caddy
```caddyfile
http://romm.mysite.com {
reverse_proxy romm:8080
}
```
### Caddy + TLS (HTTPS)
```caddyfile
https://romm.mysite.com {
tls mysite.com.crt mysite.com.key # Certificate and key files
encode zstd gzip
header * {
Strict-Transport-Security "max-age=31536000;"
X-XSS-Protection "1; mode=block"
X-Frame-Options "SAMEORIGIN"
X-Robots-Tag "noindex, nofollow"
-Server
-X-Powered-By
}
reverse_proxy romm:8080
}
```
## Nginx
```nginx
server {
listen 80 default_server;
server_name romm.mysite.com;
client_max_body_size 0;
location / {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app romm;
set $upstream_port 8080;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
}
}
```
### Nginx + TLS (HTTPS)
```nginx
server {
listen 80 default_server;
server_name _;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name romm.mysite.com;
include /config/nginx/ssl.conf;
client_max_body_size 0;
location / {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app romm;
set $upstream_port 8080;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
# Hide version
server_tokens off;
# Security headers
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
}
}
```
## Nginx Proxy Manager
Items marked with ❗ are important to set, as RomM may not correctly otherwise!
#### ⚡ Details
* Domain Names: `romm.mydomain.com` (replace mydomain with your own)* Scheme: `http`
* Forward Hostname/IP: <device IP> (like 192.168.X.X)
* Forward Port: `8080`
* Cache Assets: `off`
* Block Common Exploits: `on`
* Websockets Support: `on`
* Access List: -
#### 🛡️ SSL
Strongly recommended, but only required if you plan to secure your site (use HTTPS)
* SSL Certificate: "Request a new SSL Certificate"
* Force SSL: `on`
* HTTP/2 Support: `on`
* HSTS Enabled: `off`
* Email Address for Let's Encrypt: <your email address>
* I Agree to the TOS: `on`
#### ⚙️ Advanced
Custom Nginx Confguration ❗
```
proxy_max_temp_file_size 0;
```
|Details|SSL|Advanced|
|---|---|---|
|![image](https://github.com/user-attachments/assets/e106a8e9-8b27-41ef-8ba2-d43c3b68b269)|![image2](https://github.com/user-attachments/assets/6c82c785-792a-410a-80f2-d95839cba47b)|![image3](https://github.com/user-attachments/assets/566ae834-99b5-42f3-b46b-306b8f73b5b4)|
## Traefik
### Using a configuration document
```yml
http:
romsdomainse:
entryPoints:
- "https"
rule: "Host(`roms.domain.se`)"
middlewares:
- default-headers
- https-redirectscheme
tls:
certResolver: http
service: romsdomainse
services:
romsdomainse:
loadBalancer:
servers:
- url: "http://192.168.1.100:8080"
passHostHeader: true
```
### Using labels in docker compose
```yml
labels:
- "traefik.enable=true"
- "traefik.http.services.romm.loadbalancer.server.port=8080"
- "traefik.http.routers.romm.rule=Host(`romm.YOUR_DOMAIN.com`)"
- "traefik.http.routers.romm.entrypoints=websecure"
- 'traefik.http.routers.romm.tls=true'
- 'traefik.http.routers.romm.tls.certresolver=https'
```
-63
View File
@@ -1,63 +0,0 @@
## Video tutorial
[AlienTech42](https://www.youtube.com/@AlienTech42) has published [a great video](https://www.youtube.com/watch?v=ls5YcsFdwLQ) on installing and running RomM on Unraid. Check it out!
[![IMAGE ALT TEXT HERE](https://img.youtube.com/vi/ls5YcsFdwLQ/0.jpg)](https://www.youtube.com/watch?v=ls5YcsFdwLQ)
## Prerequisites
Before getting started, install the [Community Apps plugin](https://forums.unraid.net/topic/38582-plug-in-community-applications/) for Unraid.
If you're planning to use MariaDB as your database, install it from the plugin registry. Both the [official](https://hub.docker.com/_/mariadb) and [linuxserver](https://github.com/linuxserver/docker-mariadb/pkgs/container/mariadb) versions are supported.
|Official|Linuxserver|
|---|---|
|<img width="658" alt="Screenshot 2023-08-07 at 12 38 48 PM" src="https://github.com/rommapp/romm/assets/3247106/27b8ec77-413b-45e2-89f9-9d1984cef7f6">|<img width="658" alt="Screenshot 2023-08-07 at 12 38 44 PM" src="https://github.com/rommapp/romm/assets/3247106/45cabc99-8fbc-458c-8579-ef39b1cf498b">|
## Installation
From the Unraid dashboard, click `APPS` in the navbar. In the search bar, search for `rommapp romm`; no results will appear, but that's normal. On the right side of the screen, click `Click Here To Get More Results From DockerHub`.
![258859203-2582da70-dcae-4505-8463-23f8f2e6c64b](https://github.com/rommapp/romm/assets/3247106/cd7c3eb0-2b12-4836-94e7-f485c64e51a4)
One of the first results should be `romm` by `rommapp`. Once you find it, click `Install`.
![258859891-6efb8696-d5d7-45dd-b1b3-d6365ee4ff07](https://github.com/rommapp/romm/assets/3247106/29c56fa4-a923-40e4-951a-0348f8551c86)
If a confirmation window appears, click `YES` and CA will attempt to determine paths, ports and variables from the template.
![258860339-5fc2c451-bfa9-4871-8bee-b04a72d602ca](https://github.com/rommapp/romm/assets/3247106/826890e1-4727-4638-acfd-b124806c5be5)
Once the installation finishes, the configuration page will appear and should look something like this:
![258861319-88c331d0-4586-444e-b922-d2465fd14c96](https://github.com/rommapp/romm/assets/3247106/4898e62c-6f76-43cf-a516-eed4d13ba46b)
## Configuration
Configure the required environment variables, ports and paths as per the [example docker-compose.yml](https://github.com/rommapp/romm/blob/release/examples/docker-compose.example.yml) file.
![258862729-c0e0ae7e-c3e2-46c8-91f8-2c5ca2a1039e](https://github.com/rommapp/romm/assets/3247106/427d9f98-ea34-4bf4-9acf-ee1a57c8a91d)
### MariaDB
To use the MariaDB container setup in #prerequisites, add config options for the environment variables. Descriptions of the config options and sensible defaults are listed in the [example docker-compose.yml](https://github.com/rommapp/romm/blob/release/examples/docker-compose.example.yml) file.
- DB_HOST
- DB_PORT
- DB_USER
- DB_NAME
- DB_PASSWD
## Troubleshooting
[Open an issue](https://github.com/rommapp/romm/issues) if you're having trouble getting RomM to run. State that you're trying to run RomM in Unraid, be specific about the issue, and append screenshots of your configuration.
### Updating
To update to the latest version, select `force update` from the container list. **It's strongly recommended to backup the `appdata` folder (or mount it in a safe location) before updating, since tearing down the container will wipe the resources (covers, screenshots, etc.)
## Shoutouts
We want to give a special shoutout to @Smurre95 and @sfumat0 for their help documenting this process, and working towards getting RomM listed in CA. 🤝
-43
View File
@@ -1,43 +0,0 @@
## Scheduled tasksa
Scheduled tasks can be enabled and configured with the following environment variables:
|Variable|Description|Value|
|---|---|:---:|
|ENABLE_SCHEDULED_RESCAN|Enable scheduled rescanning of library|`true`|
|SCHEDULED_RESCAN_CRON|Cron expression for scheduled rescanning|`"0 3 * * *"`|
|ENABLE_SCHEDULED_UPDATE_SWITCH_TITLEDB|Enable scheduled updating of Switch TitleDB index|`true`|
|SCHEDULED_UPDATE_SWITCH_TITLEDB_CRON|Cron expression for scheduled updating of Switch TitleDB|`"0 4 * * *"`|
|ENABLE_SCHEDULED_UPDATE_MAME_XML|Enable scheduled updating of MAME XML index|`true`|
|SCHEDULED_UPDATE_MAME_XML_CRON|Cron expression for scheduled updating of MAME XML|`"0 5 * * *"`|
### Scheduled rescan
Users can opt to enable scheduled rescans, and set the interval using cron notation. Not that the scan will **not completely rescan** every file, only catching those which have been added/updated.
### Switch titleDB update
Support was added for Nintendo Switch ROMs with filenames using the [titleid/programid format][titleid-program-id-url] (e.g. 0100000000010000.xci). If a file under the `switch` folder matches the regex, the scanner will use the index to attempt to match it to a game. If a match is found, the IGDB handler will use the matched name as the search term.
The associated task updates the `/fixtures/switch_titledb.json` file at a regular interval to support new game releases.
### MAME XML update
Support was also added for MAME arcade games with shortcode names (e.g. `actionhw.zip` -> ACTION HOLLYWOOD), and works in the same way as the titleid matcher (without the regex).
The associated task updates the `/fixtures/mame.xml` file at a regular interval to support updates to the library.
## File system watcher
RomM can also monitor the filesystem for events (files created/moved/deleted) and schedules a rescan of the platform (or entire library is a new platform was added).
The watcher can be enabled and configured with the following environment variables:
|Variable|Description|Value|
|---|---|:---:
|ENABLE_RESCAN_ON_FILESYSTEM_CHANGE|Enable rescanning of library when filesystem changes|`true`
|RESCAN_ON_FILESYSTEM_CHANGE_DELAY|Delay in minutes before rescanning library when filesystem changes|`5`|
The watcher will monitor the `/library/roms` folder for changes to the filesystem, such as files being added, moved or deleted. It will ignore certain events (like modifying the file content or metadata), and will skip default OS files (like `.DS_Store` on mac).
When a change is detected, a scan will be scheduled for sometime in the future (default 5 minutes). If other events are triggered between now and the time at which the scan starts, more platforms will be added to the scan list (or the scan may switch to a full scan). This is done to reduce the number of tasks scheduled when many big changes happen to the library (mass upload, new mount, etc.)
-411
View File
@@ -1,411 +0,0 @@
Below is a list of all supported platforms/systems/consoles and their respective folder names. **The folder name is case-sensitive and must be used exactly as it appears in the list below.**
|Platform Name|Folder Name|IGDB|Mobygames|
|---|---|---|---|
1292 Advanced Programmable Video System | `1292-advanced-programmable-video-system` | <a href="https://www.igdb.com/platforms/1292-advanced-programmable-video-system" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/1292-advanced-programmable-video-system" target="_blank" rel="noopener norefer">Mobygames</a>
3DO Interactive Multiplayer | `3do` | <a href="https://www.igdb.com/platforms/3do" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/3do" target="_blank" rel="noopener norefer">Mobygames</a>
ABC 80 | `abc-80` | | <a href="https://www.mobygames.com/platform/abc-80" target="_blank" rel="noopener norefer">Mobygames</a>
APF MP1000/Imagination Machine | `apf` | | <a href="https://www.mobygames.com/platform/apf" target="_blank" rel="noopener norefer">Mobygames</a>
AY-3-8500 | `ay-3-8500` | <a href="https://www.igdb.com/platforms/ay-3-8500" target="_blank" rel="noopener norefer">IGDB</a>| |
AY-3-8603 | `ay-3-8603` | <a href="https://www.igdb.com/platforms/ay-3-8603" target="_blank" rel="noopener norefer">IGDB</a>| |
AY-3-8605 | `ay-3-8605` | <a href="https://www.igdb.com/platforms/ay-3-8605" target="_blank" rel="noopener norefer">IGDB</a>| |
AY-3-8606 | `ay-3-8606` | <a href="https://www.igdb.com/platforms/ay-3-8606" target="_blank" rel="noopener norefer">IGDB</a>| |
AY-3-8607 | `ay-3-8607` | <a href="https://www.igdb.com/platforms/ay-3-8607" target="_blank" rel="noopener norefer">IGDB</a>| |
AY-3-8610 | `ay-3-8610` | <a href="https://www.igdb.com/platforms/ay-3-8610" target="_blank" rel="noopener norefer">IGDB</a>| |
AY-3-8710 | `ay-3-8710` | <a href="https://www.igdb.com/platforms/ay-3-8710" target="_blank" rel="noopener norefer">IGDB</a>| |
AY-3-8760 | `ay-3-8760` | <a href="https://www.igdb.com/platforms/ay-3-8760" target="_blank" rel="noopener norefer">IGDB</a>| |
Acorn Archimedes | `acorn-archimedes` | <a href="https://www.igdb.com/platforms/acorn-archimedes" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/acorn-32-bit" target="_blank" rel="noopener norefer">Mobygames</a>
Acorn Electron | `acorn-electron` | <a href="https://www.igdb.com/platforms/acorn-electron" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/electron" target="_blank" rel="noopener norefer">Mobygames</a>
Adventure Vision | `adventure-vision` | | <a href="https://www.mobygames.com/platform/adventure-vision" target="_blank" rel="noopener norefer">Mobygames</a>
AirConsole | `airconsole` | <a href="https://www.igdb.com/platforms/airconsole" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/airconsole" target="_blank" rel="noopener norefer">Mobygames</a>
Alice 32/90 | `alice-3290` | | <a href="https://www.mobygames.com/platform/alice-3290" target="_blank" rel="noopener norefer">Mobygames</a>
Altair 680 | `altair-680` | | <a href="https://www.mobygames.com/platform/altair-680" target="_blank" rel="noopener norefer">Mobygames</a>
Altair 8800 | `altair-8800` | | <a href="https://www.mobygames.com/platform/altair-8800" target="_blank" rel="noopener norefer">Mobygames</a>
Amazon Alexa | `amazon-alexa` | | <a href="https://www.mobygames.com/platform/amazon-alexa" target="_blank" rel="noopener norefer">Mobygames</a>
Amazon Fire TV | `amazon-fire-tv` | <a href="https://www.igdb.com/platforms/amazon-fire-tv" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/fire-os" target="_blank" rel="noopener norefer">Mobygames</a>
Amiga | `amiga` | <a href="https://www.igdb.com/platforms/amiga" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/amiga" target="_blank" rel="noopener norefer">Mobygames</a>
Amiga CD32 | `amiga-cd32` | <a href="https://www.igdb.com/platforms/amiga-cd32" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/amiga-cd32" target="_blank" rel="noopener norefer">Mobygames</a>
Amstrad CPC | `acpc` | <a href="https://www.igdb.com/platforms/acpc" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/cpc" target="_blank" rel="noopener norefer">Mobygames</a>
Amstrad PCW | `amstrad-pcw` | <a href="https://www.igdb.com/platforms/amstrad-pcw" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/amstrad-pcw" target="_blank" rel="noopener norefer">Mobygames</a>
Android | `android` | <a href="https://www.igdb.com/platforms/android" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/android" target="_blank" rel="noopener norefer">Mobygames</a>
Antstream | `antstream` | | <a href="https://www.mobygames.com/platform/antstream" target="_blank" rel="noopener norefer">Mobygames</a>
Apple I | `apple-i` | | <a href="https://www.mobygames.com/platform/apple-i" target="_blank" rel="noopener norefer">Mobygames</a>
Apple II | `appleii` | <a href="https://www.igdb.com/platforms/appleii" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/apple-ii" target="_blank" rel="noopener norefer">Mobygames</a>
Apple IIGD | `apple2gs` | | <a href="https://www.mobygames.com/platform/apple2gs" target="_blank" rel="noopener norefer">Mobygames</a>
Apple IIGS | `apple-iigs` | <a href="https://www.igdb.com/platforms/apple-iigs" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/apple-iigs" target="_blank" rel="noopener norefer">Mobygames</a>
Apple Pippin | `apple-pippin` | <a href="https://www.igdb.com/platforms/apple-pippin" target="_blank" rel="noopener norefer">IGDB</a>| |
Arcade | `arcade` | <a href="https://www.igdb.com/platforms/arcade" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/arcade" target="_blank" rel="noopener norefer">Mobygames</a>
Arcadia 2001 | `arcadia-2001` | <a href="https://www.igdb.com/platforms/arcadia-2001" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/arcadia-2001" target="_blank" rel="noopener norefer">Mobygames</a>
Arduboy | `arduboy` | <a href="https://www.igdb.com/platforms/arduboy" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/arduboy" target="_blank" rel="noopener norefer">Mobygames</a>
Astral 2000 | `astral-2000` | | <a href="https://www.mobygames.com/platform/astral-2000" target="_blank" rel="noopener norefer">Mobygames</a>
Atari 2600 | `atari2600` | <a href="https://www.igdb.com/platforms/atari2600" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/atari-2600" target="_blank" rel="noopener norefer">Mobygames</a>
Atari 5200 | `atari5200` | <a href="https://www.igdb.com/platforms/atari5200" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/atari-5200" target="_blank" rel="noopener norefer">Mobygames</a>
Atari 7800 | `atari7800` | <a href="https://www.igdb.com/platforms/atari7800" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/atari-7800" target="_blank" rel="noopener norefer">Mobygames</a>
Atari 8-bit | `atari8bit` | <a href="https://www.igdb.com/platforms/atari8bit" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/atari-8-bit" target="_blank" rel="noopener norefer">Mobygames</a>
Atari Jaguar | `jaguar` | <a href="https://www.igdb.com/platforms/jaguar" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/jaguar" target="_blank" rel="noopener norefer">Mobygames</a>
Atari Jaguar CD | `atari-jaguar-cd` | <a href="https://www.igdb.com/platforms/atari-jaguar-cd" target="_blank" rel="noopener norefer">IGDB</a>| |
Atari Lynx | `lynx` | <a href="https://www.igdb.com/platforms/lynx" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/lynx" target="_blank" rel="noopener norefer">Mobygames</a>
Atari ST/STE | `atari-st` | <a href="https://www.igdb.com/platforms/atari-st" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/atari-st" target="_blank" rel="noopener norefer">Mobygames</a>
Atari VCS | `atari-vcs` | | <a href="https://www.mobygames.com/platform/atari-vcs" target="_blank" rel="noopener norefer">Mobygames</a>
Atom | `atom` | | <a href="https://www.mobygames.com/platform/atom" target="_blank" rel="noopener norefer">Mobygames</a>
BBC Micro | `bbcmicro` | | <a href="https://www.mobygames.com/platform/bbcmicro" target="_blank" rel="noopener norefer">Mobygames</a>
BBC Microcomputer System | `bbcmicro` | <a href="https://www.igdb.com/platforms/bbcmicro" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/bbc-micro" target="_blank" rel="noopener norefer">Mobygames</a>
BREW | `brew` | | <a href="https://www.mobygames.com/platform/brew" target="_blank" rel="noopener norefer">Mobygames</a>
Bally Astrocade | `astrocade` | <a href="https://www.igdb.com/platforms/astrocade" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/bally-astrocade" target="_blank" rel="noopener norefer">Mobygames</a>
BeOS | `beos` | | <a href="https://www.mobygames.com/platform/beos" target="_blank" rel="noopener norefer">Mobygames</a>
BlackBerry OS | `blackberry` | <a href="https://www.igdb.com/platforms/blackberry" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/blackberry" target="_blank" rel="noopener norefer">Mobygames</a>
Blacknut | `blacknut` | | <a href="https://www.mobygames.com/platform/blacknut" target="_blank" rel="noopener norefer">Mobygames</a>
Blu-ray Player | `blu-ray-player` | <a href="https://www.igdb.com/platforms/blu-ray-player" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/blu-ray-disc-player" target="_blank" rel="noopener norefer">Mobygames</a>
Bubble | `bubble` | | <a href="https://www.mobygames.com/platform/bubble" target="_blank" rel="noopener norefer">Mobygames</a>
CD-i | `philips-cd-i` | | <a href="https://www.mobygames.com/platform/philips-cd-i" target="_blank" rel="noopener norefer">Mobygames</a>
CDC Cyber 70 | `cdccyber70` | <a href="https://www.igdb.com/platforms/cdccyber70" target="_blank" rel="noopener norefer">IGDB</a>| |
CDTV | `commodore-cdtv` | | <a href="https://www.mobygames.com/platform/commodore-cdtv" target="_blank" rel="noopener norefer">Mobygames</a>
COSMAC | `fred-cosmac` | | <a href="https://www.mobygames.com/platform/fred-cosmac" target="_blank" rel="noopener norefer">Mobygames</a>
CP/M | `cpm` | | <a href="https://www.mobygames.com/platform/cpm" target="_blank" rel="noopener norefer">Mobygames</a>
Call-A-Computer time-shared mainframe computer system | `call-a-computer` | <a href="https://www.igdb.com/platforms/call-a-computer" target="_blank" rel="noopener norefer">IGDB</a>| |
Camputers Lynx | `camputers-lynx` | | <a href="https://www.mobygames.com/platform/camputers-lynx" target="_blank" rel="noopener norefer">Mobygames</a>
Casio Loopy | `casio-loopy` | <a href="https://www.igdb.com/platforms/casio-loopy" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/casio-loopy" target="_blank" rel="noopener norefer">Mobygames</a>
Casio PV-1000 | `casio-pv-1000` | | <a href="https://www.mobygames.com/platform/casio-pv-1000" target="_blank" rel="noopener norefer">Mobygames</a>
Casio Programmable Calculator | `casio-programmable-calculator` | | <a href="https://www.mobygames.com/platform/casio-programmable-calculator" target="_blank" rel="noopener norefer">Mobygames</a>
Champion 2711 | `champion-2711` | | <a href="https://www.mobygames.com/platform/champion-2711" target="_blank" rel="noopener norefer">Mobygames</a>
Channel F | `fairchild-channel-f` | | <a href="https://www.mobygames.com/platform/fairchild-channel-f" target="_blank" rel="noopener norefer">Mobygames</a>
ClickStart | `clickstart` | | <a href="https://www.mobygames.com/platform/clickstart" target="_blank" rel="noopener norefer">Mobygames</a>
Coleco Adam | `colecoadam` | | <a href="https://www.mobygames.com/platform/colecoadam" target="_blank" rel="noopener norefer">Mobygames</a>
ColecoVision | `colecovision` | <a href="https://www.igdb.com/platforms/colecovision" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/colecovision" target="_blank" rel="noopener norefer">Mobygames</a>
Colour Genie | `colour-genie` | | <a href="https://www.mobygames.com/platform/colour-genie" target="_blank" rel="noopener norefer">Mobygames</a>
Commodore 128 | `c128` | | <a href="https://www.mobygames.com/platform/c128" target="_blank" rel="noopener norefer">Mobygames</a>
Commodore 16 | `c16` | <a href="https://www.igdb.com/platforms/c16" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/commodore-16-plus4" target="_blank" rel="noopener norefer">Mobygames</a>
Commodore C64/128/MAX | `c64` | <a href="https://www.igdb.com/platforms/c64" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/c64" target="_blank" rel="noopener norefer">Mobygames</a>
Commodore CDTV | `commodore-cdtv` | <a href="https://www.igdb.com/platforms/commodore-cdtv" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/cdtv" target="_blank" rel="noopener norefer">Mobygames</a>
Commodore PET | `cpet` | <a href="https://www.igdb.com/platforms/cpet" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/pet" target="_blank" rel="noopener norefer">Mobygames</a>
Commodore PET/CBM | `cpet` | | <a href="https://www.mobygames.com/platform/cpet" target="_blank" rel="noopener norefer">Mobygames</a>
Commodore Plus/4 | `c-plus-4` | <a href="https://www.igdb.com/platforms/c-plus-4" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/commodore-16-plus4" target="_blank" rel="noopener norefer">Mobygames</a>
Commodore VIC-20 | `vic-20` | <a href="https://www.igdb.com/platforms/vic-20" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/vic-20" target="_blank" rel="noopener norefer">Mobygames</a>
Compal 80 | `compal-80` | | <a href="https://www.mobygames.com/platform/compal-80" target="_blank" rel="noopener norefer">Mobygames</a>
Compucolor I | `compucolor-i` | | <a href="https://www.mobygames.com/platform/compucolor-i" target="_blank" rel="noopener norefer">Mobygames</a>
Compucolor II | `compucolor-ii` | | <a href="https://www.mobygames.com/platform/compucolor-ii" target="_blank" rel="noopener norefer">Mobygames</a>
Compucorp Programmable Calculator | `compucorp-programmable-calculator` | | <a href="https://www.mobygames.com/platform/compucorp-programmable-calculator" target="_blank" rel="noopener norefer">Mobygames</a>
CreatiVision | `creativision` | | <a href="https://www.mobygames.com/platform/creativision" target="_blank" rel="noopener norefer">Mobygames</a>
Cybervision | `cybervision` | | <a href="https://www.mobygames.com/platform/cybervision" target="_blank" rel="noopener norefer">Mobygames</a>
DOS | `dos` | <a href="https://www.igdb.com/platforms/dos" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/dos" target="_blank" rel="noopener norefer">Mobygames</a>
DVD Player | `dvd-player` | <a href="https://www.igdb.com/platforms/dvd-player" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/dvd-player" target="_blank" rel="noopener norefer">Mobygames</a>
Danger OS | `danger-os` | | <a href="https://www.mobygames.com/platform/danger-os" target="_blank" rel="noopener norefer">Mobygames</a>
Dedicated console | `dedicated-console` | | <a href="https://www.mobygames.com/platform/dedicated-console" target="_blank" rel="noopener norefer">Mobygames</a>
Dedicated handheld | `dedicated-handheld` | | <a href="https://www.mobygames.com/platform/dedicated-handheld" target="_blank" rel="noopener norefer">Mobygames</a>
Didj | `didj` | | <a href="https://www.mobygames.com/platform/didj" target="_blank" rel="noopener norefer">Mobygames</a>
DoJa | `doja` | | <a href="https://www.mobygames.com/platform/doja" target="_blank" rel="noopener norefer">Mobygames</a>
Donner Model 30 | `donner30` | <a href="https://www.igdb.com/platforms/donner30" target="_blank" rel="noopener norefer">IGDB</a>| |
Dragon 32/64 | `dragon-32-slash-64` | <a href="https://www.igdb.com/platforms/dragon-32-slash-64" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/dragon-32-slash-64" target="_blank" rel="noopener norefer">Mobygames</a>
Dreamcast | `dc` | <a href="https://www.igdb.com/platforms/dc" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/dreamcast" target="_blank" rel="noopener norefer">Mobygames</a>
ECD Micromind | `ecd-micromind` | | <a href="https://www.mobygames.com/platform/ecd-micromind" target="_blank" rel="noopener norefer">Mobygames</a>
EDSAC | `edsac--1` | <a href="https://www.igdb.com/platforms/edsac--1" target="_blank" rel="noopener norefer">IGDB</a>| |
Electron | `acorn-electron` | | <a href="https://www.mobygames.com/platform/acorn-electron" target="_blank" rel="noopener norefer">Mobygames</a>
Enterprise | `enterprise` | | <a href="https://www.mobygames.com/platform/enterprise" target="_blank" rel="noopener norefer">Mobygames</a>
Epoch Cassette Vision | `epoch-cassette-vision` | <a href="https://www.igdb.com/platforms/epoch-cassette-vision" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/epoch-cassette-vision" target="_blank" rel="noopener norefer">Mobygames</a>
Epoch Game Pocket Computer | `epoch-game-pocket-computer` | | <a href="https://www.mobygames.com/platform/epoch-game-pocket-computer" target="_blank" rel="noopener norefer">Mobygames</a>
Epoch Super Cassette Vision | `epoch-super-cassette-vision` | <a href="https://www.igdb.com/platforms/epoch-super-cassette-vision" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/epoch-super-cassette-vision" target="_blank" rel="noopener norefer">Mobygames</a>
Evercade | `evercade` | <a href="https://www.igdb.com/platforms/evercade" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/evercade" target="_blank" rel="noopener norefer">Mobygames</a>
ExEn | `exen` | | <a href="https://www.mobygames.com/platform/exen" target="_blank" rel="noopener norefer">Mobygames</a>
Exelvision | `exelvision` | | <a href="https://www.mobygames.com/platform/exelvision" target="_blank" rel="noopener norefer">Mobygames</a>
Exidy Sorcerer | `exidy-sorcerer` | <a href="https://www.igdb.com/platforms/exidy-sorcerer" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/exidy-sorcerer" target="_blank" rel="noopener norefer">Mobygames</a>
FM Towns | `fm-towns` | <a href="https://www.igdb.com/platforms/fm-towns" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/fmtowns" target="_blank" rel="noopener norefer">Mobygames</a>
FM-7 | `fm-7` | <a href="https://www.igdb.com/platforms/fm-7" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/fm-7" target="_blank" rel="noopener norefer">Mobygames</a>
Fairchild Channel F | `fairchild-channel-f` | <a href="https://www.igdb.com/platforms/fairchild-channel-f" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/channel-f" target="_blank" rel="noopener norefer">Mobygames</a>
Family Computer | `famicom` | <a href="https://www.igdb.com/platforms/famicom" target="_blank" rel="noopener norefer">IGDB</a>| |
Family Computer Disk System | `fds` | <a href="https://www.igdb.com/platforms/fds" target="_blank" rel="noopener norefer">IGDB</a>| |
Feature phone | `mobile-custom` | | <a href="https://www.mobygames.com/platform/mobile-custom" target="_blank" rel="noopener norefer">Mobygames</a>
Ferranti Nimrod Computer | `nimrod` | <a href="https://www.igdb.com/platforms/nimrod" target="_blank" rel="noopener norefer">IGDB</a>| |
Fire TV | `amazon-fire-tv` | | <a href="https://www.mobygames.com/platform/amazon-fire-tv" target="_blank" rel="noopener norefer">Mobygames</a>
Freebox | `freebox` | | <a href="https://www.mobygames.com/platform/freebox" target="_blank" rel="noopener norefer">Mobygames</a>
G-cluster | `g-cluster` | | <a href="https://www.mobygames.com/platform/g-cluster" target="_blank" rel="noopener norefer">Mobygames</a>
GIMINI | `gimini` | | <a href="https://www.mobygames.com/platform/gimini" target="_blank" rel="noopener norefer">Mobygames</a>
GNEX | `gnex` | | <a href="https://www.mobygames.com/platform/gnex" target="_blank" rel="noopener norefer">Mobygames</a>
GP2X | `gp2x` | | <a href="https://www.mobygames.com/platform/gp2x" target="_blank" rel="noopener norefer">Mobygames</a>
GP2X Wiz | `gp2x-wiz` | | <a href="https://www.mobygames.com/platform/gp2x-wiz" target="_blank" rel="noopener norefer">Mobygames</a>
GP32 | `gp32` | | <a href="https://www.mobygames.com/platform/gp32" target="_blank" rel="noopener norefer">Mobygames</a>
GVM | `gvm` | | <a href="https://www.mobygames.com/platform/gvm" target="_blank" rel="noopener norefer">Mobygames</a>
Galaksija | `galaksija` | | <a href="https://www.mobygames.com/platform/galaksija" target="_blank" rel="noopener norefer">Mobygames</a>
Gamate | `gamate` | <a href="https://www.igdb.com/platforms/gamate" target="_blank" rel="noopener norefer">IGDB</a>| |
Game & Watch | `g-and-w` | <a href="https://www.igdb.com/platforms/g-and-w" target="_blank" rel="noopener norefer">IGDB</a>| |
Game Boy | `gb` | <a href="https://www.igdb.com/platforms/gb" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/gameboy" target="_blank" rel="noopener norefer">Mobygames</a>
Game Boy Advance | `gba` | <a href="https://www.igdb.com/platforms/gba" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/gameboy-advance" target="_blank" rel="noopener norefer">Mobygames</a>
Game Boy Color | `gbc` | <a href="https://www.igdb.com/platforms/gbc" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/gameboy-color" target="_blank" rel="noopener norefer">Mobygames</a>
Game Gear | `gamegear` | | <a href="https://www.mobygames.com/platform/gamegear" target="_blank" rel="noopener norefer">Mobygames</a>
Game Wave | `game-wave` | | <a href="https://www.mobygames.com/platform/game-wave" target="_blank" rel="noopener norefer">Mobygames</a>
Game.Com | `game-dot-com` | | <a href="https://www.mobygames.com/platform/game-dot-com" target="_blank" rel="noopener norefer">Mobygames</a>
Game.com | `game-dot-com` | <a href="https://www.igdb.com/platforms/game-dot-com" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/game-com" target="_blank" rel="noopener norefer">Mobygames</a>
GameCube | `ngc` | | <a href="https://www.mobygames.com/platform/ngc" target="_blank" rel="noopener norefer">Mobygames</a>
GameStick | `gamestick` | | <a href="https://www.mobygames.com/platform/gamestick" target="_blank" rel="noopener norefer">Mobygames</a>
Gear VR | `gear-vr` | <a href="https://www.igdb.com/platforms/gear-vr" target="_blank" rel="noopener norefer">IGDB</a>| |
Genesis/Mega Drive | `genesis-slash-megadrive` | | <a href="https://www.mobygames.com/platform/genesis-slash-megadrive" target="_blank" rel="noopener norefer">Mobygames</a>
Gizmondo | `gizmondo` | <a href="https://www.igdb.com/platforms/gizmondo" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/gizmondo" target="_blank" rel="noopener norefer">Mobygames</a>
Gloud | `gloud` | | <a href="https://www.mobygames.com/platform/gloud" target="_blank" rel="noopener norefer">Mobygames</a>
Glulx | `glulx` | | <a href="https://www.mobygames.com/platform/glulx" target="_blank" rel="noopener norefer">Mobygames</a>
Google Stadia | `stadia` | <a href="https://www.igdb.com/platforms/stadia" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/stadia" target="_blank" rel="noopener norefer">Mobygames</a>
HD DVD Player | `hd-dvd-player` | | <a href="https://www.mobygames.com/platform/hd-dvd-player" target="_blank" rel="noopener norefer">Mobygames</a>
HP 2100 | `hp2100` | <a href="https://www.igdb.com/platforms/hp2100" target="_blank" rel="noopener norefer">IGDB</a>| |
HP 3000 | `hp3000` | <a href="https://www.igdb.com/platforms/hp3000" target="_blank" rel="noopener norefer">IGDB</a>| |
HP 9800 | `hp-9800` | | <a href="https://www.mobygames.com/platform/hp-9800" target="_blank" rel="noopener norefer">Mobygames</a>
HP Programmable Calculator | `hp-programmable-calculator` | | <a href="https://www.mobygames.com/platform/hp-programmable-calculator" target="_blank" rel="noopener norefer">Mobygames</a>
Handheld Electronic LCD | `handheld-electronic-lcd` | <a href="https://www.igdb.com/platforms/handheld-electronic-lcd" target="_blank" rel="noopener norefer">IGDB</a>| |
Heath/Zenith H8/H89 | `heathzenith` | | <a href="https://www.mobygames.com/platform/heathzenith" target="_blank" rel="noopener norefer">Mobygames</a>
Heathkit H11 | `heathkit-h11` | | <a href="https://www.mobygames.com/platform/heathkit-h11" target="_blank" rel="noopener norefer">Mobygames</a>
Hitachi S1 | `hitachi-s1` | | <a href="https://www.mobygames.com/platform/hitachi-s1" target="_blank" rel="noopener norefer">Mobygames</a>
Hugo | `hugo` | | <a href="https://www.mobygames.com/platform/hugo" target="_blank" rel="noopener norefer">Mobygames</a>
Hyper Neo Geo 64 | `hyper-neo-geo-64` | <a href="https://www.igdb.com/platforms/hyper-neo-geo-64" target="_blank" rel="noopener norefer">IGDB</a>| |
HyperScan | `hyperscan` | <a href="https://www.igdb.com/platforms/hyperscan" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/hyperscan" target="_blank" rel="noopener norefer">Mobygames</a>
IBM 5100 | `ibm-5100` | | <a href="https://www.mobygames.com/platform/ibm-5100" target="_blank" rel="noopener norefer">Mobygames</a>
Ideal-Computer | `ideal-computer` | | <a href="https://www.mobygames.com/platform/ideal-computer" target="_blank" rel="noopener norefer">Mobygames</a>
Intel 8008 | `intel-8008` | | <a href="https://www.mobygames.com/platform/intel-8008" target="_blank" rel="noopener norefer">Mobygames</a>
Intel 8080 | `intel-8080` | | <a href="https://www.mobygames.com/platform/intel-8080" target="_blank" rel="noopener norefer">Mobygames</a>
Intel 8086 / 8088 | `intel-8086` | | <a href="https://www.mobygames.com/platform/intel-8086" target="_blank" rel="noopener norefer">Mobygames</a>
Intellivision | `intellivision` | <a href="https://www.igdb.com/platforms/intellivision" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/intellivision" target="_blank" rel="noopener norefer">Mobygames</a>
Intellivision Amico | `intellivision-amico` | <a href="https://www.igdb.com/platforms/intellivision-amico" target="_blank" rel="noopener norefer">IGDB</a>| |
Interact Model One | `interact-model-one` | | <a href="https://www.mobygames.com/platform/interact-model-one" target="_blank" rel="noopener norefer">Mobygames</a>
Interton Video 2000 | `interton-video-2000` | | <a href="https://www.mobygames.com/platform/interton-video-2000" target="_blank" rel="noopener norefer">Mobygames</a>
Interton VC 4000 | `vc-4000` | <a href="https://www.igdb.com/platforms/vc-4000" target="_blank" rel="noopener norefer">IGDB</a>| |
J2ME | `j2me` | | <a href="https://www.mobygames.com/platform/j2me" target="_blank" rel="noopener norefer">Mobygames</a>
Jolt | `jolt` | | <a href="https://www.mobygames.com/platform/jolt" target="_blank" rel="noopener norefer">Mobygames</a>
Jupiter Ace | `jupiter-ace` | | <a href="https://www.mobygames.com/platform/jupiter-ace" target="_blank" rel="noopener norefer">Mobygames</a>
KIM-1 | `kim-1` | | <a href="https://www.mobygames.com/platform/kim-1" target="_blank" rel="noopener norefer">Mobygames</a>
KaiOS | `kaios` | | <a href="https://www.mobygames.com/platform/kaios" target="_blank" rel="noopener norefer">Mobygames</a>
Kindle Classic | `kindle` | | <a href="https://www.mobygames.com/platform/kindle" target="_blank" rel="noopener norefer">Mobygames</a>
Laser 200 | `laser200` | | <a href="https://www.mobygames.com/platform/laser200" target="_blank" rel="noopener norefer">Mobygames</a>
LaserActive | `laseractive` | | <a href="https://www.mobygames.com/platform/laseractive" target="_blank" rel="noopener norefer">Mobygames</a>
LeapTV | `leaptv` | <a href="https://www.igdb.com/platforms/leaptv" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/leaptv" target="_blank" rel="noopener norefer">Mobygames</a>
Leapster | `leapster` | <a href="https://www.igdb.com/platforms/leapster" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/leapster" target="_blank" rel="noopener norefer">Mobygames</a>
Leapster Explorer/LeadPad Explorer | `leapster-explorer-slash-leadpad-explorer` | <a href="https://www.igdb.com/platforms/leapster-explorer-slash-leadpad-explorer" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/leapfrog-explorer" target="_blank" rel="noopener norefer">Mobygames</a>
Leapster Explorer/LeapPad Explorer | `leapster-explorer-slash-leadpad-explorer` | | <a href="https://www.mobygames.com/platform/leapster-explorer-slash-leadpad-explorer" target="_blank" rel="noopener norefer">Mobygames</a>
Legacy Computer | `legacy-computer` | <a href="https://www.igdb.com/platforms/legacy-computer" target="_blank" rel="noopener norefer">IGDB</a>| |
Legacy Mobile Device | `mobile` | <a href="https://www.igdb.com/platforms/mobile" target="_blank" rel="noopener norefer">IGDB</a>| |
Linux | `linux` | <a href="https://www.igdb.com/platforms/linux" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/linux" target="_blank" rel="noopener norefer">Mobygames</a>
Luna | `luna` | | <a href="https://www.mobygames.com/platform/luna" target="_blank" rel="noopener norefer">Mobygames</a>
MOS Technology 6502 | `mos-technology-6502` | | <a href="https://www.mobygames.com/platform/mos-technology-6502" target="_blank" rel="noopener norefer">Mobygames</a>
MRE | `mre` | | <a href="https://www.mobygames.com/platform/mre" target="_blank" rel="noopener norefer">Mobygames</a>
MSX | `msx` | <a href="https://www.igdb.com/platforms/msx" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/msx" target="_blank" rel="noopener norefer">Mobygames</a>
MSX2 | `msx2` | <a href="https://www.igdb.com/platforms/msx2" target="_blank" rel="noopener norefer">IGDB</a>| |
Mac | `mac` | <a href="https://www.igdb.com/platforms/mac" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/macintosh" target="_blank" rel="noopener norefer">Mobygames</a>
Macintosh | `mac` | | <a href="https://www.mobygames.com/platform/mac" target="_blank" rel="noopener norefer">Mobygames</a>
Maemo | `maemo` | | <a href="https://www.mobygames.com/platform/maemo" target="_blank" rel="noopener norefer">Mobygames</a>
Mainframe | `mainframe` | | <a href="https://www.mobygames.com/platform/mainframe" target="_blank" rel="noopener norefer">Mobygames</a>
Matsushita/Panasonic JR | `matsushitapanasonic-jr` | | <a href="https://www.mobygames.com/platform/matsushitapanasonic-jr" target="_blank" rel="noopener norefer">Mobygames</a>
Mattel Aquarius | `mattel-aquarius` | | <a href="https://www.mobygames.com/platform/mattel-aquarius" target="_blank" rel="noopener norefer">Mobygames</a>
MeeGo | `meego` | | <a href="https://www.mobygames.com/platform/meego" target="_blank" rel="noopener norefer">Mobygames</a>
Mega Duck/Cougar Boy | `mega-duck-slash-cougar-boy` | <a href="https://www.igdb.com/platforms/mega-duck-slash-cougar-boy" target="_blank" rel="noopener norefer">IGDB</a>| |
Memotech MTX | `memotech-mtx` | | <a href="https://www.mobygames.com/platform/memotech-mtx" target="_blank" rel="noopener norefer">Mobygames</a>
Meritum | `meritum` | | <a href="https://www.mobygames.com/platform/meritum" target="_blank" rel="noopener norefer">Mobygames</a>
Meta Quest 2 | `meta-quest-2` | <a href="https://www.igdb.com/platforms/meta-quest-2" target="_blank" rel="noopener norefer">IGDB</a>| |
Meta Quest 3 | `meta-quest-3` | <a href="https://www.igdb.com/platforms/meta-quest-3" target="_blank" rel="noopener norefer">IGDB</a>| |
Microbee | `microbee` | | <a href="https://www.mobygames.com/platform/microbee" target="_blank" rel="noopener norefer">Mobygames</a>
Microtan 65 | `microtan-65` | | <a href="https://www.mobygames.com/platform/microtan-65" target="_blank" rel="noopener norefer">Mobygames</a>
Microvision | `microvision--1` | <a href="https://www.igdb.com/platforms/microvision--1" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/microvision" target="_blank" rel="noopener norefer">Mobygames</a>
Mophun | `mophun` | | <a href="https://www.mobygames.com/platform/mophun" target="_blank" rel="noopener norefer">Mobygames</a>
Motorola 6800 | `motorola-6800` | | <a href="https://www.mobygames.com/platform/motorola-6800" target="_blank" rel="noopener norefer">Mobygames</a>
Motorola 68k | `motorola-68k` | | <a href="https://www.mobygames.com/platform/motorola-68k" target="_blank" rel="noopener norefer">Mobygames</a>
N-Gage | `ngage` | <a href="https://www.igdb.com/platforms/ngage" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/ngage" target="_blank" rel="noopener norefer">Mobygames</a>
N-Gage (service) | `ngage2` | | <a href="https://www.mobygames.com/platform/ngage2" target="_blank" rel="noopener norefer">Mobygames</a>
NEC PC-6000 Series | `nec-pc-6000-series` | <a href="https://www.igdb.com/platforms/nec-pc-6000-series" target="_blank" rel="noopener norefer">IGDB</a>| |
Nascom | `nascom` | | <a href="https://www.mobygames.com/platform/nascom" target="_blank" rel="noopener norefer">Mobygames</a>
Neo Geo | `neogeoaes` | | <a href="https://www.mobygames.com/platform/neogeoaes" target="_blank" rel="noopener norefer">Mobygames</a>
Neo Geo AES | `neogeoaes` | <a href="https://www.igdb.com/platforms/neogeoaes" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/neo-geo" target="_blank" rel="noopener norefer">Mobygames</a>
Neo Geo CD | `neo-geo-cd` | <a href="https://www.igdb.com/platforms/neo-geo-cd" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/neo-geo-cd" target="_blank" rel="noopener norefer">Mobygames</a>
Neo Geo MVS | `neogeomvs` | <a href="https://www.igdb.com/platforms/neogeomvs" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/neo-geo" target="_blank" rel="noopener norefer">Mobygames</a>
Neo Geo Pocket | `neo-geo-pocket` | <a href="https://www.igdb.com/platforms/neo-geo-pocket" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/neo-geo-pocket" target="_blank" rel="noopener norefer">Mobygames</a>
Neo Geo Pocket Color | `neo-geo-pocket-color` | <a href="https://www.igdb.com/platforms/neo-geo-pocket-color" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/neo-geo-pocket-color" target="_blank" rel="noopener norefer">Mobygames</a>
Neo Geo X | `neo-geo-x` | | <a href="https://www.mobygames.com/platform/neo-geo-x" target="_blank" rel="noopener norefer">Mobygames</a>
New Nintendo 3DS | `new-nintendo-3ds` | <a href="https://www.igdb.com/platforms/new-nintendo-3ds" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/new-nintendo-3ds" target="_blank" rel="noopener norefer">Mobygames</a>
NewBrain | `newbrain` | | <a href="https://www.mobygames.com/platform/newbrain" target="_blank" rel="noopener norefer">Mobygames</a>
Newton | `newton` | | <a href="https://www.mobygames.com/platform/newton" target="_blank" rel="noopener norefer">Mobygames</a>
Nintendo 3DS | `3ds` | <a href="https://www.igdb.com/platforms/3ds" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/3ds" target="_blank" rel="noopener norefer">Mobygames</a>
Nintendo 64 | `n64` | <a href="https://www.igdb.com/platforms/n64" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/n64" target="_blank" rel="noopener norefer">Mobygames</a>
Nintendo 64DD | `nintendo-64dd` | <a href="https://www.igdb.com/platforms/nintendo-64dd" target="_blank" rel="noopener norefer">IGDB</a>| |
Nintendo DS | `nds` | <a href="https://www.igdb.com/platforms/nds" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/nintendo-ds" target="_blank" rel="noopener norefer">Mobygames</a>
Nintendo DSi | `nintendo-dsi` | <a href="https://www.igdb.com/platforms/nintendo-dsi" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/nintendo-dsi" target="_blank" rel="noopener norefer">Mobygames</a>
Nintendo Entertainment System | `nes` | <a href="https://www.igdb.com/platforms/nes" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/nes" target="_blank" rel="noopener norefer">Mobygames</a>
Nintendo GameCube | `ngc` | <a href="https://www.igdb.com/platforms/ngc" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/gamecube" target="_blank" rel="noopener norefer">Mobygames</a>
Nintendo PlayStation | `nintendo-playstation` | <a href="https://www.igdb.com/platforms/nintendo-playstation" target="_blank" rel="noopener norefer">IGDB</a>| |
Nintendo Switch | `switch` | <a href="https://www.igdb.com/platforms/switch" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/switch" target="_blank" rel="noopener norefer">Mobygames</a>
North Star | `northstar` | | <a href="https://www.mobygames.com/platform/northstar" target="_blank" rel="noopener norefer">Mobygames</a>
Noval 760 | `noval-760` | | <a href="https://www.mobygames.com/platform/noval-760" target="_blank" rel="noopener norefer">Mobygames</a>
Nuon | `nuon` | <a href="https://www.igdb.com/platforms/nuon" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/nuon" target="_blank" rel="noopener norefer">Mobygames</a>
OOParts | `ooparts` | <a href="https://www.igdb.com/platforms/ooparts" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/ooparts" target="_blank" rel="noopener norefer">Mobygames</a>
OS/2 | `os2` | | <a href="https://www.mobygames.com/platform/os2" target="_blank" rel="noopener norefer">Mobygames</a>
Oculus Go | `oculus-go` | <a href="https://www.igdb.com/platforms/oculus-go" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/oculus-go" target="_blank" rel="noopener norefer">Mobygames</a>
Oculus Quest | `oculus-quest` | <a href="https://www.igdb.com/platforms/oculus-quest" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/oculus-quest" target="_blank" rel="noopener norefer">Mobygames</a>
Oculus Rift | `oculus-rift` | <a href="https://www.igdb.com/platforms/oculus-rift" target="_blank" rel="noopener norefer">IGDB</a>| |
Odyssey | `odyssey--1` | <a href="https://www.igdb.com/platforms/odyssey--1" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/odyssey" target="_blank" rel="noopener norefer">Mobygames</a>
Odyssey 2/Videopac G7000 | `odyssey-2-slash-videopac-g7000` | <a href="https://www.igdb.com/platforms/odyssey-2-slash-videopac-g7000" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/odyssey-2" target="_blank" rel="noopener norefer">Mobygames</a>
Ohio Scientific | `ohio-scientific` | | <a href="https://www.mobygames.com/platform/ohio-scientific" target="_blank" rel="noopener norefer">Mobygames</a>
OnLive Game System | `onlive-game-system` | <a href="https://www.igdb.com/platforms/onlive-game-system" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/onlive" target="_blank" rel="noopener norefer">Mobygames</a>
Orao | `orao` | | <a href="https://www.mobygames.com/platform/orao" target="_blank" rel="noopener norefer">Mobygames</a>
Oric | `oric` | | <a href="https://www.mobygames.com/platform/oric" target="_blank" rel="noopener norefer">Mobygames</a>
Ouya | `ouya` | <a href="https://www.igdb.com/platforms/ouya" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/ouya" target="_blank" rel="noopener norefer">Mobygames</a>
PC (Microsoft Windows) | `win` | <a href="https://www.igdb.com/platforms/win" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/windows" target="_blank" rel="noopener norefer">Mobygames</a>
PC Booter | `pc-booter` | | <a href="https://www.mobygames.com/platform/pc-booter" target="_blank" rel="noopener norefer">Mobygames</a>
PC Engine SuperGrafx | `supergrafx` | <a href="https://www.igdb.com/platforms/supergrafx" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/supergrafx" target="_blank" rel="noopener norefer">Mobygames</a>
PC-50X Family | `pc-50x-family` | <a href="https://www.igdb.com/platforms/pc-50x-family" target="_blank" rel="noopener norefer">IGDB</a>| |
PC-6001 | `pc-6001` | | <a href="https://www.mobygames.com/platform/pc-6001" target="_blank" rel="noopener norefer">Mobygames</a>
PC-8000 | `pc-8000` | | <a href="https://www.mobygames.com/platform/pc-8000" target="_blank" rel="noopener norefer">Mobygames</a>
PC-8800 Series | `pc-8800-series` | <a href="https://www.igdb.com/platforms/pc-8800-series" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/pc88" target="_blank" rel="noopener norefer">Mobygames</a>
PC-9800 Series | `pc-9800-series` | <a href="https://www.igdb.com/platforms/pc-9800-series" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/pc98" target="_blank" rel="noopener norefer">Mobygames</a>
PC-FX | `pc-fx` | <a href="https://www.igdb.com/platforms/pc-fx" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/pc-fx" target="_blank" rel="noopener norefer">Mobygames</a>
PDP-1 | `pdp1` | <a href="https://www.igdb.com/platforms/pdp1" target="_blank" rel="noopener norefer">IGDB</a>| |
PDP-10 | `pdp10` | <a href="https://www.igdb.com/platforms/pdp10" target="_blank" rel="noopener norefer">IGDB</a>| |
PDP-11 | `pdp11` | <a href="https://www.igdb.com/platforms/pdp11" target="_blank" rel="noopener norefer">IGDB</a>| |
PDP-8 | `pdp-8--1` | <a href="https://www.igdb.com/platforms/pdp-8--1" target="_blank" rel="noopener norefer">IGDB</a>| |
PICO | `pico` | | <a href="https://www.mobygames.com/platform/pico" target="_blank" rel="noopener norefer">Mobygames</a>
PLATO | `plato--1` | <a href="https://www.igdb.com/platforms/plato--1" target="_blank" rel="noopener norefer">IGDB</a>| |
PS Vita | `psvita` | | <a href="https://www.mobygames.com/platform/psvita" target="_blank" rel="noopener norefer">Mobygames</a>
Palm OS | `palm-os` | <a href="https://www.igdb.com/platforms/palm-os" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/palmos" target="_blank" rel="noopener norefer">Mobygames</a>
Panasonic Jungle | `panasonic-jungle` | <a href="https://www.igdb.com/platforms/panasonic-jungle" target="_blank" rel="noopener norefer">IGDB</a>| |
Panasonic M2 | `panasonic-m2` | <a href="https://www.igdb.com/platforms/panasonic-m2" target="_blank" rel="noopener norefer">IGDB</a>| |
Pandora | `pandora` | | <a href="https://www.mobygames.com/platform/pandora" target="_blank" rel="noopener norefer">Mobygames</a>
Pebble | `pebble` | | <a href="https://www.mobygames.com/platform/pebble" target="_blank" rel="noopener norefer">Mobygames</a>
Philips CD-i | `philips-cd-i` | <a href="https://www.igdb.com/platforms/philips-cd-i" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/cd-i" target="_blank" rel="noopener norefer">Mobygames</a>
Philips VG 5000 | `philips-vg-5000` | | <a href="https://www.mobygames.com/platform/philips-vg-5000" target="_blank" rel="noopener norefer">Mobygames</a>
Photo CD | `photocd` | | <a href="https://www.mobygames.com/platform/photocd" target="_blank" rel="noopener norefer">Mobygames</a>
Pippin | `pippin` | | <a href="https://www.mobygames.com/platform/pippin" target="_blank" rel="noopener norefer">Mobygames</a>
PlayStation | `ps` | <a href="https://www.igdb.com/platforms/ps" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/playstation" target="_blank" rel="noopener norefer">Mobygames</a>
PlayStation 2 | `ps2` | <a href="https://www.igdb.com/platforms/ps2" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/ps2" target="_blank" rel="noopener norefer">Mobygames</a>
PlayStation 3 | `ps3` | <a href="https://www.igdb.com/platforms/ps3" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/ps3" target="_blank" rel="noopener norefer">Mobygames</a>
PlayStation 4 | `ps4--1` | <a href="https://www.igdb.com/platforms/ps4--1" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/playstation-4" target="_blank" rel="noopener norefer">Mobygames</a>
PlayStation 5 | `ps5` | <a href="https://www.igdb.com/platforms/ps5" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/playstation-5" target="_blank" rel="noopener norefer">Mobygames</a>
PlayStation Now | `playstation-now` | | <a href="https://www.mobygames.com/platform/playstation-now" target="_blank" rel="noopener norefer">Mobygames</a>
PlayStation Portable | `psp` | <a href="https://www.igdb.com/platforms/psp" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/psp" target="_blank" rel="noopener norefer">Mobygames</a>
PlayStation VR | `psvr` | <a href="https://www.igdb.com/platforms/psvr" target="_blank" rel="noopener norefer">IGDB</a>| |
PlayStation VR2 | `psvr2` | <a href="https://www.igdb.com/platforms/psvr2" target="_blank" rel="noopener norefer">IGDB</a>| |
PlayStation Vita | `psvita` | <a href="https://www.igdb.com/platforms/psvita" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/ps-vita" target="_blank" rel="noopener norefer">Mobygames</a>
Playdate | `playdate` | <a href="https://www.igdb.com/platforms/playdate" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/playdate" target="_blank" rel="noopener norefer">Mobygames</a>
Playdia | `playdia` | <a href="https://www.igdb.com/platforms/playdia" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/playdia" target="_blank" rel="noopener norefer">Mobygames</a>
Plex Arcade | `plex-arcade` | | <a href="https://www.mobygames.com/platform/plex-arcade" target="_blank" rel="noopener norefer">Mobygames</a>
Plug & Play | `plug-and-play` | <a href="https://www.igdb.com/platforms/plug-and-play" target="_blank" rel="noopener norefer">IGDB</a>| |
PocketStation | `pocketstation` | <a href="https://www.igdb.com/platforms/pocketstation" target="_blank" rel="noopener norefer">IGDB</a>| |
Pokitto | `pokitto` | | <a href="https://www.mobygames.com/platform/pokitto" target="_blank" rel="noopener norefer">Mobygames</a>
Pokémon mini | `pokemon-mini` | <a href="https://www.igdb.com/platforms/pokemon-mini" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/pokemon-mini" target="_blank" rel="noopener norefer">Mobygames</a>
Poly-88 | `poly-88` | | <a href="https://www.mobygames.com/platform/poly-88" target="_blank" rel="noopener norefer">Mobygames</a>
R-Zone | `r-zone` | <a href="https://www.igdb.com/platforms/r-zone" target="_blank" rel="noopener norefer">IGDB</a>| |
RCA Studio II | `rca-studio-ii` | | <a href="https://www.mobygames.com/platform/rca-studio-ii" target="_blank" rel="noopener norefer">Mobygames</a>
Research Machines 380Z | `research-machines-380z` | | <a href="https://www.mobygames.com/platform/research-machines-380z" target="_blank" rel="noopener norefer">Mobygames</a>
Roku | `roku` | | <a href="https://www.mobygames.com/platform/roku" target="_blank" rel="noopener norefer">Mobygames</a>
SAM Coupé | `sam-coupe` | | <a href="https://www.mobygames.com/platform/sam-coupe" target="_blank" rel="noopener norefer">Mobygames</a>
SC/MP | `scmp` | | <a href="https://www.mobygames.com/platform/scmp" target="_blank" rel="noopener norefer">Mobygames</a>
SD-200/270/290 | `sd-200270290` | | <a href="https://www.mobygames.com/platform/sd-200270290" target="_blank" rel="noopener norefer">Mobygames</a>
SDS Sigma 7 | `sdssigma7` | <a href="https://www.igdb.com/platforms/sdssigma7" target="_blank" rel="noopener norefer">IGDB</a>| |
SEGA 32X | `sega-32x` | | <a href="https://www.mobygames.com/platform/sega-32x" target="_blank" rel="noopener norefer">Mobygames</a>
SEGA CD | `segacd` | | <a href="https://www.mobygames.com/platform/segacd" target="_blank" rel="noopener norefer">Mobygames</a>
SEGA Master System | `sega-master-system` | | <a href="https://www.mobygames.com/platform/sega-master-system" target="_blank" rel="noopener norefer">Mobygames</a>
SEGA Saturn | `saturn` | | <a href="https://www.mobygames.com/platform/saturn" target="_blank" rel="noopener norefer">Mobygames</a>
SG-1000 | `sg1000` | <a href="https://www.igdb.com/platforms/sg1000" target="_blank" rel="noopener norefer">IGDB</a>| |
SK-VM | `sk-vm` | | <a href="https://www.mobygames.com/platform/sk-vm" target="_blank" rel="noopener norefer">Mobygames</a>
SMC-777 | `smc-777` | | <a href="https://www.mobygames.com/platform/smc-777" target="_blank" rel="noopener norefer">Mobygames</a>
SRI-500/1000 | `sri-5001000` | | <a href="https://www.mobygames.com/platform/sri-5001000" target="_blank" rel="noopener norefer">Mobygames</a>
SWTPC 6800 | `swtpc-6800` | | <a href="https://www.mobygames.com/platform/swtpc-6800" target="_blank" rel="noopener norefer">Mobygames</a>
Satellaview | `satellaview` | <a href="https://www.igdb.com/platforms/satellaview" target="_blank" rel="noopener norefer">IGDB</a>| |
Sega 32X | `sega32` | <a href="https://www.igdb.com/platforms/sega32" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/sega32" target="_blank" rel="noopener norefer">Mobygames</a>
Sega CD | `segacd` | <a href="https://www.igdb.com/platforms/segacd" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/sega-cd" target="_blank" rel="noopener norefer">Mobygames</a>
Sega Game Gear | `gamegear` | <a href="https://www.igdb.com/platforms/gamegear" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/game-gear" target="_blank" rel="noopener norefer">Mobygames</a>
Sega Master System/Mark III | `sms` | <a href="https://www.igdb.com/platforms/sms" target="_blank" rel="noopener norefer">IGDB</a>| |
Sega Mega Drive/Genesis | `genesis-slash-megadrive` | <a href="https://www.igdb.com/platforms/genesis-slash-megadrive" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/genesis" target="_blank" rel="noopener norefer">Mobygames</a>
Sega Pico | `sega-pico` | <a href="https://www.igdb.com/platforms/sega-pico" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/sega-pico" target="_blank" rel="noopener norefer">Mobygames</a>
Sega Saturn | `saturn` | <a href="https://www.igdb.com/platforms/saturn" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/sega-saturn" target="_blank" rel="noopener norefer">Mobygames</a>
Sharp MZ-2200 | `sharp-mz-2200` | <a href="https://www.igdb.com/platforms/sharp-mz-2200" target="_blank" rel="noopener norefer">IGDB</a>| |
Sharp MZ-80B/2000/2500 | `sharp-mz-80b20002500` | | <a href="https://www.mobygames.com/platform/sharp-mz-80b20002500" target="_blank" rel="noopener norefer">Mobygames</a>
Sharp MZ-80K/700/800/1500 | `sharp-mz-80k7008001500` | | <a href="https://www.mobygames.com/platform/sharp-mz-80k7008001500" target="_blank" rel="noopener norefer">Mobygames</a>
Sharp X1 | `x1` | <a href="https://www.igdb.com/platforms/x1" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/sharp-x1" target="_blank" rel="noopener norefer">Mobygames</a>
Sharp X68000 | `sharp-x68000` | <a href="https://www.igdb.com/platforms/sharp-x68000" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/sharp-x68000" target="_blank" rel="noopener norefer">Mobygames</a>
Sharp Zaurus | `sharp-zaurus` | | <a href="https://www.mobygames.com/platform/sharp-zaurus" target="_blank" rel="noopener norefer">Mobygames</a>
Signetics 2650 | `signetics-2650` | | <a href="https://www.mobygames.com/platform/signetics-2650" target="_blank" rel="noopener norefer">Mobygames</a>
Sinclair QL | `sinclair-ql` | <a href="https://www.igdb.com/platforms/sinclair-ql" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/sinclair-ql" target="_blank" rel="noopener norefer">Mobygames</a>
Sinclair ZX81 | `sinclair-zx81` | <a href="https://www.igdb.com/platforms/sinclair-zx81" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/zx81" target="_blank" rel="noopener norefer">Mobygames</a>
Socrates | `socrates` | | <a href="https://www.mobygames.com/platform/socrates" target="_blank" rel="noopener norefer">Mobygames</a>
Sol-20 | `sol-20` | <a href="https://www.igdb.com/platforms/sol-20" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/sol-20" target="_blank" rel="noopener norefer">Mobygames</a>
Sord M5 | `sord-m5` | | <a href="https://www.mobygames.com/platform/sord-m5" target="_blank" rel="noopener norefer">Mobygames</a>
Spectravideo | `spectravideo` | | <a href="https://www.mobygames.com/platform/spectravideo" target="_blank" rel="noopener norefer">Mobygames</a>
Super A'can | `super-acan` | | <a href="https://www.mobygames.com/platform/super-acan" target="_blank" rel="noopener norefer">Mobygames</a>
Super Famicom | `sfam` | <a href="https://www.igdb.com/platforms/sfam" target="_blank" rel="noopener norefer">IGDB</a>| |
Super Nintendo Entertainment System | `snes` | <a href="https://www.igdb.com/platforms/snes" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/snes" target="_blank" rel="noopener norefer">Mobygames</a>
Super Vision 8000 | `super-vision-8000` | | <a href="https://www.mobygames.com/platform/super-vision-8000" target="_blank" rel="noopener norefer">Mobygames</a>
Supervision | `supervision` | | <a href="https://www.mobygames.com/platform/supervision" target="_blank" rel="noopener norefer">Mobygames</a>
Sure Shot HD | `sure-shot-hd` | | <a href="https://www.mobygames.com/platform/sure-shot-hd" target="_blank" rel="noopener norefer">Mobygames</a>
SwanCrystal | `swancrystal` | <a href="https://www.igdb.com/platforms/swancrystal" target="_blank" rel="noopener norefer">IGDB</a>| |
Symbian | `symbian` | | <a href="https://www.mobygames.com/platform/symbian" target="_blank" rel="noopener norefer">Mobygames</a>
TADS | `tads` | | <a href="https://www.mobygames.com/platform/tads" target="_blank" rel="noopener norefer">Mobygames</a>
TI Programmable Calculator | `ti-programmable-calculator` | | <a href="https://www.mobygames.com/platform/ti-programmable-calculator" target="_blank" rel="noopener norefer">Mobygames</a>
TI-99/4A | `ti-994a` | | <a href="https://www.mobygames.com/platform/ti-994a" target="_blank" rel="noopener norefer">Mobygames</a>
TIM | `tim` | | <a href="https://www.mobygames.com/platform/tim" target="_blank" rel="noopener norefer">Mobygames</a>
TRS-80 | `trs-80` | <a href="https://www.igdb.com/platforms/trs-80" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/trs-80" target="_blank" rel="noopener norefer">Mobygames</a>
TRS-80 Color Computer | `trs-80-color-computer` | <a href="https://www.igdb.com/platforms/trs-80-color-computer" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/trs-80-coco" target="_blank" rel="noopener norefer">Mobygames</a>
TRS-80 MC-10 | `trs-80-mc-10` | | <a href="https://www.mobygames.com/platform/trs-80-mc-10" target="_blank" rel="noopener norefer">Mobygames</a>
TRS-80 Model 100 | `trs-80-model-100` | | <a href="https://www.mobygames.com/platform/trs-80-model-100" target="_blank" rel="noopener norefer">Mobygames</a>
Taito X-55 | `taito-x-55` | | <a href="https://www.mobygames.com/platform/taito-x-55" target="_blank" rel="noopener norefer">Mobygames</a>
Tapwave Zodiac | `zod` | <a href="https://www.igdb.com/platforms/zod" target="_blank" rel="noopener norefer">IGDB</a>| |
Tatung Einstein | `tatung-einstein` | <a href="https://www.igdb.com/platforms/tatung-einstein" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/tatung-einstein" target="_blank" rel="noopener norefer">Mobygames</a>
Tektronix 4050 | `tektronix-4050` | | <a href="https://www.mobygames.com/platform/tektronix-4050" target="_blank" rel="noopener norefer">Mobygames</a>
Tele-Spiel ES-2201 | `tele-spiel` | | <a href="https://www.mobygames.com/platform/tele-spiel" target="_blank" rel="noopener norefer">Mobygames</a>
Telstar Arcade | `telstar-arcade` | | <a href="https://www.mobygames.com/platform/telstar-arcade" target="_blank" rel="noopener norefer">Mobygames</a>
Terebikko / See 'n Say Video Phone | `terebikko-slash-see-n-say-video-phone` | <a href="https://www.igdb.com/platforms/terebikko-slash-see-n-say-video-phone" target="_blank" rel="noopener norefer">IGDB</a>| |
Terminal | `terminal` | | <a href="https://www.mobygames.com/platform/terminal" target="_blank" rel="noopener norefer">Mobygames</a>
Texas Instruments TI-99 | `ti-99` | <a href="https://www.igdb.com/platforms/ti-99" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/ti-99" target="_blank" rel="noopener norefer">Mobygames</a>
Thomson MO5 | `thomson-mo5` | <a href="https://www.igdb.com/platforms/thomson-mo5" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/thomson-mo" target="_blank" rel="noopener norefer">Mobygames</a>
Thomson TO | `thomson-to` | | <a href="https://www.mobygames.com/platform/thomson-to" target="_blank" rel="noopener norefer">Mobygames</a>
Tiki 100 | `tiki-100` | | <a href="https://www.mobygames.com/platform/tiki-100" target="_blank" rel="noopener norefer">Mobygames</a>
Timex Sinclair 2068 | `timex-sinclair-2068` | | <a href="https://www.mobygames.com/platform/timex-sinclair-2068" target="_blank" rel="noopener norefer">Mobygames</a>
Tizen | `tizen` | | <a href="https://www.mobygames.com/platform/tizen" target="_blank" rel="noopener norefer">Mobygames</a>
Tomahawk F1 | `tomahawk-f1` | | <a href="https://www.mobygames.com/platform/tomahawk-f1" target="_blank" rel="noopener norefer">Mobygames</a>
Tomy Tutor | `tomy-tutor` | | <a href="https://www.mobygames.com/platform/tomy-tutor" target="_blank" rel="noopener norefer">Mobygames</a>
Triton | `triton` | | <a href="https://www.mobygames.com/platform/triton" target="_blank" rel="noopener norefer">Mobygames</a>
TurboGrafx CD | `turbografx-16-slash-pc-engine-cd` | | <a href="https://www.mobygames.com/platform/turbografx-16-slash-pc-engine-cd" target="_blank" rel="noopener norefer">Mobygames</a>
TurboGrafx-16 | `turbografx16--1` | | <a href="https://www.mobygames.com/platform/turbografx16--1" target="_blank" rel="noopener norefer">Mobygames</a>
TurboGrafx-16/PC Engine | `turbografx16--1` | <a href="https://www.igdb.com/platforms/turbografx16--1" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/turbo-grafx" target="_blank" rel="noopener norefer">Mobygames</a>
Turbografx-16/PC Engine CD | `turbografx-16-slash-pc-engine-cd` | <a href="https://www.igdb.com/platforms/turbografx-16-slash-pc-engine-cd" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/turbografx-cd" target="_blank" rel="noopener norefer">Mobygames</a>
V.Flash | `vflash` | | <a href="https://www.mobygames.com/platform/vflash" target="_blank" rel="noopener norefer">Mobygames</a>
V.Smile | `vsmile` | <a href="https://www.igdb.com/platforms/vsmile" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/vsmile" target="_blank" rel="noopener norefer">Mobygames</a>
VIS | `vis` | | <a href="https://www.mobygames.com/platform/vis" target="_blank" rel="noopener norefer">Mobygames</a>
Vectrex | `vectrex` | <a href="https://www.igdb.com/platforms/vectrex" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/vectrex" target="_blank" rel="noopener norefer">Mobygames</a>
Versatile | `versatile` | | <a href="https://www.mobygames.com/platform/versatile" target="_blank" rel="noopener norefer">Mobygames</a>
VideoBrain | `videobrain` | | <a href="https://www.mobygames.com/platform/videobrain" target="_blank" rel="noopener norefer">Mobygames</a>
Videopac+ G7400 | `videopac-g7400` | | <a href="https://www.mobygames.com/platform/videopac-g7400" target="_blank" rel="noopener norefer">Mobygames</a>
Virtual Boy | `virtualboy` | <a href="https://www.igdb.com/platforms/virtualboy" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/virtual-boy" target="_blank" rel="noopener norefer">Mobygames</a>
Virtual Console | `vc` | <a href="https://www.igdb.com/platforms/vc" target="_blank" rel="noopener norefer">IGDB</a>| |
Visual Memory Unit / Visual Memory System | `visual-memory-unit-slash-visual-memory-system` | <a href="https://www.igdb.com/platforms/visual-memory-unit-slash-visual-memory-system" target="_blank" rel="noopener norefer">IGDB</a>| |
WIPI | `wipi` | | <a href="https://www.mobygames.com/platform/wipi" target="_blank" rel="noopener norefer">Mobygames</a>
Wang 2200 | `wang2200` | | <a href="https://www.mobygames.com/platform/wang2200" target="_blank" rel="noopener norefer">Mobygames</a>
Watara/QuickShot Supervision | `watara-slash-quickshot-supervision` | <a href="https://www.igdb.com/platforms/watara-slash-quickshot-supervision" target="_blank" rel="noopener norefer">IGDB</a>| |
Web browser | `browser` | <a href="https://www.igdb.com/platforms/browser" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/browser" target="_blank" rel="noopener norefer">Mobygames</a>
Wii | `wii` | <a href="https://www.igdb.com/platforms/wii" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/wii" target="_blank" rel="noopener norefer">Mobygames</a>
Wii U | `wiiu` | <a href="https://www.igdb.com/platforms/wiiu" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/wii-u" target="_blank" rel="noopener norefer">Mobygames</a>
Windows | `win` | | <a href="https://www.mobygames.com/platform/win" target="_blank" rel="noopener norefer">Mobygames</a>
Windows 3.x | `win3x` | | <a href="https://www.mobygames.com/platform/win3x" target="_blank" rel="noopener norefer">Mobygames</a>
Windows Apps | `windows-apps` | | <a href="https://www.mobygames.com/platform/windows-apps" target="_blank" rel="noopener norefer">Mobygames</a>
Windows Mobile | `windows-mobile` | <a href="https://www.igdb.com/platforms/windows-mobile" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/windowsphone" target="_blank" rel="noopener norefer">Mobygames</a>
Windows Phone | `winphone` | <a href="https://www.igdb.com/platforms/winphone" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/windows-phone" target="_blank" rel="noopener norefer">Mobygames</a>
WonderSwan | `wonderswan` | <a href="https://www.igdb.com/platforms/wonderswan" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/wonderswan" target="_blank" rel="noopener norefer">Mobygames</a>
WonderSwan Color | `wonderswan-color` | <a href="https://www.igdb.com/platforms/wonderswan-color" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/wonderswan-color" target="_blank" rel="noopener norefer">Mobygames</a>
XaviXPORT | `xavixport` | | <a href="https://www.mobygames.com/platform/xavixport" target="_blank" rel="noopener norefer">Mobygames</a>
Xbox | `xbox` | <a href="https://www.igdb.com/platforms/xbox" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/xbox" target="_blank" rel="noopener norefer">Mobygames</a>
Xbox 360 | `xbox360` | <a href="https://www.igdb.com/platforms/xbox360" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/xbox360" target="_blank" rel="noopener norefer">Mobygames</a>
Xbox Cloud Gaming | `xboxcloudgaming` | | <a href="https://www.mobygames.com/platform/xboxcloudgaming" target="_blank" rel="noopener norefer">Mobygames</a>
Xbox One | `xboxone` | <a href="https://www.igdb.com/platforms/xboxone" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/xbox-one" target="_blank" rel="noopener norefer">Mobygames</a>
Xbox Series X | `series-x` | <a href="https://www.igdb.com/platforms/series-x" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/xbox-series" target="_blank" rel="noopener norefer">Mobygames</a>
Xerox Alto | `xerox-alto` | | <a href="https://www.mobygames.com/platform/xerox-alto" target="_blank" rel="noopener norefer">Mobygames</a>
Z-machine | `z-machine` | | <a href="https://www.mobygames.com/platform/z-machine" target="_blank" rel="noopener norefer">Mobygames</a>
ZX Spectrum | `zxs` | <a href="https://www.igdb.com/platforms/zxs" target="_blank" rel="noopener norefer">IGDB</a>| |
ZX Spectrum Next | `zx-spectrum-next` | | <a href="https://www.mobygames.com/platform/zx-spectrum-next" target="_blank" rel="noopener norefer">Mobygames</a>
ZX80 | `zx80` | | <a href="https://www.mobygames.com/platform/zx80" target="_blank" rel="noopener norefer">Mobygames</a>
ZX81 | `sinclair-zx81` | | <a href="https://www.mobygames.com/platform/sinclair-zx81" target="_blank" rel="noopener norefer">Mobygames</a>
Zeebo | `zeebo` | <a href="https://www.igdb.com/platforms/zeebo" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/zeebo" target="_blank" rel="noopener norefer">Mobygames</a>
Zilog Z80 | `z80` | | <a href="https://www.mobygames.com/platform/z80" target="_blank" rel="noopener norefer">Mobygames</a>
Zilog Z8000 | `zilog-z8000` | | <a href="https://www.mobygames.com/platform/zilog-z8000" target="_blank" rel="noopener norefer">Mobygames</a>
Zodiac | `zodiac` | | <a href="https://www.mobygames.com/platform/zodiac" target="_blank" rel="noopener norefer">Mobygames</a>
Zune | `zune` | | <a href="https://www.mobygames.com/platform/zune" target="_blank" rel="noopener norefer">Mobygames</a>
bada | `bada` | | <a href="https://www.mobygames.com/platform/bada" target="_blank" rel="noopener norefer">Mobygames</a>
digiBlast | `digiblast` | | <a href="https://www.mobygames.com/platform/digiblast" target="_blank" rel="noopener norefer">Mobygames</a>
iOS | `ios` | <a href="https://www.igdb.com/platforms/ios" target="_blank" rel="noopener norefer">IGDB</a>| <a href="https://www.mobygames.com/platform/iphone" target="_blank" rel="noopener norefer">Mobygames</a>
iPad | `ipad` | | <a href="https://www.mobygames.com/platform/ipad" target="_blank" rel="noopener norefer">Mobygames</a>
iPod Classic | `ipod-classic` | | <a href="https://www.mobygames.com/platform/ipod-classic" target="_blank" rel="noopener norefer">Mobygames</a>
iiRcade | `iircade` | | <a href="https://www.mobygames.com/platform/iircade" target="_blank" rel="noopener norefer">Mobygames</a>
tvOS | `tvos` | | <a href="https://www.mobygames.com/platform/tvos" target="_blank" rel="noopener norefer">Mobygames</a>
visionOS | `visionos` | <a href="https://www.igdb.com/platforms/visionos" target="_blank" rel="noopener norefer">IGDB</a>| |
watchOS | `watchos` | | <a href="https://www.mobygames.com/platform/watchos" target="_blank" rel="noopener norefer">Mobygames</a>
webOS | `webos` | | <a href="https://www.mobygames.com/platform/webos" target="_blank" rel="noopener norefer">Mobygames</a>
-53
View File
@@ -1,53 +0,0 @@
## Scanning
### Scan is skipping all platforms/ends instantly
There are a few common reasons why a scan may end instantly/without scanning platforms
* Badly mounted library: verify that you mounted your roms folder at `/romm/library`
* Incorrect permissions: the app needs to read the files and folders in your library, check their permissions with `ls -lh`
* Invalid folder structure: verify that your folder structure matches the one in the [README](https://github.com/zurdi15/romm#-folder-structure)
### Roms not found for platform X, check romm folder structure
This is the same issue as the one above, and can be quickly solved by verifying your folder structure. RomM expects a library with a folder named `roms` in it, for example:
- `/server/media/library:/romm/library`
- `/server/media/games/roms:/romm/library/roms`
### Scan does not recognize a platform
When scanning the folders mounted in `/library/roms`, the scanner tries to match the folder name with the platform's slug in IGDB. If you notice that the scanner isn't detecting a platform, verify that the folder name matches the slug in the url of the [platform in IGDB](https://www.igdb.com/platforms). For example, the Nintendo 64DD has the URL https://www.igdb.com/platforms/nintendo-64dd, so the folder should be named `nintendo-64dd`.
### Scan times out after ~4 hours
The background scan task times out after 4 hours, which can happen if you have a very large library. The easiest work around is to keep running scans every 4 hours, **without** checking the "Complete rescan" option.
## Authentication
### Error: `403 Forbidden`
When authentication is enabled, most endpoints will return a `403 Forbidden` response if you're not authenticated, or if your sessions is in a broken state. The session key can be reset by [clearing your cookies](https://support.google.com/accounts/answer/32050).
CSRF protection is also enabled, which helps to mitigates [CSRF attacks](https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html) (useful if your instance is public). If you encounter a `Forbidden (403) CSRF verification failed` error, simply reloading your browser should force it to fetch a fresh CSRF cookie.
### Error: `Unable to login: CSRF token verification failed`
This error is known to happen on Chrome, but could happen in other browsers; manually clear your cookies (specifically one called `csrftoken`) and hard reload your browser window (CMD+SHIFT+R on macOS, CTRL+F5 on Windows).
### Error: `400 Bad Request` on the Websocket endpoint
If you're running RomM behind a reverse-proxy (Caddy, NGINX, etc.), ensure that websockets are supported and enabled. This may vary depending on the reverse proxy solution being used. In the case of Nginx Proxy Manager, enable the "Websockets Support" toggle when editing the proxy host.
## Miscellaneous
### Restarting the container when using SQLite drops all the data/requires a full re-scan
Verify that the database is mapped to a persistent storage volume in your docker compose or Unraid template.
```
"/path/to/database:/romm/database" # [Optional] Only needed if ROMM_DB_DRIVER=sqlite or not set
```
### Error: `Could not get twitch auth token: check client_id and client_secret`
This is likely due to misconfigured environment variables; verify that `CLIENT_ID` and `CLIENT_SECRET` are set correctly, and that both match the values in IGDB.
-59
View File
@@ -1,59 +0,0 @@
Version 3.0 of RomM introduces a number of breaking changes aimed at improving performance and usability, which will require some users to make specific changes before upgrading to ensure compatibility and to take full advantage of the new features.
All of the following changes are reflected in the [example docker-compose.yml file](https://github.com/zurdi15/romm/blob/master/examples/docker-compose.example.yml), which has been simplified greatly. **Please read this entire file carefully, as failing to do so may cause RomM to become inaccessible or unresponsive.**
## Dropped support for SQLite
We're removed support for SQLite as we've faced a number of engineering issues with it in the past, and MariaDB has proven more stable and robust. If you currently use SQLite, we'll automatically migrate your data from SQLite to MariaDB, but you'll **first need to make the following changes before upgrading to the latest image.**
In your env variables, change `ROMM_DB_DRIVER` to `mariadb` (or remove it completely as it's no longer needed). You'll then want to add the following env variables:
```
- DB_HOST=mariadb
- DB_PORT=3306
- DB_NAME=romm # Should match MYSQL_DATABASE in mariadb
- DB_USER=romm-user # Should match MYSQL_USER in mariadb
- DB_PASSWD= # Should match MYSQL_PASSWORD in mariadb
```
To setup a new MariaDB container, have a look at the [example docker-compose.yml file](https://github.com/zurdi15/romm/blob/master/examples/docker-compose.example.yml).
## Authentication as standard
To support new features like EmulatorJS and saves/states management, we've decided to require authentication for all users. Anyone currently running RomM with authentication disabled will need to remove the `ROMM_AUTH_ENABLED` env variable and add the following ones:
```
- ROMM_AUTH_SECRET_KEY= # Generate a key with `openssl rand -hex 32`
```
We understand that this requirement for authentication might conflict with the way some users currently share their collection with others (unrestricted access for all). However, given the exciting new features we've built, and the ones we're looking to build in the near future, we feel this is the right decision for the project.
## Redis is now built-in
As Redis is [required for authentication](https://github.com/zurdi15/romm/wiki/Authentication) to work, we've integrated it directly into the docker image. If you're currently running the experimental Redis container, you can remove it, along with these environment variables:
```
- ENABLE_EXPERIMENTAL_REDIS
- REDIS_HOST
- REDIS_PORT
```
## Configuration folder
Mounting the `config.yml` file is now done by mounting a `config` folder.. Place your existing ``config.yml`` file inside a folder and bind it to `/romm/config`:
```
- /path/to/config:/romm/config
```
Updated [config.example.yml](https://github.com/zurdi15/romm/blob/master/examples/config.example.yml)
## Support for saves, states and screenshots
This version introduces preliminary support for uploading/downloading saves, states and screenshots (read more about it in the 3.0 release notes). We've added a new volume mapping for these types of files called `assets`, which you'll want to bind to a local folder (or volume) so they'll persist. In your volumes section, add the following mapping, where `/path/to/assets/` is some folder where you'll want to store these assets (and make sure that folder exists):
```
- /path/to/assets:/romm/assets
```
We recommend creating a folder next to your `library`/the one mapped to `/romm/library` in order to keep all your RomM files in the same place.
-47
View File
@@ -1,47 +0,0 @@
## ⚠️ Support for webRcade will be removed in version 3.0 in favor the built-in [EmulatorJS player](https://github.com/zurdi15/romm/wiki/EmulatorJS-Player) ⚠️
[WebRcade](https://github.com/webrcade/webrcade) is a platform that enables playing games entirely within the context of the browser across a [wide variety of platforms](https://docs.webrcade.com/platforms/), with support for game pads (Bluetooth and USB) for both front-end navigation and in-game.
RomM exposes an API endpoint that serves a compatible JSON feed of supported platforms and games. Since webRcade runs within the context of your browser, you RomM instances _does not_ need to be exposed to the web. Further documentation can be found in the [User Guide](https://docs.webrcade.com/userguide/).
**IMPORTANT: You must set the `ROMM_HOST` environment variable to your host ip or domain name (including http(s)://, subdomain and port if needed).**
**IMPORTANT: Due to limitations with webRcade, RomM authentication must be DISABLED for the integration to work.**
### Some notes and limitations before starting
* Save & state files cannot be exported from webRcade
* The JSON feed does not currently support [BIOS files](https://docs.webrcade.com/apps/emulators/psx/#bios-files)
* [Local feeds](#customizing-the-feed) will not stay up-to-date with your RomM library
* A bug in the latest release causes the game covers not to load if RomM is not accessible to the internet
### Loading the RomM feed
Head to the [main page](https://play.webrcade.com/) and after hovering over "Categories" click "Show Feeds". Hit the "Add Feed" button at the bottom, select "URL" and paste the following URL, replacing `host` with the URL of your RomM instance: `https://<host>/api/platforms/webrcade/feed`.
|Home page|Feeds|Feed URL|
|---|---|---|
|<img width="1511" alt="Screenshot 2023-12-27 at 11 24 26PM" src="https://github.com/zurdi15/romm/assets/3247106/29274192-29e3-485d-a5b7-5cdb689c13d9">|<img width="1507" alt="Screenshot 2023-12-27 at 11 24 41PM" src="https://github.com/zurdi15/romm/assets/3247106/f42658ab-da29-4c00-ba5e-faec99ee1a16">|<img width="624" alt="Screenshot 2023-12-27 at 11 25 01PM" src="https://github.com/zurdi15/romm/assets/3247106/5438387d-a1f1-4fa6-b7fa-26b623b85c13">|
At this point webRcade should automatically load your library; if it doesn't, head back to the Feeds list, select "RomM Feed" at the bottom and click "Load".
### Customizing the feed
WebRcade also boasts an [editor](https://editor.webrcade.com/) that can identify supported games and download custom assets. You can leverage this editor to enhance your RomM feed by loading content served by the API and saving the modified feed locally. In the editor, click "Import", paste the RomM feed URL (as above) and hit "Ok". The page should refresh with the contents of the RomM feed.
|Editor|Import|
|---|---|
|<img width="1507" alt="Screenshot 2023-12-27 at 11 23 56PM" src="https://github.com/zurdi15/romm/assets/3247106/261b1d2a-c6f9-41e3-ac97-8139a1f43ad6">|<img width="617" alt="Screenshot 2023-12-27 at 10 39 24PM" src="https://github.com/zurdi15/romm/assets/3247106/c0a3df8b-b76f-4151-a7cf-910011bb98ca">|
Now select one of the platforms (or all of them) and, under the 3-dot menu, hit "Analyze". A window will appear displaying the progress of the analysis; webRcade is fetching assets from [webrcade-assets](https://github.com/webrcade-assets).
|Analyze|Progress|
|---|---|
|<img width="1293" alt="Screenshot 2023-12-27 at 11 27 11PM" src="https://github.com/zurdi15/romm/assets/3247106/af0d4380-56c4-41a6-bdb4-1847957c1bf8">|<img width="255" alt="Screenshot 2023-12-27 at 11 27 34PM" src="https://github.com/zurdi15/romm/assets/3247106/26e6ef93-37aa-491a-bc2e-6879720a13ad">|
When you've finished analyzing your library (and making any edits), hit "Save" in the sidebar. A local feed will then be created and stored in the browser's cache, which you can export with the "Export" option in the sidebar. Back in the [main window](https://play.webrcade.com), the local should now appear in your Feed list.
### Screenshot
<img width="1509" alt="Screenshot 2023-12-27 at 11 28 14PM" src="https://github.com/zurdi15/romm/assets/3247106/f10adeca-031e-4279-823a-08e1879d7256">
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 1.7 MiB