app_versions.json 58 KB

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