libre-webui 0.16.1 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (314) hide show
  1. package/README.md +232 -154
  2. package/backend/dist/db.d.ts.map +1 -1
  3. package/backend/dist/db.js +155 -6
  4. package/backend/dist/db.js.map +1 -1
  5. package/backend/dist/index.d.ts.map +1 -1
  6. package/backend/dist/index.js +17 -10
  7. package/backend/dist/index.js.map +1 -1
  8. package/backend/dist/middleware/auth.d.ts.map +1 -1
  9. package/backend/dist/middleware/auth.js +35 -3
  10. package/backend/dist/middleware/auth.js.map +1 -1
  11. package/backend/dist/models/userModel.d.ts +23 -0
  12. package/backend/dist/models/userModel.d.ts.map +1 -1
  13. package/backend/dist/models/userModel.js +89 -24
  14. package/backend/dist/models/userModel.js.map +1 -1
  15. package/backend/dist/routes/agentCli.d.ts +3 -0
  16. package/backend/dist/routes/agentCli.d.ts.map +1 -0
  17. package/backend/dist/routes/agentCli.js +35 -0
  18. package/backend/dist/routes/agentCli.js.map +1 -0
  19. package/backend/dist/routes/auth.d.ts.map +1 -1
  20. package/backend/dist/routes/auth.js +46 -33
  21. package/backend/dist/routes/auth.js.map +1 -1
  22. package/backend/dist/routes/chat.d.ts.map +1 -1
  23. package/backend/dist/routes/chat.js +30 -1
  24. package/backend/dist/routes/chat.js.map +1 -1
  25. package/backend/dist/routes/documents.d.ts.map +1 -1
  26. package/backend/dist/routes/documents.js +49 -41
  27. package/backend/dist/routes/documents.js.map +1 -1
  28. package/backend/dist/routes/embeddings.js +2 -2
  29. package/backend/dist/routes/embeddings.js.map +1 -1
  30. package/backend/dist/routes/huggingfaceHub.d.ts.map +1 -1
  31. package/backend/dist/routes/huggingfaceHub.js +3 -1
  32. package/backend/dist/routes/huggingfaceHub.js.map +1 -1
  33. package/backend/dist/routes/imageGen.d.ts.map +1 -1
  34. package/backend/dist/routes/imageGen.js +2 -0
  35. package/backend/dist/routes/imageGen.js.map +1 -1
  36. package/backend/dist/routes/media.d.ts +3 -0
  37. package/backend/dist/routes/media.d.ts.map +1 -0
  38. package/backend/dist/routes/media.js +429 -0
  39. package/backend/dist/routes/media.js.map +1 -0
  40. package/backend/dist/routes/ollama.d.ts.map +1 -1
  41. package/backend/dist/routes/ollama.js +15 -83
  42. package/backend/dist/routes/ollama.js.map +1 -1
  43. package/backend/dist/routes/personas.d.ts.map +1 -1
  44. package/backend/dist/routes/personas.js +2 -0
  45. package/backend/dist/routes/personas.js.map +1 -1
  46. package/backend/dist/routes/plugins.d.ts.map +1 -1
  47. package/backend/dist/routes/plugins.js +28 -0
  48. package/backend/dist/routes/plugins.js.map +1 -1
  49. package/backend/dist/routes/systemDiagnostics.d.ts +3 -0
  50. package/backend/dist/routes/systemDiagnostics.d.ts.map +1 -0
  51. package/backend/dist/routes/systemDiagnostics.js +49 -0
  52. package/backend/dist/routes/systemDiagnostics.js.map +1 -0
  53. package/backend/dist/routes/tts.d.ts.map +1 -1
  54. package/backend/dist/routes/tts.js +4 -0
  55. package/backend/dist/routes/tts.js.map +1 -1
  56. package/backend/dist/routes/users.d.ts.map +1 -1
  57. package/backend/dist/routes/users.js +58 -0
  58. package/backend/dist/routes/users.js.map +1 -1
  59. package/backend/dist/routes/work.d.ts.map +1 -1
  60. package/backend/dist/routes/work.js +107 -2
  61. package/backend/dist/routes/work.js.map +1 -1
  62. package/backend/dist/services/agentCliService.d.ts +30 -0
  63. package/backend/dist/services/agentCliService.d.ts.map +1 -0
  64. package/backend/dist/services/agentCliService.js +328 -0
  65. package/backend/dist/services/agentCliService.js.map +1 -0
  66. package/backend/dist/services/authService.d.ts +15 -9
  67. package/backend/dist/services/authService.d.ts.map +1 -1
  68. package/backend/dist/services/authService.js +34 -29
  69. package/backend/dist/services/authService.js.map +1 -1
  70. package/backend/dist/services/chatGenerationService.d.ts.map +1 -1
  71. package/backend/dist/services/chatGenerationService.js +19 -1
  72. package/backend/dist/services/chatGenerationService.js.map +1 -1
  73. package/backend/dist/services/chatRequestService.d.ts +8 -2
  74. package/backend/dist/services/chatRequestService.d.ts.map +1 -1
  75. package/backend/dist/services/chatRequestService.js +30 -3
  76. package/backend/dist/services/chatRequestService.js.map +1 -1
  77. package/backend/dist/services/documentService.d.ts +11 -10
  78. package/backend/dist/services/documentService.d.ts.map +1 -1
  79. package/backend/dist/services/documentService.js +62 -54
  80. package/backend/dist/services/documentService.js.map +1 -1
  81. package/backend/dist/services/encryptionService.d.ts.map +1 -1
  82. package/backend/dist/services/encryptionService.js +18 -8
  83. package/backend/dist/services/encryptionService.js.map +1 -1
  84. package/backend/dist/services/galleryService.d.ts +23 -1
  85. package/backend/dist/services/galleryService.d.ts.map +1 -1
  86. package/backend/dist/services/galleryService.js +125 -8
  87. package/backend/dist/services/galleryService.js.map +1 -1
  88. package/backend/dist/services/mediaGenerationJobService.d.ts +25 -0
  89. package/backend/dist/services/mediaGenerationJobService.d.ts.map +1 -0
  90. package/backend/dist/services/mediaGenerationJobService.js +82 -0
  91. package/backend/dist/services/mediaGenerationJobService.js.map +1 -0
  92. package/backend/dist/services/pluginAudioGenerationService.d.ts +34 -0
  93. package/backend/dist/services/pluginAudioGenerationService.d.ts.map +1 -0
  94. package/backend/dist/services/pluginAudioGenerationService.js +211 -0
  95. package/backend/dist/services/pluginAudioGenerationService.js.map +1 -0
  96. package/backend/dist/services/pluginCapabilityRegistryService.d.ts.map +1 -1
  97. package/backend/dist/services/pluginCapabilityRegistryService.js +6 -0
  98. package/backend/dist/services/pluginCapabilityRegistryService.js.map +1 -1
  99. package/backend/dist/services/pluginEmbeddingService.d.ts +2 -0
  100. package/backend/dist/services/pluginEmbeddingService.d.ts.map +1 -1
  101. package/backend/dist/services/pluginEmbeddingService.js +66 -35
  102. package/backend/dist/services/pluginEmbeddingService.js.map +1 -1
  103. package/backend/dist/services/pluginImageGenerationService.d.ts +2 -0
  104. package/backend/dist/services/pluginImageGenerationService.d.ts.map +1 -1
  105. package/backend/dist/services/pluginImageGenerationService.js +63 -38
  106. package/backend/dist/services/pluginImageGenerationService.js.map +1 -1
  107. package/backend/dist/services/pluginService.d.ts +38 -1
  108. package/backend/dist/services/pluginService.d.ts.map +1 -1
  109. package/backend/dist/services/pluginService.js +390 -69
  110. package/backend/dist/services/pluginService.js.map +1 -1
  111. package/backend/dist/services/pluginTTSService.d.ts +2 -0
  112. package/backend/dist/services/pluginTTSService.d.ts.map +1 -1
  113. package/backend/dist/services/pluginTTSService.js +27 -2
  114. package/backend/dist/services/pluginTTSService.js.map +1 -1
  115. package/backend/dist/services/pluginUsageService.d.ts +82 -0
  116. package/backend/dist/services/pluginUsageService.d.ts.map +1 -0
  117. package/backend/dist/services/pluginUsageService.js +238 -0
  118. package/backend/dist/services/pluginUsageService.js.map +1 -0
  119. package/backend/dist/services/pluginVideoGenerationService.d.ts +45 -0
  120. package/backend/dist/services/pluginVideoGenerationService.d.ts.map +1 -0
  121. package/backend/dist/services/pluginVideoGenerationService.js +198 -0
  122. package/backend/dist/services/pluginVideoGenerationService.js.map +1 -0
  123. package/backend/dist/services/preferencesService.d.ts.map +1 -1
  124. package/backend/dist/services/preferencesService.js +15 -1
  125. package/backend/dist/services/preferencesService.js.map +1 -1
  126. package/backend/dist/services/registrationPolicy.d.ts +5 -0
  127. package/backend/dist/services/registrationPolicy.d.ts.map +1 -0
  128. package/backend/dist/services/registrationPolicy.js +21 -0
  129. package/backend/dist/services/registrationPolicy.js.map +1 -0
  130. package/backend/dist/services/simpleGitHubOAuth.d.ts.map +1 -1
  131. package/backend/dist/services/simpleGitHubOAuth.js +8 -12
  132. package/backend/dist/services/simpleGitHubOAuth.js.map +1 -1
  133. package/backend/dist/services/simpleHuggingFaceOAuth.d.ts.map +1 -1
  134. package/backend/dist/services/simpleHuggingFaceOAuth.js +7 -12
  135. package/backend/dist/services/simpleHuggingFaceOAuth.js.map +1 -1
  136. package/backend/dist/services/systemDiagnosticsService.d.ts +117 -0
  137. package/backend/dist/services/systemDiagnosticsService.d.ts.map +1 -0
  138. package/backend/dist/services/systemDiagnosticsService.js +326 -0
  139. package/backend/dist/services/systemDiagnosticsService.js.map +1 -0
  140. package/backend/dist/services/turnstileService.d.ts +2 -1
  141. package/backend/dist/services/turnstileService.d.ts.map +1 -1
  142. package/backend/dist/services/turnstileService.js +28 -2
  143. package/backend/dist/services/turnstileService.js.map +1 -1
  144. package/backend/dist/services/workAgentGuidance.js +1 -1
  145. package/backend/dist/services/workAgentGuidance.js.map +1 -1
  146. package/backend/dist/services/workAgentService.d.ts.map +1 -1
  147. package/backend/dist/services/workAgentService.js +37 -0
  148. package/backend/dist/services/workAgentService.js.map +1 -1
  149. package/backend/dist/services/workHostWorkspaceService.d.ts +22 -0
  150. package/backend/dist/services/workHostWorkspaceService.d.ts.map +1 -0
  151. package/backend/dist/services/workHostWorkspaceService.js +136 -0
  152. package/backend/dist/services/workHostWorkspaceService.js.map +1 -0
  153. package/backend/dist/services/workModelProviderService.d.ts +3 -0
  154. package/backend/dist/services/workModelProviderService.d.ts.map +1 -1
  155. package/backend/dist/services/workModelProviderService.js +37 -4
  156. package/backend/dist/services/workModelProviderService.js.map +1 -1
  157. package/backend/dist/services/workPreviewProxyService.d.ts +27 -0
  158. package/backend/dist/services/workPreviewProxyService.d.ts.map +1 -0
  159. package/backend/dist/services/workPreviewProxyService.js +514 -0
  160. package/backend/dist/services/workPreviewProxyService.js.map +1 -0
  161. package/backend/dist/services/workRuntimeService.d.ts +65 -3
  162. package/backend/dist/services/workRuntimeService.d.ts.map +1 -1
  163. package/backend/dist/services/workRuntimeService.js +536 -14
  164. package/backend/dist/services/workRuntimeService.js.map +1 -1
  165. package/backend/dist/services/workTaskService.d.ts +3 -3
  166. package/backend/dist/services/workTaskService.d.ts.map +1 -1
  167. package/backend/dist/services/workTaskService.js +10 -6
  168. package/backend/dist/services/workTaskService.js.map +1 -1
  169. package/backend/dist/services/workTerminalService.d.ts +46 -0
  170. package/backend/dist/services/workTerminalService.d.ts.map +1 -0
  171. package/backend/dist/services/workTerminalService.js +241 -0
  172. package/backend/dist/services/workTerminalService.js.map +1 -0
  173. package/backend/dist/storage.d.ts.map +1 -1
  174. package/backend/dist/storage.js +3 -3
  175. package/backend/dist/storage.js.map +1 -1
  176. package/backend/dist/types/index.d.ts +78 -2
  177. package/backend/dist/types/index.d.ts.map +1 -1
  178. package/backend/dist/types/index.js.map +1 -1
  179. package/backend/dist/types/work.d.ts +53 -0
  180. package/backend/dist/types/work.d.ts.map +1 -1
  181. package/backend/dist/utils/chatDocumentContext.d.ts +1 -1
  182. package/backend/dist/utils/chatDocumentContext.d.ts.map +1 -1
  183. package/backend/dist/utils/chatDocumentContext.js +4 -4
  184. package/backend/dist/utils/chatDocumentContext.js.map +1 -1
  185. package/backend/dist/utils/chatProviderSelection.d.ts.map +1 -1
  186. package/backend/dist/utils/chatProviderSelection.js +7 -5
  187. package/backend/dist/utils/chatProviderSelection.js.map +1 -1
  188. package/backend/dist/utils/pluginDefinitionTrust.js +1 -1
  189. package/backend/dist/utils/pluginValidation.d.ts +3 -2
  190. package/backend/dist/utils/pluginValidation.d.ts.map +1 -1
  191. package/backend/dist/utils/pluginValidation.js +30 -2
  192. package/backend/dist/utils/pluginValidation.js.map +1 -1
  193. package/backend/dist/utils/workGit.d.ts +14 -0
  194. package/backend/dist/utils/workGit.d.ts.map +1 -0
  195. package/backend/dist/utils/workGit.js +207 -0
  196. package/backend/dist/utils/workGit.js.map +1 -0
  197. package/backend/dist/websocketServer.d.ts +1 -0
  198. package/backend/dist/websocketServer.d.ts.map +1 -1
  199. package/backend/dist/websocketServer.js +156 -35
  200. package/backend/dist/websocketServer.js.map +1 -1
  201. package/backend/dist/workTerminalServer.d.ts +17 -0
  202. package/backend/dist/workTerminalServer.d.ts.map +1 -0
  203. package/backend/dist/workTerminalServer.js +226 -0
  204. package/backend/dist/workTerminalServer.js.map +1 -0
  205. package/backend/package.json +1 -1
  206. package/frontend/dist/assets/index-ChhWhug2.css +1 -0
  207. package/frontend/dist/assets/index-CmZntyR1.js +3 -0
  208. package/frontend/dist/assets/xterm-CmMoOwwu.css +1 -0
  209. package/frontend/dist/index.html +28 -6
  210. package/frontend/dist/js/ArtifactContainer-CBAbdoIJ.js +1 -0
  211. package/frontend/dist/js/{ArtifactDemoPage-CWDhGWrz.js → ArtifactDemoPage-BWN0MWCx.js} +1 -1
  212. package/frontend/dist/js/ArtifactSlideOutPanel-D-AvYkfk.js +1 -0
  213. package/frontend/dist/js/{Button-DBk-AREB.js → Button-CRwzOaDZ.js} +1 -1
  214. package/frontend/dist/js/ChatPage-w2FkF_fE.js +16 -0
  215. package/frontend/dist/js/FirstTimeSetup-CzBxl7UH.js +1 -0
  216. package/frontend/dist/js/GalleryPage-Cv8pniRW.js +1 -0
  217. package/frontend/dist/js/HomePage-Vyj4ndU4.js +1 -0
  218. package/frontend/dist/js/LibreClawPage-CYhLgQB-.js +1 -0
  219. package/frontend/dist/js/{ModelManagerModals-DltRprHU.js → ModelManagerModals-C2rwHd01.js} +1 -1
  220. package/frontend/dist/js/ModelSelector-D7kDjZV9.js +1 -0
  221. package/frontend/dist/js/ModelsPage-BnUddkrs.js +2 -0
  222. package/frontend/dist/js/{PersonasPage-C2pqDsWA.js → PersonasPage-BL5XlrEm.js} +2 -2
  223. package/frontend/dist/js/PluginUsagePage-BXqweCCs.js +1 -0
  224. package/frontend/dist/js/RichMessageContent-nAEaPTpH.js +3 -0
  225. package/frontend/dist/js/SettingsModal-DZYCI5-y.js +1 -0
  226. package/frontend/dist/js/SystemPage-jdHYfn9A.js +1 -0
  227. package/frontend/dist/js/UserManagementPage-BpOnt6os.js +1 -0
  228. package/frontend/dist/js/WorkPage-DAp1T1dl.js +5 -0
  229. package/frontend/dist/js/addon-fit-Cj0_dfHF.js +1 -0
  230. package/frontend/dist/js/api-BCqWXjZI.js +19 -0
  231. package/frontend/dist/js/appStore-CDM6V5ny.js +2 -0
  232. package/frontend/dist/js/ar-DS8gs8WK.js +2 -0
  233. package/frontend/dist/js/authStore-Bl5ofD_h.js +4 -0
  234. package/frontend/dist/js/bn-CrMPJwTR.js +2 -0
  235. package/frontend/dist/js/cs-BL116Ezu.js +2 -0
  236. package/frontend/dist/js/da-TDNaKzqy.js +2 -0
  237. package/frontend/dist/js/de-DkIqdAB5.js +2 -0
  238. package/frontend/dist/js/es-CHRXt6Fd.js +2 -0
  239. package/frontend/dist/js/{estree-BRklD62a.js → estree-BFya-bSu.js} +1 -1
  240. package/frontend/dist/js/fr-8715yUKq.js +2 -0
  241. package/frontend/dist/js/hi-C2O08SBU.js +2 -0
  242. package/frontend/dist/js/{html-BgGIAGmn.js → html-DJot0Wwf.js} +1 -1
  243. package/frontend/dist/js/id-Dq7UXUEV.js +2 -0
  244. package/frontend/dist/js/is-B3dbbhSl.js +2 -0
  245. package/frontend/dist/js/it-CLSuu2K7.js +2 -0
  246. package/frontend/dist/js/ja-CthrqyCR.js +2 -0
  247. package/frontend/dist/js/ko-BJvFDJ82.js +2 -0
  248. package/frontend/dist/js/{markdown-CM2nBJJi.js → markdown-CXwWsPYG.js} +1 -1
  249. package/frontend/dist/js/ms-QV0202Mj.js +2 -0
  250. package/frontend/dist/js/nl-Dob1m1pV.js +2 -0
  251. package/frontend/dist/js/pl-urfOKnYI.js +2 -0
  252. package/frontend/dist/js/pt-D52Xkpi0.js +2 -0
  253. package/frontend/dist/js/ru-CwnW9Xe2.js +2 -0
  254. package/frontend/dist/js/{standalone-CUBo-NGt.js → standalone-C0NjJpWr.js} +1 -1
  255. package/frontend/dist/js/sv-BNclj-Fo.js +2 -0
  256. package/frontend/dist/js/th-BlQ4PL57.js +2 -0
  257. package/frontend/dist/js/tr-B80aZ1px.js +2 -0
  258. package/frontend/dist/js/{typescript-Dcy9qxSB.js → typescript-d0TUM2-0.js} +1 -1
  259. package/frontend/dist/js/ui-vendor-ChfdHf5M.js +177 -0
  260. package/frontend/dist/js/uk-DZuuaI56.js +2 -0
  261. package/frontend/dist/js/utils-DmZD5uA3.js +1 -0
  262. package/frontend/dist/js/vi-Bg42fPfF.js +2 -0
  263. package/frontend/dist/js/work-DVgm81bJ.js +1 -0
  264. package/frontend/dist/js/xterm-DKl1QLiw.js +7 -0
  265. package/frontend/dist/js/zh-BSt87zs6.js +2 -0
  266. package/package.json +3 -3
  267. package/plugins/openrouter.json +89 -0
  268. package/backend/dist/services/systemSettingsService.d.ts +0 -12
  269. package/backend/dist/services/systemSettingsService.d.ts.map +0 -1
  270. package/backend/dist/services/systemSettingsService.js +0 -70
  271. package/backend/dist/services/systemSettingsService.js.map +0 -1
  272. package/frontend/dist/assets/index-BVgyQN3z.js +0 -5
  273. package/frontend/dist/assets/index-Dme2Ozol.css +0 -1
  274. package/frontend/dist/js/ArtifactContainer-CbMAYwvr.js +0 -1
  275. package/frontend/dist/js/ArtifactSlideOutPanel-CzUpDM59.js +0 -1
  276. package/frontend/dist/js/ChatPage-D0fdzy7a.js +0 -16
  277. package/frontend/dist/js/FirstTimeSetup-CfnOmy9w.js +0 -1
  278. package/frontend/dist/js/GalleryPage-CMkCur9v.js +0 -1
  279. package/frontend/dist/js/LibreClawPage-CHEfny1k.js +0 -1
  280. package/frontend/dist/js/ModelSelector-COnlNsVM.js +0 -1
  281. package/frontend/dist/js/ModelsPage-nxheiYJp.js +0 -2
  282. package/frontend/dist/js/RichMessageContent-Cz9y-bgl.js +0 -3
  283. package/frontend/dist/js/SettingsModal-B6Se68Hd.js +0 -1
  284. package/frontend/dist/js/UserManagementPage-DQeL-Twp.js +0 -1
  285. package/frontend/dist/js/WorkPage-AcZMp8OB.js +0 -2
  286. package/frontend/dist/js/api-Fi-lJlfu.js +0 -19
  287. package/frontend/dist/js/ar-KceI0PfT.js +0 -2
  288. package/frontend/dist/js/bn-DsKo2dzS.js +0 -2
  289. package/frontend/dist/js/cs-6UKhKj0A.js +0 -2
  290. package/frontend/dist/js/da-CJgZ3YuL.js +0 -2
  291. package/frontend/dist/js/de-BZAmOuCT.js +0 -2
  292. package/frontend/dist/js/es-CD4u7no9.js +0 -2
  293. package/frontend/dist/js/fr-Cou2jOS3.js +0 -2
  294. package/frontend/dist/js/hi-ZxkbNCyB.js +0 -2
  295. package/frontend/dist/js/id-DT9CqaWQ.js +0 -2
  296. package/frontend/dist/js/is-BWSbAIoq.js +0 -2
  297. package/frontend/dist/js/it-CdNoTXm3.js +0 -2
  298. package/frontend/dist/js/ja-CIuQg0xv.js +0 -2
  299. package/frontend/dist/js/ko-BWRUjDOH.js +0 -2
  300. package/frontend/dist/js/ms-gJstIj2a.js +0 -2
  301. package/frontend/dist/js/nl-CydjVNUw.js +0 -2
  302. package/frontend/dist/js/pl-DPN9mAa5.js +0 -2
  303. package/frontend/dist/js/pt-MRXGqIjQ.js +0 -2
  304. package/frontend/dist/js/ru-CvQ9GkJF.js +0 -2
  305. package/frontend/dist/js/sv-BxS2fvhU.js +0 -2
  306. package/frontend/dist/js/th-DMxyn6e4.js +0 -2
  307. package/frontend/dist/js/tr-BTPldUaA.js +0 -2
  308. package/frontend/dist/js/ui-vendor-CAFEDSaO.js +0 -177
  309. package/frontend/dist/js/uk-BGxZOKgp.js +0 -2
  310. package/frontend/dist/js/useBaseQuery-CFTidwqz.js +0 -1
  311. package/frontend/dist/js/useQuery-UsSBfWzs.js +0 -1
  312. package/frontend/dist/js/utils-pTFqSV8c.js +0 -1
  313. package/frontend/dist/js/vi-82JkwFsQ.js +0 -2
  314. package/frontend/dist/js/zh-Bxxfwci3.js +0 -2
package/README.md CHANGED
@@ -25,7 +25,7 @@ Self-hosted. Provider-flexible. Apache 2.0.
25
25
  <a href="https://librewebui.org"><strong>Website</strong></a> ·
26
26
  <a href="https://docs.librewebui.org"><strong>Documentation</strong></a> ·
27
27
  <a href="https://github.com/libre-webui/libre-webui/releases"><strong>Download</strong></a> ·
28
- <a href="#start-in-one-command"><strong>Quick start</strong></a>
28
+ <a href="#quick-start"><strong>Quick start</strong></a>
29
29
  </p>
30
30
 
31
31
  <br>
@@ -36,148 +36,203 @@ Self-hosted. Provider-flexible. Apache 2.0.
36
36
 
37
37
  ---
38
38
 
39
- ## Freedom should survive success
40
-
41
- An AI interface can be self-hosted today and still become a gatekeeper tomorrow. Libre WebUI is built so your freedom does not depend on a company remaining benevolent.
42
-
43
- Run it. Inspect it. Change it. Fork it. Connect it to something else. Or leave it behind. The code is Apache 2.0, local inference is the default path, remote providers are opt-in, and the project charter puts independence and inclusive participation into writing.
39
+ ## What Libre WebUI is
44
40
 
45
- > **Open source is a license. Libre is an operating principle.**
41
+ A complete AI workspace you run yourself. Chat with local models through
42
+ [Ollama](https://ollama.com) or with any provider you choose to connect, give a
43
+ model a sandboxed workspace where it can actually build something, search your
44
+ own documents, generate images and speech, and keep every conversation on
45
+ hardware you control.
46
46
 
47
- Do not trust the pitch. Inspect the [license](https://github.com/libre-webui/libre-webui/blob/main/LICENSE), [charter](https://github.com/libre-webui/libre-webui/blob/main/CHARTER.md), [source](https://github.com/libre-webui/libre-webui), and [CI](https://github.com/libre-webui/libre-webui/actions).
47
+ The interface works like a browser. **Home** is your launcher; chats, Work
48
+ sessions, and pages open as tabs beside it; `⌘K` searches everything you have.
49
+ Nothing is buried three menus deep.
48
50
 
49
- | What stays yours | Libre WebUI's approach | Verify it |
50
- | --------------------- | ----------------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
51
- | **Data path** | Self-hosted by default; remote inference only when you select it | [Deployment docs](https://docs.librewebui.org/DOCKER) |
52
- | **Model choice** | Local Ollama plus optional provider plugins and OpenAI-compatible endpoints | [Plugin architecture](https://docs.librewebui.org/PLUGIN_ARCHITECTURE) |
53
- | **Code** | Use, modify, redistribute, and fork under Apache 2.0 | [License](https://github.com/libre-webui/libre-webui/blob/main/LICENSE) |
54
- | **Project direction** | The charter rejects funding control over the roadmap, license, or community | [Charter](https://github.com/libre-webui/libre-webui/blob/main/CHARTER.md) |
55
- | **Participation** | Contributors and users are welcome regardless of background, identity, or geography | [Charter](https://github.com/libre-webui/libre-webui/blob/main/CHARTER.md) |
56
- | **Exit** | Your installation and your fork do not need our permission | [Source](https://github.com/libre-webui/libre-webui) |
51
+ It is Apache 2.0, ships without telemetry, and is built so you can leave. If
52
+ this project ever stops serving you, your installation and your fork do not need
53
+ anyone's permission.
57
54
 
58
- ## Start in one command
55
+ ## Quick start
59
56
 
60
- With [Node.js 22.22 or newer](https://nodejs.org):
57
+ You need [Node.js 22.22 or newer](https://nodejs.org). Docker is optional — only
58
+ [Work](#work-one-persistent-environment-per-task) requires it.
61
59
 
62
60
  ```bash
63
61
  npx libre-webui
64
62
  ```
65
63
 
66
- Open [http://localhost:8080](http://localhost:8080). The first account created on a fresh install becomes the administrator.
64
+ Open [http://localhost:8080](http://localhost:8080). The first account created
65
+ on a fresh install becomes the administrator.
67
66
 
68
- For private local inference, install [Ollama](https://ollama.com) and pull a model:
67
+ For private local inference, install [Ollama](https://ollama.com) and pull a
68
+ model:
69
69
 
70
70
  ```bash
71
- ollama pull gemma3:4b
71
+ ollama pull gemma4:12b
72
72
  ```
73
73
 
74
- That is enough to start. Cloud accounts are not required. When you do want a remote model, add only the provider you choose.
75
-
76
- Chat works without Docker. The new **Work** mode additionally needs Docker on
77
- the machine running the Libre WebUI backend. If Docker is missing, Libre WebUI
78
- still starts normally and Work shows a clear **Runtime unavailable** state
79
- instead of running commands on the host.
74
+ That is enough to start. No cloud account is required. When you do want a remote
75
+ model, add only the provider you choose.
80
76
 
81
- ## One workspace. Your choices.
77
+ If Docker is missing, Libre WebUI starts normally and Work reports a clear
78
+ **Runtime unavailable** state rather than running commands on your host.
82
79
 
83
- Libre WebUI turns a model endpoint into a complete working environment without taking ownership of the stack around it.
80
+ ## What you can do
84
81
 
85
- | | What you can do |
86
- | ------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
87
- | **Talk to the model you want** | Stream conversations through local Ollama, Ollama Cloud, bundled providers, or compatible endpoints. Discover and manage models from the UI. |
88
- | **Give every task a workspace** | Let a tool-capable model inspect files, edit code, run commands, and preview an app in a persistent, task-scoped Docker workspace. |
89
- | **Bring your own context** | Chat with PDF and plain-text documents using keyword retrieval or optional semantic embeddings. |
90
- | **Turn answers into artifacts** | Preview sandboxed HTML, SVG, JSON, code, and multi-file artifacts beside a normal chat. |
91
- | **Create with more than text** | Generate images, use provider-backed speech, and build reusable personas with prompts, parameters, and memory. |
92
- | **Make the interface yours** | Keep light or dark mode across refreshes, apply an adaptive accent theme, and work in 25 languages/locales including Arabic RTL. |
93
- | **Operate it your way** | Use local accounts, roles, optional OAuth, Docker, Kubernetes, npm, or the Electron desktop client. |
94
- | **Extend without lock-in** | Configure chat, embeddings, image generation, and text-to-speech providers through the plugin layer. |
82
+ | | |
83
+ | ---------------------------------- | -------------------------------------------------------------------------- |
84
+ | **Work the way you browse** | Home launcher, tabs for chats and Work sessions, `⌘K` to jump anywhere |
85
+ | **Talk to the model you want** | Local Ollama, Ollama Cloud, bundled providers, or any compatible endpoint |
86
+ | **Use the agent you subscribe to** | An installed Claude Code or Codex CLI, as a chat model, with no API key |
87
+ | **Give every task a workspace** | Files, a terminal, a diff, and a live preview inside an isolated container |
88
+ | **Bring your own context** | Chat with PDF and plain-text documents by keyword or embeddings |
89
+ | **Turn answers into artifacts** | Sandboxed HTML, SVG, JSON, code, and multi-file previews beside the chat |
90
+ | **Create with more than text** | Image generation, provider-backed speech, and reusable personas |
91
+ | **Make the interface yours** | Light and dark themes, adaptive accents, 25 locales including Arabic RTL |
92
+ | **Operate it your way** | Local accounts and roles, optional OAuth, Docker, Kubernetes, npm, desktop |
93
+ | **Extend without lock-in** | Chat, embedding, image, and speech providers through the plugin layer |
95
94
 
96
- ## Local-first is a real boundary
97
-
98
- Libre WebUI ships without application telemetry or analytics. When you use Ollama locally, prompts and responses stay on the infrastructure you control. If you select a remote provider, that provider receives the requests you choose to send to it; Libre WebUI does not pretend otherwise.
99
-
100
- For shared and public deployments, the backend includes:
95
+ ## Freedom should survive success
101
96
 
102
- - Local accounts with bcrypt password hashing and JWT sessions
103
- - Admin and user roles, login/signup rate limits, and optional Cloudflare Turnstile
104
- - Optional GitHub and Hugging Face OAuth
105
- - Application-layer AES-256-GCM encryption for supported sensitive values such as credentials
106
- - Persistent SQLite storage, configurable data directories, and documented backup practices
97
+ An AI interface can be self-hosted today and still become a gatekeeper
98
+ tomorrow. Libre WebUI is built so your freedom does not depend on a company
99
+ remaining benevolent.
107
100
 
108
- Application-layer encryption is not full-disk or end-to-end encryption. Use HTTPS, access-controlled storage, stable secrets, and disk encryption where your threat model requires them. Start with the [authentication guide](https://docs.librewebui.org/AUTHENTICATION) and [encryption guide](https://docs.librewebui.org/DATABASE_ENCRYPTION).
101
+ Run it. Inspect it. Change it. Fork it. Connect it to something else. Or leave
102
+ it behind. The code is Apache 2.0, local inference is the default path, remote
103
+ providers are opt-in, and the project charter puts independence and inclusive
104
+ participation into writing.
109
105
 
110
- ## Models and providers without a single-provider worldview
106
+ > **Open source is a license. Libre is an operating principle.**
111
107
 
112
- Ollama is the default local path, not a lock-in strategy. Libre WebUI also
113
- bundles an MLX LM plugin for native Apple Silicon inference, plus provider
114
- definitions spanning chat, images, embeddings, speech, and OpenAI-compatible
115
- services, including OpenAI, Anthropic, Google Gemini, Groq, Kimi Code by
116
- Moonshot AI, Mistral, OpenRouter, Hugging Face, GitHub Models, ComfyUI,
117
- ElevenLabs, Qwen3-TTS, and Kyutai TTS.
108
+ Do not trust the pitch. Inspect the
109
+ [license](https://github.com/libre-webui/libre-webui/blob/main/LICENSE),
110
+ [charter](https://github.com/libre-webui/libre-webui/blob/main/CHARTER.md),
111
+ [source](https://github.com/libre-webui/libre-webui), and
112
+ [CI](https://github.com/libre-webui/libre-webui/actions).
113
+
114
+ | What stays yours | Libre WebUI's approach | Verify it |
115
+ | --------------------- | ----------------------------------------------------------------------- | -------------------------------------------------------------------------- |
116
+ | **Data path** | Self-hosted by default; remote inference only when you select it | [Deployment docs](https://docs.librewebui.org/DOCKER) |
117
+ | **Model choice** | Local Ollama plus optional provider plugins and compatible endpoints | [Plugin architecture](https://docs.librewebui.org/PLUGIN_ARCHITECTURE) |
118
+ | **Code** | Use, modify, redistribute, and fork under Apache 2.0 | [License](https://github.com/libre-webui/libre-webui/blob/main/LICENSE) |
119
+ | **Project direction** | The charter rejects funding control over roadmap, license, or community | [Charter](https://github.com/libre-webui/libre-webui/blob/main/CHARTER.md) |
120
+ | **Participation** | Everyone is welcome regardless of background, identity, or geography | [Charter](https://github.com/libre-webui/libre-webui/blob/main/CHARTER.md) |
121
+ | **Exit** | Your installation and your fork do not need our permission | [Source](https://github.com/libre-webui/libre-webui) |
118
122
 
119
- Credentials can come from deployment-wide environment variables or encrypted, user-scoped settings. Plugins can define static model fallbacks and use live discovery when a provider exposes a compatible model-list endpoint.
123
+ ## Local-first is a real boundary
120
124
 
121
- [Explore the plugin system →](https://docs.librewebui.org/PLUGIN_ARCHITECTURE)
125
+ Libre WebUI ships without application telemetry or analytics. When you use
126
+ Ollama locally, prompts and responses stay on infrastructure you control. If you
127
+ select a remote provider, that provider receives the requests you choose to send
128
+ it; Libre WebUI does not pretend otherwise.
129
+
130
+ For shared and public deployments, the backend includes local accounts with
131
+ bcrypt hashing and JWT sessions, admin and user roles, login and signup rate
132
+ limits, optional Cloudflare Turnstile, optional GitHub and Hugging Face OAuth,
133
+ application-layer AES-256-GCM encryption for sensitive values such as
134
+ credentials, and persistent SQLite storage with configurable data directories.
135
+
136
+ Application-layer encryption is not full-disk or end-to-end encryption. Use
137
+ HTTPS, access-controlled storage, stable secrets, and disk encryption where your
138
+ threat model requires them. Start with the
139
+ [authentication guide](https://docs.librewebui.org/AUTHENTICATION) and
140
+ [encryption guide](https://docs.librewebui.org/DATABASE_ENCRYPTION).
141
+
142
+ ## Models, providers, and agents
143
+
144
+ Ollama is the default local path, not a lock-in strategy. Libre WebUI bundles an
145
+ MLX LM plugin for native Apple Silicon inference plus provider definitions
146
+ spanning chat, images, embeddings, and speech — OpenAI, Anthropic, Google
147
+ Gemini, Groq, Kimi Code by Moonshot AI, Mistral, OpenRouter, Hugging Face,
148
+ GitHub Models, ComfyUI, ElevenLabs, Qwen3-TTS, Kyutai TTS, and any
149
+ OpenAI-compatible service.
150
+
151
+ Credentials come from deployment-wide environment variables or encrypted,
152
+ user-scoped settings. Plugins can declare static model lists and use live
153
+ discovery when a provider exposes a compatible model-list endpoint.
154
+
155
+ A coding agent you already pay for can answer in chat directly. If `claude` or
156
+ `codex` is installed on the server, administrators see an **Agents** group in
157
+ the model selector and can hold a normal conversation using the subscription
158
+ that CLI is already signed in with — no API key. The CLI runs as the Libre WebUI
159
+ server user and inherits that user's agent credentials, so treat it as
160
+ equivalent to granting those agents shell access, and set
161
+ `AGENT_CLI_MODELS_ENABLED=false` to turn it off.
162
+
163
+ [Connect a provider →](https://docs.librewebui.org/PROVIDER_CONNECTIONS) ·
164
+ [Use an installed agent →](https://docs.librewebui.org/AGENT_CLI_MODELS)
122
165
 
123
166
  ## Work: one persistent environment per task
124
167
 
125
- Work is Libre WebUI's built-in coding-agent surface. Choose **Work** beside
126
- **Chat**, select a tool-capable model, and describe what you want to build or
127
- change. Each task keeps its own conversation, exact provider route, files, tool
128
- activity, and preview state.
168
+ Work gives a tool-capable model a real place to build. Describe what you want,
169
+ and the task keeps its own conversation, provider route, files, tool activity,
170
+ and preview — so returning to it a week later returns to exactly where it was.
129
171
 
130
172
  ```text
131
173
  Work task
132
174
  ├── durable conversation and run history in SQLite
133
175
  ├── dedicated Docker named volume mounted at /workspace
134
176
  ├── disposable, policy-checked container for commands
135
- └── Files · Activity · Preview workspace pane
177
+ └── Files · Activity · Terminal · Preview workspace pane
136
178
  ```
137
179
 
138
- The model can list, read, write, and search task files, run bounded shell
139
- commands, and start or stop a browser preview. The workspace includes a
140
- light/dark syntax-highlighted editor, supported-file formatting, browser drafts,
141
- conflict-aware saves, and a draggable responsive split between conversation and
142
- workspace. Tasks remain in the main sidebar so returning to an older task also
143
- returns to its existing files and history.
144
-
145
- Active runs stream assistant text, provider-exposed reasoning, tool calls,
146
- results, usage, and state changes into the interface. Reasoning appears only
147
- when the selected provider returns it; Libre WebUI cannot reveal a model's
148
- hidden chain-of-thought. Server-owned worker skills teach the model the
149
- workspace boundary, efficient project discovery, safe editing, verification,
150
- and preview lifecycle without adding control files to the project.
151
-
152
- Work can use installed Ollama models, Ollama Cloud models, or configured
153
- completion/chat plugins through OpenAI-compatible, Anthropic, and Gemini tool
154
- adapters. Tool support is required. Selecting a remote route shows a dismissible
155
- per-user disclosure because an autonomous run may make multiple paid provider
156
- calls and may send conversation context and requested tool results—including
157
- file contents—to that service.
158
-
159
- The same configurable round budget applies to every provider route (48 by
160
- default). If it is exhausted, Work requests a final no-tools progress handoff
161
- and ends in the yellow **Needs input** state instead of reporting a false
162
- success or a raw provider-specific round-limit error. A follow-up run continues
163
- in the same durable workspace.
164
-
165
- Work is admin-only and never falls back to host command execution. Containers
166
- run as a non-root user with a read-only root filesystem, dropped capabilities,
167
- resource limits, and only the task volume mounted. Containers are still not
168
- virtual machines, current Work tasks have Docker bridge egress, and task volumes
169
- need their own backup and storage policy.
170
-
171
- [Read the Work workspace guide →](https://docs.librewebui.org/WORKSPACES)
172
-
173
- ## Optional broader agents, with the runtime kept separate
174
-
175
- [Libre Claw](https://github.com/kroonen-ai/libre-claw) is an optional, admin-controlled local agent runtime. Libre WebUI provides the authenticated control surface for durable runs, timelines, approvals, schedules, usage, and configuration; Libre Claw owns the tools, memory, permission model, and execution.
176
-
177
- Libre Claw is separate from Work. Work is native to Libre WebUI and focused on
178
- one isolated project workspace; Libre Claw is the optional daemon for broader
179
- file, shell, git, browser, HTTP, web-search, MCP, memory, approval, and
180
- automation workflows.
180
+ The model can read, write, move, delete, and search files, run bounded shell
181
+ commands, and start or stop a browser preview. You get a syntax-highlighted
182
+ editor, a red/green diff of what changed in the last turn, conflict-aware saves,
183
+ and a real interactive terminal attached to the same container — under the same
184
+ policy as the model's own tools, so it is a window into the sandbox rather than
185
+ a way around it.
186
+
187
+ Runs stream assistant text, tool calls, results, usage, and state changes live.
188
+ Reasoning appears only when the provider returns it; Libre WebUI cannot reveal a
189
+ model's hidden chain-of-thought. When a run exhausts its round budget it asks
190
+ for a final progress handoff and ends in a yellow **Needs input** state instead
191
+ of reporting false success — a follow-up run continues in the same workspace.
192
+
193
+ Choosing a remote route shows a one-time disclosure, because an autonomous run
194
+ can make many paid calls and can send conversation context and tool results,
195
+ including file contents, to that provider. You should know that before a run
196
+ starts, not after the bill.
197
+
198
+ **On the sandbox.** Work is admin-only and never falls back to host execution.
199
+ Containers run as a non-root user with a read-only root filesystem, dropped
200
+ capabilities, `no-new-privileges`, resource limits with swap pinned to the
201
+ memory cap, and only the task volume mounted. Networked tasks join a managed
202
+ bridge with inter-container communication disabled. The whole policy is hashed
203
+ into a container label and re-verified before reuse, so a container predating a
204
+ hardening change is recreated rather than reused.
205
+
206
+ Two honest limits: containers are not virtual machines, and Work tasks have
207
+ outbound internet egress by design.
208
+
209
+ A task can instead be bound to a real folder on your machine, when a deployment
210
+ opts in with `WORK_HOST_WORKSPACES_ENABLED`. Requested paths are resolved
211
+ through symlinks, checked against an allowlist of roots, and credential
212
+ directories are refused — but it ships off, because pointing an agent at your
213
+ real files is a deliberate narrowing of the sandbox and should be a decision you
214
+ make on purpose.
215
+
216
+ [Read the Work guide →](https://docs.librewebui.org/WORKSPACES)
217
+
218
+ ## Agents: broader automation, runtime kept separate
219
+
220
+ The **Agents** section is the control surface for
221
+ [Libre Claw](https://github.com/kroonen-ai/libre-claw), an optional
222
+ admin-controlled local agent runtime. Libre WebUI provides the authenticated
223
+ view of durable runs, timelines, approvals, schedules, usage, and configuration;
224
+ Libre Claw owns the tools, memory, permission model, and execution.
225
+
226
+ It is deliberately not Work. Work is native and focused on one isolated project
227
+ workspace; Libre Claw is the optional daemon for broader file, shell, git,
228
+ browser, HTTP, web-search, MCP, memory, and automation workflows. The WebUI
229
+ backend never executes its shell or browser tools — it proxies authenticated
230
+ admin actions to the separately running daemon, where approvals stay
231
+ authoritative.
232
+
233
+ [Read the integration guide →](https://docs.librewebui.org/LIBRE_CLAW_INTEGRATION)
234
+
235
+ ## How it fits together
181
236
 
182
237
  ```text
183
238
  Browser or desktop client
@@ -195,31 +250,30 @@ Browser or desktop client
195
250
  └────────► Libre Claw (optional agent runtime)
196
251
  ```
197
252
 
198
- The WebUI backend does not execute Libre Claw's shell or browser tools itself. It proxies authenticated admin actions to the separately running daemon, where approvals and safety rules remain authoritative.
199
-
200
- [Read the Libre Claw integration guide →](https://docs.librewebui.org/LIBRE_CLAW_INTEGRATION)
201
-
202
253
  ## Deploy on your terms
203
254
 
204
- | Path | Command or link | Best for |
205
- | ------------------- | ----------------------------------------------------------------------- | --------------------------------------------------------------------- |
206
- | **npm** | `npx libre-webui` | Fast local start; Work is available when local Docker is installed |
207
- | **Docker + Ollama** | `docker compose up -d` | Persistent chat stack; Work enabled through the host Docker socket |
208
- | **External Ollama** | `docker compose -f docker-compose.external-ollama.yml up -d` | Existing Ollama; Work enabled the same way |
209
- | **NVIDIA Docker** | `docker compose -f docker-compose.gpu.yml up -d` | Local GPU inference; Work enabled the same way |
210
- | **Kubernetes** | `helm install libre-webui oci://ghcr.io/libre-webui/charts/libre-webui` | Cluster deployment; the current chart has no Work runtime driver |
211
- | **Desktop client** | [GitHub Releases](https://github.com/libre-webui/libre-webui/releases) | Electron UI; Work runs wherever its separately managed backend runs |
212
- | **Source** | `npm install && npm run dev` | Development; Work uses Docker available to the native backend process |
213
-
214
- Docker commands assume you have cloned this repository. Production deployments should set stable `JWT_SECRET` and `ENCRYPTION_KEY` values, persist the data directory, back up the database and key together, and terminate public traffic with HTTPS.
215
-
216
- Every Compose file above ships the Docker CLI and mounts the host Docker socket,
217
- so Work runs task containers as siblings of the Libre WebUI container with no
218
- extra flags. That socket grants root-equivalent control of the Docker host:
219
- treat every Libre WebUI administrator as a host administrator, and remove the
220
- `/var/run/docker.sock` mount from your Compose file if you do not want Work.
221
-
222
- On Linux the socket is owned by the `docker` group rather than root, so set the
255
+ | Path | Command or link | Best for |
256
+ | ------------------- | ----------------------------------------------------------------------- | ------------------------------------------------------------- |
257
+ | **npm** | `npx libre-webui` | Fast local start; Work available when Docker is installed |
258
+ | **Docker + Ollama** | `docker compose up -d` | Persistent stack; Work enabled through the host Docker socket |
259
+ | **External Ollama** | `docker compose -f docker-compose.external-ollama.yml up -d` | An Ollama you already run |
260
+ | **NVIDIA Docker** | `docker compose -f docker-compose.gpu.yml up -d` | Local GPU inference |
261
+ | **Kubernetes** | `helm install libre-webui oci://ghcr.io/libre-webui/charts/libre-webui` | Cluster deployment; the chart has no Work runtime driver |
262
+ | **Desktop client** | [GitHub Releases](https://github.com/libre-webui/libre-webui/releases) | Electron UI over a separately managed backend |
263
+ | **Source** | `npm install && npm run dev` | Development |
264
+
265
+ Docker commands assume you have cloned this repository. Production deployments
266
+ should set stable `JWT_SECRET` and `ENCRYPTION_KEY` values, persist the data
267
+ directory, back up the database and key together, and terminate public traffic
268
+ with HTTPS.
269
+
270
+ > **The Docker socket is the security decision to understand.** Every Compose
271
+ > file mounts `/var/run/docker.sock` so Work can run task containers as
272
+ > siblings. That socket grants root-equivalent control of the host: treat every
273
+ > Libre WebUI administrator as a host administrator, and remove the mount if you
274
+ > do not want Work.
275
+
276
+ On Linux the socket belongs to the `docker` group rather than root, so set the
223
277
  group id once in `.env`:
224
278
 
225
279
  ```bash
@@ -227,21 +281,23 @@ echo "DOCKER_GID=$(docker run --rm -v /var/run/docker.sock:/var/run/docker.sock
227
281
  alpine stat -c '%g' /var/run/docker.sock)" >> .env
228
282
  ```
229
283
 
230
- See the Work guide for the full security discussion.
231
-
232
- [Work](https://docs.librewebui.org/WORKSPACES) · [Docker](https://docs.librewebui.org/DOCKER) · [Kubernetes](https://docs.librewebui.org/KUBERNETES) · [Environment variables](https://docs.librewebui.org/ENVIRONMENT_VARIABLES) · [Hardware guide](https://docs.librewebui.org/HARDWARE_REQUIREMENTS)
233
-
234
- ## Built from experience, for independence
235
-
236
- Libre WebUI is built around a hard-earned lesson: source availability alone does not guarantee shared power. Our response is constructive—compete by shipping better software and stronger commitments that anyone can inspect.
284
+ ## Documentation
237
285
 
238
- That means local-first defaults without forbidding the cloud, commercial support without changing the core license, and a community where identity, background, or geography never determines who belongs. Kroonen AI maintains Libre WebUI under the project's public charter, which accepts donations or grants only when they do not control the roadmap, license, or community.
286
+ Full documentation lives at
287
+ **[docs.librewebui.org](https://docs.librewebui.org)**.
239
288
 
240
- **Freedom should not be a phase in a startup's growth plan. It should be part of the architecture.**
289
+ | Getting started | Going deeper | Operating it |
290
+ | -------------------------------------------------------------------------- | ------------------------------------------------------------------------ | -------------------------------------------------------------------------- |
291
+ | [Quick start](https://docs.librewebui.org/QUICK_START) | [Work workspaces](https://docs.librewebui.org/WORKSPACES) | [Docker](https://docs.librewebui.org/DOCKER) |
292
+ | [Working with models](https://docs.librewebui.org/WORKING_WITH_MODELS) | [Provider connections](https://docs.librewebui.org/PROVIDER_CONNECTIONS) | [Kubernetes](https://docs.librewebui.org/KUBERNETES) |
293
+ | [Keyboard shortcuts](https://docs.librewebui.org/KEYBOARD_SHORTCUTS) | [Installed agent CLIs](https://docs.librewebui.org/AGENT_CLI_MODELS) | [Environment variables](https://docs.librewebui.org/ENVIRONMENT_VARIABLES) |
294
+ | [Hardware requirements](https://docs.librewebui.org/HARDWARE_REQUIREMENTS) | [Plugin architecture](https://docs.librewebui.org/PLUGIN_ARCHITECTURE) | [Authentication](https://docs.librewebui.org/AUTHENTICATION) |
295
+ | [Troubleshooting](https://docs.librewebui.org/TROUBLESHOOTING) | [Document chat](https://docs.librewebui.org/RAG_FEATURE) | [Database encryption](https://docs.librewebui.org/DATABASE_ENCRYPTION) |
241
296
 
242
297
  ## Build with us
243
298
 
244
- Libre WebUI is for people who want excellent AI software and the freedom to outgrow its maintainers.
299
+ Libre WebUI is for people who want excellent AI software and the freedom to
300
+ outgrow its maintainers.
245
301
 
246
302
  1. Fork and clone the repository.
247
303
  2. Create a branch from `dev`.
@@ -249,26 +305,48 @@ Libre WebUI is for people who want excellent AI software and the freedom to outg
249
305
  4. Add tests and documentation with your change.
250
306
  5. Open a pull request against `dev`.
251
307
 
252
- You can also help by [reporting bugs](https://github.com/libre-webui/libre-webui/issues), improving documentation, translating the interface, or contributing provider definitions.
308
+ You can also help by
309
+ [reporting bugs](https://github.com/libre-webui/libre-webui/issues), improving
310
+ documentation, translating the interface, or contributing provider definitions.
253
311
 
254
- All participation follows the [Contributor Covenant 2.1](https://www.contributor-covenant.org/version/2/1/code_of_conduct/) and the [Libre WebUI Community & Ethical Charter](https://github.com/libre-webui/libre-webui/blob/main/CHARTER.md). Report security issues privately to **security@kroonen.ai**.
312
+ All participation follows the
313
+ [Contributor Covenant 2.1](https://www.contributor-covenant.org/version/2/1/code_of_conduct/)
314
+ and the
315
+ [Libre WebUI Community & Ethical Charter](https://github.com/libre-webui/libre-webui/blob/main/CHARTER.md).
316
+ Report security issues privately to **security@kroonen.ai**.
255
317
 
256
- ## Release mirrors
318
+ ## Built from experience, for independence
257
319
 
258
- Every release tag is pushed explicitly to both
259
- [GitHub](https://github.com/libre-webui/libre-webui/releases) and the
260
- [Forgejo mirror](https://git.kroonen.ai/libre-webui/libre-webui/releases).
261
- After GitHub CI publishes a release, an idempotent mirror copies its release
262
- notes to Forgejo and adds named links to the GitHub-hosted desktop artifacts.
263
- This keeps both release indexes aligned without storing a second copy of every
264
- large binary. Maintainers can find the gated publication and backfill procedure
265
- in the [release automation guide](https://docs.librewebui.org/RELEASE_AUTOMATION).
320
+ Libre WebUI is built around a hard-earned lesson: source availability alone does
321
+ not guarantee shared power. Our response is constructive — compete by shipping
322
+ better software and stronger commitments that anyone can inspect.
266
323
 
267
- ## Stewardship and support
324
+ That means local-first defaults without forbidding the cloud, commercial support
325
+ without changing the core license, and a community where identity, background,
326
+ or geography never determines who belongs. Kroonen AI maintains Libre WebUI
327
+ under the project's public charter, which accepts donations or grants only when
328
+ they do not control the roadmap, license, or community.
268
329
 
269
- [Kroonen AI](https://kroonen.ai) funds development and provides professional deployment, integration, security review, training, customization, and SLA-backed support. Commercial services do not change the Apache 2.0 license of the core project.
330
+ **Freedom should not be a phase in a startup's growth plan. It should be part of
331
+ the architecture.**
332
+
333
+ ## Stewardship and support
270
334
 
271
- For enterprise work, contact **enterprise@kroonen.ai**. To support independent development directly, [sponsor Libre WebUI](https://github.com/sponsors/libre-webui).
335
+ [Kroonen AI](https://kroonen.ai) funds development and provides professional
336
+ deployment, integration, security review, training, customization, and
337
+ SLA-backed support. Commercial services do not change the Apache 2.0 license of
338
+ the core project.
339
+
340
+ For enterprise work, contact **enterprise@kroonen.ai**. To support independent
341
+ development directly,
342
+ [sponsor Libre WebUI](https://github.com/sponsors/libre-webui).
343
+
344
+ Every release tag is published to both
345
+ [GitHub](https://github.com/libre-webui/libre-webui/releases) and a
346
+ [Forgejo mirror](https://git.kroonen.ai/libre-webui/libre-webui/releases), so
347
+ neither index is a single point of failure. Maintainers can find the procedure
348
+ in the
349
+ [release automation guide](https://docs.librewebui.org/RELEASE_AUTOMATION).
272
350
 
273
351
  ## Project links
274
352
 
@@ -1 +1 @@
1
- {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAiBA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AA0BtC;;GAEG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAAC,QAAQ,CA0D/C;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAO1D;AAwhBD;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAMpC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAa/C;AAGD,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAiBA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AA0BtC;;GAEG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAAC,QAAQ,CA0D/C;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAO1D;AAusBD;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAMpC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAa/C;AAGD,eAAe,WAAW,CAAC"}