app_versions.json 81 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287
  1. {
  2. "1.0.7": {
  3. "healthy": true,
  4. "supported": true,
  5. "healthy_error": null,
  6. "location": "/__w/apps/apps/trains/community/bitcoind-knots/1.0.7",
  7. "last_update": "2025-09-05 20:13:30",
  8. "required_features": [],
  9. "human_version": "v29.1_1.0.7",
  10. "version": "1.0.7",
  11. "app_metadata": {
  12. "app_version": "v29.1",
  13. "capabilities": [],
  14. "categories": [
  15. "financial"
  16. ],
  17. "date_added": "2025-08-08",
  18. "description": "Run your personal node powered by Bitcoin Knots.",
  19. "home": "https://bitcoinknots.org",
  20. "host_mounts": [],
  21. "icon": "https://media.sys.truenas.net/apps/bitcoind-knots/icons/icon.png",
  22. "keywords": [
  23. "bitcoin",
  24. "cryptocurrency",
  25. "blockchain"
  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": "bitcoind-knots",
  37. "run_as_context": [
  38. {
  39. "description": "Bitcoin Node runs as any non-root user.",
  40. "gid": 568,
  41. "group_name": "bitcoind",
  42. "uid": 568,
  43. "user_name": "bitcoind"
  44. }
  45. ],
  46. "screenshots": [],
  47. "sources": [
  48. "https://bitcoinknots.org",
  49. "https://github.com/Retropex/docker-bitcoind-truenas"
  50. ],
  51. "title": "Bitcoin Knots",
  52. "train": "community",
  53. "version": "1.0.7"
  54. },
  55. "schema": {
  56. "groups": [
  57. {
  58. "name": "Bitcoin Knots Configuration",
  59. "description": "Configure Bitcoin Knots"
  60. },
  61. {
  62. "name": "User and Group Configuration",
  63. "description": "Configure User and Group for Bitcoin Knots"
  64. },
  65. {
  66. "name": "Network Configuration",
  67. "description": "Configure Network for Bitcoin Knots"
  68. },
  69. {
  70. "name": "Storage Configuration",
  71. "description": "Configure Storage for Bitcoin Knots"
  72. },
  73. {
  74. "name": "Labels Configuration",
  75. "description": "Configure Labels for Bitcoin Knots"
  76. },
  77. {
  78. "name": "Resources Configuration",
  79. "description": "Configure Resources for Bitcoin Knots"
  80. }
  81. ],
  82. "questions": [
  83. {
  84. "variable": "TZ",
  85. "label": "Timezone",
  86. "group": "Bitcoin Knots Configuration",
  87. "schema": {
  88. "type": "string",
  89. "default": "Etc/UTC",
  90. "required": true,
  91. "$ref": [
  92. "definitions/timezone"
  93. ]
  94. }
  95. },
  96. {
  97. "variable": "bitcoin",
  98. "label": "",
  99. "group": "Bitcoin Knots Configuration",
  100. "schema": {
  101. "type": "dict",
  102. "attrs": [
  103. {
  104. "variable": "rpc_user",
  105. "label": "RPC User",
  106. "description": "The username for RPC auth.",
  107. "schema": {
  108. "type": "string",
  109. "required": true,
  110. "default": "truenas"
  111. }
  112. },
  113. {
  114. "variable": "rpc_password",
  115. "label": "RPC Password",
  116. "description": "The password for RPC auth.",
  117. "schema": {
  118. "type": "string",
  119. "required": true,
  120. "private": true
  121. }
  122. },
  123. {
  124. "variable": "rpc_work_queue_size",
  125. "label": "RPC Work Queue Size",
  126. "description": "Set the maximum number of queued Remote Procedure Call (RPC) requests your node can\nhandle (e.g., from connected wallets or other apps), helping you strike a balance\nbetween performance and resource usage. Higher values can improve processing speed at\nthe cost of increased system resources.\n",
  127. "schema": {
  128. "type": "int",
  129. "required": true,
  130. "default": 128,
  131. "min": 0
  132. }
  133. },
  134. {
  135. "variable": "clearnet_outgoing_enabled",
  136. "label": "Clearnet Outgoing Connections",
  137. "description": "Connect to peers available on the clearnet (publicly accessible internet).",
  138. "schema": {
  139. "type": "boolean",
  140. "default": true
  141. }
  142. },
  143. {
  144. "variable": "clearnet_incoming_enabled",
  145. "label": "Clearnet Incoming Connections",
  146. "description": "Broadcast your node to the Bitcoin network to help other clearnet nodes access the\nblockchain. You may need to set up port forwarding on your router.\n",
  147. "schema": {
  148. "type": "boolean",
  149. "default": false
  150. }
  151. },
  152. {
  153. "variable": "tor_outgoing_enabled",
  154. "label": "Tor Outgoing Connections",
  155. "description": "Connect to peers available on the Tor network.",
  156. "schema": {
  157. "type": "boolean",
  158. "default": false
  159. }
  160. },
  161. {
  162. "variable": "clearnet_outgoing_via_tor_enabled",
  163. "label": "Route Clearnet Outgoing Connections Via Tor",
  164. "description": "Connect to peers available on the clearnet via Tor to preserve your anonymity at the\ncost of slightly less security.\n",
  165. "schema": {
  166. "type": "boolean",
  167. "default": false
  168. }
  169. },
  170. {
  171. "variable": "tor_incoming_enabled",
  172. "label": "Tor Incoming Connections",
  173. "description": "Broadcast your node to the Bitcoin network to help other Tor nodes access the\nblockchain.\n",
  174. "schema": {
  175. "type": "boolean",
  176. "default": false
  177. }
  178. },
  179. {
  180. "variable": "tor_incoming_address",
  181. "label": "Incoming Onion Address",
  182. "description": "Enter the local IP of this machine if you are running the Arti TrueNAS App.",
  183. "schema": {
  184. "type": "string",
  185. "required": true,
  186. "valid_chars": "^[a-zA-Z0-9]+\\.onion$",
  187. "valid_chars_error": "Invalid onion address.",
  188. "show_if": [
  189. [
  190. "tor_incoming_enabled",
  191. "=",
  192. true
  193. ]
  194. ]
  195. }
  196. },
  197. {
  198. "variable": "tor_ip",
  199. "label": "Tor IP",
  200. "description": "Enter the local IP of this machine if you are running the Arti TrueNAS App.</br>\nRequired if any of the following is enabled:\n- Tor Outgoing Connections\n- Tor Incoming Connections\n- Clearnet Outgoing Connections via Tor\n",
  201. "schema": {
  202. "type": "ipaddr"
  203. }
  204. },
  205. {
  206. "variable": "tor_port",
  207. "label": "Tor port",
  208. "description": "Required if any of the following is enabled:\n- Tor Outgoing Connections\n- Tor Incoming Connections\n- Clearnet Outgoing Connections via Tor\n",
  209. "schema": {
  210. "type": "int",
  211. "min": 1,
  212. "max": 65535
  213. }
  214. },
  215. {
  216. "variable": "i2p_outgoing_enabled",
  217. "label": "I2P Outgoing Connections",
  218. "description": "Connect to peers available on the I2P network.",
  219. "schema": {
  220. "type": "boolean",
  221. "default": false
  222. }
  223. },
  224. {
  225. "variable": "i2p_incoming_enabled",
  226. "label": "I2P Incoming Connections",
  227. "description": "Broadcast your node to the Bitcoin network to help other I2P nodes access the\nblockchain. Your I2P router has to have SAM bridge enabled.\n",
  228. "schema": {
  229. "type": "boolean",
  230. "default": false
  231. }
  232. },
  233. {
  234. "variable": "i2p_ip",
  235. "label": "I2P IP",
  236. "description": "Enter the local IP of this machine if you are running the Arti TrueNAS App.</br>\nRequired if any of the following is enabled:\n- I2P Outgoing Connections\n- I2P Incoming Connections\n",
  237. "schema": {
  238. "type": "ipaddr"
  239. }
  240. },
  241. {
  242. "variable": "i2p_port",
  243. "label": "I2P SAM port",
  244. "description": "Required if any of the following is enabled:\n- I2P Outgoing Connections\n- I2P Incoming Connections\n",
  245. "schema": {
  246. "type": "int",
  247. "min": 1,
  248. "max": 65535
  249. }
  250. },
  251. {
  252. "variable": "public_rest_api_enabled",
  253. "label": "Public REST API",
  254. "description": "Enabling the public REST API can help you connect certain wallets and apps to your node.\nHowever, because the REST API access is unauthenticated, it can lead to unauthorized\naccess, privacy degradation, and denial-of-service (DoS) attacks.\n",
  255. "schema": {
  256. "type": "boolean",
  257. "default": false
  258. }
  259. },
  260. {
  261. "variable": "peer_block_filters_enabled",
  262. "label": "Peer Block Filters",
  263. "description": "Share compact block filter data with connected light clients (like wallets) connected\nto your node, allowing them to get only the transaction information they are interested\nin from your node without having to download the entire blockchain.</br>\n\nNote: If you disable Peer Block Filters, you will need to also manually toggle off\nBlock Filter Index if you want to stop storing block filter data.\n",
  264. "schema": {
  265. "type": "boolean",
  266. "default": true
  267. }
  268. },
  269. {
  270. "variable": "block_filter_index_enabled",
  271. "label": "Block Filter Index",
  272. "description": "Store an index of compact block filters which allows faster wallet re-scanning. In\norder to serve compact block filters to peers, you must also enable Peer Block Filters\nabove.</br>\n\nNote: To use 'Block Filter Index' with a pruned node, you must enable it when you start\nthe 'Prune Old Blocks' process under the Optimization category. If your node is already\npruned and 'Block Filter Index' is off, enabling it will prevent your node from\nstarting. To fix this while keeping 'Block Filter Index' on, you will need to either\nreindex your node or turn off 'Prune Old Blocks'.\n",
  273. "schema": {
  274. "type": "boolean",
  275. "default": true
  276. }
  277. },
  278. {
  279. "variable": "peer_bloom_filters_enabled",
  280. "label": "Peer Bloom Filters",
  281. "description": "Enable support for BIP37, a feature used by older light clients (like wallets) to get\nonly the transaction information they are interested in from your node without having\nto download the entire blockchain.</br>\n\nNote: Bloom filters can have privacy and denial-of-service (DoS) risks, especially if\nyour node is publicly reachable; its use is discouraged in favour of the more modern\ncompact block filters.\n",
  282. "schema": {
  283. "type": "boolean",
  284. "default": true
  285. }
  286. },
  287. {
  288. "variable": "peer_ban_time",
  289. "label": "Peer Ban Time (seconds)",
  290. "description": "Set the duration (in seconds) that a peer will be banned from connecting to your node\nif they violate protocol rules or exhibit suspicious behavior. By adjusting ban time,\nyou can maintain your node's security and network integrity, while preventing repeat\noffenders from causing disruptions. A longer ban time increases the ban period,\ndiscouraging misbehavior, while a shorter ban time allows for quicker re-connections but\nmay require more frequent manual monitoring of peer activity.\n",
  291. "schema": {
  292. "type": "int",
  293. "required": true,
  294. "default": 86400,
  295. "min": 0
  296. }
  297. },
  298. {
  299. "variable": "max_peer_connections",
  300. "label": "Max Peer Connections",
  301. "description": "Set the maximum number of peers your node can connect to simultaneously. By managing\nthis, you can optimize your node's network usage and system resources based on your\ndevice's capacity. A higher value enables your node to maintain more connections,\npotentially improving network stability and data sharing. A lower value conserves\nsystem resources and bandwidth, which may be beneficial for devices with limited\ncapabilities.\n",
  302. "schema": {
  303. "type": "int",
  304. "required": true,
  305. "default": 125,
  306. "min": 0
  307. }
  308. },
  309. {
  310. "variable": "max_receive_buffer",
  311. "label": "Max Receive Buffer (KB)",
  312. "description": "Set the maximum amount of memory (in kilobytes) allocated for storing incoming data from\nother nodes in the network. A larger buffer size allows your node to handle more\nincoming data simultaneously, while a smaller size reduces memory consumption but may\nlimit the amount of data your node can process at once.\n",
  313. "schema": {
  314. "type": "int",
  315. "required": true,
  316. "default": 5000,
  317. "min": 0
  318. }
  319. },
  320. {
  321. "variable": "max_send_buffer",
  322. "label": "Max Send Buffer (KB)",
  323. "description": "Set the maximum memory (in kilobytes) dedicated to storing outgoing data sent to other\nnodes in the network. A larger buffer size enables your node to send more data\nsimultaneously, while a smaller size conserves memory but may restrict the volume of\ndata your node can transmit at once.\n",
  324. "schema": {
  325. "type": "int",
  326. "required": true,
  327. "default": 1000,
  328. "min": 0
  329. }
  330. },
  331. {
  332. "variable": "peer_timeout",
  333. "label": "Peer Timeout (seconds)",
  334. "description": "Set the maximum time (in seconds) that your node will wait for a response from a\nconnected peer before considering it unresponsive and disconnecting. Adjusting\npeer timeout helps you maintain stable connections with responsive peers while ensuring\nyour node doesn't waste resources on unresponsive ones. A shorter timeout value allows\nfor quicker disconnection from unresponsive peers, while a longer timeout provides more\ntime for slow-responding peers to maintain a connection.\n",
  335. "schema": {
  336. "type": "int",
  337. "required": true,
  338. "default": 60,
  339. "min": 0
  340. }
  341. },
  342. {
  343. "variable": "connection_timeout",
  344. "label": "Connection Timeout (milliseconds)",
  345. "description": "Set the maximum time (in milliseconds) that your node will wait for a response from a\nnewly connecting peer during the initial handshake process before considering it\nunresponsive and disconnecting. Fine-tuning it helps you ensure your node establishes\nstable connections with responsive peers while avoiding unresponsive ones. A shorter\ntimeout value leads to faster disconnection from unresponsive peers, while a longer\ntimeout allows more time for slow-responding peers to complete the handshake.\n",
  346. "schema": {
  347. "type": "int",
  348. "required": true,
  349. "default": 5000,
  350. "min": 0
  351. }
  352. },
  353. {
  354. "variable": "max_upload_target",
  355. "label": "Max Upload Target (MB/24h)",
  356. "description": "Limit the maximum amount of data (in MB) your node will upload to other peers in the\nnetwork within a 24-hour period. Setting this to 0 (default) means that there is no\nlimit. By adjusting it, you can optimize your node's bandwidth usage and maintain a\nbalance between sharing data with the network and conserving your internet resources.\nA higher upload target allows your node to contribute more data to the network, while a\nlower target helps you save bandwidth for other uses.\n",
  357. "schema": {
  358. "type": "int",
  359. "required": true,
  360. "default": 0,
  361. "min": 0
  362. }
  363. },
  364. {
  365. "variable": "cache_size",
  366. "label": "Cache Size (MB)",
  367. "description": "Choose the size of the UTXO set to store in RAM. A larger cache can speed up the initial\nsynchronization of your Bitcoin Knots, but after the initial sync is complete, a larger\ncache value does not significantly improve performance and may use more RAM than needed.\n",
  368. "schema": {
  369. "type": "int",
  370. "required": true,
  371. "default": 300,
  372. "min": 1
  373. }
  374. },
  375. {
  376. "variable": "prune_size",
  377. "label": "Prune Old Blocks (GB)",
  378. "description": "Save storage space by pruning (deleting) old blocks and keeping only a limited copy of\nthe blockchain. It may take some time for your node to be online after you turn on\npruning. If you turn off pruning after turning it on, you'll need to download the entire\nblockchain.<br />\n\nNote: A value of 0 disables pruning.\n",
  379. "schema": {
  380. "type": "int",
  381. "required": true,
  382. "default": 0,
  383. "min": 0
  384. }
  385. },
  386. {
  387. "variable": "op_return_txs_relay_enabled",
  388. "label": "Relay Transactions Containing Arbitrary Data",
  389. "description": "Relay transactions with OP_RETURN outputs.",
  390. "schema": {
  391. "type": "boolean",
  392. "default": true
  393. }
  394. },
  395. {
  396. "variable": "max_op_return_size",
  397. "label": "Max Allowed Size of Arbitrary Data in Transactions (bytes)",
  398. "description": "Set the maximum size of the data in OP_RETURN outputs that your node will relay.",
  399. "schema": {
  400. "type": "int",
  401. "required": true,
  402. "default": 42,
  403. "min": 0,
  404. "show_if": [
  405. [
  406. "op_return_txs_relay_enabled",
  407. "=",
  408. true
  409. ]
  410. ]
  411. }
  412. },
  413. {
  414. "variable": "bare_multisig_txs_relay_enabled",
  415. "label": "Relay Bare Multisig Transactions",
  416. "description": "Relay non-P2SH multisig transactions.",
  417. "schema": {
  418. "type": "boolean",
  419. "default": false
  420. }
  421. },
  422. {
  423. "variable": "max_mempool_size",
  424. "label": "Maximum Mempool Size (MB)",
  425. "description": "Set the maximum size that your node will allocate (in RAM) for storing unconfirmed\ntransactions before they are included in a block. By adjusting maxmempool, you can\noptimize your node's performance and balance memory usage based on your device's\ncapabilities. A larger maxmempool allows your node to store more unconfirmed\ntransactions, providing more accurate statistics on explorer apps like Mempool.\n",
  426. "schema": {
  427. "type": "int",
  428. "required": true,
  429. "default": 1024,
  430. "min": 1
  431. }
  432. },
  433. {
  434. "variable": "mempool_expiry",
  435. "label": "Mempool Expiration (hours)",
  436. "description": "Set the time threshold for unconfirmed transactions to remain in your node's mempool\nbefore being removed. By adjusting it, you can manage your node's memory usage and\nensure outdated, unconfirmed transactions are discarded. A shorter expiry time helps\nkeep your mempool up-to-date and reduces memory usage, while a longer expiry time allows\ntransactions to remain in the pool for an extended period in case of network congestion\nor delayed confirmations.\n",
  437. "schema": {
  438. "type": "int",
  439. "required": true,
  440. "default": 336,
  441. "min": 0
  442. }
  443. },
  444. {
  445. "variable": "mempool_persist_enabled",
  446. "label": "Persist Mempool",
  447. "description": "Saves unconfirmed transactions in your node's mempool when it's shutting down and\nreloads them upon startup. Enabling this setting helps maintain a consistent mempool and\nprevents the loss of unconfirmed transactions during a restart. Disabling this setting\nwill clear the mempool upon restart, which may reduce startup time but requires your\nnode to rebuild its mempool from scratch.\n",
  448. "schema": {
  449. "type": "boolean",
  450. "default": true
  451. }
  452. },
  453. {
  454. "variable": "max_orphan_txs",
  455. "label": "Max Orphan Transactions",
  456. "description": "Set the maximum number of orphan transactions (transactions missing one or more of their\ninputs) that your node will keep in memory. By fine-tuning it, you can optimize your\nnode's memory usage and manage its performance based on your device's capabilities. A\nlarger limit allows your node to store more orphan transactions, potentially increasing\nthe chances of finding missing inputs. A smaller limit conserves memory but will result\nin your node evicting some orphan transactions from memory when the limit is reached.\n",
  457. "schema": {
  458. "type": "int",
  459. "required": true,
  460. "default": 100,
  461. "min": 0
  462. }
  463. },
  464. {
  465. "variable": "additional_flags",
  466. "label": "Additional flags",
  467. "description": "Additional bitcoind commands can be provided here.\nIf you are unsure, leave this blank.\n",
  468. "schema": {
  469. "type": "list",
  470. "items": [
  471. {
  472. "variable": "flag",
  473. "label": "Flag",
  474. "schema": {
  475. "type": "string",
  476. "required": true
  477. }
  478. }
  479. ]
  480. }
  481. }
  482. ]
  483. }
  484. },
  485. {
  486. "variable": "run_as",
  487. "label": "",
  488. "group": "User and Group Configuration",
  489. "schema": {
  490. "type": "dict",
  491. "attrs": [
  492. {
  493. "variable": "user",
  494. "label": "User ID",
  495. "description": "The user id that Bitcoin Knots files will be owned by.",
  496. "schema": {
  497. "type": "int",
  498. "min": 568,
  499. "default": 568,
  500. "required": true
  501. }
  502. },
  503. {
  504. "variable": "group",
  505. "label": "Group ID",
  506. "description": "The group id that Bitcoin Knots files will be owned by.",
  507. "schema": {
  508. "type": "int",
  509. "min": 568,
  510. "default": 568,
  511. "required": true
  512. }
  513. }
  514. ]
  515. }
  516. },
  517. {
  518. "variable": "network",
  519. "label": "",
  520. "group": "Network Configuration",
  521. "schema": {
  522. "type": "dict",
  523. "attrs": [
  524. {
  525. "variable": "rpc_port",
  526. "label": "RPC Port",
  527. "description": "This is the RPC port which is useful for other apps like Electrs to communicate with.",
  528. "schema": {
  529. "type": "dict",
  530. "attrs": [
  531. {
  532. "variable": "bind_mode",
  533. "label": "Port Bind Mode",
  534. "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",
  535. "schema": {
  536. "type": "string",
  537. "default": "published",
  538. "enum": [
  539. {
  540. "value": "published",
  541. "description": "Publish port on the host for external access"
  542. },
  543. {
  544. "value": "exposed",
  545. "description": "Expose port for inter-container communication"
  546. },
  547. {
  548. "value": "",
  549. "description": "None"
  550. }
  551. ]
  552. }
  553. },
  554. {
  555. "variable": "port_number",
  556. "label": "Port Number",
  557. "schema": {
  558. "type": "int",
  559. "default": 30240,
  560. "min": 1,
  561. "max": 65535,
  562. "required": true
  563. }
  564. },
  565. {
  566. "variable": "host_ips",
  567. "label": "Host IPs",
  568. "description": "IPs on the host to bind this port",
  569. "schema": {
  570. "type": "list",
  571. "show_if": [
  572. [
  573. "bind_mode",
  574. "=",
  575. "published"
  576. ]
  577. ],
  578. "default": [],
  579. "items": [
  580. {
  581. "variable": "host_ip",
  582. "label": "Host IP",
  583. "schema": {
  584. "type": "string",
  585. "required": true,
  586. "$ref": [
  587. "definitions/node_bind_ip"
  588. ]
  589. }
  590. }
  591. ]
  592. }
  593. }
  594. ]
  595. }
  596. },
  597. {
  598. "variable": "p2p_clearnet_port",
  599. "label": "P2P Clearnet Port",
  600. "description": "The port used for your node to communicate blockchain data with other clearnet nodes.\nThis should be published for external access in most scenarios.\n",
  601. "schema": {
  602. "type": "dict",
  603. "attrs": [
  604. {
  605. "variable": "bind_mode",
  606. "label": "Port Bind Mode",
  607. "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",
  608. "schema": {
  609. "type": "string",
  610. "default": "published",
  611. "enum": [
  612. {
  613. "value": "published",
  614. "description": "Publish port on the host for external access"
  615. },
  616. {
  617. "value": "exposed",
  618. "description": "Expose port for inter-container communication"
  619. },
  620. {
  621. "value": "",
  622. "description": "None"
  623. }
  624. ]
  625. }
  626. },
  627. {
  628. "variable": "port_number",
  629. "label": "Port Number",
  630. "schema": {
  631. "type": "int",
  632. "default": 30241,
  633. "min": 1,
  634. "max": 65535,
  635. "required": true
  636. }
  637. },
  638. {
  639. "variable": "host_ips",
  640. "label": "Host IPs",
  641. "description": "IPs on the host to bind this port",
  642. "schema": {
  643. "type": "list",
  644. "show_if": [
  645. [
  646. "bind_mode",
  647. "=",
  648. "published"
  649. ]
  650. ],
  651. "default": [],
  652. "items": [
  653. {
  654. "variable": "host_ip",
  655. "label": "Host IP",
  656. "schema": {
  657. "type": "string",
  658. "required": true,
  659. "$ref": [
  660. "definitions/node_bind_ip"
  661. ]
  662. }
  663. }
  664. ]
  665. }
  666. }
  667. ]
  668. }
  669. },
  670. {
  671. "variable": "p2p_tor_port",
  672. "label": "P2P Tor Port",
  673. "description": "The port used for your node to communicate blockchain data with other Tor nodes.\nThis should be published for external access in most scenarios.\n",
  674. "schema": {
  675. "type": "dict",
  676. "attrs": [
  677. {
  678. "variable": "bind_mode",
  679. "label": "Port Bind Mode",
  680. "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",
  681. "schema": {
  682. "type": "string",
  683. "default": "",
  684. "enum": [
  685. {
  686. "value": "published",
  687. "description": "Publish port on the host for external access"
  688. },
  689. {
  690. "value": "exposed",
  691. "description": "Expose port for inter-container communication"
  692. },
  693. {
  694. "value": "",
  695. "description": "None"
  696. }
  697. ]
  698. }
  699. },
  700. {
  701. "variable": "port_number",
  702. "label": "Port Number",
  703. "schema": {
  704. "type": "int",
  705. "default": 30242,
  706. "min": 1,
  707. "max": 65535,
  708. "required": true
  709. }
  710. },
  711. {
  712. "variable": "host_ips",
  713. "label": "Host IPs",
  714. "description": "IPs on the host to bind this port",
  715. "schema": {
  716. "type": "list",
  717. "show_if": [
  718. [
  719. "bind_mode",
  720. "=",
  721. "published"
  722. ]
  723. ],
  724. "default": [],
  725. "items": [
  726. {
  727. "variable": "host_ip",
  728. "label": "Host IP",
  729. "schema": {
  730. "type": "string",
  731. "required": true,
  732. "$ref": [
  733. "definitions/node_bind_ip"
  734. ]
  735. }
  736. }
  737. ]
  738. }
  739. }
  740. ]
  741. }
  742. }
  743. ]
  744. }
  745. },
  746. {
  747. "variable": "storage",
  748. "label": "",
  749. "group": "Storage Configuration",
  750. "schema": {
  751. "type": "dict",
  752. "attrs": [
  753. {
  754. "variable": "bitcoin",
  755. "label": "Bitcoin Storage Location",
  756. "description": "Use SSDs for reasonable performance.\nYou will have a very bad time trying to sync a Bitcoin Knots on HDDs.</br>\nWe recommend at least 800GB of free space if pruning is disabled.\n",
  757. "schema": {
  758. "type": "dict",
  759. "attrs": [
  760. {
  761. "variable": "type",
  762. "label": "Type",
  763. "description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.\n",
  764. "schema": {
  765. "type": "string",
  766. "required": true,
  767. "default": "ix_volume",
  768. "enum": [
  769. {
  770. "value": "host_path",
  771. "description": "Host Path (Path that already exists on the system)"
  772. },
  773. {
  774. "value": "ix_volume",
  775. "description": "ixVolume (Dataset created automatically by the system)"
  776. }
  777. ]
  778. }
  779. },
  780. {
  781. "variable": "ix_volume_config",
  782. "label": "ixVolume Configuration",
  783. "description": "The configuration for the ixVolume dataset.",
  784. "schema": {
  785. "type": "dict",
  786. "show_if": [
  787. [
  788. "type",
  789. "=",
  790. "ix_volume"
  791. ]
  792. ],
  793. "$ref": [
  794. "normalize/ix_volume"
  795. ],
  796. "attrs": [
  797. {
  798. "variable": "acl_enable",
  799. "label": "Enable ACL",
  800. "description": "Enable ACL for the storage.",
  801. "schema": {
  802. "type": "boolean",
  803. "default": false
  804. }
  805. },
  806. {
  807. "variable": "dataset_name",
  808. "label": "Dataset Name",
  809. "description": "The name of the dataset to use for storage.",
  810. "schema": {
  811. "type": "string",
  812. "required": true,
  813. "hidden": true,
  814. "default": "bitcoin"
  815. }
  816. },
  817. {
  818. "variable": "acl_entries",
  819. "label": "ACL Configuration",
  820. "schema": {
  821. "type": "dict",
  822. "show_if": [
  823. [
  824. "acl_enable",
  825. "=",
  826. true
  827. ]
  828. ],
  829. "attrs": []
  830. }
  831. }
  832. ]
  833. }
  834. },
  835. {
  836. "variable": "host_path_config",
  837. "label": "Host Path Configuration",
  838. "schema": {
  839. "type": "dict",
  840. "show_if": [
  841. [
  842. "type",
  843. "=",
  844. "host_path"
  845. ]
  846. ],
  847. "attrs": [
  848. {
  849. "variable": "acl_enable",
  850. "label": "Enable ACL",
  851. "description": "Enable ACL for the storage.",
  852. "schema": {
  853. "type": "boolean",
  854. "default": false
  855. }
  856. },
  857. {
  858. "variable": "acl",
  859. "label": "ACL Configuration",
  860. "schema": {
  861. "type": "dict",
  862. "show_if": [
  863. [
  864. "acl_enable",
  865. "=",
  866. true
  867. ]
  868. ],
  869. "attrs": [],
  870. "$ref": [
  871. "normalize/acl"
  872. ]
  873. }
  874. },
  875. {
  876. "variable": "path",
  877. "label": "Host Path",
  878. "description": "The host path to use for storage.",
  879. "schema": {
  880. "type": "hostpath",
  881. "show_if": [
  882. [
  883. "acl_enable",
  884. "=",
  885. false
  886. ]
  887. ],
  888. "required": true
  889. }
  890. }
  891. ]
  892. }
  893. }
  894. ]
  895. }
  896. },
  897. {
  898. "variable": "additional_storage",
  899. "label": "Additional Storage",
  900. "schema": {
  901. "type": "list",
  902. "default": [],
  903. "items": [
  904. {
  905. "variable": "storageEntry",
  906. "label": "Storage Entry",
  907. "schema": {
  908. "type": "dict",
  909. "attrs": [
  910. {
  911. "variable": "type",
  912. "label": "Type",
  913. "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",
  914. "schema": {
  915. "type": "string",
  916. "required": true,
  917. "default": "ix_volume",
  918. "enum": [
  919. {
  920. "value": "host_path",
  921. "description": "Host Path (Path that already exists on the system)"
  922. },
  923. {
  924. "value": "ix_volume",
  925. "description": "ixVolume (Dataset created automatically by the system)"
  926. },
  927. {
  928. "value": "cifs",
  929. "description": "SMB/CIFS Share (Mounts a volume to a SMB share)"
  930. }
  931. ]
  932. }
  933. },
  934. {
  935. "variable": "read_only",
  936. "label": "Read Only",
  937. "description": "Mount the volume as read only.",
  938. "schema": {
  939. "type": "boolean",
  940. "default": false
  941. }
  942. },
  943. {
  944. "variable": "mount_path",
  945. "label": "Mount Path",
  946. "description": "The path inside the container to mount the storage.",
  947. "schema": {
  948. "type": "path",
  949. "required": true
  950. }
  951. },
  952. {
  953. "variable": "host_path_config",
  954. "label": "Host Path Configuration",
  955. "schema": {
  956. "type": "dict",
  957. "show_if": [
  958. [
  959. "type",
  960. "=",
  961. "host_path"
  962. ]
  963. ],
  964. "attrs": [
  965. {
  966. "variable": "acl_enable",
  967. "label": "Enable ACL",
  968. "description": "Enable ACL for the storage.",
  969. "schema": {
  970. "type": "boolean",
  971. "default": false
  972. }
  973. },
  974. {
  975. "variable": "acl",
  976. "label": "ACL Configuration",
  977. "schema": {
  978. "type": "dict",
  979. "show_if": [
  980. [
  981. "acl_enable",
  982. "=",
  983. true
  984. ]
  985. ],
  986. "attrs": [],
  987. "$ref": [
  988. "normalize/acl"
  989. ]
  990. }
  991. },
  992. {
  993. "variable": "path",
  994. "label": "Host Path",
  995. "description": "The host path to use for storage.",
  996. "schema": {
  997. "type": "hostpath",
  998. "show_if": [
  999. [
  1000. "acl_enable",
  1001. "=",
  1002. false
  1003. ]
  1004. ],
  1005. "required": true
  1006. }
  1007. }
  1008. ]
  1009. }
  1010. },
  1011. {
  1012. "variable": "ix_volume_config",
  1013. "label": "ixVolume Configuration",
  1014. "description": "The configuration for the ixVolume dataset.",
  1015. "schema": {
  1016. "type": "dict",
  1017. "show_if": [
  1018. [
  1019. "type",
  1020. "=",
  1021. "ix_volume"
  1022. ]
  1023. ],
  1024. "$ref": [
  1025. "normalize/ix_volume"
  1026. ],
  1027. "attrs": [
  1028. {
  1029. "variable": "acl_enable",
  1030. "label": "Enable ACL",
  1031. "description": "Enable ACL for the storage.",
  1032. "schema": {
  1033. "type": "boolean",
  1034. "default": false
  1035. }
  1036. },
  1037. {
  1038. "variable": "dataset_name",
  1039. "label": "Dataset Name",
  1040. "description": "The name of the dataset to use for storage.",
  1041. "schema": {
  1042. "type": "string",
  1043. "required": true,
  1044. "default": "storage_entry"
  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. "$ref": [
  1061. "normalize/acl"
  1062. ]
  1063. }
  1064. }
  1065. ]
  1066. }
  1067. },
  1068. {
  1069. "variable": "cifs_config",
  1070. "label": "SMB Configuration",
  1071. "description": "The configuration for the SMB dataset.",
  1072. "schema": {
  1073. "type": "dict",
  1074. "show_if": [
  1075. [
  1076. "type",
  1077. "=",
  1078. "cifs"
  1079. ]
  1080. ],
  1081. "attrs": [
  1082. {
  1083. "variable": "server",
  1084. "label": "Server",
  1085. "description": "The server to mount the SMB share.",
  1086. "schema": {
  1087. "type": "string",
  1088. "required": true
  1089. }
  1090. },
  1091. {
  1092. "variable": "path",
  1093. "label": "Path",
  1094. "description": "The path to mount the SMB share.",
  1095. "schema": {
  1096. "type": "string",
  1097. "required": true
  1098. }
  1099. },
  1100. {
  1101. "variable": "username",
  1102. "label": "Username",
  1103. "description": "The username to use for the SMB share.",
  1104. "schema": {
  1105. "type": "string",
  1106. "required": true
  1107. }
  1108. },
  1109. {
  1110. "variable": "password",
  1111. "label": "Password",
  1112. "description": "The password to use for the SMB share.",
  1113. "schema": {
  1114. "type": "string",
  1115. "required": true,
  1116. "private": true
  1117. }
  1118. },
  1119. {
  1120. "variable": "domain",
  1121. "label": "Domain",
  1122. "description": "The domain to use for the SMB share.",
  1123. "schema": {
  1124. "type": "string"
  1125. }
  1126. }
  1127. ]
  1128. }
  1129. }
  1130. ]
  1131. }
  1132. }
  1133. ]
  1134. }
  1135. }
  1136. ]
  1137. }
  1138. },
  1139. {
  1140. "variable": "labels",
  1141. "label": "",
  1142. "group": "Labels Configuration",
  1143. "schema": {
  1144. "type": "list",
  1145. "default": [],
  1146. "items": [
  1147. {
  1148. "variable": "label",
  1149. "label": "Label",
  1150. "schema": {
  1151. "type": "dict",
  1152. "attrs": [
  1153. {
  1154. "variable": "key",
  1155. "label": "Key",
  1156. "schema": {
  1157. "type": "string",
  1158. "required": true
  1159. }
  1160. },
  1161. {
  1162. "variable": "value",
  1163. "label": "Value",
  1164. "schema": {
  1165. "type": "string",
  1166. "required": true
  1167. }
  1168. },
  1169. {
  1170. "variable": "containers",
  1171. "label": "Containers",
  1172. "description": "Containers where the label should be applied",
  1173. "schema": {
  1174. "type": "list",
  1175. "items": [
  1176. {
  1177. "variable": "container",
  1178. "label": "Container",
  1179. "schema": {
  1180. "type": "string",
  1181. "required": true,
  1182. "enum": [
  1183. {
  1184. "value": "bitcoind",
  1185. "description": "bitcoind"
  1186. }
  1187. ]
  1188. }
  1189. }
  1190. ]
  1191. }
  1192. }
  1193. ]
  1194. }
  1195. }
  1196. ]
  1197. }
  1198. },
  1199. {
  1200. "variable": "resources",
  1201. "label": "",
  1202. "group": "Resources Configuration",
  1203. "schema": {
  1204. "type": "dict",
  1205. "attrs": [
  1206. {
  1207. "variable": "limits",
  1208. "label": "Limits",
  1209. "schema": {
  1210. "type": "dict",
  1211. "attrs": [
  1212. {
  1213. "variable": "cpus",
  1214. "label": "CPUs",
  1215. "description": "CPUs limit for Bitcoin Knots.",
  1216. "schema": {
  1217. "type": "int",
  1218. "default": 2,
  1219. "required": true
  1220. }
  1221. },
  1222. {
  1223. "variable": "memory",
  1224. "label": "Memory (in MB)",
  1225. "description": "Memory limit for Bitcoin Knots.",
  1226. "schema": {
  1227. "type": "int",
  1228. "default": 4096,
  1229. "required": true
  1230. }
  1231. }
  1232. ]
  1233. }
  1234. }
  1235. ]
  1236. }
  1237. }
  1238. ]
  1239. },
  1240. "readme": "<h1>Bitcoin Knots</h1> <p>Run your personal node powered by <a href=\"https://bitcoinknots.org/\">Bitcoin Knots</a>.</p>",
  1241. "changelog": null,
  1242. "chart_metadata": {
  1243. "app_version": "v29.1",
  1244. "capabilities": [],
  1245. "categories": [
  1246. "financial"
  1247. ],
  1248. "date_added": "2025-08-08",
  1249. "description": "Run your personal node powered by Bitcoin Knots.",
  1250. "home": "https://bitcoinknots.org",
  1251. "host_mounts": [],
  1252. "icon": "https://media.sys.truenas.net/apps/bitcoind-knots/icons/icon.png",
  1253. "keywords": [
  1254. "bitcoin",
  1255. "cryptocurrency",
  1256. "blockchain"
  1257. ],
  1258. "lib_version": "2.1.49",
  1259. "lib_version_hash": "e71e6b0122c9446fa5ea6fb07e7eb01b11fb42d549a19845426bbd7e21a42634",
  1260. "maintainers": [
  1261. {
  1262. "email": "dev@ixsystems.com",
  1263. "name": "truenas",
  1264. "url": "https://www.truenas.com/"
  1265. }
  1266. ],
  1267. "name": "bitcoind-knots",
  1268. "run_as_context": [
  1269. {
  1270. "description": "Bitcoin Node runs as any non-root user.",
  1271. "gid": 568,
  1272. "group_name": "bitcoind",
  1273. "uid": 568,
  1274. "user_name": "bitcoind"
  1275. }
  1276. ],
  1277. "screenshots": [],
  1278. "sources": [
  1279. "https://bitcoinknots.org",
  1280. "https://github.com/Retropex/docker-bitcoind-truenas"
  1281. ],
  1282. "title": "Bitcoin Knots",
  1283. "train": "community",
  1284. "version": "1.0.7"
  1285. }
  1286. }
  1287. }