app_versions.json 59 KB

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