app_versions.json 93 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505
  1. {
  2. "1.0.43": {
  3. "healthy": true,
  4. "supported": true,
  5. "healthy_error": null,
  6. "location": "/__w/apps/apps/trains/community/romm/1.0.43",
  7. "last_update": "2025-09-02 11:33:24",
  8. "required_features": [],
  9. "human_version": "4.1.6_1.0.43",
  10. "version": "1.0.43",
  11. "app_metadata": {
  12. "app_version": "4.1.6",
  13. "capabilities": [],
  14. "categories": [
  15. "games"
  16. ],
  17. "changelog_url": "https://github.com/rommapp/romm/releases",
  18. "date_added": "2025-01-14",
  19. "description": "RomM allows you to scan, enrich, browse and play your game collection with a clean and responsive interface. With support for multiple platforms, various naming schemes, and custom tags, RomM is a must-have for anyone who plays on emulators.",
  20. "home": "https://romm.app",
  21. "host_mounts": [],
  22. "icon": "https://media.sys.truenas.net/apps/romm/icons/icon.png",
  23. "keywords": [
  24. "romm",
  25. "rom",
  26. "manager",
  27. "emulator"
  28. ],
  29. "lib_version": "2.1.49",
  30. "lib_version_hash": "e71e6b0122c9446fa5ea6fb07e7eb01b11fb42d549a19845426bbd7e21a42634",
  31. "maintainers": [
  32. {
  33. "email": "dev@ixsystems.com",
  34. "name": "truenas",
  35. "url": "https://www.truenas.com/"
  36. }
  37. ],
  38. "name": "romm",
  39. "run_as_context": [
  40. {
  41. "description": "Romm runs as any non-root user.",
  42. "gid": 568,
  43. "group_name": "romm",
  44. "uid": 568,
  45. "user_name": "romm"
  46. },
  47. {
  48. "description": "Redis runs as any non-root user.",
  49. "gid": 568,
  50. "group_name": "redis",
  51. "uid": 568,
  52. "user_name": "redis"
  53. }
  54. ],
  55. "screenshots": [
  56. "https://media.sys.truenas.net/apps/romm/screenshots/screenshot1.png",
  57. "https://media.sys.truenas.net/apps/romm/screenshots/screenshot2.png"
  58. ],
  59. "sources": [
  60. "https://github.com/rommapp/romm"
  61. ],
  62. "title": "Romm",
  63. "train": "community",
  64. "version": "1.0.43"
  65. },
  66. "schema": {
  67. "groups": [
  68. {
  69. "name": "Romm Configuration",
  70. "description": "Deploy RomM by selecting from the following options, but when in doubt use the defaults."
  71. },
  72. {
  73. "name": "User and Group Configuration",
  74. "description": "Configure User and Group for Romm"
  75. },
  76. {
  77. "name": "Network Configuration",
  78. "description": "Configure Network for Romm"
  79. },
  80. {
  81. "name": "Storage Configuration",
  82. "description": "RomM uses two internal persistent volumes: one (resources) for cover art and screenshots, and another (assets) for saves, states, and other adjacent files.\nYou'll want to mount two others (library and config) for the ROM library and the config.yml file.\n"
  83. },
  84. {
  85. "name": "Labels Configuration",
  86. "description": "Configure Labels for Romm"
  87. },
  88. {
  89. "name": "Resources Configuration",
  90. "description": "The defaults should work for most people.\nYou may with to increase memory limits if you have an extensive ROM library (20K+ games).\n"
  91. }
  92. ],
  93. "questions": [
  94. {
  95. "variable": "TZ",
  96. "group": "Romm Configuration",
  97. "label": "Timezone",
  98. "schema": {
  99. "type": "string",
  100. "default": "Etc/UTC",
  101. "required": true,
  102. "$ref": [
  103. "definitions/timezone"
  104. ]
  105. }
  106. },
  107. {
  108. "variable": "romm",
  109. "label": "",
  110. "group": "Romm Configuration",
  111. "schema": {
  112. "type": "dict",
  113. "attrs": [
  114. {
  115. "variable": "postgres_image_selector",
  116. "label": "Postgres Image (CAUTION)",
  117. "description": "If you are changing this after the postgres directory has been initialized,</br>\nSTOP! and make sure you have a backup of your data.</br>\nChanging this will trigger an one way database upgrade.</br>\nYou can only select newer versions of postgres.</br>\nSelecting an older version will refuse to start.</br>\nIf something goes wrong, you will have to restore from backup.\n",
  118. "schema": {
  119. "type": "string",
  120. "default": "postgres_17_image",
  121. "required": true,
  122. "enum": [
  123. {
  124. "value": "postgres_17_image",
  125. "description": "Postgres 17"
  126. }
  127. ]
  128. }
  129. },
  130. {
  131. "variable": "db_password",
  132. "label": "Database Password",
  133. "description": "The password for Postgres",
  134. "schema": {
  135. "type": "string",
  136. "default": "",
  137. "required": true,
  138. "private": true
  139. }
  140. },
  141. {
  142. "variable": "redis_password",
  143. "label": "Redis Password",
  144. "description": "The password for Romm.",
  145. "schema": {
  146. "type": "string",
  147. "default": "",
  148. "required": true,
  149. "private": true
  150. }
  151. },
  152. {
  153. "variable": "auth_secret_key",
  154. "label": "Auth Secret Key",
  155. "description": "Generate a key with `openssl rand -hex 32`",
  156. "schema": {
  157. "type": "string",
  158. "default": "",
  159. "required": true,
  160. "private": true
  161. }
  162. },
  163. {
  164. "variable": "igdb_client_id",
  165. "label": "IGDB Client ID",
  166. "description": "Generate an ID and SECRET for IGDB (https://api-docs.igdb.com/#account-creation)",
  167. "schema": {
  168. "type": "string",
  169. "default": "",
  170. "private": true
  171. }
  172. },
  173. {
  174. "variable": "igdb_client_secret",
  175. "label": "IGDB Client Secret",
  176. "schema": {
  177. "type": "string",
  178. "default": "",
  179. "private": true
  180. }
  181. },
  182. {
  183. "variable": "mobygames_api_key",
  184. "label": "MobyGames API Key",
  185. "description": "Generate an API key for MobyGames (https://www.mobygames.com/info/api)",
  186. "schema": {
  187. "type": "string",
  188. "default": "",
  189. "private": true
  190. }
  191. },
  192. {
  193. "variable": "steamgriddb_api_key",
  194. "label": "SteamGridDB API Key",
  195. "description": "Generate an API key for SteamGridDB (https://github.com/rommapp/romm/wiki/Generate-API-Keys#steamgriddb)",
  196. "schema": {
  197. "type": "string",
  198. "default": "",
  199. "private": true
  200. }
  201. },
  202. {
  203. "variable": "additional_envs",
  204. "label": "Additional Environment Variables",
  205. "schema": {
  206. "type": "list",
  207. "default": [],
  208. "items": [
  209. {
  210. "variable": "env",
  211. "label": "Environment Variable",
  212. "schema": {
  213. "type": "dict",
  214. "attrs": [
  215. {
  216. "variable": "name",
  217. "label": "Name",
  218. "schema": {
  219. "type": "string",
  220. "required": true
  221. }
  222. },
  223. {
  224. "variable": "value",
  225. "label": "Value",
  226. "schema": {
  227. "type": "string"
  228. }
  229. }
  230. ]
  231. }
  232. }
  233. ]
  234. }
  235. }
  236. ]
  237. }
  238. },
  239. {
  240. "variable": "run_as",
  241. "label": "",
  242. "group": "User and Group Configuration",
  243. "schema": {
  244. "type": "dict",
  245. "attrs": [
  246. {
  247. "variable": "user",
  248. "label": "User ID",
  249. "description": "The user id that Romm files will be owned by.",
  250. "schema": {
  251. "type": "int",
  252. "min": 568,
  253. "default": 568,
  254. "required": true
  255. }
  256. },
  257. {
  258. "variable": "group",
  259. "label": "Group ID",
  260. "description": "The group id that Romm files will be owned by.",
  261. "schema": {
  262. "type": "int",
  263. "min": 568,
  264. "default": 568,
  265. "required": true
  266. }
  267. }
  268. ]
  269. }
  270. },
  271. {
  272. "variable": "network",
  273. "label": "",
  274. "group": "Network Configuration",
  275. "schema": {
  276. "type": "dict",
  277. "attrs": [
  278. {
  279. "variable": "web_port",
  280. "label": "WebUI Port",
  281. "schema": {
  282. "type": "dict",
  283. "attrs": [
  284. {
  285. "variable": "bind_mode",
  286. "label": "Port Bind Mode",
  287. "description": "The port bind mode.</br>\n- Publish: The port will be published on the host for external access.</br>\n- Expose: The port will be exposed for inter-container communication.</br>\n- None: The port will not be exposed or published.</br>\nNote: If the Dockerfile defines an EXPOSE directive,\nthe port will still be exposed for inter-container communication regardless of this setting.\n",
  288. "schema": {
  289. "type": "string",
  290. "default": "published",
  291. "enum": [
  292. {
  293. "value": "published",
  294. "description": "Publish port on the host for external access"
  295. },
  296. {
  297. "value": "exposed",
  298. "description": "Expose port for inter-container communication"
  299. },
  300. {
  301. "value": "",
  302. "description": "None"
  303. }
  304. ]
  305. }
  306. },
  307. {
  308. "variable": "port_number",
  309. "label": "Port Number",
  310. "schema": {
  311. "type": "int",
  312. "default": 30061,
  313. "min": 1,
  314. "max": 65535,
  315. "required": true
  316. }
  317. },
  318. {
  319. "variable": "host_ips",
  320. "label": "Host IPs",
  321. "description": "IPs on the host to bind this port",
  322. "schema": {
  323. "type": "list",
  324. "show_if": [
  325. [
  326. "bind_mode",
  327. "=",
  328. "published"
  329. ]
  330. ],
  331. "default": [],
  332. "items": [
  333. {
  334. "variable": "host_ip",
  335. "label": "Host IP",
  336. "schema": {
  337. "type": "string",
  338. "required": true,
  339. "$ref": [
  340. "definitions/node_bind_ip"
  341. ]
  342. }
  343. }
  344. ]
  345. }
  346. }
  347. ]
  348. }
  349. }
  350. ]
  351. }
  352. },
  353. {
  354. "variable": "storage",
  355. "label": "",
  356. "group": "Storage Configuration",
  357. "schema": {
  358. "type": "dict",
  359. "attrs": [
  360. {
  361. "variable": "library",
  362. "label": "Romm Library Storage",
  363. "description": "Your game library. Check https://github.com/rommapp/romm?tab=readme-ov-file#folder-structure for more details.",
  364. "schema": {
  365. "type": "dict",
  366. "attrs": [
  367. {
  368. "variable": "type",
  369. "label": "Type",
  370. "description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.\n",
  371. "schema": {
  372. "type": "string",
  373. "required": true,
  374. "default": "ix_volume",
  375. "enum": [
  376. {
  377. "value": "host_path",
  378. "description": "Host Path (Path that already exists on the system)"
  379. },
  380. {
  381. "value": "ix_volume",
  382. "description": "ixVolume (Dataset created automatically by the system)"
  383. }
  384. ]
  385. }
  386. },
  387. {
  388. "variable": "ix_volume_config",
  389. "label": "ixVolume Configuration",
  390. "description": "The configuration for the ixVolume dataset.",
  391. "schema": {
  392. "type": "dict",
  393. "show_if": [
  394. [
  395. "type",
  396. "=",
  397. "ix_volume"
  398. ]
  399. ],
  400. "$ref": [
  401. "normalize/ix_volume"
  402. ],
  403. "attrs": [
  404. {
  405. "variable": "acl_enable",
  406. "label": "Enable ACL",
  407. "description": "Enable ACL for the storage.",
  408. "schema": {
  409. "type": "boolean",
  410. "default": false
  411. }
  412. },
  413. {
  414. "variable": "dataset_name",
  415. "label": "Dataset Name",
  416. "description": "The name of the dataset to use for storage.",
  417. "schema": {
  418. "type": "string",
  419. "required": true,
  420. "hidden": true,
  421. "default": "library"
  422. }
  423. },
  424. {
  425. "variable": "acl_entries",
  426. "label": "ACL Configuration",
  427. "schema": {
  428. "type": "dict",
  429. "show_if": [
  430. [
  431. "acl_enable",
  432. "=",
  433. true
  434. ]
  435. ],
  436. "attrs": []
  437. }
  438. }
  439. ]
  440. }
  441. },
  442. {
  443. "variable": "host_path_config",
  444. "label": "Host Path Configuration",
  445. "schema": {
  446. "type": "dict",
  447. "show_if": [
  448. [
  449. "type",
  450. "=",
  451. "host_path"
  452. ]
  453. ],
  454. "attrs": [
  455. {
  456. "variable": "acl_enable",
  457. "label": "Enable ACL",
  458. "description": "Enable ACL for the storage.",
  459. "schema": {
  460. "type": "boolean",
  461. "default": false
  462. }
  463. },
  464. {
  465. "variable": "acl",
  466. "label": "ACL Configuration",
  467. "schema": {
  468. "type": "dict",
  469. "show_if": [
  470. [
  471. "acl_enable",
  472. "=",
  473. true
  474. ]
  475. ],
  476. "attrs": [],
  477. "$ref": [
  478. "normalize/acl"
  479. ]
  480. }
  481. },
  482. {
  483. "variable": "path",
  484. "label": "Host Path",
  485. "description": "The host path to use for storage.",
  486. "schema": {
  487. "type": "hostpath",
  488. "show_if": [
  489. [
  490. "acl_enable",
  491. "=",
  492. false
  493. ]
  494. ],
  495. "required": true
  496. }
  497. }
  498. ]
  499. }
  500. }
  501. ]
  502. }
  503. },
  504. {
  505. "variable": "resources",
  506. "label": "Romm Resources Storage",
  507. "description": "Fetched cover art, screenshots, and other resources.",
  508. "schema": {
  509. "type": "dict",
  510. "attrs": [
  511. {
  512. "variable": "type",
  513. "label": "Type",
  514. "description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.\n",
  515. "schema": {
  516. "type": "string",
  517. "required": true,
  518. "default": "ix_volume",
  519. "enum": [
  520. {
  521. "value": "host_path",
  522. "description": "Host Path (Path that already exists on the system)"
  523. },
  524. {
  525. "value": "ix_volume",
  526. "description": "ixVolume (Dataset created automatically by the system)"
  527. }
  528. ]
  529. }
  530. },
  531. {
  532. "variable": "ix_volume_config",
  533. "label": "ixVolume Configuration",
  534. "description": "The configuration for the ixVolume dataset.",
  535. "schema": {
  536. "type": "dict",
  537. "show_if": [
  538. [
  539. "type",
  540. "=",
  541. "ix_volume"
  542. ]
  543. ],
  544. "$ref": [
  545. "normalize/ix_volume"
  546. ],
  547. "attrs": [
  548. {
  549. "variable": "acl_enable",
  550. "label": "Enable ACL",
  551. "description": "Enable ACL for the storage.",
  552. "schema": {
  553. "type": "boolean",
  554. "default": false
  555. }
  556. },
  557. {
  558. "variable": "dataset_name",
  559. "label": "Dataset Name",
  560. "description": "The name of the dataset to use for storage.",
  561. "schema": {
  562. "type": "string",
  563. "required": true,
  564. "hidden": true,
  565. "default": "resources"
  566. }
  567. },
  568. {
  569. "variable": "acl_entries",
  570. "label": "ACL Configuration",
  571. "schema": {
  572. "type": "dict",
  573. "show_if": [
  574. [
  575. "acl_enable",
  576. "=",
  577. true
  578. ]
  579. ],
  580. "attrs": []
  581. }
  582. }
  583. ]
  584. }
  585. },
  586. {
  587. "variable": "host_path_config",
  588. "label": "Host Path Configuration",
  589. "schema": {
  590. "type": "dict",
  591. "show_if": [
  592. [
  593. "type",
  594. "=",
  595. "host_path"
  596. ]
  597. ],
  598. "attrs": [
  599. {
  600. "variable": "acl_enable",
  601. "label": "Enable ACL",
  602. "description": "Enable ACL for the storage.",
  603. "schema": {
  604. "type": "boolean",
  605. "default": false
  606. }
  607. },
  608. {
  609. "variable": "acl",
  610. "label": "ACL Configuration",
  611. "schema": {
  612. "type": "dict",
  613. "show_if": [
  614. [
  615. "acl_enable",
  616. "=",
  617. true
  618. ]
  619. ],
  620. "attrs": [],
  621. "$ref": [
  622. "normalize/acl"
  623. ]
  624. }
  625. },
  626. {
  627. "variable": "path",
  628. "label": "Host Path",
  629. "description": "The host path to use for storage.",
  630. "schema": {
  631. "type": "hostpath",
  632. "show_if": [
  633. [
  634. "acl_enable",
  635. "=",
  636. false
  637. ]
  638. ],
  639. "required": true
  640. }
  641. }
  642. ]
  643. }
  644. }
  645. ]
  646. }
  647. },
  648. {
  649. "variable": "config",
  650. "label": "Romm Config Storage",
  651. "description": "The path where config.yml is stored.",
  652. "schema": {
  653. "type": "dict",
  654. "attrs": [
  655. {
  656. "variable": "type",
  657. "label": "Type",
  658. "description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.\n",
  659. "schema": {
  660. "type": "string",
  661. "required": true,
  662. "default": "ix_volume",
  663. "enum": [
  664. {
  665. "value": "host_path",
  666. "description": "Host Path (Path that already exists on the system)"
  667. },
  668. {
  669. "value": "ix_volume",
  670. "description": "ixVolume (Dataset created automatically by the system)"
  671. }
  672. ]
  673. }
  674. },
  675. {
  676. "variable": "ix_volume_config",
  677. "label": "ixVolume Configuration",
  678. "description": "The configuration for the ixVolume dataset.",
  679. "schema": {
  680. "type": "dict",
  681. "show_if": [
  682. [
  683. "type",
  684. "=",
  685. "ix_volume"
  686. ]
  687. ],
  688. "$ref": [
  689. "normalize/ix_volume"
  690. ],
  691. "attrs": [
  692. {
  693. "variable": "acl_enable",
  694. "label": "Enable ACL",
  695. "description": "Enable ACL for the storage.",
  696. "schema": {
  697. "type": "boolean",
  698. "default": false
  699. }
  700. },
  701. {
  702. "variable": "dataset_name",
  703. "label": "Dataset Name",
  704. "description": "The name of the dataset to use for storage.",
  705. "schema": {
  706. "type": "string",
  707. "required": true,
  708. "hidden": true,
  709. "default": "config"
  710. }
  711. },
  712. {
  713. "variable": "acl_entries",
  714. "label": "ACL Configuration",
  715. "schema": {
  716. "type": "dict",
  717. "show_if": [
  718. [
  719. "acl_enable",
  720. "=",
  721. true
  722. ]
  723. ],
  724. "attrs": []
  725. }
  726. }
  727. ]
  728. }
  729. },
  730. {
  731. "variable": "host_path_config",
  732. "label": "Host Path Configuration",
  733. "schema": {
  734. "type": "dict",
  735. "show_if": [
  736. [
  737. "type",
  738. "=",
  739. "host_path"
  740. ]
  741. ],
  742. "attrs": [
  743. {
  744. "variable": "acl_enable",
  745. "label": "Enable ACL",
  746. "description": "Enable ACL for the storage.",
  747. "schema": {
  748. "type": "boolean",
  749. "default": false
  750. }
  751. },
  752. {
  753. "variable": "acl",
  754. "label": "ACL Configuration",
  755. "schema": {
  756. "type": "dict",
  757. "show_if": [
  758. [
  759. "acl_enable",
  760. "=",
  761. true
  762. ]
  763. ],
  764. "attrs": [],
  765. "$ref": [
  766. "normalize/acl"
  767. ]
  768. }
  769. },
  770. {
  771. "variable": "path",
  772. "label": "Host Path",
  773. "description": "The host path to use for storage.",
  774. "schema": {
  775. "type": "hostpath",
  776. "show_if": [
  777. [
  778. "acl_enable",
  779. "=",
  780. false
  781. ]
  782. ],
  783. "required": true
  784. }
  785. }
  786. ]
  787. }
  788. }
  789. ]
  790. }
  791. },
  792. {
  793. "variable": "assets",
  794. "label": "Romm Assets Storage",
  795. "description": "Storage for uploaded saves, states, etc.",
  796. "schema": {
  797. "type": "dict",
  798. "attrs": [
  799. {
  800. "variable": "type",
  801. "label": "Type",
  802. "description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.\n",
  803. "schema": {
  804. "type": "string",
  805. "required": true,
  806. "default": "ix_volume",
  807. "enum": [
  808. {
  809. "value": "host_path",
  810. "description": "Host Path (Path that already exists on the system)"
  811. },
  812. {
  813. "value": "ix_volume",
  814. "description": "ixVolume (Dataset created automatically by the system)"
  815. }
  816. ]
  817. }
  818. },
  819. {
  820. "variable": "ix_volume_config",
  821. "label": "ixVolume Configuration",
  822. "description": "The configuration for the ixVolume dataset.",
  823. "schema": {
  824. "type": "dict",
  825. "show_if": [
  826. [
  827. "type",
  828. "=",
  829. "ix_volume"
  830. ]
  831. ],
  832. "$ref": [
  833. "normalize/ix_volume"
  834. ],
  835. "attrs": [
  836. {
  837. "variable": "acl_enable",
  838. "label": "Enable ACL",
  839. "description": "Enable ACL for the storage.",
  840. "schema": {
  841. "type": "boolean",
  842. "default": false
  843. }
  844. },
  845. {
  846. "variable": "dataset_name",
  847. "label": "Dataset Name",
  848. "description": "The name of the dataset to use for storage.",
  849. "schema": {
  850. "type": "string",
  851. "required": true,
  852. "hidden": true,
  853. "default": "assets"
  854. }
  855. },
  856. {
  857. "variable": "acl_entries",
  858. "label": "ACL Configuration",
  859. "schema": {
  860. "type": "dict",
  861. "show_if": [
  862. [
  863. "acl_enable",
  864. "=",
  865. true
  866. ]
  867. ],
  868. "attrs": []
  869. }
  870. }
  871. ]
  872. }
  873. },
  874. {
  875. "variable": "host_path_config",
  876. "label": "Host Path Configuration",
  877. "schema": {
  878. "type": "dict",
  879. "show_if": [
  880. [
  881. "type",
  882. "=",
  883. "host_path"
  884. ]
  885. ],
  886. "attrs": [
  887. {
  888. "variable": "acl_enable",
  889. "label": "Enable ACL",
  890. "description": "Enable ACL for the storage.",
  891. "schema": {
  892. "type": "boolean",
  893. "default": false
  894. }
  895. },
  896. {
  897. "variable": "acl",
  898. "label": "ACL Configuration",
  899. "schema": {
  900. "type": "dict",
  901. "show_if": [
  902. [
  903. "acl_enable",
  904. "=",
  905. true
  906. ]
  907. ],
  908. "attrs": [],
  909. "$ref": [
  910. "normalize/acl"
  911. ]
  912. }
  913. },
  914. {
  915. "variable": "path",
  916. "label": "Host Path",
  917. "description": "The host path to use for storage.",
  918. "schema": {
  919. "type": "hostpath",
  920. "show_if": [
  921. [
  922. "acl_enable",
  923. "=",
  924. false
  925. ]
  926. ],
  927. "required": true
  928. }
  929. }
  930. ]
  931. }
  932. }
  933. ]
  934. }
  935. },
  936. {
  937. "variable": "postgres_data",
  938. "label": "Postgres Data Storage",
  939. "description": "Storage location for the Postgres database.",
  940. "schema": {
  941. "type": "dict",
  942. "attrs": [
  943. {
  944. "variable": "type",
  945. "label": "Type",
  946. "description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.\n",
  947. "schema": {
  948. "type": "string",
  949. "required": true,
  950. "default": "ix_volume",
  951. "enum": [
  952. {
  953. "value": "host_path",
  954. "description": "Host Path (Path that already exists on the system)"
  955. },
  956. {
  957. "value": "ix_volume",
  958. "description": "ixVolume (Dataset created automatically by the system)"
  959. }
  960. ]
  961. }
  962. },
  963. {
  964. "variable": "ix_volume_config",
  965. "label": "ixVolume Configuration",
  966. "description": "The configuration for the ixVolume dataset.",
  967. "schema": {
  968. "type": "dict",
  969. "show_if": [
  970. [
  971. "type",
  972. "=",
  973. "ix_volume"
  974. ]
  975. ],
  976. "$ref": [
  977. "normalize/ix_volume"
  978. ],
  979. "attrs": [
  980. {
  981. "variable": "acl_enable",
  982. "label": "Enable ACL",
  983. "description": "Enable ACL for the storage.",
  984. "schema": {
  985. "type": "boolean",
  986. "default": false
  987. }
  988. },
  989. {
  990. "variable": "dataset_name",
  991. "label": "Dataset Name",
  992. "description": "The name of the dataset to use for storage.",
  993. "schema": {
  994. "type": "string",
  995. "required": true,
  996. "hidden": true,
  997. "default": "pg_data"
  998. }
  999. },
  1000. {
  1001. "variable": "acl_entries",
  1002. "label": "ACL Configuration",
  1003. "schema": {
  1004. "type": "dict",
  1005. "show_if": [
  1006. [
  1007. "acl_enable",
  1008. "=",
  1009. true
  1010. ]
  1011. ],
  1012. "attrs": []
  1013. }
  1014. }
  1015. ]
  1016. }
  1017. },
  1018. {
  1019. "variable": "host_path_config",
  1020. "label": "Host Path Configuration",
  1021. "schema": {
  1022. "type": "dict",
  1023. "show_if": [
  1024. [
  1025. "type",
  1026. "=",
  1027. "host_path"
  1028. ]
  1029. ],
  1030. "attrs": [
  1031. {
  1032. "variable": "acl_enable",
  1033. "label": "Enable ACL",
  1034. "description": "Enable ACL for the storage.",
  1035. "schema": {
  1036. "type": "boolean",
  1037. "default": false
  1038. }
  1039. },
  1040. {
  1041. "variable": "acl",
  1042. "label": "ACL Configuration",
  1043. "schema": {
  1044. "type": "dict",
  1045. "show_if": [
  1046. [
  1047. "acl_enable",
  1048. "=",
  1049. true
  1050. ]
  1051. ],
  1052. "attrs": [],
  1053. "$ref": [
  1054. "normalize/acl"
  1055. ]
  1056. }
  1057. },
  1058. {
  1059. "variable": "path",
  1060. "label": "Host Path",
  1061. "description": "The host path to use for storage.",
  1062. "schema": {
  1063. "type": "hostpath",
  1064. "show_if": [
  1065. [
  1066. "acl_enable",
  1067. "=",
  1068. false
  1069. ]
  1070. ],
  1071. "required": true
  1072. }
  1073. },
  1074. {
  1075. "variable": "auto_permissions",
  1076. "label": "Automatic Permissions",
  1077. "description": "Automatically set permissions for the host path.\nEnabling this, will check the top level directory,</br>\nIf it finds incorrect permissions, it will `chown` the\nhost path to the user and group required for the\npostgres container.\n",
  1078. "schema": {
  1079. "type": "boolean",
  1080. "default": false,
  1081. "show_if": [
  1082. [
  1083. "acl_enable",
  1084. "=",
  1085. false
  1086. ]
  1087. ]
  1088. }
  1089. }
  1090. ]
  1091. }
  1092. }
  1093. ]
  1094. }
  1095. },
  1096. {
  1097. "variable": "additional_storage",
  1098. "label": "Additional Storage",
  1099. "schema": {
  1100. "type": "list",
  1101. "default": [],
  1102. "items": [
  1103. {
  1104. "variable": "storageEntry",
  1105. "label": "Storage Entry",
  1106. "schema": {
  1107. "type": "dict",
  1108. "attrs": [
  1109. {
  1110. "variable": "type",
  1111. "label": "Type",
  1112. "description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.</br>\nSMB Share: Is a SMB share that is mounted to as a volume.\n",
  1113. "schema": {
  1114. "type": "string",
  1115. "required": true,
  1116. "default": "ix_volume",
  1117. "enum": [
  1118. {
  1119. "value": "host_path",
  1120. "description": "Host Path (Path that already exists on the system)"
  1121. },
  1122. {
  1123. "value": "ix_volume",
  1124. "description": "ixVolume (Dataset created automatically by the system)"
  1125. },
  1126. {
  1127. "value": "cifs",
  1128. "description": "SMB/CIFS Share (Mounts a volume to a SMB share)"
  1129. }
  1130. ]
  1131. }
  1132. },
  1133. {
  1134. "variable": "read_only",
  1135. "label": "Read Only",
  1136. "description": "Mount the volume as read only.",
  1137. "schema": {
  1138. "type": "boolean",
  1139. "default": false
  1140. }
  1141. },
  1142. {
  1143. "variable": "mount_path",
  1144. "label": "Mount Path",
  1145. "description": "The path inside the container to mount the storage.",
  1146. "schema": {
  1147. "type": "path",
  1148. "required": true
  1149. }
  1150. },
  1151. {
  1152. "variable": "host_path_config",
  1153. "label": "Host Path Configuration",
  1154. "schema": {
  1155. "type": "dict",
  1156. "show_if": [
  1157. [
  1158. "type",
  1159. "=",
  1160. "host_path"
  1161. ]
  1162. ],
  1163. "attrs": [
  1164. {
  1165. "variable": "acl_enable",
  1166. "label": "Enable ACL",
  1167. "description": "Enable ACL for the storage.",
  1168. "schema": {
  1169. "type": "boolean",
  1170. "default": false
  1171. }
  1172. },
  1173. {
  1174. "variable": "acl",
  1175. "label": "ACL Configuration",
  1176. "schema": {
  1177. "type": "dict",
  1178. "show_if": [
  1179. [
  1180. "acl_enable",
  1181. "=",
  1182. true
  1183. ]
  1184. ],
  1185. "attrs": [],
  1186. "$ref": [
  1187. "normalize/acl"
  1188. ]
  1189. }
  1190. },
  1191. {
  1192. "variable": "path",
  1193. "label": "Host Path",
  1194. "description": "The host path to use for storage.",
  1195. "schema": {
  1196. "type": "hostpath",
  1197. "show_if": [
  1198. [
  1199. "acl_enable",
  1200. "=",
  1201. false
  1202. ]
  1203. ],
  1204. "required": true
  1205. }
  1206. }
  1207. ]
  1208. }
  1209. },
  1210. {
  1211. "variable": "ix_volume_config",
  1212. "label": "ixVolume Configuration",
  1213. "description": "The configuration for the ixVolume dataset.",
  1214. "schema": {
  1215. "type": "dict",
  1216. "show_if": [
  1217. [
  1218. "type",
  1219. "=",
  1220. "ix_volume"
  1221. ]
  1222. ],
  1223. "$ref": [
  1224. "normalize/ix_volume"
  1225. ],
  1226. "attrs": [
  1227. {
  1228. "variable": "acl_enable",
  1229. "label": "Enable ACL",
  1230. "description": "Enable ACL for the storage.",
  1231. "schema": {
  1232. "type": "boolean",
  1233. "default": false
  1234. }
  1235. },
  1236. {
  1237. "variable": "dataset_name",
  1238. "label": "Dataset Name",
  1239. "description": "The name of the dataset to use for storage.",
  1240. "schema": {
  1241. "type": "string",
  1242. "required": true,
  1243. "default": "storage_entry"
  1244. }
  1245. },
  1246. {
  1247. "variable": "acl_entries",
  1248. "label": "ACL Configuration",
  1249. "schema": {
  1250. "type": "dict",
  1251. "show_if": [
  1252. [
  1253. "acl_enable",
  1254. "=",
  1255. true
  1256. ]
  1257. ],
  1258. "attrs": [],
  1259. "$ref": [
  1260. "normalize/acl"
  1261. ]
  1262. }
  1263. }
  1264. ]
  1265. }
  1266. },
  1267. {
  1268. "variable": "cifs_config",
  1269. "label": "SMB Configuration",
  1270. "description": "The configuration for the SMB dataset.",
  1271. "schema": {
  1272. "type": "dict",
  1273. "show_if": [
  1274. [
  1275. "type",
  1276. "=",
  1277. "cifs"
  1278. ]
  1279. ],
  1280. "attrs": [
  1281. {
  1282. "variable": "server",
  1283. "label": "Server",
  1284. "description": "The server to mount the SMB share.",
  1285. "schema": {
  1286. "type": "string",
  1287. "required": true
  1288. }
  1289. },
  1290. {
  1291. "variable": "path",
  1292. "label": "Path",
  1293. "description": "The path to mount the SMB share.",
  1294. "schema": {
  1295. "type": "string",
  1296. "required": true
  1297. }
  1298. },
  1299. {
  1300. "variable": "username",
  1301. "label": "Username",
  1302. "description": "The username to use for the SMB share.",
  1303. "schema": {
  1304. "type": "string",
  1305. "required": true
  1306. }
  1307. },
  1308. {
  1309. "variable": "password",
  1310. "label": "Password",
  1311. "description": "The password to use for the SMB share.",
  1312. "schema": {
  1313. "type": "string",
  1314. "required": true,
  1315. "private": true
  1316. }
  1317. },
  1318. {
  1319. "variable": "domain",
  1320. "label": "Domain",
  1321. "description": "The domain to use for the SMB share.",
  1322. "schema": {
  1323. "type": "string"
  1324. }
  1325. }
  1326. ]
  1327. }
  1328. }
  1329. ]
  1330. }
  1331. }
  1332. ]
  1333. }
  1334. }
  1335. ]
  1336. }
  1337. },
  1338. {
  1339. "variable": "labels",
  1340. "label": "",
  1341. "group": "Labels Configuration",
  1342. "schema": {
  1343. "type": "list",
  1344. "default": [],
  1345. "items": [
  1346. {
  1347. "variable": "label",
  1348. "label": "Label",
  1349. "schema": {
  1350. "type": "dict",
  1351. "attrs": [
  1352. {
  1353. "variable": "key",
  1354. "label": "Key",
  1355. "schema": {
  1356. "type": "string",
  1357. "required": true
  1358. }
  1359. },
  1360. {
  1361. "variable": "value",
  1362. "label": "Value",
  1363. "schema": {
  1364. "type": "string",
  1365. "required": true
  1366. }
  1367. },
  1368. {
  1369. "variable": "containers",
  1370. "label": "Containers",
  1371. "description": "Containers where the label should be applied",
  1372. "schema": {
  1373. "type": "list",
  1374. "items": [
  1375. {
  1376. "variable": "container",
  1377. "label": "Container",
  1378. "schema": {
  1379. "type": "string",
  1380. "required": true,
  1381. "enum": [
  1382. {
  1383. "value": "romm",
  1384. "description": "romm"
  1385. },
  1386. {
  1387. "value": "postgres",
  1388. "description": "postgres"
  1389. },
  1390. {
  1391. "value": "redis",
  1392. "description": "redis"
  1393. }
  1394. ]
  1395. }
  1396. }
  1397. ]
  1398. }
  1399. }
  1400. ]
  1401. }
  1402. }
  1403. ]
  1404. }
  1405. },
  1406. {
  1407. "variable": "resources",
  1408. "label": "",
  1409. "group": "Resources Configuration",
  1410. "schema": {
  1411. "type": "dict",
  1412. "attrs": [
  1413. {
  1414. "variable": "limits",
  1415. "label": "Limits",
  1416. "schema": {
  1417. "type": "dict",
  1418. "attrs": [
  1419. {
  1420. "variable": "cpus",
  1421. "label": "CPUs",
  1422. "description": "CPUs limit for Romm.",
  1423. "schema": {
  1424. "type": "int",
  1425. "default": 2,
  1426. "required": true
  1427. }
  1428. },
  1429. {
  1430. "variable": "memory",
  1431. "label": "Memory (in MB)",
  1432. "description": "Memory limit for Romm.",
  1433. "schema": {
  1434. "type": "int",
  1435. "default": 4096,
  1436. "required": true
  1437. }
  1438. }
  1439. ]
  1440. }
  1441. }
  1442. ]
  1443. }
  1444. }
  1445. ]
  1446. },
  1447. "readme": "<h1>RomM</h1> <h2>Your beautiful, powerful, self-hosted ROM manager</h2> <p><a href=\"https://romm.app\">RomM</a> allows you to scan, enrich, and browse your game collection with a clean and responsive interface. With support for multiple platforms, various naming schemes, and custom tags, RomM is a must-have for anyone who plays on emulators.</p>",
  1448. "changelog": null,
  1449. "chart_metadata": {
  1450. "app_version": "4.1.6",
  1451. "capabilities": [],
  1452. "categories": [
  1453. "games"
  1454. ],
  1455. "changelog_url": "https://github.com/rommapp/romm/releases",
  1456. "date_added": "2025-01-14",
  1457. "description": "RomM allows you to scan, enrich, browse and play your game collection with a clean and responsive interface. With support for multiple platforms, various naming schemes, and custom tags, RomM is a must-have for anyone who plays on emulators.",
  1458. "home": "https://romm.app",
  1459. "host_mounts": [],
  1460. "icon": "https://media.sys.truenas.net/apps/romm/icons/icon.png",
  1461. "keywords": [
  1462. "romm",
  1463. "rom",
  1464. "manager",
  1465. "emulator"
  1466. ],
  1467. "lib_version": "2.1.49",
  1468. "lib_version_hash": "e71e6b0122c9446fa5ea6fb07e7eb01b11fb42d549a19845426bbd7e21a42634",
  1469. "maintainers": [
  1470. {
  1471. "email": "dev@ixsystems.com",
  1472. "name": "truenas",
  1473. "url": "https://www.truenas.com/"
  1474. }
  1475. ],
  1476. "name": "romm",
  1477. "run_as_context": [
  1478. {
  1479. "description": "Romm runs as any non-root user.",
  1480. "gid": 568,
  1481. "group_name": "romm",
  1482. "uid": 568,
  1483. "user_name": "romm"
  1484. },
  1485. {
  1486. "description": "Redis runs as any non-root user.",
  1487. "gid": 568,
  1488. "group_name": "redis",
  1489. "uid": 568,
  1490. "user_name": "redis"
  1491. }
  1492. ],
  1493. "screenshots": [
  1494. "https://media.sys.truenas.net/apps/romm/screenshots/screenshot1.png",
  1495. "https://media.sys.truenas.net/apps/romm/screenshots/screenshot2.png"
  1496. ],
  1497. "sources": [
  1498. "https://github.com/rommapp/romm"
  1499. ],
  1500. "title": "Romm",
  1501. "train": "community",
  1502. "version": "1.0.43"
  1503. }
  1504. }
  1505. }