Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .vale/config/vocabularies/romm/accept.txt
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,5 @@ UIDs
URIs
Websocket
Websockets
ZimaOS
ZimaSpace
1 change: 1 addition & 0 deletions docs/Navigation.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ search:
- [TrueNAS](install/truenas.md)
- [Kubernetes](install/kubernetes.md)
- [Railway](install/railway.md)
- [ZimaOS](install/zimaos.md)
- [NixOS](install/nixos.md)
- [Backup & Restore](install/backup-and-restore.md)
- Administration
Expand Down
4 changes: 3 additions & 1 deletion docs/administration/scheduled-tasks.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,9 @@ Set the env var and restart the container; the scheduler picks up the new schedu

## Enabling a scheduled task

Each task has an `ENABLE_*` environment variable, like `ENABLE_SCHEDULED_UPDATE_LAUNCHBOX_METADATA=true` which enables the LaunchBox sync. Check the [env var reference](../reference/environment-variables.md) for the full list. Some tasks are enabled by default, others aren't.
Most tasks have an `ENABLE_*` environment variable, like `ENABLE_SCHEDULED_UPDATE_LAUNCHBOX_METADATA=true` which enables the LaunchBox sync, and every one of them is off by default. Set both the enable var and its cron var, since a task with an empty cron string has nothing to schedule and stays unscheduled even when enabled.

The housekeeping tasks (netplay cleanup, upload tmp cleanup, ZIP cache cleanup) are always on and have no env vars. Check the [env var reference](../reference/environment-variables.md) for the full list.

## Triggering a task manually

Expand Down
3 changes: 2 additions & 1 deletion docs/install/index.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: Install & Deploy
description: On Docker Compose, Unraid, Synology, TrueNAS, Kubernetes, Railway, or NixOS
description: On Docker Compose, Unraid, Synology, TrueNAS, Kubernetes, Railway, ZimaOS, or NixOS
---

# Install & Deploy
Expand All @@ -17,6 +17,7 @@ RomM is distributed as a Docker image. Every supported deployment runs the same
| **TrueNAS** | [App Catalog or YAML install](truenas.md) |
| **Kubernetes** | [Community charts and gotchas](kubernetes.md) |
| **Railway** | [Community one-click template](railway.md) |
| **ZimaOS** | [One-click install from the App Store](zimaos.md) |

If none of those match, start with [Docker Compose](../getting-started/quick-start.md) and adapt as needed.

Expand Down
53 changes: 53 additions & 0 deletions docs/install/zimaos.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
---
title: ZimaOS
description: Install on ZimaOS in one step from the built-in App Store
---

# ZimaOS

[ZimaOS](https://www.zimaspace.com/zimaos) ships RomM in its App Store, so the install is a single click and no compose file or database setup is needed.

## Prerequisites

- A running ZimaOS installation
- Your library arranged in the expected [folder structure](../getting-started/folder-structure.md)

## Install

Open the **App Store** and search for `RomM`, then hit **Install**.

![RomM in the ZimaOS App Store](../resources/zimaos/appstore.png)

ZimaOS provisions the container along with its database and Valkey, and the app shows up on your home screen when it's ready.

![RomM on the ZimaOS home screen](../resources/zimaos/apps-grid.png)

Open it and the first-run Setup Wizard walks you through creating the first admin account.

## Configuration

The defaults work out of the box, so everything below is optional.

To change container settings, use the options button in the upper-right corner of the app tile. ZimaOS offers both a form-based editor and a YAML editor for the underlying compose file, so you can set volumes, ports, and env vars either way.

![The options button on the RomM app tile](../resources/zimaos/app-tile-options.png)

![Editing RomM's volumes and environment variables](../resources/zimaos/edit-config.png)

The env vars are the same ones documented in [Quick Start](../getting-started/quick-start.md) and the [Environment Variables reference](../reference/environment-variables.md). Two worth setting early:

- **`ROMM_AUTH_SECRET_KEY`**: generate one with `openssl rand -hex 32`. Rotating it later invalidates every session and invite link.
- **Metadata provider credentials**: fill these in before your first scan (see [Metadata Providers](../getting-started/metadata-providers.md)).

## Adding ROMs

Open **Files** in ZimaOS, navigate to the directory you mapped to the library (`AppData/romm/library/roms` by default), and drag your files in to upload. Platform folder names inside `roms/` have to match the expected naming (see [Folder Structure](../getting-started/folder-structure.md)).

Once the files land, run a scan from the app (see [Your First Scan](../getting-started/first-scan.md)).

## Getting help

For ZimaOS-specific problems, the [ZimaSpace Discord](https://discord.gg/f9nzbmpMtU) is the fastest route, since their team and community maintain the App Store entry. For issues with the app itself, try the [RomM Discord](https://discord.gg/P5HtHnhUDH) or:

- [Scanning Troubleshooting](../troubleshooting/scanning.md) for matching and ingest problems
- [Authentication Troubleshooting](../troubleshooting/authentication.md) for login issues
61 changes: 32 additions & 29 deletions docs/resources/snippets/env-vars.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
| `ROMM_TMP_PATH` | | | Custom temporary directory path |
| `ROMM_BASE_URL` | `http://0.0.0.0` | | Public URL of this instance |
| `ROMM_PORT` | `8080` | | Port on which the application listens |
| `KIOSK_MODE` | `false` | | Read-only mode for public displays or kiosks |
| `KIOSK_MODE` | `false` | | Let visitors browse without logging in (read-only) |

### Database

Expand All @@ -25,14 +25,15 @@

### Redis/Valkey

| Variable | Default | Required | Description |
| ---------------- | ----------- | :------: | ------------------------------------------------------ |
| `REDIS_HOST` | `127.0.0.1` | | Host name of the Redis/Valkey instance |
| `REDIS_PORT` | `6379` | | Port number of the Redis/Valkey instance |
| `REDIS_USERNAME` | | | Username for the Redis/Valkey instance |
| `REDIS_PASSWORD` | | | Password for the Redis/Valkey instance |
| `REDIS_DB` | `0` | | Database number for the Redis/Valkey instance |
| `REDIS_SSL` | `false` | | Enable SSL (rediss://) for the Redis/Valkey connection |
| Variable | Default | Required | Description |
| ------------------- | ----------- | :------: | ------------------------------------------------------------------------------------------------ |
| `REDIS_HOST` | `127.0.0.1` | | Host name of the Redis/Valkey instance |
| `REDIS_PORT` | `6379` | | Port number of the Redis/Valkey instance |
| `REDIS_USERNAME` | | | Username for the Redis/Valkey instance |
| `REDIS_PASSWORD` | | | Password for the Redis/Valkey instance |
| `REDIS_DB` | `0` | | Database number for the Redis/Valkey instance |
| `REDIS_SSL` | `false` | | Enable SSL (rediss://) for the Redis/Valkey connection |
| `REDIS_SAVE_POLICY` | `3600 1` | | Snapshot policy of the internal Valkey, as "<seconds> <changes>" pairs (empty to never snapshot) |

### Authentication

Expand Down Expand Up @@ -94,25 +95,27 @@

### Scans & Tasks

| Variable | Default | Required | Description |
| -------------------------------------------------- | ----------- | :------: | ------------------------------------------------------------- |
| `SCAN_TIMEOUT` | `14400` | | Timeout for background scan/rescan tasks in seconds |
| `SCAN_WORKERS` | `2` | | Number of worker processes for scanning tasks |
| `TASK_TIMEOUT` | `300` | | Timeout for other background tasks in seconds |
| `TASK_RESULT_TTL` | `86400` | | How long to keep task results in Valkey in seconds |
| `SEVEN_ZIP_TIMEOUT` | `60` | | Timeout for 7-Zip operations in seconds |
| `ENABLE_RESCAN_ON_FILESYSTEM_CHANGE` | `false` | | Re-scan the library automatically when the filesystem changes |
| `RESCAN_ON_FILESYSTEM_CHANGE_DELAY` | `5` | | Delay in minutes before re-scanning after a filesystem change |
| `ENABLE_SCHEDULED_RESCAN` | `false` | | Enable scheduled library re-scans |
| `SCHEDULED_RESCAN_CRON` | `0 3 * * *` | | Cron expression for scheduled re-scans |
| `ENABLE_SCHEDULED_UPDATE_SWITCH_TITLEDB` | `false` | | Enable scheduled Switch TitleDB index updates |
| `SCHEDULED_UPDATE_SWITCH_TITLEDB_CRON` | `0 4 * * *` | | Cron expression for scheduled Switch TitleDB updates |
| `ENABLE_SCHEDULED_UPDATE_LAUNCHBOX_METADATA` | `false` | | Enable scheduled LaunchBox metadata updates |
| `SCHEDULED_UPDATE_LAUNCHBOX_METADATA_CRON` | `0 4 * * *` | | Cron expression for scheduled LaunchBox metadata updates |
| `ENABLE_SCHEDULED_CONVERT_IMAGES_TO_WEBP` | `false` | | Enable scheduled conversion of images to WebP |
| `SCHEDULED_CONVERT_IMAGES_TO_WEBP_CRON` | `0 4 * * *` | | Cron expression for scheduled WebP conversion |
| `ENABLE_SCHEDULED_RETROACHIEVEMENTS_PROGRESS_SYNC` | `false` | | Enable scheduled RetroAchievements progress sync |
| `SCHEDULED_RETROACHIEVEMENTS_PROGRESS_SYNC_CRON` | `0 4 * * *` | | Cron expression for scheduled RetroAchievements sync |
| Variable | Default | Required | Description |
| -------------------------------------------------- | ----------- | :------: | ----------------------------------------------------------------------------------------- |
| `SCAN_TIMEOUT` | `14400` | | Timeout for background scan/rescan tasks in seconds |
| `SCAN_WORKERS` | `1` | | How many ROMs a scan processes at once |
| `TASK_TIMEOUT` | `300` | | Timeout for other background tasks in seconds |
| `TASK_RESULT_TTL` | `86400` | | How long to keep task results in Valkey in seconds |
| `SEVEN_ZIP_TIMEOUT` | `60` | | Timeout for 7-Zip operations in seconds |
| `ENABLE_RESCAN_ON_FILESYSTEM_CHANGE` | `false` | | Re-scan the library automatically when the filesystem changes |
| `RESCAN_ON_FILESYSTEM_CHANGE_DELAY` | `5` | | Delay in minutes before re-scanning after a filesystem change |
| `ENABLE_SCHEDULED_RESCAN` | `false` | | Enable scheduled library re-scans |
| `SCHEDULED_RESCAN_CRON` | `0 3 * * *` | | Cron expression for scheduled re-scans |
| `ENABLE_SCHEDULED_UPDATE_SWITCH_TITLEDB` | `false` | | Enable scheduled Switch TitleDB index updates |
| `SCHEDULED_UPDATE_SWITCH_TITLEDB_CRON` | `0 4 * * *` | | Cron expression for scheduled Switch TitleDB updates |
| `ENABLE_SCHEDULED_UPDATE_LAUNCHBOX_METADATA` | `false` | | Enable scheduled LaunchBox metadata updates |
| `SCHEDULED_UPDATE_LAUNCHBOX_METADATA_CRON` | `0 4 * * *` | | Cron expression for scheduled LaunchBox metadata updates |
| `ENABLE_SCHEDULED_CONVERT_IMAGES_TO_WEBP` | `false` | | Enable scheduled conversion of images to WebP |
| `SCHEDULED_CONVERT_IMAGES_TO_WEBP_CRON` | `0 4 * * *` | | Cron expression for scheduled WebP conversion |
| `ENABLE_SCHEDULED_CLEANUP_ORPHANED_RESOURCES` | `false` | | Enable scheduled cleanup of orphaned resources (covers, screenshots) left by deleted ROMs |
| `SCHEDULED_CLEANUP_ORPHANED_RESOURCES_CRON` | `0 5 * * *` | | Cron expression for scheduled orphaned resource cleanup |
| `ENABLE_SCHEDULED_RETROACHIEVEMENTS_PROGRESS_SYNC` | `false` | | Enable scheduled RetroAchievements progress sync |
| `SCHEDULED_RETROACHIEVEMENTS_PROGRESS_SYNC_CRON` | `0 4 * * *` | | Cron expression for scheduled RetroAchievements sync |

### Sync

Expand Down Expand Up @@ -158,7 +161,7 @@

| Variable | Default | Required | Description |
| ---------------------------------- | ------- | :------: | ----------------------------------------------------------- |
| `WEB_SERVER_CONCURRENCY` | `3` | | Number of worker processes (recommended: 2 × CPU cores + 1) |
| `WEB_SERVER_CONCURRENCY` | `1` | | Number of worker processes (recommended: 2 × CPU cores + 1) |
| `WEB_SERVER_TIMEOUT` | `300` | | Timeout for web server requests in seconds |
| `WEB_SERVER_KEEPALIVE` | `2` | | Keep-Alive connection wait time in seconds |
| `WEB_SERVER_MAX_REQUESTS` | `1000` | | Maximum requests a worker processes before restarting |
Expand Down
Loading
Loading