+

+
+ Beautiful, powerful, documentation for RomM
+
+
+
+
+[![license-badge-img]][license-badge]
+[![discord-badge-img]][discord-badge]
+
+
+
+
+# Overview
+
+This is the official documentation for [RomM](https://romm.app/), the beautiful, powerful self-hosted ROM manager and player. Here you'll find everything you need to know about setting up, configuring, and using RomM.
+
+## Building the documentation
+
+We use `uv` to build the documentation. To install it, run:
+
+```sh
+curl -LsSf https://astral.sh/uv/install.sh | sh
+```
+
+Then install python and the required dependencies:
+
+```sh
+uv install python
+uv sync --all-extras --dev
+```
+
+Finally run the following command to serve the documentation from a local server:
+
+```sh
+uv run mkdocs serve
+```
+
+## Contributing
+
+We welcome all types of contributions, from simple typo fixes to new content. If you'd like to contribute, please read our [code of conduct](CODE_OF_CONDUCT.md).
+
+### Setting up the linter
+
+We use [Trunk](https://trunk.io) for linting, which combines multiple linters with sensible defaults and a single configuration file. You'll need to install the Trunk CLI to use it.
+
+#### - Install the Trunk CLI
+
+```sh
+curl https://get.trunk.io -fsSL | bash
+```
+
+Alternative installation methods can be found [here](https://docs.trunk.io/check/usage#install-the-cli). On commit, the linter will run automatically. To run it manually, use the following commands:
+
+```sh
+trunk fmt
+trunk check
+```
+
+## Social
+
+Join us on Discord, where you can ask questions, submit ideas, get help, showcase your collection, and discuss RomM with other users.
+
+[![discord-invite]][discord-invite-url]
+
+
+
+[license-badge-img]: https://img.shields.io/github/license/rommapp/wiki?style=for-the-badge&color=a32d2a
+[license-badge]: LICENSE
+[discord-badge-img]: https://img.shields.io/badge/discord-7289da?style=for-the-badge
+[discord-badge]: https://discord.gg/P5HtHnhUDH
+
+
+
+[discord-invite]: https://invidget.switchblade.xyz/P5HtHnhUDH
+[discord-invite-url]: https://discord.gg/P5HtHnhUDH
diff --git a/docs/Getting-Started/Authentication.md b/docs/Getting-Started/Authentication.md
index ba58de6b..5a184ba9 100644
--- a/docs/Getting-Started/Authentication.md
+++ b/docs/Getting-Started/Authentication.md
@@ -2,7 +2,7 @@ RomM provides support for various forms of authentication, granting flexibility
### Setup
-You'll want to set the following env variable before starting RomM:
+You'll want to set the following environment variable before starting RomM:
- `ROMM_AUTH_SECRET_KEY` is required and can be generated with `openssl rand -hex 32`
@@ -34,13 +34,13 @@ curl https://romm.local/api/platforms -H 'Authorization: Basic YWRtaW46aHVudGVyM
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).
+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`.
+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.
diff --git a/docs/Getting-Started/Environment-Variables.md b/docs/Getting-Started/Environment-Variables.md
index e7fb2920..9250ca6f 100644
--- a/docs/Getting-Started/Environment-Variables.md
+++ b/docs/Getting-Started/Environment-Variables.md
@@ -1,5 +1,6 @@
This is a complete list of available environment variables; required variables are marked with a `✓`.
+
!!! tip
You can also set environment variables with a `_FILE` suffix, which will load the contents of the file specified in the variable into the variable without the suffix. For example, setting `ROMM_AUTH_SECRET_KEY_FILE=/run/secrets/romm_auth_secret_key` and creating a file with the secret key at the specified path will set `ROMM_AUTH_SECRET_KEY` to the contents of the file. [Learn more.](https://docs.docker.com/compose/how-tos/use-secrets/)
@@ -13,8 +14,8 @@ This is a complete list of available environment variables; required variables a
| DISABLE_USERPASS_LOGIN | Disables login with username and password (when using OIDC) | | `false` |
| UPLOAD_TIMEOUT | Timeout for file uploads (in seconds) | | `600` |
| SCAN_TIMEOUT | Timeout for the background scan/rescan tasks (in seconds) | | `14400` |
-| DISABLE_EMULATOR_JS | Disables playing in browser with [EmulatorJS](../Platforms-and-Players/EmulatorJS-Player.md) | | `false` |
-| DISABLE_RUFFLE_RS | Disables playing flash games with [RuffleRS](../Platforms-and-Players/RuffleRS-Player.md) | | `false` |
+| DISABLE_EMULATOR_JS | Disables playing in browser with [EmulatorJS](../Platforms-and-Players/EmulatorJS-Player.md) | | `false` |
+| DISABLE_RUFFLE_RS | Disables playing flash games with [RuffleRS](../Platforms-and-Players/RuffleRS-Player.md) | | `false` |
| TZ | Sets the timezone | | `UTC` |
| GUNICORN_WORKERS | Number of processes running the app | | `2` |
| ROMM_BASE_PATH | Base folder path for library, resources and assets | | `/romm` |
@@ -28,7 +29,7 @@ This is a complete list of available environment variables; required variables a
| -------------- | ------------------------------------------------------------------ | :------: | ----------- |
| DB_HOST | Host name of database instance | ✓ | `127.0.0.1` |
| DB_PORT | Port number of database instance | | `3306` |
-| DB_NAME | Should match MYSQL_DATABASE in mariadb | | `romm` |
+| DB_NAME | Should match MYSQL_DATABASE in MariaDB | | `romm` |
| DB_USER | Database username (in MariaDB, should match MARIADB_USER) | ✓ | |
| DB_PASSWD | Database password (in MariaDB, should match MARIADB_PASSWORD) | ✓ | |
| ROMM_DB_DRIVER | Database driver to use (options: `mariadb`, `mysql`, `postgresql`) | | `mariadb` |
@@ -46,7 +47,7 @@ This is a complete list of available environment variables; required variables a
| ------------------- | -------------------------- | :------: | ------- |
| IGDB_CLIENT_ID | Client ID for IGDB API | | |
| IGDB_CLIENT_SECRET | Client secret for IGDB API | | |
-| MOBYGAMES_API_KEY | Mobygames secret API key | | |
+| MOBYGAMES_API_KEY | MobyGames secret API key | | |
| STEAMGRIDDB_API_KEY | SteamGridDB secret API key | | |
## Authentication
@@ -63,11 +64,11 @@ This is a complete list of available environment variables; required variables a
## Background tasks
-| Variable | Description | Required | Default |
-| -------------------------------------- | ------------------------------------------------------------------ | :------: | ------------- |
-| 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 * * *"` |
+| Variable | Description | Required | Default |
+| -------------------------------------- | ------------------------------------------------------------------- | :------: | ------------- |
+| ENABLE_RESCAN_ON_FILESYSTEM_CHANGE | Enable re-scanning of library when filesystem changes | | `false` |
+| RESCAN_ON_FILESYSTEM_CHANGE_DELAY | Delay in minutes before re-scanning library when filesystem changes | | `5` |
+| ENABLE_SCHEDULED_RESCAN | Enable scheduled re-scanning of library | | `false` |
+| SCHEDULED_RESCAN_CRON | Cron expression for scheduled re-scanning | | `"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 * * *"` |
diff --git a/docs/Getting-Started/Generate-API-Keys.md b/docs/Getting-Started/Generate-API-Keys.md
index 05f5df4f..9ff2a339 100644
--- a/docs/Getting-Started/Generate-API-Keys.md
+++ b/docs/Getting-Started/Generate-API-Keys.md
@@ -7,21 +7,22 @@ To access the IGDB API you'll need a Twitch account and a valid phone number for
- 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-