app_versions.json 56 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924
  1. {
  2. "1.0.4": {
  3. "healthy": true,
  4. "supported": true,
  5. "healthy_error": null,
  6. "location": "/__w/apps/apps/trains/community/luanti/1.0.4",
  7. "last_update": "2025-09-02 11:33:24",
  8. "required_features": [],
  9. "human_version": "5.13.0_1.0.4",
  10. "version": "1.0.4",
  11. "app_metadata": {
  12. "app_version": "5.13.0",
  13. "capabilities": [],
  14. "categories": [
  15. "games"
  16. ],
  17. "date_added": "2025-06-20",
  18. "description": "Luanti is an open source voxel game-creation platform with easy modding and game creation",
  19. "home": "https://www.luanti.org/",
  20. "host_mounts": [],
  21. "icon": "https://media.sys.truenas.net/apps/luanti/icons/icon.svg",
  22. "keywords": [
  23. "minetest",
  24. "luanti"
  25. ],
  26. "lib_version": "2.1.49",
  27. "lib_version_hash": "e71e6b0122c9446fa5ea6fb07e7eb01b11fb42d549a19845426bbd7e21a42634",
  28. "maintainers": [
  29. {
  30. "email": "dev@ixsystems.com",
  31. "name": "truenas",
  32. "url": "https://www.truenas.com/"
  33. }
  34. ],
  35. "name": "luanti",
  36. "run_as_context": [
  37. {
  38. "description": "Luanti runs as non-root user.",
  39. "gid": 30000,
  40. "group_name": "luanti",
  41. "uid": 30000,
  42. "user_name": "luanti"
  43. }
  44. ],
  45. "screenshots": [],
  46. "sources": [
  47. "https://www.luanti.org/",
  48. "https://github.com/luanti-org/luanti"
  49. ],
  50. "title": "Luanti",
  51. "train": "community",
  52. "version": "1.0.4"
  53. },
  54. "schema": {
  55. "groups": [
  56. {
  57. "name": "Luanti Configuration",
  58. "description": "Configure Luanti"
  59. },
  60. {
  61. "name": "Network Configuration",
  62. "description": "Configure Network for Luanti"
  63. },
  64. {
  65. "name": "Storage Configuration",
  66. "description": "Configure Storage for Luanti"
  67. },
  68. {
  69. "name": "Labels Configuration",
  70. "description": "Configure Labels for Luanti"
  71. },
  72. {
  73. "name": "Resources Configuration",
  74. "description": "Configure Resources for Luanti"
  75. }
  76. ],
  77. "questions": [
  78. {
  79. "variable": "luanti",
  80. "label": "",
  81. "group": "Luanti Configuration",
  82. "schema": {
  83. "type": "dict",
  84. "attrs": [
  85. {
  86. "variable": "author",
  87. "label": "Author",
  88. "description": "Select any game from this list: https://content.luanti.org/packages/?type=game</br>\nEither from the URL or in the website, you can find the author of the game.</br>\nFor example for https://content.luanti.org/packages/Luanti/minetest_game, the author is Luanti.\n",
  89. "schema": {
  90. "type": "string",
  91. "default": "Luanti",
  92. "required": true
  93. }
  94. },
  95. {
  96. "variable": "map_name",
  97. "label": "Map Name",
  98. "description": "The name of the map to load in Luanti.</br>\nYou can find the map name in the URL of the game page.</br>\nFor example for https://content.luanti.org/packages/Luanti/minetest_game, the map name is minetest_game.\n",
  99. "schema": {
  100. "type": "string",
  101. "default": "minetest_game",
  102. "required": true
  103. }
  104. },
  105. {
  106. "variable": "release",
  107. "label": "Release",
  108. "description": "If you want to use the latest release, leave this field empty. </br>\nThe release of the game to use.</br>\nYou can find the release in the URL of the game page.</br>\nCopy the URL of the release and get the release id</br>\nFor example for https://content.luanti.org/packages/Luanti/minetest_game/releases/31703/download, the release id is 31703.\n",
  109. "schema": {
  110. "type": "string",
  111. "default": ""
  112. }
  113. },
  114. {
  115. "variable": "additional_envs",
  116. "label": "Additional Environment Variables",
  117. "schema": {
  118. "type": "list",
  119. "default": [],
  120. "items": [
  121. {
  122. "variable": "env",
  123. "label": "Environment Variable",
  124. "schema": {
  125. "type": "dict",
  126. "attrs": [
  127. {
  128. "variable": "name",
  129. "label": "Name",
  130. "schema": {
  131. "type": "string",
  132. "required": true
  133. }
  134. },
  135. {
  136. "variable": "value",
  137. "label": "Value",
  138. "schema": {
  139. "type": "string"
  140. }
  141. }
  142. ]
  143. }
  144. }
  145. ]
  146. }
  147. }
  148. ]
  149. }
  150. },
  151. {
  152. "variable": "network",
  153. "label": "",
  154. "group": "Network Configuration",
  155. "schema": {
  156. "type": "dict",
  157. "attrs": [
  158. {
  159. "variable": "game_port",
  160. "label": "Game Port",
  161. "schema": {
  162. "type": "dict",
  163. "attrs": [
  164. {
  165. "variable": "bind_mode",
  166. "label": "Port Bind Mode",
  167. "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",
  168. "schema": {
  169. "type": "string",
  170. "default": "published",
  171. "enum": [
  172. {
  173. "value": "published",
  174. "description": "Publish port on the host for external access"
  175. },
  176. {
  177. "value": "exposed",
  178. "description": "Expose port for inter-container communication"
  179. },
  180. {
  181. "value": "",
  182. "description": "None"
  183. }
  184. ]
  185. }
  186. },
  187. {
  188. "variable": "port_number",
  189. "label": "Port Number",
  190. "schema": {
  191. "type": "int",
  192. "default": 30205,
  193. "min": 1,
  194. "max": 65535,
  195. "required": true
  196. }
  197. },
  198. {
  199. "variable": "host_ips",
  200. "label": "Host IPs",
  201. "description": "IPs on the host to bind this port",
  202. "schema": {
  203. "type": "list",
  204. "show_if": [
  205. [
  206. "bind_mode",
  207. "=",
  208. "published"
  209. ]
  210. ],
  211. "default": [],
  212. "items": [
  213. {
  214. "variable": "host_ip",
  215. "label": "Host IP",
  216. "schema": {
  217. "type": "string",
  218. "required": true,
  219. "$ref": [
  220. "definitions/node_bind_ip"
  221. ]
  222. }
  223. }
  224. ]
  225. }
  226. }
  227. ]
  228. }
  229. },
  230. {
  231. "variable": "host_network",
  232. "label": "Host Network",
  233. "description": "Bind to the host network. It's recommended to keep this disabled.",
  234. "schema": {
  235. "type": "boolean",
  236. "default": false
  237. }
  238. }
  239. ]
  240. }
  241. },
  242. {
  243. "variable": "storage",
  244. "label": "",
  245. "group": "Storage Configuration",
  246. "schema": {
  247. "type": "dict",
  248. "attrs": [
  249. {
  250. "variable": "config",
  251. "label": "Config Storage",
  252. "schema": {
  253. "type": "dict",
  254. "attrs": [
  255. {
  256. "variable": "type",
  257. "label": "Type",
  258. "description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.\n",
  259. "schema": {
  260. "type": "string",
  261. "required": true,
  262. "default": "ix_volume",
  263. "enum": [
  264. {
  265. "value": "host_path",
  266. "description": "Host Path (Path that already exists on the system)"
  267. },
  268. {
  269. "value": "ix_volume",
  270. "description": "ixVolume (Dataset created automatically by the system)"
  271. }
  272. ]
  273. }
  274. },
  275. {
  276. "variable": "ix_volume_config",
  277. "label": "ixVolume Configuration",
  278. "description": "The configuration for the ixVolume dataset.",
  279. "schema": {
  280. "type": "dict",
  281. "show_if": [
  282. [
  283. "type",
  284. "=",
  285. "ix_volume"
  286. ]
  287. ],
  288. "$ref": [
  289. "normalize/ix_volume"
  290. ],
  291. "attrs": [
  292. {
  293. "variable": "acl_enable",
  294. "label": "Enable ACL",
  295. "description": "Enable ACL for the storage.",
  296. "schema": {
  297. "type": "boolean",
  298. "default": false
  299. }
  300. },
  301. {
  302. "variable": "dataset_name",
  303. "label": "Dataset Name",
  304. "description": "The name of the dataset to use for storage.",
  305. "schema": {
  306. "type": "string",
  307. "required": true,
  308. "hidden": true,
  309. "default": "config"
  310. }
  311. },
  312. {
  313. "variable": "acl_entries",
  314. "label": "ACL Configuration",
  315. "schema": {
  316. "type": "dict",
  317. "show_if": [
  318. [
  319. "acl_enable",
  320. "=",
  321. true
  322. ]
  323. ],
  324. "attrs": []
  325. }
  326. }
  327. ]
  328. }
  329. },
  330. {
  331. "variable": "host_path_config",
  332. "label": "Host Path Configuration",
  333. "schema": {
  334. "type": "dict",
  335. "show_if": [
  336. [
  337. "type",
  338. "=",
  339. "host_path"
  340. ]
  341. ],
  342. "attrs": [
  343. {
  344. "variable": "acl_enable",
  345. "label": "Enable ACL",
  346. "description": "Enable ACL for the storage.",
  347. "schema": {
  348. "type": "boolean",
  349. "default": false
  350. }
  351. },
  352. {
  353. "variable": "acl",
  354. "label": "ACL Configuration",
  355. "schema": {
  356. "type": "dict",
  357. "show_if": [
  358. [
  359. "acl_enable",
  360. "=",
  361. true
  362. ]
  363. ],
  364. "attrs": [],
  365. "$ref": [
  366. "normalize/acl"
  367. ]
  368. }
  369. },
  370. {
  371. "variable": "path",
  372. "label": "Host Path",
  373. "description": "The host path to use for storage.",
  374. "schema": {
  375. "type": "hostpath",
  376. "show_if": [
  377. [
  378. "acl_enable",
  379. "=",
  380. false
  381. ]
  382. ],
  383. "required": true
  384. }
  385. }
  386. ]
  387. }
  388. }
  389. ]
  390. }
  391. },
  392. {
  393. "variable": "data",
  394. "label": "Data Storage",
  395. "schema": {
  396. "type": "dict",
  397. "attrs": [
  398. {
  399. "variable": "type",
  400. "label": "Type",
  401. "description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.\n",
  402. "schema": {
  403. "type": "string",
  404. "required": true,
  405. "default": "ix_volume",
  406. "enum": [
  407. {
  408. "value": "host_path",
  409. "description": "Host Path (Path that already exists on the system)"
  410. },
  411. {
  412. "value": "ix_volume",
  413. "description": "ixVolume (Dataset created automatically by the system)"
  414. }
  415. ]
  416. }
  417. },
  418. {
  419. "variable": "ix_volume_config",
  420. "label": "ixVolume Configuration",
  421. "description": "The configuration for the ixVolume dataset.",
  422. "schema": {
  423. "type": "dict",
  424. "show_if": [
  425. [
  426. "type",
  427. "=",
  428. "ix_volume"
  429. ]
  430. ],
  431. "$ref": [
  432. "normalize/ix_volume"
  433. ],
  434. "attrs": [
  435. {
  436. "variable": "acl_enable",
  437. "label": "Enable ACL",
  438. "description": "Enable ACL for the storage.",
  439. "schema": {
  440. "type": "boolean",
  441. "default": false
  442. }
  443. },
  444. {
  445. "variable": "dataset_name",
  446. "label": "Dataset Name",
  447. "description": "The name of the dataset to use for storage.",
  448. "schema": {
  449. "type": "string",
  450. "required": true,
  451. "hidden": true,
  452. "default": "data"
  453. }
  454. },
  455. {
  456. "variable": "acl_entries",
  457. "label": "ACL Configuration",
  458. "schema": {
  459. "type": "dict",
  460. "show_if": [
  461. [
  462. "acl_enable",
  463. "=",
  464. true
  465. ]
  466. ],
  467. "attrs": []
  468. }
  469. }
  470. ]
  471. }
  472. },
  473. {
  474. "variable": "host_path_config",
  475. "label": "Host Path Configuration",
  476. "schema": {
  477. "type": "dict",
  478. "show_if": [
  479. [
  480. "type",
  481. "=",
  482. "host_path"
  483. ]
  484. ],
  485. "attrs": [
  486. {
  487. "variable": "acl_enable",
  488. "label": "Enable ACL",
  489. "description": "Enable ACL for the storage.",
  490. "schema": {
  491. "type": "boolean",
  492. "default": false
  493. }
  494. },
  495. {
  496. "variable": "acl",
  497. "label": "ACL Configuration",
  498. "schema": {
  499. "type": "dict",
  500. "show_if": [
  501. [
  502. "acl_enable",
  503. "=",
  504. true
  505. ]
  506. ],
  507. "attrs": [],
  508. "$ref": [
  509. "normalize/acl"
  510. ]
  511. }
  512. },
  513. {
  514. "variable": "path",
  515. "label": "Host Path",
  516. "description": "The host path to use for storage.",
  517. "schema": {
  518. "type": "hostpath",
  519. "show_if": [
  520. [
  521. "acl_enable",
  522. "=",
  523. false
  524. ]
  525. ],
  526. "required": true
  527. }
  528. }
  529. ]
  530. }
  531. }
  532. ]
  533. }
  534. },
  535. {
  536. "variable": "additional_storage",
  537. "label": "Additional Storage",
  538. "schema": {
  539. "type": "list",
  540. "default": [],
  541. "items": [
  542. {
  543. "variable": "storageEntry",
  544. "label": "Storage Entry",
  545. "schema": {
  546. "type": "dict",
  547. "attrs": [
  548. {
  549. "variable": "type",
  550. "label": "Type",
  551. "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",
  552. "schema": {
  553. "type": "string",
  554. "required": true,
  555. "default": "ix_volume",
  556. "enum": [
  557. {
  558. "value": "host_path",
  559. "description": "Host Path (Path that already exists on the system)"
  560. },
  561. {
  562. "value": "ix_volume",
  563. "description": "ixVolume (Dataset created automatically by the system)"
  564. },
  565. {
  566. "value": "cifs",
  567. "description": "SMB/CIFS Share (Mounts a volume to a SMB share)"
  568. }
  569. ]
  570. }
  571. },
  572. {
  573. "variable": "read_only",
  574. "label": "Read Only",
  575. "description": "Mount the volume as read only.",
  576. "schema": {
  577. "type": "boolean",
  578. "default": false
  579. }
  580. },
  581. {
  582. "variable": "mount_path",
  583. "label": "Mount Path",
  584. "description": "The path inside the container to mount the storage.",
  585. "schema": {
  586. "type": "path",
  587. "required": true
  588. }
  589. },
  590. {
  591. "variable": "host_path_config",
  592. "label": "Host Path Configuration",
  593. "schema": {
  594. "type": "dict",
  595. "show_if": [
  596. [
  597. "type",
  598. "=",
  599. "host_path"
  600. ]
  601. ],
  602. "attrs": [
  603. {
  604. "variable": "acl_enable",
  605. "label": "Enable ACL",
  606. "description": "Enable ACL for the storage.",
  607. "schema": {
  608. "type": "boolean",
  609. "default": false
  610. }
  611. },
  612. {
  613. "variable": "acl",
  614. "label": "ACL Configuration",
  615. "schema": {
  616. "type": "dict",
  617. "show_if": [
  618. [
  619. "acl_enable",
  620. "=",
  621. true
  622. ]
  623. ],
  624. "attrs": [],
  625. "$ref": [
  626. "normalize/acl"
  627. ]
  628. }
  629. },
  630. {
  631. "variable": "path",
  632. "label": "Host Path",
  633. "description": "The host path to use for storage.",
  634. "schema": {
  635. "type": "hostpath",
  636. "show_if": [
  637. [
  638. "acl_enable",
  639. "=",
  640. false
  641. ]
  642. ],
  643. "required": true
  644. }
  645. }
  646. ]
  647. }
  648. },
  649. {
  650. "variable": "ix_volume_config",
  651. "label": "ixVolume Configuration",
  652. "description": "The configuration for the ixVolume dataset.",
  653. "schema": {
  654. "type": "dict",
  655. "show_if": [
  656. [
  657. "type",
  658. "=",
  659. "ix_volume"
  660. ]
  661. ],
  662. "$ref": [
  663. "normalize/ix_volume"
  664. ],
  665. "attrs": [
  666. {
  667. "variable": "acl_enable",
  668. "label": "Enable ACL",
  669. "description": "Enable ACL for the storage.",
  670. "schema": {
  671. "type": "boolean",
  672. "default": false
  673. }
  674. },
  675. {
  676. "variable": "dataset_name",
  677. "label": "Dataset Name",
  678. "description": "The name of the dataset to use for storage.",
  679. "schema": {
  680. "type": "string",
  681. "required": true,
  682. "default": "storage_entry"
  683. }
  684. },
  685. {
  686. "variable": "acl_entries",
  687. "label": "ACL Configuration",
  688. "schema": {
  689. "type": "dict",
  690. "show_if": [
  691. [
  692. "acl_enable",
  693. "=",
  694. true
  695. ]
  696. ],
  697. "attrs": [],
  698. "$ref": [
  699. "normalize/acl"
  700. ]
  701. }
  702. }
  703. ]
  704. }
  705. },
  706. {
  707. "variable": "cifs_config",
  708. "label": "SMB Configuration",
  709. "description": "The configuration for the SMB dataset.",
  710. "schema": {
  711. "type": "dict",
  712. "show_if": [
  713. [
  714. "type",
  715. "=",
  716. "cifs"
  717. ]
  718. ],
  719. "attrs": [
  720. {
  721. "variable": "server",
  722. "label": "Server",
  723. "description": "The server to mount the SMB share.",
  724. "schema": {
  725. "type": "string",
  726. "required": true
  727. }
  728. },
  729. {
  730. "variable": "path",
  731. "label": "Path",
  732. "description": "The path to mount the SMB share.",
  733. "schema": {
  734. "type": "string",
  735. "required": true
  736. }
  737. },
  738. {
  739. "variable": "username",
  740. "label": "Username",
  741. "description": "The username to use for the SMB share.",
  742. "schema": {
  743. "type": "string",
  744. "required": true
  745. }
  746. },
  747. {
  748. "variable": "password",
  749. "label": "Password",
  750. "description": "The password to use for the SMB share.",
  751. "schema": {
  752. "type": "string",
  753. "required": true,
  754. "private": true
  755. }
  756. },
  757. {
  758. "variable": "domain",
  759. "label": "Domain",
  760. "description": "The domain to use for the SMB share.",
  761. "schema": {
  762. "type": "string"
  763. }
  764. }
  765. ]
  766. }
  767. }
  768. ]
  769. }
  770. }
  771. ]
  772. }
  773. }
  774. ]
  775. }
  776. },
  777. {
  778. "variable": "labels",
  779. "label": "",
  780. "group": "Labels Configuration",
  781. "schema": {
  782. "type": "list",
  783. "default": [],
  784. "items": [
  785. {
  786. "variable": "label",
  787. "label": "Label",
  788. "schema": {
  789. "type": "dict",
  790. "attrs": [
  791. {
  792. "variable": "key",
  793. "label": "Key",
  794. "schema": {
  795. "type": "string",
  796. "required": true
  797. }
  798. },
  799. {
  800. "variable": "value",
  801. "label": "Value",
  802. "schema": {
  803. "type": "string",
  804. "required": true
  805. }
  806. },
  807. {
  808. "variable": "containers",
  809. "label": "Containers",
  810. "description": "Containers where the label should be applied",
  811. "schema": {
  812. "type": "list",
  813. "items": [
  814. {
  815. "variable": "container",
  816. "label": "Container",
  817. "schema": {
  818. "type": "string",
  819. "required": true,
  820. "enum": [
  821. {
  822. "value": "luanti",
  823. "description": "luanti"
  824. }
  825. ]
  826. }
  827. }
  828. ]
  829. }
  830. }
  831. ]
  832. }
  833. }
  834. ]
  835. }
  836. },
  837. {
  838. "variable": "resources",
  839. "label": "",
  840. "group": "Resources Configuration",
  841. "schema": {
  842. "type": "dict",
  843. "attrs": [
  844. {
  845. "variable": "limits",
  846. "label": "Limits",
  847. "schema": {
  848. "type": "dict",
  849. "attrs": [
  850. {
  851. "variable": "cpus",
  852. "label": "CPUs",
  853. "description": "CPUs limit for Luanti.",
  854. "schema": {
  855. "type": "int",
  856. "default": 2,
  857. "required": true
  858. }
  859. },
  860. {
  861. "variable": "memory",
  862. "label": "Memory (in MB)",
  863. "description": "Memory limit for Luanti.",
  864. "schema": {
  865. "type": "int",
  866. "default": 4096,
  867. "required": true
  868. }
  869. }
  870. ]
  871. }
  872. }
  873. ]
  874. }
  875. }
  876. ]
  877. },
  878. "readme": "<h1>Luanti</h1> <p><a href=\"https://www.luanti.org/\">Luanti</a> is an open source voxel game-creation platform with easy modding and game creation</p>",
  879. "changelog": null,
  880. "chart_metadata": {
  881. "app_version": "5.13.0",
  882. "capabilities": [],
  883. "categories": [
  884. "games"
  885. ],
  886. "date_added": "2025-06-20",
  887. "description": "Luanti is an open source voxel game-creation platform with easy modding and game creation",
  888. "home": "https://www.luanti.org/",
  889. "host_mounts": [],
  890. "icon": "https://media.sys.truenas.net/apps/luanti/icons/icon.svg",
  891. "keywords": [
  892. "minetest",
  893. "luanti"
  894. ],
  895. "lib_version": "2.1.49",
  896. "lib_version_hash": "e71e6b0122c9446fa5ea6fb07e7eb01b11fb42d549a19845426bbd7e21a42634",
  897. "maintainers": [
  898. {
  899. "email": "dev@ixsystems.com",
  900. "name": "truenas",
  901. "url": "https://www.truenas.com/"
  902. }
  903. ],
  904. "name": "luanti",
  905. "run_as_context": [
  906. {
  907. "description": "Luanti runs as non-root user.",
  908. "gid": 30000,
  909. "group_name": "luanti",
  910. "uid": 30000,
  911. "user_name": "luanti"
  912. }
  913. ],
  914. "screenshots": [],
  915. "sources": [
  916. "https://www.luanti.org/",
  917. "https://github.com/luanti-org/luanti"
  918. ],
  919. "title": "Luanti",
  920. "train": "community",
  921. "version": "1.0.4"
  922. }
  923. }
  924. }