app_versions.json 103 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674
  1. {
  2. "1.0.8": {
  3. "healthy": true,
  4. "supported": true,
  5. "healthy_error": null,
  6. "location": "/__w/apps/apps/trains/community/garage/1.0.8",
  7. "last_update": "2025-09-02 11:33:24",
  8. "required_features": [],
  9. "human_version": "v2.0.0_1.0.8",
  10. "version": "1.0.8",
  11. "app_metadata": {
  12. "app_version": "v2.0.0",
  13. "capabilities": [],
  14. "categories": [
  15. "storage"
  16. ],
  17. "changelog_url": "https://git.deuxfleurs.fr/Deuxfleurs/garage/releases",
  18. "date_added": "2025-06-04",
  19. "description": "An open-source distributed object storage service tailored for self-hosting.",
  20. "home": "https://garagehq.deuxfleurs.fr/",
  21. "host_mounts": [],
  22. "icon": "https://media.sys.truenas.net/apps/garage/icons/icon.svg",
  23. "keywords": [
  24. "garage",
  25. "object storage"
  26. ],
  27. "lib_version": "2.1.49",
  28. "lib_version_hash": "e71e6b0122c9446fa5ea6fb07e7eb01b11fb42d549a19845426bbd7e21a42634",
  29. "maintainers": [
  30. {
  31. "email": "dev@ixsystems.com",
  32. "name": "truenas",
  33. "url": "https://www.truenas.com/"
  34. }
  35. ],
  36. "name": "garage",
  37. "run_as_context": [
  38. {
  39. "description": "Garage runs as any non-root user.",
  40. "gid": 568,
  41. "group_name": "garage",
  42. "uid": 568,
  43. "user_name": "garage"
  44. },
  45. {
  46. "description": "Garage Web runs as any non-root user.",
  47. "gid": 568,
  48. "group_name": "garage",
  49. "uid": 568,
  50. "user_name": "garage"
  51. }
  52. ],
  53. "screenshots": [],
  54. "sources": [
  55. "https://garagehq.deuxfleurs.fr/",
  56. "https://git.deuxfleurs.fr/Deuxfleurs/garage",
  57. "https://hub.docker.com/r/dxflrs/garage",
  58. "https://github.com/khairul169/garage-webui"
  59. ],
  60. "title": "Garage",
  61. "train": "community",
  62. "version": "1.0.8"
  63. },
  64. "schema": {
  65. "groups": [
  66. {
  67. "name": "Garage Configuration",
  68. "description": "Configure Garage"
  69. },
  70. {
  71. "name": "User and Group Configuration",
  72. "description": "Configure User and Group for Garage"
  73. },
  74. {
  75. "name": "Network Configuration",
  76. "description": "Configure Network for Garage"
  77. },
  78. {
  79. "name": "Storage Configuration",
  80. "description": "Configure Storage for Garage"
  81. },
  82. {
  83. "name": "Labels Configuration",
  84. "description": "Configure Labels for Garage"
  85. },
  86. {
  87. "name": "Resources Configuration",
  88. "description": "Configure Resources for Garage"
  89. }
  90. ],
  91. "questions": [
  92. {
  93. "variable": "TZ",
  94. "group": "Garage Configuration",
  95. "label": "Timezone",
  96. "schema": {
  97. "type": "string",
  98. "default": "Etc/UTC",
  99. "required": true,
  100. "$ref": [
  101. "definitions/timezone"
  102. ]
  103. }
  104. },
  105. {
  106. "variable": "garage",
  107. "label": "",
  108. "group": "Garage Configuration",
  109. "schema": {
  110. "type": "dict",
  111. "attrs": [
  112. {
  113. "variable": "admin_token",
  114. "label": "Admin Token",
  115. "description": "The token used to authenticate as an admin user.",
  116. "schema": {
  117. "type": "string",
  118. "default": "",
  119. "private": true,
  120. "required": true
  121. }
  122. },
  123. {
  124. "variable": "region",
  125. "label": "S3 Region",
  126. "schema": {
  127. "type": "string",
  128. "default": "garage",
  129. "required": true
  130. }
  131. },
  132. {
  133. "variable": "rpc_secret",
  134. "label": "RPC Secret",
  135. "schema": {
  136. "type": "string",
  137. "default": "",
  138. "min_length": 64,
  139. "max_length": 64,
  140. "required": true,
  141. "valid_chars": "^[a-f0-9]+$",
  142. "valid_chars_error": "RPC Secret must be a hexadecimal string.</br>\nAllowed characters are [a-f] and [0-9].\n",
  143. "private": true
  144. }
  145. },
  146. {
  147. "variable": "enable_web_ui_auth",
  148. "label": "Password protect Garage WebUI",
  149. "schema": {
  150. "type": "boolean",
  151. "default": false
  152. }
  153. },
  154. {
  155. "variable": "web_ui_username",
  156. "label": "WebUI username",
  157. "schema": {
  158. "type": "string",
  159. "show_if": [
  160. [
  161. "enable_web_ui_auth",
  162. "=",
  163. true
  164. ]
  165. ],
  166. "required": true
  167. }
  168. },
  169. {
  170. "variable": "web_ui_password",
  171. "label": "WebUI password",
  172. "schema": {
  173. "type": "string",
  174. "show_if": [
  175. [
  176. "enable_web_ui_auth",
  177. "=",
  178. true
  179. ]
  180. ],
  181. "private": true,
  182. "required": true
  183. }
  184. },
  185. {
  186. "variable": "additional_options",
  187. "label": "Additional Options",
  188. "description": "Set any option to the configuration file.</br>\nThe path to the option must be in the format of `.section.subsection.option`.</br>\nFor example, to set the `root_domain` option in the `.s3_api` section, use `.s3_api.root_domain` as the path.</br>\nSee available options here https://garagehq.deuxfleurs.fr/documentation/reference-manual/configuration.</br>\nYou can also edit the configuration file directly in the container at `/var/lib/garage/config/garage.toml`.\n",
  189. "schema": {
  190. "type": "list",
  191. "default": [],
  192. "items": [
  193. {
  194. "variable": "option",
  195. "label": "Option",
  196. "schema": {
  197. "type": "dict",
  198. "attrs": [
  199. {
  200. "variable": "type",
  201. "label": "Type",
  202. "description": "The type of the option.",
  203. "schema": {
  204. "type": "string",
  205. "required": true,
  206. "enum": [
  207. {
  208. "value": "string",
  209. "description": "String"
  210. },
  211. {
  212. "value": "int",
  213. "description": "Integer"
  214. },
  215. {
  216. "value": "bool",
  217. "description": "Boolean"
  218. }
  219. ]
  220. }
  221. },
  222. {
  223. "variable": "path",
  224. "label": "Path",
  225. "description": "The path to the option in the configuration file.",
  226. "schema": {
  227. "type": "string",
  228. "valid_chars": "^\\..+$",
  229. "valid_chars_error": "Path must start with a dot (.) and contain at least one character.</br>\nExample: `.s3_api.root_domain`.</br>\nSee available options here https://garagehq.deuxfleurs.fr/documentation/reference-manual/configuration.\n",
  230. "required": true
  231. }
  232. },
  233. {
  234. "variable": "value",
  235. "label": "Value",
  236. "description": "The value of the option.",
  237. "schema": {
  238. "type": "string"
  239. }
  240. }
  241. ]
  242. }
  243. }
  244. ]
  245. }
  246. },
  247. {
  248. "variable": "additional_envs",
  249. "label": "Additional Environment Variables",
  250. "schema": {
  251. "type": "list",
  252. "default": [],
  253. "items": [
  254. {
  255. "variable": "env",
  256. "label": "Environment Variable",
  257. "schema": {
  258. "type": "dict",
  259. "attrs": [
  260. {
  261. "variable": "name",
  262. "label": "Name",
  263. "schema": {
  264. "type": "string",
  265. "required": true
  266. }
  267. },
  268. {
  269. "variable": "value",
  270. "label": "Value",
  271. "schema": {
  272. "type": "string"
  273. }
  274. }
  275. ]
  276. }
  277. }
  278. ]
  279. }
  280. }
  281. ]
  282. }
  283. },
  284. {
  285. "variable": "run_as",
  286. "label": "",
  287. "group": "User and Group Configuration",
  288. "schema": {
  289. "type": "dict",
  290. "attrs": [
  291. {
  292. "variable": "user",
  293. "label": "User ID",
  294. "description": "The user id that Garage files will be owned by.",
  295. "schema": {
  296. "type": "int",
  297. "min": 568,
  298. "default": 568,
  299. "required": true
  300. }
  301. },
  302. {
  303. "variable": "group",
  304. "label": "Group ID",
  305. "description": "The group id that Garage files will be owned by.",
  306. "schema": {
  307. "type": "int",
  308. "min": 568,
  309. "default": 568,
  310. "required": true
  311. }
  312. }
  313. ]
  314. }
  315. },
  316. {
  317. "variable": "network",
  318. "label": "",
  319. "group": "Network Configuration",
  320. "schema": {
  321. "type": "dict",
  322. "attrs": [
  323. {
  324. "variable": "web_port",
  325. "label": "WebUI Port",
  326. "description": "This port is used to access a third part Garage WebUI.</br>\nSet it to \"None\" to stop the WebUI from being started.\n",
  327. "schema": {
  328. "type": "dict",
  329. "attrs": [
  330. {
  331. "variable": "bind_mode",
  332. "label": "Port Bind Mode",
  333. "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",
  334. "schema": {
  335. "type": "string",
  336. "default": "published",
  337. "enum": [
  338. {
  339. "value": "published",
  340. "description": "Publish port on the host for external access"
  341. },
  342. {
  343. "value": "exposed",
  344. "description": "Expose port for inter-container communication"
  345. },
  346. {
  347. "value": "",
  348. "description": "None"
  349. }
  350. ]
  351. }
  352. },
  353. {
  354. "variable": "port_number",
  355. "label": "Port Number",
  356. "schema": {
  357. "type": "int",
  358. "default": 30186,
  359. "min": 1,
  360. "max": 65535,
  361. "required": true
  362. }
  363. },
  364. {
  365. "variable": "host_ips",
  366. "label": "Host IPs",
  367. "description": "IPs on the host to bind this port",
  368. "schema": {
  369. "type": "list",
  370. "show_if": [
  371. [
  372. "bind_mode",
  373. "=",
  374. "published"
  375. ]
  376. ],
  377. "default": [],
  378. "items": [
  379. {
  380. "variable": "host_ip",
  381. "label": "Host IP",
  382. "schema": {
  383. "type": "string",
  384. "required": true,
  385. "$ref": [
  386. "definitions/node_bind_ip"
  387. ]
  388. }
  389. }
  390. ]
  391. }
  392. }
  393. ]
  394. }
  395. },
  396. {
  397. "variable": "rpc_port",
  398. "label": "RPC Port",
  399. "schema": {
  400. "type": "dict",
  401. "attrs": [
  402. {
  403. "variable": "bind_mode",
  404. "label": "Port Bind Mode",
  405. "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",
  406. "schema": {
  407. "type": "string",
  408. "default": "published",
  409. "enum": [
  410. {
  411. "value": "published",
  412. "description": "Publish port on the host for external access"
  413. },
  414. {
  415. "value": "exposed",
  416. "description": "Expose port for inter-container communication"
  417. },
  418. {
  419. "value": "",
  420. "description": "None"
  421. }
  422. ]
  423. }
  424. },
  425. {
  426. "variable": "port_number",
  427. "label": "Port Number",
  428. "schema": {
  429. "type": "int",
  430. "default": 30187,
  431. "min": 1,
  432. "max": 65535,
  433. "required": true
  434. }
  435. },
  436. {
  437. "variable": "host_ips",
  438. "label": "Host IPs",
  439. "description": "IPs on the host to bind this port",
  440. "schema": {
  441. "type": "list",
  442. "show_if": [
  443. [
  444. "bind_mode",
  445. "=",
  446. "published"
  447. ]
  448. ],
  449. "default": [],
  450. "items": [
  451. {
  452. "variable": "host_ip",
  453. "label": "Host IP",
  454. "schema": {
  455. "type": "string",
  456. "required": true,
  457. "$ref": [
  458. "definitions/node_bind_ip"
  459. ]
  460. }
  461. }
  462. ]
  463. }
  464. }
  465. ]
  466. }
  467. },
  468. {
  469. "variable": "s3_port",
  470. "label": "S3 API Port",
  471. "description": "This port is used to access the S3 API.",
  472. "schema": {
  473. "type": "dict",
  474. "attrs": [
  475. {
  476. "variable": "bind_mode",
  477. "label": "Port Bind Mode",
  478. "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",
  479. "schema": {
  480. "type": "string",
  481. "default": "published",
  482. "enum": [
  483. {
  484. "value": "published",
  485. "description": "Publish port on the host for external access"
  486. },
  487. {
  488. "value": "exposed",
  489. "description": "Expose port for inter-container communication"
  490. },
  491. {
  492. "value": "",
  493. "description": "None"
  494. }
  495. ]
  496. }
  497. },
  498. {
  499. "variable": "port_number",
  500. "label": "Port Number",
  501. "schema": {
  502. "type": "int",
  503. "default": 30188,
  504. "min": 1,
  505. "max": 65535,
  506. "required": true
  507. }
  508. },
  509. {
  510. "variable": "host_ips",
  511. "label": "Host IPs",
  512. "description": "IPs on the host to bind this port",
  513. "schema": {
  514. "type": "list",
  515. "show_if": [
  516. [
  517. "bind_mode",
  518. "=",
  519. "published"
  520. ]
  521. ],
  522. "default": [],
  523. "items": [
  524. {
  525. "variable": "host_ip",
  526. "label": "Host IP",
  527. "schema": {
  528. "type": "string",
  529. "required": true,
  530. "$ref": [
  531. "definitions/node_bind_ip"
  532. ]
  533. }
  534. }
  535. ]
  536. }
  537. }
  538. ]
  539. }
  540. },
  541. {
  542. "variable": "s3_web_port",
  543. "label": "S3 Web Port",
  544. "description": "This port is used when serving websites via S3.",
  545. "schema": {
  546. "type": "dict",
  547. "attrs": [
  548. {
  549. "variable": "bind_mode",
  550. "label": "Port Bind Mode",
  551. "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",
  552. "schema": {
  553. "type": "string",
  554. "default": "published",
  555. "enum": [
  556. {
  557. "value": "published",
  558. "description": "Publish port on the host for external access"
  559. },
  560. {
  561. "value": "exposed",
  562. "description": "Expose port for inter-container communication"
  563. },
  564. {
  565. "value": "",
  566. "description": "None"
  567. }
  568. ]
  569. }
  570. },
  571. {
  572. "variable": "port_number",
  573. "label": "Port Number",
  574. "schema": {
  575. "type": "int",
  576. "default": 30189,
  577. "min": 1,
  578. "max": 65535,
  579. "required": true
  580. }
  581. },
  582. {
  583. "variable": "host_ips",
  584. "label": "Host IPs",
  585. "description": "IPs on the host to bind this port",
  586. "schema": {
  587. "type": "list",
  588. "show_if": [
  589. [
  590. "bind_mode",
  591. "=",
  592. "published"
  593. ]
  594. ],
  595. "default": [],
  596. "items": [
  597. {
  598. "variable": "host_ip",
  599. "label": "Host IP",
  600. "schema": {
  601. "type": "string",
  602. "required": true,
  603. "$ref": [
  604. "definitions/node_bind_ip"
  605. ]
  606. }
  607. }
  608. ]
  609. }
  610. }
  611. ]
  612. }
  613. },
  614. {
  615. "variable": "admin_port",
  616. "label": "Admin Port",
  617. "schema": {
  618. "type": "dict",
  619. "attrs": [
  620. {
  621. "variable": "bind_mode",
  622. "label": "Port Bind Mode",
  623. "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",
  624. "schema": {
  625. "type": "string",
  626. "default": "published",
  627. "enum": [
  628. {
  629. "value": "published",
  630. "description": "Publish port on the host for external access"
  631. },
  632. {
  633. "value": "exposed",
  634. "description": "Expose port for inter-container communication"
  635. },
  636. {
  637. "value": "",
  638. "description": "None"
  639. }
  640. ]
  641. }
  642. },
  643. {
  644. "variable": "port_number",
  645. "label": "Port Number",
  646. "schema": {
  647. "type": "int",
  648. "default": 30190,
  649. "min": 1,
  650. "max": 65535,
  651. "required": true
  652. }
  653. },
  654. {
  655. "variable": "host_ips",
  656. "label": "Host IPs",
  657. "description": "IPs on the host to bind this port",
  658. "schema": {
  659. "type": "list",
  660. "show_if": [
  661. [
  662. "bind_mode",
  663. "=",
  664. "published"
  665. ]
  666. ],
  667. "default": [],
  668. "items": [
  669. {
  670. "variable": "host_ip",
  671. "label": "Host IP",
  672. "schema": {
  673. "type": "string",
  674. "required": true,
  675. "$ref": [
  676. "definitions/node_bind_ip"
  677. ]
  678. }
  679. }
  680. ]
  681. }
  682. }
  683. ]
  684. }
  685. }
  686. ]
  687. }
  688. },
  689. {
  690. "variable": "storage",
  691. "label": "",
  692. "group": "Storage Configuration",
  693. "schema": {
  694. "type": "dict",
  695. "attrs": [
  696. {
  697. "variable": "config",
  698. "label": "Configuration Storage",
  699. "schema": {
  700. "type": "dict",
  701. "attrs": [
  702. {
  703. "variable": "type",
  704. "label": "Type",
  705. "description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.\n",
  706. "schema": {
  707. "type": "string",
  708. "required": true,
  709. "default": "ix_volume",
  710. "enum": [
  711. {
  712. "value": "host_path",
  713. "description": "Host Path (Path that already exists on the system)"
  714. },
  715. {
  716. "value": "ix_volume",
  717. "description": "ixVolume (Dataset created automatically by the system)"
  718. }
  719. ]
  720. }
  721. },
  722. {
  723. "variable": "ix_volume_config",
  724. "label": "ixVolume Configuration",
  725. "description": "The configuration for the ixVolume dataset.",
  726. "schema": {
  727. "type": "dict",
  728. "show_if": [
  729. [
  730. "type",
  731. "=",
  732. "ix_volume"
  733. ]
  734. ],
  735. "$ref": [
  736. "normalize/ix_volume"
  737. ],
  738. "attrs": [
  739. {
  740. "variable": "acl_enable",
  741. "label": "Enable ACL",
  742. "description": "Enable ACL for the storage.",
  743. "schema": {
  744. "type": "boolean",
  745. "default": false
  746. }
  747. },
  748. {
  749. "variable": "dataset_name",
  750. "label": "Dataset Name",
  751. "description": "The name of the dataset to use for storage.",
  752. "schema": {
  753. "type": "string",
  754. "required": true,
  755. "hidden": true,
  756. "default": "config"
  757. }
  758. },
  759. {
  760. "variable": "acl_entries",
  761. "label": "ACL Configuration",
  762. "schema": {
  763. "type": "dict",
  764. "show_if": [
  765. [
  766. "acl_enable",
  767. "=",
  768. true
  769. ]
  770. ],
  771. "attrs": []
  772. }
  773. }
  774. ]
  775. }
  776. },
  777. {
  778. "variable": "host_path_config",
  779. "label": "Host Path Configuration",
  780. "schema": {
  781. "type": "dict",
  782. "show_if": [
  783. [
  784. "type",
  785. "=",
  786. "host_path"
  787. ]
  788. ],
  789. "attrs": [
  790. {
  791. "variable": "acl_enable",
  792. "label": "Enable ACL",
  793. "description": "Enable ACL for the storage.",
  794. "schema": {
  795. "type": "boolean",
  796. "default": false
  797. }
  798. },
  799. {
  800. "variable": "acl",
  801. "label": "ACL Configuration",
  802. "schema": {
  803. "type": "dict",
  804. "show_if": [
  805. [
  806. "acl_enable",
  807. "=",
  808. true
  809. ]
  810. ],
  811. "attrs": [],
  812. "$ref": [
  813. "normalize/acl"
  814. ]
  815. }
  816. },
  817. {
  818. "variable": "path",
  819. "label": "Host Path",
  820. "description": "The host path to use for storage.",
  821. "schema": {
  822. "type": "hostpath",
  823. "show_if": [
  824. [
  825. "acl_enable",
  826. "=",
  827. false
  828. ]
  829. ],
  830. "required": true
  831. }
  832. }
  833. ]
  834. }
  835. }
  836. ]
  837. }
  838. },
  839. {
  840. "variable": "metadata",
  841. "label": "Metadata Storage",
  842. "description": "Suggested to use SSD or NVMe storage for metadata.",
  843. "schema": {
  844. "type": "dict",
  845. "attrs": [
  846. {
  847. "variable": "type",
  848. "label": "Type",
  849. "description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.\n",
  850. "schema": {
  851. "type": "string",
  852. "required": true,
  853. "default": "ix_volume",
  854. "enum": [
  855. {
  856. "value": "host_path",
  857. "description": "Host Path (Path that already exists on the system)"
  858. },
  859. {
  860. "value": "ix_volume",
  861. "description": "ixVolume (Dataset created automatically by the system)"
  862. }
  863. ]
  864. }
  865. },
  866. {
  867. "variable": "ix_volume_config",
  868. "label": "ixVolume Configuration",
  869. "description": "The configuration for the ixVolume dataset.",
  870. "schema": {
  871. "type": "dict",
  872. "show_if": [
  873. [
  874. "type",
  875. "=",
  876. "ix_volume"
  877. ]
  878. ],
  879. "$ref": [
  880. "normalize/ix_volume"
  881. ],
  882. "attrs": [
  883. {
  884. "variable": "acl_enable",
  885. "label": "Enable ACL",
  886. "description": "Enable ACL for the storage.",
  887. "schema": {
  888. "type": "boolean",
  889. "default": false
  890. }
  891. },
  892. {
  893. "variable": "dataset_name",
  894. "label": "Dataset Name",
  895. "description": "The name of the dataset to use for storage.",
  896. "schema": {
  897. "type": "string",
  898. "required": true,
  899. "hidden": true,
  900. "default": "metadata"
  901. }
  902. },
  903. {
  904. "variable": "acl_entries",
  905. "label": "ACL Configuration",
  906. "schema": {
  907. "type": "dict",
  908. "show_if": [
  909. [
  910. "acl_enable",
  911. "=",
  912. true
  913. ]
  914. ],
  915. "attrs": []
  916. }
  917. }
  918. ]
  919. }
  920. },
  921. {
  922. "variable": "host_path_config",
  923. "label": "Host Path Configuration",
  924. "schema": {
  925. "type": "dict",
  926. "show_if": [
  927. [
  928. "type",
  929. "=",
  930. "host_path"
  931. ]
  932. ],
  933. "attrs": [
  934. {
  935. "variable": "acl_enable",
  936. "label": "Enable ACL",
  937. "description": "Enable ACL for the storage.",
  938. "schema": {
  939. "type": "boolean",
  940. "default": false
  941. }
  942. },
  943. {
  944. "variable": "acl",
  945. "label": "ACL Configuration",
  946. "schema": {
  947. "type": "dict",
  948. "show_if": [
  949. [
  950. "acl_enable",
  951. "=",
  952. true
  953. ]
  954. ],
  955. "attrs": [],
  956. "$ref": [
  957. "normalize/acl"
  958. ]
  959. }
  960. },
  961. {
  962. "variable": "path",
  963. "label": "Host Path",
  964. "description": "The host path to use for storage.",
  965. "schema": {
  966. "type": "hostpath",
  967. "show_if": [
  968. [
  969. "acl_enable",
  970. "=",
  971. false
  972. ]
  973. ],
  974. "required": true
  975. }
  976. }
  977. ]
  978. }
  979. }
  980. ]
  981. }
  982. },
  983. {
  984. "variable": "data",
  985. "label": "Data Storage",
  986. "description": "Can use HDD, SSD or NVMe storage for data.",
  987. "schema": {
  988. "type": "dict",
  989. "attrs": [
  990. {
  991. "variable": "type",
  992. "label": "Type",
  993. "description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.\n",
  994. "schema": {
  995. "type": "string",
  996. "required": true,
  997. "default": "ix_volume",
  998. "enum": [
  999. {
  1000. "value": "host_path",
  1001. "description": "Host Path (Path that already exists on the system)"
  1002. },
  1003. {
  1004. "value": "ix_volume",
  1005. "description": "ixVolume (Dataset created automatically by the system)"
  1006. }
  1007. ]
  1008. }
  1009. },
  1010. {
  1011. "variable": "ix_volume_config",
  1012. "label": "ixVolume Configuration",
  1013. "description": "The configuration for the ixVolume dataset.",
  1014. "schema": {
  1015. "type": "dict",
  1016. "show_if": [
  1017. [
  1018. "type",
  1019. "=",
  1020. "ix_volume"
  1021. ]
  1022. ],
  1023. "$ref": [
  1024. "normalize/ix_volume"
  1025. ],
  1026. "attrs": [
  1027. {
  1028. "variable": "acl_enable",
  1029. "label": "Enable ACL",
  1030. "description": "Enable ACL for the storage.",
  1031. "schema": {
  1032. "type": "boolean",
  1033. "default": false
  1034. }
  1035. },
  1036. {
  1037. "variable": "dataset_name",
  1038. "label": "Dataset Name",
  1039. "description": "The name of the dataset to use for storage.",
  1040. "schema": {
  1041. "type": "string",
  1042. "required": true,
  1043. "hidden": true,
  1044. "default": "metadata"
  1045. }
  1046. },
  1047. {
  1048. "variable": "acl_entries",
  1049. "label": "ACL Configuration",
  1050. "schema": {
  1051. "type": "dict",
  1052. "show_if": [
  1053. [
  1054. "acl_enable",
  1055. "=",
  1056. true
  1057. ]
  1058. ],
  1059. "attrs": []
  1060. }
  1061. }
  1062. ]
  1063. }
  1064. },
  1065. {
  1066. "variable": "host_path_config",
  1067. "label": "Host Path Configuration",
  1068. "schema": {
  1069. "type": "dict",
  1070. "show_if": [
  1071. [
  1072. "type",
  1073. "=",
  1074. "host_path"
  1075. ]
  1076. ],
  1077. "attrs": [
  1078. {
  1079. "variable": "acl_enable",
  1080. "label": "Enable ACL",
  1081. "description": "Enable ACL for the storage.",
  1082. "schema": {
  1083. "type": "boolean",
  1084. "default": false
  1085. }
  1086. },
  1087. {
  1088. "variable": "acl",
  1089. "label": "ACL Configuration",
  1090. "schema": {
  1091. "type": "dict",
  1092. "show_if": [
  1093. [
  1094. "acl_enable",
  1095. "=",
  1096. true
  1097. ]
  1098. ],
  1099. "attrs": [],
  1100. "$ref": [
  1101. "normalize/acl"
  1102. ]
  1103. }
  1104. },
  1105. {
  1106. "variable": "path",
  1107. "label": "Host Path",
  1108. "description": "The host path to use for storage.",
  1109. "schema": {
  1110. "type": "hostpath",
  1111. "show_if": [
  1112. [
  1113. "acl_enable",
  1114. "=",
  1115. false
  1116. ]
  1117. ],
  1118. "required": true
  1119. }
  1120. }
  1121. ]
  1122. }
  1123. }
  1124. ]
  1125. }
  1126. },
  1127. {
  1128. "variable": "metadata_snapshots",
  1129. "label": "Metadata Snapshots Storage",
  1130. "description": "Can use HDD, SSD or NVMe storage for metadata snapshots.",
  1131. "schema": {
  1132. "type": "dict",
  1133. "attrs": [
  1134. {
  1135. "variable": "type",
  1136. "label": "Type",
  1137. "description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.\n",
  1138. "schema": {
  1139. "type": "string",
  1140. "required": true,
  1141. "default": "ix_volume",
  1142. "enum": [
  1143. {
  1144. "value": "host_path",
  1145. "description": "Host Path (Path that already exists on the system)"
  1146. },
  1147. {
  1148. "value": "ix_volume",
  1149. "description": "ixVolume (Dataset created automatically by the system)"
  1150. }
  1151. ]
  1152. }
  1153. },
  1154. {
  1155. "variable": "ix_volume_config",
  1156. "label": "ixVolume Configuration",
  1157. "description": "The configuration for the ixVolume dataset.",
  1158. "schema": {
  1159. "type": "dict",
  1160. "show_if": [
  1161. [
  1162. "type",
  1163. "=",
  1164. "ix_volume"
  1165. ]
  1166. ],
  1167. "$ref": [
  1168. "normalize/ix_volume"
  1169. ],
  1170. "attrs": [
  1171. {
  1172. "variable": "acl_enable",
  1173. "label": "Enable ACL",
  1174. "description": "Enable ACL for the storage.",
  1175. "schema": {
  1176. "type": "boolean",
  1177. "default": false
  1178. }
  1179. },
  1180. {
  1181. "variable": "dataset_name",
  1182. "label": "Dataset Name",
  1183. "description": "The name of the dataset to use for storage.",
  1184. "schema": {
  1185. "type": "string",
  1186. "required": true,
  1187. "hidden": true,
  1188. "default": "metadata_snapshots"
  1189. }
  1190. },
  1191. {
  1192. "variable": "acl_entries",
  1193. "label": "ACL Configuration",
  1194. "schema": {
  1195. "type": "dict",
  1196. "show_if": [
  1197. [
  1198. "acl_enable",
  1199. "=",
  1200. true
  1201. ]
  1202. ],
  1203. "attrs": []
  1204. }
  1205. }
  1206. ]
  1207. }
  1208. },
  1209. {
  1210. "variable": "host_path_config",
  1211. "label": "Host Path Configuration",
  1212. "schema": {
  1213. "type": "dict",
  1214. "show_if": [
  1215. [
  1216. "type",
  1217. "=",
  1218. "host_path"
  1219. ]
  1220. ],
  1221. "attrs": [
  1222. {
  1223. "variable": "acl_enable",
  1224. "label": "Enable ACL",
  1225. "description": "Enable ACL for the storage.",
  1226. "schema": {
  1227. "type": "boolean",
  1228. "default": false
  1229. }
  1230. },
  1231. {
  1232. "variable": "acl",
  1233. "label": "ACL Configuration",
  1234. "schema": {
  1235. "type": "dict",
  1236. "show_if": [
  1237. [
  1238. "acl_enable",
  1239. "=",
  1240. true
  1241. ]
  1242. ],
  1243. "attrs": [],
  1244. "$ref": [
  1245. "normalize/acl"
  1246. ]
  1247. }
  1248. },
  1249. {
  1250. "variable": "path",
  1251. "label": "Host Path",
  1252. "description": "The host path to use for storage.",
  1253. "schema": {
  1254. "type": "hostpath",
  1255. "show_if": [
  1256. [
  1257. "acl_enable",
  1258. "=",
  1259. false
  1260. ]
  1261. ],
  1262. "required": true
  1263. }
  1264. }
  1265. ]
  1266. }
  1267. }
  1268. ]
  1269. }
  1270. },
  1271. {
  1272. "variable": "additional_storage",
  1273. "label": "Additional Storage",
  1274. "schema": {
  1275. "type": "list",
  1276. "default": [],
  1277. "items": [
  1278. {
  1279. "variable": "storageEntry",
  1280. "label": "Storage Entry",
  1281. "schema": {
  1282. "type": "dict",
  1283. "attrs": [
  1284. {
  1285. "variable": "type",
  1286. "label": "Type",
  1287. "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",
  1288. "schema": {
  1289. "type": "string",
  1290. "required": true,
  1291. "default": "ix_volume",
  1292. "enum": [
  1293. {
  1294. "value": "host_path",
  1295. "description": "Host Path (Path that already exists on the system)"
  1296. },
  1297. {
  1298. "value": "ix_volume",
  1299. "description": "ixVolume (Dataset created automatically by the system)"
  1300. },
  1301. {
  1302. "value": "cifs",
  1303. "description": "SMB/CIFS Share (Mounts a volume to a SMB share)"
  1304. }
  1305. ]
  1306. }
  1307. },
  1308. {
  1309. "variable": "read_only",
  1310. "label": "Read Only",
  1311. "description": "Mount the volume as read only.",
  1312. "schema": {
  1313. "type": "boolean",
  1314. "default": false
  1315. }
  1316. },
  1317. {
  1318. "variable": "mount_path",
  1319. "label": "Mount Path",
  1320. "description": "The path inside the container to mount the storage.",
  1321. "schema": {
  1322. "type": "path",
  1323. "required": true
  1324. }
  1325. },
  1326. {
  1327. "variable": "host_path_config",
  1328. "label": "Host Path Configuration",
  1329. "schema": {
  1330. "type": "dict",
  1331. "show_if": [
  1332. [
  1333. "type",
  1334. "=",
  1335. "host_path"
  1336. ]
  1337. ],
  1338. "attrs": [
  1339. {
  1340. "variable": "acl_enable",
  1341. "label": "Enable ACL",
  1342. "description": "Enable ACL for the storage.",
  1343. "schema": {
  1344. "type": "boolean",
  1345. "default": false
  1346. }
  1347. },
  1348. {
  1349. "variable": "acl",
  1350. "label": "ACL Configuration",
  1351. "schema": {
  1352. "type": "dict",
  1353. "show_if": [
  1354. [
  1355. "acl_enable",
  1356. "=",
  1357. true
  1358. ]
  1359. ],
  1360. "attrs": [],
  1361. "$ref": [
  1362. "normalize/acl"
  1363. ]
  1364. }
  1365. },
  1366. {
  1367. "variable": "path",
  1368. "label": "Host Path",
  1369. "description": "The host path to use for storage.",
  1370. "schema": {
  1371. "type": "hostpath",
  1372. "show_if": [
  1373. [
  1374. "acl_enable",
  1375. "=",
  1376. false
  1377. ]
  1378. ],
  1379. "required": true
  1380. }
  1381. }
  1382. ]
  1383. }
  1384. },
  1385. {
  1386. "variable": "ix_volume_config",
  1387. "label": "ixVolume Configuration",
  1388. "description": "The configuration for the ixVolume dataset.",
  1389. "schema": {
  1390. "type": "dict",
  1391. "show_if": [
  1392. [
  1393. "type",
  1394. "=",
  1395. "ix_volume"
  1396. ]
  1397. ],
  1398. "$ref": [
  1399. "normalize/ix_volume"
  1400. ],
  1401. "attrs": [
  1402. {
  1403. "variable": "acl_enable",
  1404. "label": "Enable ACL",
  1405. "description": "Enable ACL for the storage.",
  1406. "schema": {
  1407. "type": "boolean",
  1408. "default": false
  1409. }
  1410. },
  1411. {
  1412. "variable": "dataset_name",
  1413. "label": "Dataset Name",
  1414. "description": "The name of the dataset to use for storage.",
  1415. "schema": {
  1416. "type": "string",
  1417. "required": true,
  1418. "default": "storage_entry"
  1419. }
  1420. },
  1421. {
  1422. "variable": "acl_entries",
  1423. "label": "ACL Configuration",
  1424. "schema": {
  1425. "type": "dict",
  1426. "show_if": [
  1427. [
  1428. "acl_enable",
  1429. "=",
  1430. true
  1431. ]
  1432. ],
  1433. "attrs": [],
  1434. "$ref": [
  1435. "normalize/acl"
  1436. ]
  1437. }
  1438. }
  1439. ]
  1440. }
  1441. },
  1442. {
  1443. "variable": "cifs_config",
  1444. "label": "SMB Configuration",
  1445. "description": "The configuration for the SMB dataset.",
  1446. "schema": {
  1447. "type": "dict",
  1448. "show_if": [
  1449. [
  1450. "type",
  1451. "=",
  1452. "cifs"
  1453. ]
  1454. ],
  1455. "attrs": [
  1456. {
  1457. "variable": "server",
  1458. "label": "Server",
  1459. "description": "The server to mount the SMB share.",
  1460. "schema": {
  1461. "type": "string",
  1462. "required": true
  1463. }
  1464. },
  1465. {
  1466. "variable": "path",
  1467. "label": "Path",
  1468. "description": "The path to mount the SMB share.",
  1469. "schema": {
  1470. "type": "string",
  1471. "required": true
  1472. }
  1473. },
  1474. {
  1475. "variable": "username",
  1476. "label": "Username",
  1477. "description": "The username to use for the SMB share.",
  1478. "schema": {
  1479. "type": "string",
  1480. "required": true
  1481. }
  1482. },
  1483. {
  1484. "variable": "password",
  1485. "label": "Password",
  1486. "description": "The password to use for the SMB share.",
  1487. "schema": {
  1488. "type": "string",
  1489. "required": true,
  1490. "private": true
  1491. }
  1492. },
  1493. {
  1494. "variable": "domain",
  1495. "label": "Domain",
  1496. "description": "The domain to use for the SMB share.",
  1497. "schema": {
  1498. "type": "string"
  1499. }
  1500. }
  1501. ]
  1502. }
  1503. }
  1504. ]
  1505. }
  1506. }
  1507. ]
  1508. }
  1509. }
  1510. ]
  1511. }
  1512. },
  1513. {
  1514. "variable": "labels",
  1515. "label": "",
  1516. "group": "Labels Configuration",
  1517. "schema": {
  1518. "type": "list",
  1519. "default": [],
  1520. "items": [
  1521. {
  1522. "variable": "label",
  1523. "label": "Label",
  1524. "schema": {
  1525. "type": "dict",
  1526. "attrs": [
  1527. {
  1528. "variable": "key",
  1529. "label": "Key",
  1530. "schema": {
  1531. "type": "string",
  1532. "required": true
  1533. }
  1534. },
  1535. {
  1536. "variable": "value",
  1537. "label": "Value",
  1538. "schema": {
  1539. "type": "string",
  1540. "required": true
  1541. }
  1542. },
  1543. {
  1544. "variable": "containers",
  1545. "label": "Containers",
  1546. "description": "Containers where the label should be applied",
  1547. "schema": {
  1548. "type": "list",
  1549. "items": [
  1550. {
  1551. "variable": "container",
  1552. "label": "Container",
  1553. "schema": {
  1554. "type": "string",
  1555. "required": true,
  1556. "enum": [
  1557. {
  1558. "value": "garage",
  1559. "description": "garage"
  1560. },
  1561. {
  1562. "value": "web",
  1563. "description": "web"
  1564. }
  1565. ]
  1566. }
  1567. }
  1568. ]
  1569. }
  1570. }
  1571. ]
  1572. }
  1573. }
  1574. ]
  1575. }
  1576. },
  1577. {
  1578. "variable": "resources",
  1579. "label": "",
  1580. "group": "Resources Configuration",
  1581. "schema": {
  1582. "type": "dict",
  1583. "attrs": [
  1584. {
  1585. "variable": "limits",
  1586. "label": "Limits",
  1587. "schema": {
  1588. "type": "dict",
  1589. "attrs": [
  1590. {
  1591. "variable": "cpus",
  1592. "label": "CPUs",
  1593. "description": "CPUs limit for Garage.",
  1594. "schema": {
  1595. "type": "int",
  1596. "default": 2,
  1597. "required": true
  1598. }
  1599. },
  1600. {
  1601. "variable": "memory",
  1602. "label": "Memory (in MB)",
  1603. "description": "Memory limit for Garage.",
  1604. "schema": {
  1605. "type": "int",
  1606. "default": 4096,
  1607. "required": true
  1608. }
  1609. }
  1610. ]
  1611. }
  1612. }
  1613. ]
  1614. }
  1615. }
  1616. ]
  1617. },
  1618. "readme": "<h1>Garage</h1> <p><a href=\"https://garagehq.deuxfleurs.fr/\">Garage</a> - An open-source distributed object storage service tailored for self-hosting</p>",
  1619. "changelog": null,
  1620. "chart_metadata": {
  1621. "app_version": "v2.0.0",
  1622. "capabilities": [],
  1623. "categories": [
  1624. "storage"
  1625. ],
  1626. "changelog_url": "https://git.deuxfleurs.fr/Deuxfleurs/garage/releases",
  1627. "date_added": "2025-06-04",
  1628. "description": "An open-source distributed object storage service tailored for self-hosting.",
  1629. "home": "https://garagehq.deuxfleurs.fr/",
  1630. "host_mounts": [],
  1631. "icon": "https://media.sys.truenas.net/apps/garage/icons/icon.svg",
  1632. "keywords": [
  1633. "garage",
  1634. "object storage"
  1635. ],
  1636. "lib_version": "2.1.49",
  1637. "lib_version_hash": "e71e6b0122c9446fa5ea6fb07e7eb01b11fb42d549a19845426bbd7e21a42634",
  1638. "maintainers": [
  1639. {
  1640. "email": "dev@ixsystems.com",
  1641. "name": "truenas",
  1642. "url": "https://www.truenas.com/"
  1643. }
  1644. ],
  1645. "name": "garage",
  1646. "run_as_context": [
  1647. {
  1648. "description": "Garage runs as any non-root user.",
  1649. "gid": 568,
  1650. "group_name": "garage",
  1651. "uid": 568,
  1652. "user_name": "garage"
  1653. },
  1654. {
  1655. "description": "Garage Web runs as any non-root user.",
  1656. "gid": 568,
  1657. "group_name": "garage",
  1658. "uid": 568,
  1659. "user_name": "garage"
  1660. }
  1661. ],
  1662. "screenshots": [],
  1663. "sources": [
  1664. "https://garagehq.deuxfleurs.fr/",
  1665. "https://git.deuxfleurs.fr/Deuxfleurs/garage",
  1666. "https://hub.docker.com/r/dxflrs/garage",
  1667. "https://github.com/khairul169/garage-webui"
  1668. ],
  1669. "title": "Garage",
  1670. "train": "community",
  1671. "version": "1.0.8"
  1672. }
  1673. }
  1674. }