@intlayer/docs 9.5.5 → 9.5.7

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 (920) hide show
  1. package/README.md +0 -1
  2. package/blog/ar/i18next_vs_intlayer-i18next.md +122 -15
  3. package/blog/ar/i18next_vs_intlayer.md +130 -16
  4. package/blog/ar/lingui_vs_intlayer.md +122 -15
  5. package/blog/ar/next-intl_vs_intlayer-next-intl.md +124 -15
  6. package/blog/ar/next-intl_vs_intlayer.md +136 -20
  7. package/blog/ar/transform_existing_vite_react_app_using_compiler.md +4 -2
  8. package/blog/ar/vue-i18n_vs_intlayer-vue-i18n.md +119 -17
  9. package/blog/ar/vue-i18n_vs_intlayer.md +193 -31
  10. package/blog/ar/vue-i18n_vs_intlayer_benchmark.md +361 -0
  11. package/blog/de/i18next_vs_intlayer-i18next.md +122 -15
  12. package/blog/de/i18next_vs_intlayer.md +128 -14
  13. package/blog/de/lingui_vs_intlayer.md +122 -15
  14. package/blog/de/next-intl_vs_intlayer-next-intl.md +124 -15
  15. package/blog/de/next-intl_vs_intlayer.md +125 -15
  16. package/blog/de/transform_existing_vite_react_app_using_compiler.md +4 -2
  17. package/blog/de/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  18. package/blog/de/vue-i18n_vs_intlayer.md +193 -31
  19. package/blog/en/i18next_vs_intlayer-i18next.md +121 -14
  20. package/blog/en/i18next_vs_intlayer.md +128 -14
  21. package/blog/en/lingui_vs_intlayer.md +124 -15
  22. package/blog/en/next-intl_vs_intlayer-next-intl.md +123 -14
  23. package/blog/en/next-intl_vs_intlayer.md +125 -13
  24. package/blog/en/transform_existing_vite_react_app_using_compiler.md +4 -2
  25. package/blog/en/vue-i18n_vs_intlayer-vue-i18n.md +115 -15
  26. package/blog/en/vue-i18n_vs_intlayer.md +188 -27
  27. package/blog/en-GB/i18next_vs_intlayer-i18next.md +121 -14
  28. package/blog/en-GB/i18next_vs_intlayer.md +128 -14
  29. package/blog/en-GB/lingui_vs_intlayer.md +122 -15
  30. package/blog/en-GB/next-intl_vs_intlayer-next-intl.md +124 -15
  31. package/blog/en-GB/next-intl_vs_intlayer.md +125 -15
  32. package/blog/en-GB/transform_existing_vite_react_app_using_compiler.md +4 -2
  33. package/blog/en-GB/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  34. package/blog/en-GB/vue-i18n_vs_intlayer.md +187 -25
  35. package/blog/en-GB/vue-i18n_vs_intlayer_benchmark.md +116 -0
  36. package/blog/es/i18next_vs_intlayer-i18next.md +122 -15
  37. package/blog/es/i18next_vs_intlayer.md +128 -14
  38. package/blog/es/lingui_vs_intlayer.md +122 -15
  39. package/blog/es/next-intl_vs_intlayer-next-intl.md +124 -15
  40. package/blog/es/next-intl_vs_intlayer.md +125 -15
  41. package/blog/es/transform_existing_vite_react_app_using_compiler.md +4 -2
  42. package/blog/es/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  43. package/blog/es/vue-i18n_vs_intlayer.md +193 -31
  44. package/blog/fr/i18next_vs_intlayer-i18next.md +122 -15
  45. package/blog/fr/i18next_vs_intlayer.md +128 -14
  46. package/blog/fr/lingui_vs_intlayer.md +122 -15
  47. package/blog/fr/next-intl_vs_intlayer-next-intl.md +124 -15
  48. package/blog/fr/next-intl_vs_intlayer.md +127 -15
  49. package/blog/fr/transform_existing_vite_react_app_using_compiler.md +4 -2
  50. package/blog/fr/vue-i18n_vs_intlayer-vue-i18n.md +118 -17
  51. package/blog/fr/vue-i18n_vs_intlayer.md +192 -31
  52. package/blog/fr/vue-i18n_vs_intlayer_benchmark.md +329 -7
  53. package/blog/hi/i18next_vs_intlayer-i18next.md +122 -15
  54. package/blog/hi/i18next_vs_intlayer.md +130 -16
  55. package/blog/hi/lingui_vs_intlayer.md +122 -15
  56. package/blog/hi/next-intl_vs_intlayer-next-intl.md +124 -15
  57. package/blog/hi/next-intl_vs_intlayer.md +135 -19
  58. package/blog/hi/transform_existing_vite_react_app_using_compiler.md +4 -2
  59. package/blog/hi/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  60. package/blog/hi/vue-i18n_vs_intlayer.md +193 -31
  61. package/blog/hi/vue-i18n_vs_intlayer_benchmark.md +361 -0
  62. package/blog/id/i18next_vs_intlayer-i18next.md +122 -15
  63. package/blog/id/i18next_vs_intlayer.md +128 -14
  64. package/blog/id/lingui_vs_intlayer.md +122 -15
  65. package/blog/id/next-intl_vs_intlayer-next-intl.md +124 -15
  66. package/blog/id/next-intl_vs_intlayer.md +135 -19
  67. package/blog/id/transform_existing_vite_react_app_using_compiler.md +4 -2
  68. package/blog/id/vue-i18n_vs_intlayer-vue-i18n.md +354 -2
  69. package/blog/id/vue-i18n_vs_intlayer.md +188 -26
  70. package/blog/id/vue-i18n_vs_intlayer_benchmark.md +327 -7
  71. package/blog/it/i18next_vs_intlayer-i18next.md +122 -15
  72. package/blog/it/i18next_vs_intlayer.md +128 -14
  73. package/blog/it/lingui_vs_intlayer.md +122 -15
  74. package/blog/it/next-intl_vs_intlayer-next-intl.md +124 -15
  75. package/blog/it/next-intl_vs_intlayer.md +125 -15
  76. package/blog/it/transform_existing_vite_react_app_using_compiler.md +4 -2
  77. package/blog/it/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  78. package/blog/it/vue-i18n_vs_intlayer.md +191 -31
  79. package/blog/it/vue-i18n_vs_intlayer_benchmark.md +332 -5
  80. package/blog/ja/i18next_vs_intlayer-i18next.md +122 -15
  81. package/blog/ja/i18next_vs_intlayer.md +129 -17
  82. package/blog/ja/lingui_vs_intlayer.md +122 -15
  83. package/blog/ja/next-intl_vs_intlayer-next-intl.md +124 -15
  84. package/blog/ja/next-intl_vs_intlayer.md +124 -14
  85. package/blog/ja/transform_existing_vite_react_app_using_compiler.md +4 -2
  86. package/blog/ja/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  87. package/blog/ja/vue-i18n_vs_intlayer.md +193 -31
  88. package/blog/ja/vue-i18n_vs_intlayer_benchmark.md +361 -0
  89. package/blog/ko/i18next_vs_intlayer-i18next.md +122 -15
  90. package/blog/ko/i18next_vs_intlayer.md +129 -17
  91. package/blog/ko/lingui_vs_intlayer.md +122 -15
  92. package/blog/ko/next-intl_vs_intlayer-next-intl.md +124 -15
  93. package/blog/ko/next-intl_vs_intlayer.md +134 -18
  94. package/blog/ko/transform_existing_vite_react_app_using_compiler.md +4 -2
  95. package/blog/ko/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  96. package/blog/ko/vue-i18n_vs_intlayer.md +193 -31
  97. package/blog/pl/i18next_vs_intlayer-i18next.md +122 -15
  98. package/blog/pl/i18next_vs_intlayer.md +128 -14
  99. package/blog/pl/lingui_vs_intlayer.md +122 -15
  100. package/blog/pl/next-intl_vs_intlayer-next-intl.md +124 -15
  101. package/blog/pl/next-intl_vs_intlayer.md +134 -18
  102. package/blog/pl/transform_existing_vite_react_app_using_compiler.md +4 -2
  103. package/blog/pl/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  104. package/blog/pl/vue-i18n_vs_intlayer.md +188 -26
  105. package/blog/pl/vue-i18n_vs_intlayer_benchmark.md +361 -0
  106. package/blog/pt/i18next_vs_intlayer-i18next.md +122 -15
  107. package/blog/pt/i18next_vs_intlayer.md +128 -14
  108. package/blog/pt/lingui_vs_intlayer.md +122 -15
  109. package/blog/pt/next-intl_vs_intlayer-next-intl.md +124 -15
  110. package/blog/pt/next-intl_vs_intlayer.md +131 -15
  111. package/blog/pt/transform_existing_vite_react_app_using_compiler.md +4 -2
  112. package/blog/pt/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  113. package/blog/pt/vue-i18n_vs_intlayer.md +193 -31
  114. package/blog/pt/vue-i18n_vs_intlayer_benchmark.md +361 -0
  115. package/blog/ru/i18next_vs_intlayer-i18next.md +122 -15
  116. package/blog/ru/i18next_vs_intlayer.md +130 -16
  117. package/blog/ru/lingui_vs_intlayer.md +122 -15
  118. package/blog/ru/next-intl_vs_intlayer-next-intl.md +125 -16
  119. package/blog/ru/next-intl_vs_intlayer.md +123 -13
  120. package/blog/ru/transform_existing_vite_react_app_using_compiler.md +4 -2
  121. package/blog/ru/vue-i18n_vs_intlayer-vue-i18n.md +127 -27
  122. package/blog/ru/vue-i18n_vs_intlayer.md +193 -31
  123. package/blog/ru/vue-i18n_vs_intlayer_benchmark.md +326 -19
  124. package/blog/tr/i18next_vs_intlayer-i18next.md +122 -15
  125. package/blog/tr/i18next_vs_intlayer.md +128 -14
  126. package/blog/tr/lingui_vs_intlayer.md +122 -15
  127. package/blog/tr/next-intl_vs_intlayer-next-intl.md +124 -15
  128. package/blog/tr/next-intl_vs_intlayer.md +136 -20
  129. package/blog/tr/transform_existing_vite_react_app_using_compiler.md +4 -2
  130. package/blog/tr/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  131. package/blog/tr/vue-i18n_vs_intlayer.md +188 -26
  132. package/blog/tr/vue-i18n_vs_intlayer_benchmark.md +361 -0
  133. package/blog/uk/i18next_vs_intlayer-i18next.md +122 -15
  134. package/blog/uk/i18next_vs_intlayer.md +130 -16
  135. package/blog/uk/lingui_vs_intlayer.md +122 -15
  136. package/blog/uk/next-intl_vs_intlayer-next-intl.md +124 -15
  137. package/blog/uk/next-intl_vs_intlayer.md +135 -19
  138. package/blog/uk/transform_existing_vite_react_app_using_compiler.md +4 -2
  139. package/blog/uk/vue-i18n_vs_intlayer-vue-i18n.md +135 -17
  140. package/blog/uk/vue-i18n_vs_intlayer.md +188 -27
  141. package/blog/uk/vue-i18n_vs_intlayer_benchmark.md +361 -0
  142. package/blog/vi/i18next_vs_intlayer-i18next.md +122 -15
  143. package/blog/vi/i18next_vs_intlayer.md +128 -14
  144. package/blog/vi/lingui_vs_intlayer.md +122 -15
  145. package/blog/vi/next-intl_vs_intlayer-next-intl.md +124 -15
  146. package/blog/vi/next-intl_vs_intlayer.md +135 -19
  147. package/blog/vi/transform_existing_vite_react_app_using_compiler.md +4 -2
  148. package/blog/vi/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  149. package/blog/vi/vue-i18n_vs_intlayer.md +188 -26
  150. package/blog/vi/vue-i18n_vs_intlayer_benchmark.md +361 -0
  151. package/blog/zh/i18next_vs_intlayer-i18next.md +122 -15
  152. package/blog/zh/i18next_vs_intlayer.md +128 -14
  153. package/blog/zh/lingui_vs_intlayer.md +122 -15
  154. package/blog/zh/next-intl_vs_intlayer-next-intl.md +124 -15
  155. package/blog/zh/next-intl_vs_intlayer.md +125 -15
  156. package/blog/zh/transform_existing_vite_react_app_using_compiler.md +4 -2
  157. package/blog/zh/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  158. package/blog/zh/vue-i18n_vs_intlayer.md +192 -31
  159. package/blog/zh/vue-i18n_vs_intlayer_benchmark.md +340 -9
  160. package/dist/cjs/generated/docs.entry.cjs +40 -40
  161. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  162. package/dist/cjs/index.cjs +2 -2
  163. package/dist/esm/generated/docs.entry.mjs +40 -40
  164. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  165. package/dist/esm/index.mjs +2 -2
  166. package/dist/types/generated/docs.entry.d.ts +2 -2
  167. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  168. package/docs/ar/benchmark/nextjs.md +13 -13
  169. package/docs/ar/benchmark/solid.md +5 -5
  170. package/docs/ar/benchmark/svelte.md +4 -4
  171. package/docs/ar/benchmark/tanstack.md +14 -13
  172. package/docs/ar/benchmark/vue.md +5 -5
  173. package/docs/ar/chrome_extension.md +130 -0
  174. package/docs/ar/cli/index.md +6 -1
  175. package/docs/ar/cli/infra.md +162 -0
  176. package/docs/ar/cli/init.md +24 -1
  177. package/docs/ar/dictionary/html.md +173 -5
  178. package/docs/ar/dictionary/markdown.md +263 -1
  179. package/docs/ar/intlayer_with_analog.md +23 -1
  180. package/docs/ar/intlayer_with_angular_19.md +24 -1
  181. package/docs/ar/intlayer_with_angular_21.md +24 -1
  182. package/docs/ar/intlayer_with_astro.md +42 -32
  183. package/docs/ar/intlayer_with_astro_lit.md +56 -36
  184. package/docs/ar/intlayer_with_astro_preact.md +57 -36
  185. package/docs/ar/intlayer_with_astro_react.md +57 -36
  186. package/docs/ar/intlayer_with_astro_solid.md +57 -36
  187. package/docs/ar/intlayer_with_astro_svelte.md +56 -36
  188. package/docs/ar/intlayer_with_astro_vue.md +56 -36
  189. package/docs/ar/intlayer_with_react_router_v7.md +12 -1
  190. package/docs/ar/intlayer_with_remix_3.md +22 -1
  191. package/docs/ar/intlayer_with_solid_start.md +14 -7
  192. package/docs/ar/intlayer_with_svelte_kit.md +12 -1
  193. package/docs/ar/intlayer_with_tanstack+solid.md +13 -2
  194. package/docs/ar/intlayer_with_tanstack.md +13 -6
  195. package/docs/ar/intlayer_with_vite+lit.md +75 -3
  196. package/docs/ar/intlayer_with_vite+preact.md +27 -19
  197. package/docs/ar/intlayer_with_vite+react.md +27 -19
  198. package/docs/ar/intlayer_with_vite+solid.md +27 -19
  199. package/docs/ar/intlayer_with_vite+svelte.md +27 -19
  200. package/docs/ar/intlayer_with_vite+vanilla.md +16 -3
  201. package/docs/ar/intlayer_with_vite+vue.md +27 -19
  202. package/docs/ar/introduction.md +0 -1
  203. package/docs/ar/readme.md +0 -1
  204. package/docs/ar/releases/v8.md +1 -5
  205. package/docs/ar/self_hosting.md +406 -231
  206. package/docs/bn/intlayer_with_vite+lit.md +75 -3
  207. package/docs/bn/intlayer_with_vite+vanilla.md +16 -3
  208. package/docs/bn/introduction.md +0 -1
  209. package/docs/cs/intlayer_with_vite+lit.md +75 -3
  210. package/docs/cs/intlayer_with_vite+vanilla.md +16 -3
  211. package/docs/cs/introduction.md +0 -1
  212. package/docs/de/benchmark/nextjs.md +13 -13
  213. package/docs/de/benchmark/solid.md +5 -5
  214. package/docs/de/benchmark/svelte.md +4 -4
  215. package/docs/de/benchmark/tanstack.md +14 -13
  216. package/docs/de/benchmark/vue.md +5 -5
  217. package/docs/de/chrome_extension.md +130 -0
  218. package/docs/de/cli/index.md +6 -1
  219. package/docs/de/cli/infra.md +162 -0
  220. package/docs/de/cli/init.md +24 -1
  221. package/docs/de/dictionary/html.md +173 -5
  222. package/docs/de/dictionary/markdown.md +263 -1
  223. package/docs/de/intlayer_with_analog.md +23 -1
  224. package/docs/de/intlayer_with_angular_19.md +24 -1
  225. package/docs/de/intlayer_with_angular_21.md +24 -1
  226. package/docs/de/intlayer_with_astro.md +35 -25
  227. package/docs/de/intlayer_with_astro_lit.md +47 -27
  228. package/docs/de/intlayer_with_astro_preact.md +48 -27
  229. package/docs/de/intlayer_with_astro_react.md +48 -27
  230. package/docs/de/intlayer_with_astro_solid.md +48 -27
  231. package/docs/de/intlayer_with_astro_svelte.md +47 -27
  232. package/docs/de/intlayer_with_astro_vue.md +47 -27
  233. package/docs/de/intlayer_with_react_router_v7.md +12 -1
  234. package/docs/de/intlayer_with_remix_3.md +22 -1
  235. package/docs/de/intlayer_with_solid_start.md +14 -7
  236. package/docs/de/intlayer_with_svelte_kit.md +12 -1
  237. package/docs/de/intlayer_with_tanstack+solid.md +13 -2
  238. package/docs/de/intlayer_with_tanstack.md +13 -6
  239. package/docs/de/intlayer_with_vite+lit.md +75 -3
  240. package/docs/de/intlayer_with_vite+preact.md +16 -3
  241. package/docs/de/intlayer_with_vite+react.md +16 -3
  242. package/docs/de/intlayer_with_vite+solid.md +16 -3
  243. package/docs/de/intlayer_with_vite+svelte.md +16 -3
  244. package/docs/de/intlayer_with_vite+vanilla.md +16 -3
  245. package/docs/de/intlayer_with_vite+vue.md +16 -3
  246. package/docs/de/introduction.md +0 -1
  247. package/docs/de/readme.md +0 -1
  248. package/docs/de/releases/v8.md +1 -5
  249. package/docs/de/self_hosting.md +404 -227
  250. package/docs/en/benchmark/nextjs.md +13 -13
  251. package/docs/en/benchmark/solid.md +5 -5
  252. package/docs/en/benchmark/svelte.md +4 -4
  253. package/docs/en/benchmark/tanstack.md +14 -13
  254. package/docs/en/benchmark/vue.md +5 -5
  255. package/docs/en/chrome_extension.md +130 -0
  256. package/docs/en/cli/index.md +6 -1
  257. package/docs/en/cli/infra.md +175 -0
  258. package/docs/en/cli/init.md +25 -1
  259. package/docs/en/dictionary/html.md +173 -5
  260. package/docs/en/dictionary/markdown.md +263 -1
  261. package/docs/en/intlayer_with_analog.md +23 -1
  262. package/docs/en/intlayer_with_angular_19.md +24 -1
  263. package/docs/en/intlayer_with_angular_21.md +24 -1
  264. package/docs/en/intlayer_with_astro.md +29 -21
  265. package/docs/en/intlayer_with_astro_lit.md +46 -26
  266. package/docs/en/intlayer_with_astro_preact.md +47 -26
  267. package/docs/en/intlayer_with_astro_react.md +47 -26
  268. package/docs/en/intlayer_with_astro_solid.md +47 -26
  269. package/docs/en/intlayer_with_astro_svelte.md +46 -26
  270. package/docs/en/intlayer_with_astro_vue.md +46 -26
  271. package/docs/en/intlayer_with_react_router_v7.md +12 -1
  272. package/docs/en/intlayer_with_remix_3.md +22 -1
  273. package/docs/en/intlayer_with_solid_start.md +14 -7
  274. package/docs/en/intlayer_with_svelte_kit.md +12 -1
  275. package/docs/en/intlayer_with_tanstack+solid.md +13 -2
  276. package/docs/en/intlayer_with_tanstack.md +12 -5
  277. package/docs/en/intlayer_with_vite+lit.md +75 -3
  278. package/docs/en/intlayer_with_vite+preact.md +16 -3
  279. package/docs/en/intlayer_with_vite+react.md +16 -3
  280. package/docs/en/intlayer_with_vite+solid.md +16 -3
  281. package/docs/en/intlayer_with_vite+svelte.md +16 -3
  282. package/docs/en/intlayer_with_vite+vanilla.md +16 -3
  283. package/docs/en/intlayer_with_vite+vue.md +16 -3
  284. package/docs/en/introduction.md +0 -1
  285. package/docs/en/readme.md +0 -1
  286. package/docs/en/releases/v8.md +1 -5
  287. package/docs/en/self_hosting.md +418 -176
  288. package/docs/en-GB/benchmark/nextjs.md +13 -13
  289. package/docs/en-GB/benchmark/solid.md +5 -5
  290. package/docs/en-GB/benchmark/svelte.md +4 -4
  291. package/docs/en-GB/benchmark/tanstack.md +14 -13
  292. package/docs/en-GB/benchmark/vue.md +5 -5
  293. package/docs/en-GB/chrome_extension.md +130 -0
  294. package/docs/en-GB/cli/index.md +6 -1
  295. package/docs/en-GB/cli/infra.md +162 -0
  296. package/docs/en-GB/cli/init.md +24 -1
  297. package/docs/en-GB/dictionary/html.md +173 -5
  298. package/docs/en-GB/dictionary/markdown.md +263 -1
  299. package/docs/en-GB/intlayer_with_analog.md +23 -1
  300. package/docs/en-GB/intlayer_with_angular_19.md +24 -1
  301. package/docs/en-GB/intlayer_with_angular_21.md +24 -1
  302. package/docs/en-GB/intlayer_with_astro.md +35 -25
  303. package/docs/en-GB/intlayer_with_astro_lit.md +47 -27
  304. package/docs/en-GB/intlayer_with_astro_preact.md +48 -27
  305. package/docs/en-GB/intlayer_with_astro_react.md +48 -27
  306. package/docs/en-GB/intlayer_with_astro_solid.md +48 -27
  307. package/docs/en-GB/intlayer_with_astro_svelte.md +47 -27
  308. package/docs/en-GB/intlayer_with_astro_vue.md +47 -27
  309. package/docs/en-GB/intlayer_with_react_router_v7.md +12 -1
  310. package/docs/en-GB/intlayer_with_remix_3.md +22 -1
  311. package/docs/en-GB/intlayer_with_solid_start.md +14 -7
  312. package/docs/en-GB/intlayer_with_svelte_kit.md +12 -1
  313. package/docs/en-GB/intlayer_with_tanstack+solid.md +13 -2
  314. package/docs/en-GB/intlayer_with_tanstack.md +13 -6
  315. package/docs/en-GB/intlayer_with_vite+lit.md +75 -3
  316. package/docs/en-GB/intlayer_with_vite+preact.md +16 -3
  317. package/docs/en-GB/intlayer_with_vite+react.md +16 -3
  318. package/docs/en-GB/intlayer_with_vite+solid.md +25 -15
  319. package/docs/en-GB/intlayer_with_vite+svelte.md +16 -3
  320. package/docs/en-GB/intlayer_with_vite+vanilla.md +16 -3
  321. package/docs/en-GB/intlayer_with_vite+vue.md +16 -3
  322. package/docs/en-GB/introduction.md +0 -1
  323. package/docs/en-GB/readme.md +0 -1
  324. package/docs/en-GB/releases/v8.md +1 -5
  325. package/docs/en-GB/self_hosting.md +381 -206
  326. package/docs/es/benchmark/nextjs.md +13 -13
  327. package/docs/es/benchmark/solid.md +5 -5
  328. package/docs/es/benchmark/svelte.md +4 -4
  329. package/docs/es/benchmark/tanstack.md +14 -13
  330. package/docs/es/benchmark/vue.md +5 -5
  331. package/docs/es/chrome_extension.md +130 -0
  332. package/docs/es/cli/index.md +6 -1
  333. package/docs/es/cli/infra.md +162 -0
  334. package/docs/es/cli/init.md +24 -1
  335. package/docs/es/dictionary/html.md +173 -5
  336. package/docs/es/dictionary/markdown.md +263 -1
  337. package/docs/es/intlayer_with_analog.md +23 -1
  338. package/docs/es/intlayer_with_angular_19.md +24 -1
  339. package/docs/es/intlayer_with_angular_21.md +24 -1
  340. package/docs/es/intlayer_with_astro.md +35 -25
  341. package/docs/es/intlayer_with_astro_lit.md +47 -27
  342. package/docs/es/intlayer_with_astro_preact.md +48 -27
  343. package/docs/es/intlayer_with_astro_react.md +48 -27
  344. package/docs/es/intlayer_with_astro_solid.md +48 -27
  345. package/docs/es/intlayer_with_astro_svelte.md +47 -27
  346. package/docs/es/intlayer_with_astro_vue.md +47 -27
  347. package/docs/es/intlayer_with_react_router_v7.md +12 -1
  348. package/docs/es/intlayer_with_remix_3.md +22 -1
  349. package/docs/es/intlayer_with_solid_start.md +14 -7
  350. package/docs/es/intlayer_with_svelte_kit.md +12 -1
  351. package/docs/es/intlayer_with_tanstack+solid.md +13 -2
  352. package/docs/es/intlayer_with_tanstack.md +13 -6
  353. package/docs/es/intlayer_with_vite+lit.md +75 -3
  354. package/docs/es/intlayer_with_vite+preact.md +16 -3
  355. package/docs/es/intlayer_with_vite+react.md +16 -3
  356. package/docs/es/intlayer_with_vite+solid.md +16 -3
  357. package/docs/es/intlayer_with_vite+svelte.md +16 -3
  358. package/docs/es/intlayer_with_vite+vanilla.md +16 -3
  359. package/docs/es/intlayer_with_vite+vue.md +16 -3
  360. package/docs/es/introduction.md +0 -1
  361. package/docs/es/readme.md +0 -1
  362. package/docs/es/releases/v8.md +1 -5
  363. package/docs/es/self_hosting.md +400 -223
  364. package/docs/fr/benchmark/nextjs.md +13 -13
  365. package/docs/fr/benchmark/solid.md +5 -5
  366. package/docs/fr/benchmark/svelte.md +4 -4
  367. package/docs/fr/benchmark/tanstack.md +14 -13
  368. package/docs/fr/benchmark/vue.md +5 -5
  369. package/docs/fr/chrome_extension.md +130 -0
  370. package/docs/fr/cli/index.md +6 -1
  371. package/docs/fr/cli/infra.md +162 -0
  372. package/docs/fr/cli/init.md +24 -1
  373. package/docs/fr/dictionary/html.md +173 -5
  374. package/docs/fr/dictionary/markdown.md +265 -4
  375. package/docs/fr/intlayer_with_analog.md +23 -1
  376. package/docs/fr/intlayer_with_angular_19.md +24 -1
  377. package/docs/fr/intlayer_with_angular_21.md +24 -1
  378. package/docs/fr/intlayer_with_astro.md +36 -26
  379. package/docs/fr/intlayer_with_astro_lit.md +48 -28
  380. package/docs/fr/intlayer_with_astro_preact.md +49 -28
  381. package/docs/fr/intlayer_with_astro_react.md +49 -28
  382. package/docs/fr/intlayer_with_astro_solid.md +49 -28
  383. package/docs/fr/intlayer_with_astro_svelte.md +48 -28
  384. package/docs/fr/intlayer_with_astro_vue.md +48 -28
  385. package/docs/fr/intlayer_with_react_router_v7.md +15 -4
  386. package/docs/fr/intlayer_with_remix_3.md +22 -1
  387. package/docs/fr/intlayer_with_solid_start.md +14 -7
  388. package/docs/fr/intlayer_with_svelte_kit.md +15 -4
  389. package/docs/fr/intlayer_with_tanstack+solid.md +15 -4
  390. package/docs/fr/intlayer_with_tanstack.md +13 -6
  391. package/docs/fr/intlayer_with_vite+lit.md +75 -3
  392. package/docs/fr/intlayer_with_vite+preact.md +19 -6
  393. package/docs/fr/intlayer_with_vite+react.md +19 -6
  394. package/docs/fr/intlayer_with_vite+solid.md +19 -6
  395. package/docs/fr/intlayer_with_vite+svelte.md +19 -6
  396. package/docs/fr/intlayer_with_vite+vanilla.md +19 -6
  397. package/docs/fr/intlayer_with_vite+vue.md +19 -6
  398. package/docs/fr/introduction.md +0 -1
  399. package/docs/fr/readme.md +0 -1
  400. package/docs/fr/releases/v8.md +1 -5
  401. package/docs/fr/self_hosting.md +401 -224
  402. package/docs/hi/benchmark/nextjs.md +13 -13
  403. package/docs/hi/benchmark/solid.md +5 -5
  404. package/docs/hi/benchmark/svelte.md +4 -4
  405. package/docs/hi/benchmark/tanstack.md +14 -13
  406. package/docs/hi/benchmark/vue.md +5 -5
  407. package/docs/hi/chrome_extension.md +130 -0
  408. package/docs/hi/cli/index.md +6 -1
  409. package/docs/hi/cli/infra.md +162 -0
  410. package/docs/hi/cli/init.md +24 -1
  411. package/docs/hi/dictionary/html.md +173 -5
  412. package/docs/hi/dictionary/markdown.md +263 -1
  413. package/docs/hi/intlayer_with_analog.md +23 -1
  414. package/docs/hi/intlayer_with_angular_19.md +24 -1
  415. package/docs/hi/intlayer_with_angular_21.md +24 -1
  416. package/docs/hi/intlayer_with_astro.md +38 -31
  417. package/docs/hi/intlayer_with_astro_lit.md +50 -33
  418. package/docs/hi/intlayer_with_astro_preact.md +51 -33
  419. package/docs/hi/intlayer_with_astro_react.md +51 -33
  420. package/docs/hi/intlayer_with_astro_solid.md +51 -33
  421. package/docs/hi/intlayer_with_astro_svelte.md +50 -33
  422. package/docs/hi/intlayer_with_astro_vue.md +50 -33
  423. package/docs/hi/intlayer_with_react_router_v7.md +20 -12
  424. package/docs/hi/intlayer_with_remix_3.md +22 -1
  425. package/docs/hi/intlayer_with_solid_start.md +14 -7
  426. package/docs/hi/intlayer_with_svelte_kit.md +20 -12
  427. package/docs/hi/intlayer_with_tanstack+solid.md +13 -2
  428. package/docs/hi/intlayer_with_tanstack.md +21 -17
  429. package/docs/hi/intlayer_with_vite+lit.md +75 -3
  430. package/docs/hi/intlayer_with_vite+preact.md +24 -14
  431. package/docs/hi/intlayer_with_vite+react.md +24 -14
  432. package/docs/hi/intlayer_with_vite+solid.md +24 -14
  433. package/docs/hi/intlayer_with_vite+svelte.md +24 -14
  434. package/docs/hi/intlayer_with_vite+vanilla.md +16 -3
  435. package/docs/hi/intlayer_with_vite+vue.md +24 -14
  436. package/docs/hi/introduction.md +0 -1
  437. package/docs/hi/readme.md +0 -1
  438. package/docs/hi/releases/v8.md +1 -5
  439. package/docs/hi/self_hosting.md +409 -235
  440. package/docs/id/benchmark/nextjs.md +13 -13
  441. package/docs/id/benchmark/solid.md +5 -5
  442. package/docs/id/benchmark/svelte.md +4 -4
  443. package/docs/id/benchmark/tanstack.md +14 -13
  444. package/docs/id/benchmark/vue.md +5 -5
  445. package/docs/id/chrome_extension.md +130 -0
  446. package/docs/id/cli/index.md +6 -1
  447. package/docs/id/cli/infra.md +162 -0
  448. package/docs/id/cli/init.md +24 -1
  449. package/docs/id/dictionary/html.md +173 -5
  450. package/docs/id/dictionary/markdown.md +263 -1
  451. package/docs/id/intlayer_with_analog.md +23 -1
  452. package/docs/id/intlayer_with_angular_19.md +24 -1
  453. package/docs/id/intlayer_with_angular_21.md +24 -1
  454. package/docs/id/intlayer_with_astro.md +35 -25
  455. package/docs/id/intlayer_with_astro_lit.md +47 -27
  456. package/docs/id/intlayer_with_astro_preact.md +48 -27
  457. package/docs/id/intlayer_with_astro_react.md +48 -27
  458. package/docs/id/intlayer_with_astro_solid.md +48 -27
  459. package/docs/id/intlayer_with_astro_svelte.md +47 -27
  460. package/docs/id/intlayer_with_astro_vue.md +47 -27
  461. package/docs/id/intlayer_with_react_router_v7.md +12 -1
  462. package/docs/id/intlayer_with_remix_3.md +22 -1
  463. package/docs/id/intlayer_with_solid_start.md +14 -7
  464. package/docs/id/intlayer_with_svelte_kit.md +12 -1
  465. package/docs/id/intlayer_with_tanstack+solid.md +13 -2
  466. package/docs/id/intlayer_with_tanstack.md +13 -6
  467. package/docs/id/intlayer_with_vite+lit.md +75 -3
  468. package/docs/id/intlayer_with_vite+preact.md +16 -3
  469. package/docs/id/intlayer_with_vite+react.md +16 -3
  470. package/docs/id/intlayer_with_vite+solid.md +16 -3
  471. package/docs/id/intlayer_with_vite+svelte.md +16 -3
  472. package/docs/id/intlayer_with_vite+vanilla.md +16 -3
  473. package/docs/id/intlayer_with_vite+vue.md +16 -3
  474. package/docs/id/introduction.md +0 -1
  475. package/docs/id/readme.md +0 -1
  476. package/docs/id/releases/v8.md +1 -5
  477. package/docs/id/self_hosting.md +416 -243
  478. package/docs/it/benchmark/nextjs.md +13 -13
  479. package/docs/it/benchmark/solid.md +5 -5
  480. package/docs/it/benchmark/svelte.md +4 -4
  481. package/docs/it/benchmark/tanstack.md +14 -13
  482. package/docs/it/benchmark/vue.md +5 -5
  483. package/docs/it/chrome_extension.md +130 -0
  484. package/docs/it/cli/index.md +6 -1
  485. package/docs/it/cli/infra.md +162 -0
  486. package/docs/it/cli/init.md +24 -1
  487. package/docs/it/dictionary/html.md +173 -5
  488. package/docs/it/dictionary/markdown.md +263 -1
  489. package/docs/it/intlayer_with_analog.md +23 -1
  490. package/docs/it/intlayer_with_angular_19.md +24 -1
  491. package/docs/it/intlayer_with_angular_21.md +24 -1
  492. package/docs/it/intlayer_with_astro.md +35 -25
  493. package/docs/it/intlayer_with_astro_lit.md +47 -27
  494. package/docs/it/intlayer_with_astro_preact.md +48 -27
  495. package/docs/it/intlayer_with_astro_react.md +48 -27
  496. package/docs/it/intlayer_with_astro_solid.md +48 -27
  497. package/docs/it/intlayer_with_astro_svelte.md +47 -27
  498. package/docs/it/intlayer_with_astro_vue.md +47 -27
  499. package/docs/it/intlayer_with_react_router_v7.md +12 -1
  500. package/docs/it/intlayer_with_remix_3.md +22 -1
  501. package/docs/it/intlayer_with_solid_start.md +14 -7
  502. package/docs/it/intlayer_with_svelte_kit.md +12 -1
  503. package/docs/it/intlayer_with_tanstack+solid.md +13 -2
  504. package/docs/it/intlayer_with_tanstack.md +13 -6
  505. package/docs/it/intlayer_with_vite+lit.md +75 -3
  506. package/docs/it/intlayer_with_vite+preact.md +16 -3
  507. package/docs/it/intlayer_with_vite+react.md +16 -3
  508. package/docs/it/intlayer_with_vite+solid.md +16 -3
  509. package/docs/it/intlayer_with_vite+svelte.md +16 -3
  510. package/docs/it/intlayer_with_vite+vanilla.md +16 -3
  511. package/docs/it/intlayer_with_vite+vue.md +16 -3
  512. package/docs/it/introduction.md +0 -1
  513. package/docs/it/readme.md +0 -1
  514. package/docs/it/releases/v8.md +1 -5
  515. package/docs/it/self_hosting.md +412 -237
  516. package/docs/ja/benchmark/nextjs.md +13 -13
  517. package/docs/ja/benchmark/solid.md +5 -5
  518. package/docs/ja/benchmark/svelte.md +4 -4
  519. package/docs/ja/benchmark/tanstack.md +13 -12
  520. package/docs/ja/benchmark/vue.md +5 -5
  521. package/docs/ja/chrome_extension.md +130 -0
  522. package/docs/ja/cli/index.md +6 -1
  523. package/docs/ja/cli/infra.md +162 -0
  524. package/docs/ja/cli/init.md +24 -1
  525. package/docs/ja/dictionary/html.md +173 -5
  526. package/docs/ja/dictionary/markdown.md +263 -1
  527. package/docs/ja/intlayer_with_analog.md +23 -1
  528. package/docs/ja/intlayer_with_angular_19.md +24 -1
  529. package/docs/ja/intlayer_with_angular_21.md +24 -1
  530. package/docs/ja/intlayer_with_astro.md +35 -25
  531. package/docs/ja/intlayer_with_astro_lit.md +47 -27
  532. package/docs/ja/intlayer_with_astro_preact.md +48 -27
  533. package/docs/ja/intlayer_with_astro_react.md +48 -27
  534. package/docs/ja/intlayer_with_astro_solid.md +48 -27
  535. package/docs/ja/intlayer_with_astro_svelte.md +47 -27
  536. package/docs/ja/intlayer_with_astro_vue.md +47 -27
  537. package/docs/ja/intlayer_with_react_router_v7.md +12 -1
  538. package/docs/ja/intlayer_with_remix_3.md +22 -1
  539. package/docs/ja/intlayer_with_solid_start.md +14 -7
  540. package/docs/ja/intlayer_with_svelte_kit.md +21 -15
  541. package/docs/ja/intlayer_with_tanstack+solid.md +13 -2
  542. package/docs/ja/intlayer_with_tanstack.md +13 -6
  543. package/docs/ja/intlayer_with_vite+lit.md +75 -3
  544. package/docs/ja/intlayer_with_vite+preact.md +16 -3
  545. package/docs/ja/intlayer_with_vite+react.md +16 -3
  546. package/docs/ja/intlayer_with_vite+solid.md +16 -3
  547. package/docs/ja/intlayer_with_vite+svelte.md +16 -3
  548. package/docs/ja/intlayer_with_vite+vanilla.md +16 -3
  549. package/docs/ja/intlayer_with_vite+vue.md +16 -3
  550. package/docs/ja/introduction.md +0 -1
  551. package/docs/ja/readme.md +0 -1
  552. package/docs/ja/releases/v8.md +1 -5
  553. package/docs/ja/self_hosting.md +398 -223
  554. package/docs/ko/benchmark/nextjs.md +13 -13
  555. package/docs/ko/benchmark/solid.md +5 -5
  556. package/docs/ko/benchmark/svelte.md +4 -4
  557. package/docs/ko/benchmark/tanstack.md +14 -13
  558. package/docs/ko/benchmark/vue.md +5 -5
  559. package/docs/ko/chrome_extension.md +130 -0
  560. package/docs/ko/cli/index.md +6 -1
  561. package/docs/ko/cli/infra.md +162 -0
  562. package/docs/ko/cli/init.md +24 -1
  563. package/docs/ko/dictionary/html.md +173 -5
  564. package/docs/ko/dictionary/markdown.md +263 -1
  565. package/docs/ko/intlayer_with_analog.md +23 -1
  566. package/docs/ko/intlayer_with_angular_19.md +24 -1
  567. package/docs/ko/intlayer_with_angular_21.md +24 -1
  568. package/docs/ko/intlayer_with_astro.md +29 -21
  569. package/docs/ko/intlayer_with_astro_lit.md +47 -27
  570. package/docs/ko/intlayer_with_astro_preact.md +48 -27
  571. package/docs/ko/intlayer_with_astro_react.md +48 -27
  572. package/docs/ko/intlayer_with_astro_solid.md +48 -27
  573. package/docs/ko/intlayer_with_astro_svelte.md +47 -27
  574. package/docs/ko/intlayer_with_astro_vue.md +47 -27
  575. package/docs/ko/intlayer_with_react_router_v7.md +12 -1
  576. package/docs/ko/intlayer_with_remix_3.md +22 -1
  577. package/docs/ko/intlayer_with_solid_start.md +14 -7
  578. package/docs/ko/intlayer_with_svelte_kit.md +12 -1
  579. package/docs/ko/intlayer_with_tanstack+solid.md +13 -2
  580. package/docs/ko/intlayer_with_tanstack.md +13 -6
  581. package/docs/ko/intlayer_with_vite+lit.md +75 -3
  582. package/docs/ko/intlayer_with_vite+preact.md +16 -3
  583. package/docs/ko/intlayer_with_vite+react.md +16 -3
  584. package/docs/ko/intlayer_with_vite+solid.md +26 -16
  585. package/docs/ko/intlayer_with_vite+svelte.md +16 -3
  586. package/docs/ko/intlayer_with_vite+vanilla.md +16 -3
  587. package/docs/ko/intlayer_with_vite+vue.md +16 -3
  588. package/docs/ko/introduction.md +0 -1
  589. package/docs/ko/readme.md +0 -1
  590. package/docs/ko/releases/v8.md +1 -5
  591. package/docs/ko/self_hosting.md +411 -238
  592. package/docs/nl/intlayer_with_vite+lit.md +75 -3
  593. package/docs/nl/intlayer_with_vite+vanilla.md +16 -3
  594. package/docs/nl/introduction.md +0 -1
  595. package/docs/pl/benchmark/nextjs.md +13 -13
  596. package/docs/pl/benchmark/solid.md +5 -5
  597. package/docs/pl/benchmark/svelte.md +4 -4
  598. package/docs/pl/benchmark/tanstack.md +14 -13
  599. package/docs/pl/benchmark/vue.md +5 -5
  600. package/docs/pl/chrome_extension.md +130 -0
  601. package/docs/pl/cli/index.md +6 -1
  602. package/docs/pl/cli/infra.md +162 -0
  603. package/docs/pl/cli/init.md +24 -1
  604. package/docs/pl/dictionary/html.md +173 -5
  605. package/docs/pl/dictionary/markdown.md +263 -1
  606. package/docs/pl/intlayer_with_analog.md +23 -1
  607. package/docs/pl/intlayer_with_angular_19.md +24 -1
  608. package/docs/pl/intlayer_with_angular_21.md +24 -1
  609. package/docs/pl/intlayer_with_astro.md +29 -21
  610. package/docs/pl/intlayer_with_astro_lit.md +47 -27
  611. package/docs/pl/intlayer_with_astro_preact.md +48 -27
  612. package/docs/pl/intlayer_with_astro_react.md +48 -27
  613. package/docs/pl/intlayer_with_astro_solid.md +48 -27
  614. package/docs/pl/intlayer_with_astro_svelte.md +47 -27
  615. package/docs/pl/intlayer_with_astro_vue.md +47 -27
  616. package/docs/pl/intlayer_with_react_router_v7.md +12 -1
  617. package/docs/pl/intlayer_with_remix_3.md +22 -1
  618. package/docs/pl/intlayer_with_solid_start.md +14 -7
  619. package/docs/pl/intlayer_with_svelte_kit.md +12 -1
  620. package/docs/pl/intlayer_with_tanstack+solid.md +13 -2
  621. package/docs/pl/intlayer_with_tanstack.md +13 -6
  622. package/docs/pl/intlayer_with_vite+lit.md +75 -3
  623. package/docs/pl/intlayer_with_vite+preact.md +16 -3
  624. package/docs/pl/intlayer_with_vite+react.md +16 -3
  625. package/docs/pl/intlayer_with_vite+solid.md +16 -3
  626. package/docs/pl/intlayer_with_vite+svelte.md +16 -3
  627. package/docs/pl/intlayer_with_vite+vanilla.md +16 -3
  628. package/docs/pl/intlayer_with_vite+vue.md +16 -3
  629. package/docs/pl/introduction.md +0 -1
  630. package/docs/pl/readme.md +0 -1
  631. package/docs/pl/releases/v8.md +1 -5
  632. package/docs/pl/self_hosting.md +408 -233
  633. package/docs/pt/benchmark/nextjs.md +13 -13
  634. package/docs/pt/benchmark/solid.md +5 -5
  635. package/docs/pt/benchmark/svelte.md +4 -4
  636. package/docs/pt/benchmark/tanstack.md +14 -13
  637. package/docs/pt/benchmark/vue.md +5 -5
  638. package/docs/pt/chrome_extension.md +130 -0
  639. package/docs/pt/cli/index.md +6 -1
  640. package/docs/pt/cli/infra.md +162 -0
  641. package/docs/pt/cli/init.md +24 -1
  642. package/docs/pt/dictionary/html.md +173 -5
  643. package/docs/pt/dictionary/markdown.md +263 -1
  644. package/docs/pt/intlayer_with_analog.md +23 -1
  645. package/docs/pt/intlayer_with_angular_19.md +24 -1
  646. package/docs/pt/intlayer_with_angular_21.md +24 -1
  647. package/docs/pt/intlayer_with_astro.md +29 -21
  648. package/docs/pt/intlayer_with_astro_lit.md +47 -27
  649. package/docs/pt/intlayer_with_astro_preact.md +48 -27
  650. package/docs/pt/intlayer_with_astro_react.md +48 -27
  651. package/docs/pt/intlayer_with_astro_solid.md +48 -27
  652. package/docs/pt/intlayer_with_astro_svelte.md +47 -27
  653. package/docs/pt/intlayer_with_astro_vue.md +47 -27
  654. package/docs/pt/intlayer_with_react_router_v7.md +12 -1
  655. package/docs/pt/intlayer_with_remix_3.md +22 -1
  656. package/docs/pt/intlayer_with_solid_start.md +14 -7
  657. package/docs/pt/intlayer_with_svelte_kit.md +12 -1
  658. package/docs/pt/intlayer_with_tanstack+solid.md +13 -2
  659. package/docs/pt/intlayer_with_tanstack.md +13 -6
  660. package/docs/pt/intlayer_with_vite+lit.md +75 -3
  661. package/docs/pt/intlayer_with_vite+preact.md +16 -3
  662. package/docs/pt/intlayer_with_vite+react.md +16 -3
  663. package/docs/pt/intlayer_with_vite+solid.md +16 -3
  664. package/docs/pt/intlayer_with_vite+svelte.md +16 -3
  665. package/docs/pt/intlayer_with_vite+vanilla.md +16 -3
  666. package/docs/pt/intlayer_with_vite+vue.md +16 -3
  667. package/docs/pt/introduction.md +0 -1
  668. package/docs/pt/readme.md +0 -1
  669. package/docs/pt/releases/v8.md +1 -5
  670. package/docs/pt/self_hosting.md +399 -224
  671. package/docs/ru/benchmark/nextjs.md +13 -13
  672. package/docs/ru/benchmark/solid.md +5 -5
  673. package/docs/ru/benchmark/svelte.md +4 -4
  674. package/docs/ru/benchmark/tanstack.md +14 -13
  675. package/docs/ru/benchmark/vue.md +5 -5
  676. package/docs/ru/chrome_extension.md +130 -0
  677. package/docs/ru/cli/index.md +6 -1
  678. package/docs/ru/cli/infra.md +162 -0
  679. package/docs/ru/cli/init.md +24 -1
  680. package/docs/ru/dictionary/html.md +173 -5
  681. package/docs/ru/dictionary/markdown.md +263 -1
  682. package/docs/ru/intlayer_with_analog.md +23 -1
  683. package/docs/ru/intlayer_with_angular_19.md +24 -1
  684. package/docs/ru/intlayer_with_angular_21.md +24 -1
  685. package/docs/ru/intlayer_with_astro.md +35 -25
  686. package/docs/ru/intlayer_with_astro_lit.md +47 -27
  687. package/docs/ru/intlayer_with_astro_preact.md +48 -27
  688. package/docs/ru/intlayer_with_astro_react.md +48 -27
  689. package/docs/ru/intlayer_with_astro_solid.md +48 -27
  690. package/docs/ru/intlayer_with_astro_svelte.md +47 -27
  691. package/docs/ru/intlayer_with_astro_vue.md +47 -27
  692. package/docs/ru/intlayer_with_react_router_v7.md +12 -1
  693. package/docs/ru/intlayer_with_remix_3.md +22 -1
  694. package/docs/ru/intlayer_with_solid_start.md +14 -7
  695. package/docs/ru/intlayer_with_svelte_kit.md +12 -1
  696. package/docs/ru/intlayer_with_tanstack+solid.md +13 -2
  697. package/docs/ru/intlayer_with_tanstack.md +13 -6
  698. package/docs/ru/intlayer_with_vite+lit.md +75 -3
  699. package/docs/ru/intlayer_with_vite+preact.md +16 -3
  700. package/docs/ru/intlayer_with_vite+react.md +16 -3
  701. package/docs/ru/intlayer_with_vite+solid.md +16 -3
  702. package/docs/ru/intlayer_with_vite+svelte.md +16 -3
  703. package/docs/ru/intlayer_with_vite+vanilla.md +16 -3
  704. package/docs/ru/intlayer_with_vite+vue.md +16 -3
  705. package/docs/ru/introduction.md +0 -1
  706. package/docs/ru/readme.md +0 -1
  707. package/docs/ru/releases/v8.md +1 -5
  708. package/docs/ru/self_hosting.md +403 -228
  709. package/docs/tr/benchmark/nextjs.md +13 -13
  710. package/docs/tr/benchmark/solid.md +5 -5
  711. package/docs/tr/benchmark/svelte.md +4 -4
  712. package/docs/tr/benchmark/tanstack.md +14 -13
  713. package/docs/tr/benchmark/vue.md +5 -5
  714. package/docs/tr/chrome_extension.md +130 -0
  715. package/docs/tr/cli/index.md +6 -1
  716. package/docs/tr/cli/infra.md +162 -0
  717. package/docs/tr/cli/init.md +24 -1
  718. package/docs/tr/dictionary/html.md +173 -5
  719. package/docs/tr/dictionary/markdown.md +263 -1
  720. package/docs/tr/intlayer_with_analog.md +23 -1
  721. package/docs/tr/intlayer_with_angular_19.md +24 -1
  722. package/docs/tr/intlayer_with_angular_21.md +24 -1
  723. package/docs/tr/intlayer_with_astro.md +35 -25
  724. package/docs/tr/intlayer_with_astro_lit.md +48 -28
  725. package/docs/tr/intlayer_with_astro_preact.md +49 -28
  726. package/docs/tr/intlayer_with_astro_react.md +49 -28
  727. package/docs/tr/intlayer_with_astro_solid.md +49 -28
  728. package/docs/tr/intlayer_with_astro_svelte.md +48 -28
  729. package/docs/tr/intlayer_with_astro_vue.md +48 -28
  730. package/docs/tr/intlayer_with_react_router_v7.md +12 -1
  731. package/docs/tr/intlayer_with_remix_3.md +22 -1
  732. package/docs/tr/intlayer_with_solid_start.md +14 -7
  733. package/docs/tr/intlayer_with_svelte_kit.md +12 -1
  734. package/docs/tr/intlayer_with_tanstack+solid.md +13 -2
  735. package/docs/tr/intlayer_with_tanstack.md +13 -6
  736. package/docs/tr/intlayer_with_vite+lit.md +75 -3
  737. package/docs/tr/intlayer_with_vite+preact.md +16 -3
  738. package/docs/tr/intlayer_with_vite+react.md +16 -3
  739. package/docs/tr/intlayer_with_vite+solid.md +16 -3
  740. package/docs/tr/intlayer_with_vite+svelte.md +16 -3
  741. package/docs/tr/intlayer_with_vite+vanilla.md +16 -3
  742. package/docs/tr/intlayer_with_vite+vue.md +16 -3
  743. package/docs/tr/introduction.md +0 -1
  744. package/docs/tr/readme.md +0 -1
  745. package/docs/tr/releases/v8.md +1 -5
  746. package/docs/tr/self_hosting.md +410 -234
  747. package/docs/uk/benchmark/nextjs.md +13 -13
  748. package/docs/uk/benchmark/solid.md +5 -5
  749. package/docs/uk/benchmark/svelte.md +4 -4
  750. package/docs/uk/benchmark/tanstack.md +14 -13
  751. package/docs/uk/benchmark/vue.md +5 -5
  752. package/docs/uk/chrome_extension.md +130 -0
  753. package/docs/uk/cli/index.md +6 -1
  754. package/docs/uk/cli/infra.md +162 -0
  755. package/docs/uk/cli/init.md +24 -1
  756. package/docs/uk/dictionary/html.md +173 -5
  757. package/docs/uk/dictionary/markdown.md +263 -1
  758. package/docs/uk/intlayer_with_analog.md +23 -1
  759. package/docs/uk/intlayer_with_angular_19.md +24 -1
  760. package/docs/uk/intlayer_with_angular_21.md +24 -1
  761. package/docs/uk/intlayer_with_astro.md +35 -25
  762. package/docs/uk/intlayer_with_astro_lit.md +47 -27
  763. package/docs/uk/intlayer_with_astro_preact.md +48 -27
  764. package/docs/uk/intlayer_with_astro_react.md +48 -27
  765. package/docs/uk/intlayer_with_astro_solid.md +48 -27
  766. package/docs/uk/intlayer_with_astro_svelte.md +47 -27
  767. package/docs/uk/intlayer_with_astro_vue.md +47 -27
  768. package/docs/uk/intlayer_with_react_router_v7.md +12 -1
  769. package/docs/uk/intlayer_with_remix_3.md +22 -1
  770. package/docs/uk/intlayer_with_solid_start.md +14 -7
  771. package/docs/uk/intlayer_with_svelte_kit.md +12 -1
  772. package/docs/uk/intlayer_with_tanstack+solid.md +13 -2
  773. package/docs/uk/intlayer_with_tanstack.md +13 -6
  774. package/docs/uk/intlayer_with_vite+lit.md +75 -3
  775. package/docs/uk/intlayer_with_vite+preact.md +16 -3
  776. package/docs/uk/intlayer_with_vite+react.md +16 -3
  777. package/docs/uk/intlayer_with_vite+solid.md +16 -3
  778. package/docs/uk/intlayer_with_vite+svelte.md +16 -3
  779. package/docs/uk/intlayer_with_vite+vanilla.md +16 -3
  780. package/docs/uk/intlayer_with_vite+vue.md +16 -3
  781. package/docs/uk/introduction.md +0 -1
  782. package/docs/uk/readme.md +0 -1
  783. package/docs/uk/releases/v8.md +1 -5
  784. package/docs/uk/self_hosting.md +413 -238
  785. package/docs/ur/intlayer_with_vite+lit.md +75 -3
  786. package/docs/ur/intlayer_with_vite+vanilla.md +16 -3
  787. package/docs/ur/introduction.md +0 -1
  788. package/docs/vi/benchmark/nextjs.md +13 -13
  789. package/docs/vi/benchmark/solid.md +5 -5
  790. package/docs/vi/benchmark/svelte.md +4 -4
  791. package/docs/vi/benchmark/tanstack.md +14 -13
  792. package/docs/vi/benchmark/vue.md +5 -5
  793. package/docs/vi/chrome_extension.md +130 -0
  794. package/docs/vi/cli/index.md +6 -1
  795. package/docs/vi/cli/infra.md +162 -0
  796. package/docs/vi/cli/init.md +24 -1
  797. package/docs/vi/dictionary/html.md +173 -5
  798. package/docs/vi/dictionary/markdown.md +263 -1
  799. package/docs/vi/intlayer_with_analog.md +23 -1
  800. package/docs/vi/intlayer_with_angular_19.md +24 -1
  801. package/docs/vi/intlayer_with_angular_21.md +24 -1
  802. package/docs/vi/intlayer_with_astro.md +35 -25
  803. package/docs/vi/intlayer_with_astro_lit.md +47 -27
  804. package/docs/vi/intlayer_with_astro_preact.md +48 -27
  805. package/docs/vi/intlayer_with_astro_react.md +48 -27
  806. package/docs/vi/intlayer_with_astro_solid.md +48 -27
  807. package/docs/vi/intlayer_with_astro_svelte.md +47 -27
  808. package/docs/vi/intlayer_with_astro_vue.md +47 -27
  809. package/docs/vi/intlayer_with_react_router_v7.md +12 -1
  810. package/docs/vi/intlayer_with_remix_3.md +22 -1
  811. package/docs/vi/intlayer_with_solid_start.md +14 -7
  812. package/docs/vi/intlayer_with_svelte_kit.md +12 -1
  813. package/docs/vi/intlayer_with_tanstack+solid.md +13 -2
  814. package/docs/vi/intlayer_with_tanstack.md +13 -6
  815. package/docs/vi/intlayer_with_vite+lit.md +75 -3
  816. package/docs/vi/intlayer_with_vite+preact.md +16 -3
  817. package/docs/vi/intlayer_with_vite+react.md +16 -3
  818. package/docs/vi/intlayer_with_vite+solid.md +16 -3
  819. package/docs/vi/intlayer_with_vite+svelte.md +16 -3
  820. package/docs/vi/intlayer_with_vite+vanilla.md +16 -3
  821. package/docs/vi/intlayer_with_vite+vue.md +16 -3
  822. package/docs/vi/introduction.md +0 -1
  823. package/docs/vi/readme.md +0 -1
  824. package/docs/vi/releases/v8.md +1 -5
  825. package/docs/vi/self_hosting.md +408 -234
  826. package/docs/zh/benchmark/nextjs.md +13 -13
  827. package/docs/zh/benchmark/solid.md +5 -5
  828. package/docs/zh/benchmark/svelte.md +4 -4
  829. package/docs/zh/benchmark/tanstack.md +14 -13
  830. package/docs/zh/benchmark/vue.md +5 -5
  831. package/docs/zh/chrome_extension.md +130 -0
  832. package/docs/zh/cli/index.md +6 -1
  833. package/docs/zh/cli/infra.md +162 -0
  834. package/docs/zh/cli/init.md +24 -1
  835. package/docs/zh/dictionary/html.md +172 -5
  836. package/docs/zh/dictionary/markdown.md +262 -1
  837. package/docs/zh/intlayer_with_analog.md +23 -1
  838. package/docs/zh/intlayer_with_angular_19.md +24 -1
  839. package/docs/zh/intlayer_with_angular_21.md +24 -1
  840. package/docs/zh/intlayer_with_astro.md +29 -21
  841. package/docs/zh/intlayer_with_astro_lit.md +47 -27
  842. package/docs/zh/intlayer_with_astro_preact.md +48 -27
  843. package/docs/zh/intlayer_with_astro_react.md +48 -27
  844. package/docs/zh/intlayer_with_astro_solid.md +48 -27
  845. package/docs/zh/intlayer_with_astro_svelte.md +47 -27
  846. package/docs/zh/intlayer_with_astro_vue.md +47 -27
  847. package/docs/zh/intlayer_with_react_router_v7.md +12 -1
  848. package/docs/zh/intlayer_with_remix_3.md +22 -1
  849. package/docs/zh/intlayer_with_solid_start.md +14 -7
  850. package/docs/zh/intlayer_with_svelte_kit.md +12 -1
  851. package/docs/zh/intlayer_with_tanstack+solid.md +13 -2
  852. package/docs/zh/intlayer_with_tanstack.md +13 -6
  853. package/docs/zh/intlayer_with_vite+lit.md +75 -3
  854. package/docs/zh/intlayer_with_vite+preact.md +16 -3
  855. package/docs/zh/intlayer_with_vite+react.md +16 -3
  856. package/docs/zh/intlayer_with_vite+solid.md +16 -3
  857. package/docs/zh/intlayer_with_vite+svelte.md +16 -3
  858. package/docs/zh/intlayer_with_vite+vanilla.md +16 -3
  859. package/docs/zh/intlayer_with_vite+vue.md +16 -3
  860. package/docs/zh/introduction.md +0 -1
  861. package/docs/zh/readme.md +0 -1
  862. package/docs/zh/releases/v8.md +1 -5
  863. package/docs/zh/self_hosting.md +410 -237
  864. package/docs/zh-TW/introduction.md +0 -1
  865. package/legal/ar/privacy_notice.md +9 -3
  866. package/legal/de/privacy_notice.md +9 -3
  867. package/legal/en/privacy_notice.md +10 -3
  868. package/legal/en-GB/privacy_notice.md +9 -3
  869. package/legal/es/privacy_notice.md +9 -3
  870. package/legal/fr/privacy_notice.md +9 -3
  871. package/legal/hi/privacy_notice.md +9 -3
  872. package/legal/id/privacy_notice.md +9 -3
  873. package/legal/it/privacy_notice.md +9 -3
  874. package/legal/ja/privacy_notice.md +9 -3
  875. package/legal/ko/privacy_notice.md +9 -3
  876. package/legal/pl/privacy_notice.md +9 -3
  877. package/legal/pt/privacy_notice.md +9 -3
  878. package/legal/ru/privacy_notice.md +9 -3
  879. package/legal/tr/privacy_notice.md +9 -3
  880. package/legal/uk/privacy_notice.md +9 -3
  881. package/legal/vi/privacy_notice.md +9 -3
  882. package/legal/zh/privacy_notice.md +9 -3
  883. package/package.json +6 -6
  884. package/src/generated/docs.entry.ts +40 -40
  885. package/docs/ar/intlayer_with_astro_vanilla.md +0 -709
  886. package/docs/ar/roadmap.md +0 -321
  887. package/docs/de/intlayer_with_astro_vanilla.md +0 -705
  888. package/docs/de/roadmap.md +0 -322
  889. package/docs/en/intlayer_with_astro_vanilla.md +0 -706
  890. package/docs/en/roadmap.md +0 -325
  891. package/docs/en-GB/intlayer_with_astro_vanilla.md +0 -709
  892. package/docs/en-GB/roadmap.md +0 -322
  893. package/docs/es/intlayer_with_astro_vanilla.md +0 -701
  894. package/docs/es/roadmap.md +0 -322
  895. package/docs/fr/intlayer_with_astro_vanilla.md +0 -701
  896. package/docs/fr/roadmap.md +0 -322
  897. package/docs/hi/intlayer_with_astro_vanilla.md +0 -720
  898. package/docs/hi/roadmap.md +0 -322
  899. package/docs/id/intlayer_with_astro_vanilla.md +0 -705
  900. package/docs/id/roadmap.md +0 -325
  901. package/docs/it/intlayer_with_astro_vanilla.md +0 -705
  902. package/docs/it/roadmap.md +0 -322
  903. package/docs/ja/intlayer_with_astro_vanilla.md +0 -708
  904. package/docs/ja/roadmap.md +0 -322
  905. package/docs/ko/intlayer_with_astro_vanilla.md +0 -720
  906. package/docs/ko/roadmap.md +0 -322
  907. package/docs/pl/intlayer_with_astro_vanilla.md +0 -705
  908. package/docs/pl/roadmap.md +0 -325
  909. package/docs/pt/intlayer_with_astro_vanilla.md +0 -705
  910. package/docs/pt/roadmap.md +0 -322
  911. package/docs/ru/intlayer_with_astro_vanilla.md +0 -716
  912. package/docs/ru/roadmap.md +0 -322
  913. package/docs/tr/intlayer_with_astro_vanilla.md +0 -705
  914. package/docs/tr/roadmap.md +0 -325
  915. package/docs/uk/intlayer_with_astro_vanilla.md +0 -705
  916. package/docs/uk/roadmap.md +0 -325
  917. package/docs/vi/intlayer_with_astro_vanilla.md +0 -705
  918. package/docs/vi/roadmap.md +0 -325
  919. package/docs/zh/intlayer_with_astro_vanilla.md +0 -704
  920. package/docs/zh/roadmap.md +0 -322
@@ -1,12 +1,13 @@
1
1
  ---
2
2
  createdAt: 2026-06-30
3
- updatedAt: 2026-06-30
3
+ updatedAt: 2026-09-21
4
4
  title: Auto-hébergement d'Intlayer
5
- description: Exécutez une instance complète d'Intlayer sur votre propre infrastructure avec une seule commande. Aucun compte Intlayer Cloud n'est requis.
5
+ description: "Exécutez Intlayer sur votre propre infrastructure : sous forme d'application de bureau, d'un conteneur Docker tout-en-un ou d'une stack Docker Compose évolutive. Aucun compte Intlayer Cloud requis."
6
6
  keywords:
7
7
  - Auto-hébergement
8
8
  - Docker
9
9
  - Docker Compose
10
+ - Application de bureau
10
11
  - Intlayer
11
12
  - CMS
12
13
  - Installation
@@ -19,212 +20,455 @@ author: aymericzip
19
20
 
20
21
  # Auto-hébergement d'Intlayer
21
22
 
22
- Intlayer peut fonctionner entièrement sur votre propre infrastructure — aucun compte Intlayer Cloud n'est requis. Une seule commande démarre une stack prête pour la production :
23
+ Intlayer peut fonctionner sur votre propre infrastructure, aucun compte Intlayer Cloud requis. Trois configurations sont disponibles, toutes gérées par le même installateur (`install.sh`, `install.ps1` sur Windows ou `npx intlayer init infra`) :
23
24
 
24
- Une seule commande installe tout :
25
+ | Configuration | Ce que c'est | Quand la choisir |
26
+ | ------------------------- | --------------------------------------------------------------------------------------- | -------------------------------------------- |
27
+ | **Application de bureau** | Tableau de bord natif pour macOS, Linux et Windows | Un client local, rien à héberger |
28
+ | **Docker tout-en-un** | Tableau de bord, API, MongoDB, Redis et MinIO dans un **seul conteneur** | Essais et petites installations uniques |
29
+ | **Docker Compose** | **Un conteneur par service**, chaque magasin de données remplaçable par une offre gérée | Production, montée en charge, bases managées |
30
+
31
+ ## Table des matières
32
+
33
+ <TOC/>
34
+
35
+ ## Images et paquets publiés
36
+
37
+ | Artefact | Docker Hub | Miroir GHCR | Contenu |
38
+ | -------------------------- | ------------------------------------------------------------------------- | ------------------------------------------ | -------------------------------------------------------------------------------- |
39
+ | Conteneur tout-en-un | [`intlayer/cms-all`](https://hub.docker.com/r/intlayer/cms-all) | `ghcr.io/aymericzip/intlayer/cms-all` | app + backend + MongoDB 8 + Redis + MinIO + Chromium |
40
+ | Tableau de bord (frontend) | [`intlayer/cms-frontend`](https://hub.docker.com/r/intlayer/cms-frontend) | `ghcr.io/aymericzip/intlayer/cms-frontend` | Tableau de bord TanStack Start sur Bun |
41
+ | API (backend) | [`intlayer/cms-backend`](https://hub.docker.com/r/intlayer/cms-backend) | `ghcr.io/aymericzip/intlayer/cms-backend` | API REST Fastify sur Bun + Chromium |
42
+ | Application de bureau | [Releases GitHub](https://github.com/aymericzip/intlayer/releases/latest) | n/a | `.dmg` (macOS), `.deb` / `.rpm` / `.AppImage` (Linux), `.exe` / `.msi` (Windows) |
43
+
44
+ Les trois images sont construites à partir du même [`docker/selfhost/Dockerfile`](https://github.com/aymericzip/intlayer/tree/main/docker/selfhost) et publiées à chaque version. La stack Compose télécharge également les images officielles `mongo:8`, `redis:8-alpine` et `quay.io/minio/minio`.
45
+
46
+ ## Configuration
47
+
48
+ L'installateur vous demande quelle configuration vous souhaitez, vérifie les prérequis (en proposant d'installer Docker), écrit le fichier d'environnement avec les secrets déjà générés et télécharge les images. Il ne démarre rien de lui-même : les modes Docker nécessitent d'abord un service d'e-mail, il termine donc en affichant la commande à exécuter. Le réexécuter est sans danger : un fichier d'environnement existant n'est jamais écrasé, ce qui en fait également le moyen de mise à niveau.
49
+
50
+ <Tabs group="mode">
51
+ <Tab label="Application de bureau" value="desktop">
52
+
53
+ Le tableau de bord Intlayer sous forme d'application native, conçu avec Tauri. Il se connecte à Intlayer Cloud (`https://app.intlayer.org`), il n'y a donc rien à héberger. C'est le bon choix lorsque vous préférez un client local plutôt qu'un onglet de navigateur.
54
+
55
+ ### Installation
56
+
57
+ L'installateur télécharge le paquet pour votre système d'exploitation et votre processeur, puis l'ouvre (macOS), l'installe (`dpkg` / `rpm` sous Linux) ou lance l'assistant d'installation (Windows). Vous pouvez également le télécharger manuellement depuis la [page des releases](https://github.com/aymericzip/intlayer/releases/latest).
58
+
59
+ <Tabs group="os">
60
+ <Tab label="macOS / Linux" value="unix">
25
61
 
26
62
  ```sh
27
- curl -fsSL https://intlayer.org/install.sh | sh
63
+ curl -fsSL https://intlayer.org/install.sh | sh -s -- --mode desktop
28
64
  ```
29
65
 
30
- L'installateur télécharge un fichier `docker-compose.yml` et un fichier `.env`, génère automatiquement les secrets requis et démarre tous les conteneurs avec `docker compose up -d`.
66
+ </Tab>
67
+ <Tab label="Windows" value="windows">
31
68
 
32
- La seule dépendance externe est **MongoDB** : le backend se connecte à un cluster MongoDB **Atlas**, que vous fournissez. Tout le reste s'exécute à l'intérieur du conteneur.
69
+ Dans PowerShell :
33
70
 
34
- ## Table des matières
71
+ ```powershell
72
+ $env:INTLAYER_MODE = "desktop"; irm https://intlayer.org/install.ps1 | iex
73
+ ```
35
74
 
36
- <TOC/>
75
+ </Tab>
76
+ <Tab label="CLI Intlayer" value="cli">
77
+
78
+ ```bash
79
+ npx intlayer init infra --mode desktop
80
+ ```
37
81
 
38
- ## Architecture
82
+ </Tab>
83
+ </Tabs>
84
+
85
+ ### Prérequis
86
+
87
+ - **Node.js** : l'application intègre le serveur du tableau de bord et le démarre avec le binaire `node` de la machine. Installez-le depuis [nodejs.org](https://nodejs.org) si l'application ne démarre pas.
88
+
89
+ > La version publiée pour ordinateur communique avec le backend Intlayer Cloud. La pointer vers un backend auto-hébergé nécessite de reconstruire l'application avec `VITE_BACKEND_URL` configuré sur votre API, voir [Limitations](#limitations).
90
+
91
+ </Tab>
92
+ <Tab label="Docker tout-en-un" value="docker">
93
+
94
+ Tout s'exécute à l'intérieur du conteneur unique `intlayer/cms-all`, supervisé par [s6-overlay](https://github.com/just-containers/s6-overlay), avec chaque magasin de données persisté sous un seul volume.
39
95
 
40
96
  ```
41
97
  ┌─────────────────────────────┐
42
98
  browser ──────▶ │ app (TanStack Start) :3000│ ──┐
43
- └─────────────────────────────┘ │ VITE_BACKEND_URL
99
+ (localhost) └─────────────────────────────┘ │ VITE_BACKEND_URL (baked at build)
44
100
  ┌─────────────────────────────┐ │
45
101
  │ backend (Fastify/Bun) :3100│ ◀─┘
46
102
  └──────────────┬──────────────┘
47
- ┌──────────┬─────────┼──────────┬───────────┐
48
- ▼ ▼ ▼ ▼ ▼
49
- mongo:27017 redis:6379 minio:9000 mailpit:1025 Chromium
50
- (1-node RS) (S3 API) (SMTP) (in-image)
51
- minio:9001 mailpit:8025
52
- (console) (web UI)
103
+ ┌──────────┬─────────┼──────────────┐
104
+ ▼ ▼ ▼ ▼
105
+ mongo:27017 redis:6379 minio:9000 Chromium
106
+ /data/mongo /data/redis /data/minio (in-image)
107
+ (1-node RS) minio:9001
53
108
  ```
54
109
 
55
- Chromium (utilisé pour la génération de captures d'écran Puppeteer) est intégré à l'image du backend — aucun conteneur séparé n'est nécessaire.
110
+ | Service | Port(s) hôte | Rôle |
111
+ | ----------- | ----------------------------- | -------------------------------------------------------- |
112
+ | **app** | `3000` | Tableau de bord (interface utilisateur CMS) |
113
+ | **backend** | `3100` | API REST (point de terminaison `/health`) |
114
+ | **mongo** | interne | MongoDB 8, ensemble de réplicas à nœud unique `rs0` |
115
+ | **redis** | interne | Files d'attente de tâches (BullMQ) et mise en cache |
116
+ | **minio** | `9000` (S3), `9001` (console) | Stockage d'objets compatible S3 pour avatars et captures |
56
117
 
57
- ## Prérequis
118
+ L'ordre de démarrage est géré par les dépendances s6 (`mongod` → init replica-set, `minio` → création du bucket, puis `backend`, puis `app`), et les services redémarrent en cas d'arrêt, de sorte que le premier démarrage récupère tout seul.
58
119
 
59
- - **Docker** ≥ 24 et **Docker Compose** ≥ v2. Si l'un des deux est manquant, l'installateur affiche le lien d'installation et quitte.
60
- - Ports `3000`, `3100`, `8025`, `9000` et `9001` disponibles sur l'hôte.
61
- - Un hôte Linux ou macOS (ou WSL2 sur Windows).
120
+ ### Prérequis
62
121
 
63
- Tout le reste — Bun, Redis, MinIO, Chromium — est fourni dans l'image.
122
+ - **Docker** ≥ 24 : l'installateur propose de l'installer (via [get.docker.com](https://get.docker.com) sous Linux, Homebrew sur macOS). Sous Windows, installez d'abord [Docker Desktop](https://docs.docker.com/desktop/setup/install/windows-install/) (backend WSL 2).
123
+ - Ports `3000`, `3100`, `9000` et `9001` libres sur l'hôte. MinIO `9000` doit rester accessible par le navigateur, qui charge les ressources directement depuis `S3_PUBLIC_URL`.
124
+ - Un service d'envoi d'e-mails : une clé API [Resend](https://resend.com) ou un relais SMTP.
64
125
 
65
- ## Démarrage rapide
126
+ ### 1. Installation
66
127
 
67
- ### 1. Exécuter l'installateur
128
+ Écrit `./intlayer.env` avec `BETTER_AUTH_SECRET` et `S3_SECRET_ACCESS_KEY` générés, et télécharge `intlayer/cms-all:latest`.
129
+
130
+ <Tabs group="os">
131
+ <Tab label="macOS / Linux" value="unix">
68
132
 
69
133
  ```sh
70
- curl -fsSL https://intlayer.org/install.sh | sh
134
+ curl -fsSL https://intlayer.org/install.sh | sh -s -- --mode docker
71
135
  ```
72
136
 
73
- Il vérifie que Docker est installé et en cours d'exécution, écrit `./intlayer.env` avec `BETTER_AUTH_SECRET` et `S3_SECRET_ACCESS_KEY` déjà générés, et télécharge l'image. Il ne démarre pas le conteneur — le backend ne peut pas démarrer sans vos identifiants de base de données.
137
+ </Tab>
138
+ <Tab label="Windows" value="windows">
74
139
 
75
- Réexécuter l'installateur est sûr : un `intlayer.env` existant n'est jamais écrasé, il sert donc également de chemin de mise à niveau.
140
+ Dans PowerShell :
76
141
 
77
- ### 2. Remplissez vos identifiants
142
+ ```powershell
143
+ $env:INTLAYER_MODE = "docker"; irm https://intlayer.org/install.ps1 | iex
144
+ ```
78
145
 
79
- Ouvrez `intlayer.env` et complétez les valeurs marquées `TODO` :
146
+ </Tab>
147
+ <Tab label="CLI Intlayer" value="cli">
80
148
 
81
- ```sh fileName="intlayer.env"
82
- DB_ID=<atlas-user>
83
- DB_MDP=<atlas-password>
84
- DB_CLUSTER=<cluster>.xxxxx.mongodb.net
85
- RESEND_API_KEY=<your-resend-key>
149
+ ```bash
150
+ npx intlayer init infra --mode docker
86
151
  ```
87
152
 
88
- Le fichier contient également des blocs commentés pour les fonctionnalités optionnelles — [SMTP mailer](#global-mailer), `OPENAI_API_KEY`, et les fournisseurs OAuth. Décommentez ce dont vous avez besoin.
153
+ </Tab>
154
+ </Tabs>
155
+
156
+ ### 2. Configurer un service d'e-mail
89
157
 
90
- > Le fichier est lu par `docker run --env-file`, qui ne supprime pas les guillemets et traite tout ce qui suit `=` comme la valeur. Écrivez des valeurs nues et gardez les commentaires sur leurs propres lignes.
158
+ Ouvrez `intlayer.env` et renseignez Resend **ou** SMTP (détails dans [Service d'e-mail global](#global-mailer)) :
91
159
 
92
- ### 3. Démarrer le conteneur
160
+ ```sh fileName="intlayer.env"
161
+ # Option A : Resend
162
+ RESEND_API_KEY=<votre-clé-resend>
163
+
164
+ # Option B : SMTP (prend le relais dès que MAIL_SMTP_HOST est défini)
165
+ MAIL_SMTP_HOST=smtp.example.com
166
+ MAIL_SMTP_PORT=587
167
+ MAIL_SMTP_USER=<utilisateur>
168
+ MAIL_SMTP_PASSWORD=<mot-de-passe>
169
+ MAIL_FROM=Intlayer <no-reply@example.com>
170
+ ```
171
+
172
+ ### 3. Démarrer
93
173
 
94
- Ceci est la commande que l'installateur affiche à la fin :
174
+ Voici la commande affichée par l'installateur :
175
+
176
+ <Tabs group="os">
177
+ <Tab label="macOS / Linux" value="unix">
95
178
 
96
179
  ```sh
97
180
  docker run -d --name intlayer \
98
181
  --restart unless-stopped \
99
- -p 3000:3000 \
100
- -p 3100:3100 \
101
- -p 9000:9000 \
102
- -p 9001:9001 \
182
+ -p 3000:3000 -p 3100:3100 -p 9000:9000 -p 9001:9001 \
103
183
  -v intlayer-data:/data \
104
184
  --env-file ./intlayer.env \
105
- ghcr.io/aymericzip/intlayer-selfhost:latest
185
+ intlayer/cms-all:latest
106
186
  ```
107
187
 
108
- Ouvrez ensuite **http://localhost:3000**. Le premier démarrage initialise les datastores, donc patientez une minute.
188
+ </Tab>
189
+ <Tab label="Windows" value="windows">
190
+
191
+ ```powershell
192
+ docker run -d --name intlayer `
193
+ --restart unless-stopped `
194
+ -p 3000:3000 -p 3100:3100 -p 9000:9000 -p 9001:9001 `
195
+ -v intlayer-data:/data `
196
+ --env-file ./intlayer.env `
197
+ intlayer/cms-all:latest
198
+ ```
199
+
200
+ </Tab>
201
+ <Tab label="CLI Intlayer" value="cli">
202
+
203
+ Le CLI exécute l'installateur, qui affiche la commande `docker run …` montrée dans les autres onglets. Copiez-la dans votre terminal une fois le service de messagerie configuré.
204
+
205
+ </Tab>
206
+ </Tabs>
109
207
 
110
- > Le tableau de bord est servi sur `localhost`. Voir [Limitations](#limitations) — les domaines personnalisés ne sont pas pris en charge par l'image publiée.
208
+ Ouvrez **http://localhost:3000** et suivez la [Configuration initiale](#first-run-setup). Le premier démarrage initialise l'ensemble de réplicas et le bucket, laissez-lui une minute.
111
209
 
112
- ### Paramètres du programme d'installation
210
+ ### Sauvegarde et mise à niveau
113
211
 
114
- Le programme d'installation lit quelques variables d'environnement. Comme il est dirigé vers `sh`, transmettez-les au shell plutôt qu'à `curl` :
212
+ Tout l'état réside dans le volume `intlayer-data` (`/data/mongo`, `/data/redis`, `/data/minio`).
115
213
 
116
214
  ```sh
117
- curl -fsSL https://intlayer.org/install.sh | INTLAYER_ENV_FILE=./config/intlayer.env sh
215
+ # Sauvegarde (arrêtez d'abord le conteneur pour que les fichiers de MongoDB soient cohérents)
216
+ docker stop intlayer
217
+ docker run --rm -v intlayer-data:/data -v "$(pwd)":/backup busybox tar czf /backup/intlayer-data.tar.gz /data
218
+ docker start intlayer
219
+
220
+ # Restauration
221
+ docker run --rm -v intlayer-data:/data -v "$(pwd)":/backup busybox tar xzf /backup/intlayer-data.tar.gz -C /
118
222
  ```
119
223
 
120
- | Variable | Par défaut | Description |
121
- | ------------------------- | --------------------------------------------- | --------------------------------- |
122
- | `INTLAYER_IMAGE` | `ghcr.io/aymericzip/intlayer-selfhost:latest` | Image à télécharger |
123
- | `INTLAYER_ENV_FILE` | `./intlayer.env` | Où écrire le fichier env |
124
- | `INTLAYER_CONTAINER_NAME` | `intlayer` | Nom du conteneur |
125
- | `INTLAYER_DATA_VOLUME` | `intlayer-data` | Volume nommé monté à `/data` |
126
- | `INTLAYER_APP_PORT` | `3000` | Port hôte pour le tableau de bord |
127
- | `INTLAYER_API_PORT` | `3100` | Port hôte pour l'API |
128
- | `INTLAYER_S3_PORT` | `9000` | Port hôte pour l'API S3 MinIO |
129
- | `INTLAYER_CONSOLE_PORT` | `9001` | Port hôte pour la console MinIO |
224
+ Pour mettre à niveau, réexécutez l'installateur (il télécharge la dernière image et conserve `intlayer.env`), puis faites `docker rm -f intlayer` et relancez la commande de démarrage. Pour utiliser une base MongoDB gérée à la place de celle intégrée, définissez `MONGODB_URI` dans `intlayer.env`.
130
225
 
131
- > Les quatre variables de port ne modifient que le côté **hôte** du mappage imprimé dans la commande `docker run`. L'image publiée a `http://localhost:3000`, `http://localhost:3100` et `http://localhost:9000` compilés dans le bundle du tableau de bord au moment de la compilation, donc les remapper laisse le navigateur pointant vers les anciens ports. Conservez les valeurs par défaut sauf si vous construisez votre propre image — voir [Limitations](#limitations).
226
+ </Tab>
227
+ <Tab label="Docker Compose" value="compose">
132
228
 
133
- ## Configuration initiale
229
+ Un conteneur par service sur un réseau privé Compose. Le tableau de bord et l'API utilisent les images publiées `intlayer/cms-frontend` et `intlayer/cms-backend` ; les magasins de données utilisent les images officielles `mongo`, `redis` et `minio`.
230
+
231
+ ```
232
+ ┌───────────────────┐
233
+ browser ──────▶ │ app :3000 │ ── SSR ──▶ http://backend:3100
234
+ (localhost) └───────────────────┘
235
+ ┌───────────────────┐
236
+ browser ──────▶ │ backend :3100 │
237
+ (localhost) └─────────┬─────────┘
238
+ ┌───────────────┼───────────────┐
239
+ ▼ ▼ ▼
240
+ mongo:27017 redis:6379 minio:9000 ◀── browser (assets)
241
+ (1-node RS) minio:9001
242
+ ```
243
+
244
+ | Service | Image | Rôle |
245
+ | ------------ | ----------------------- | ------------------------------------------------------------------------------- |
246
+ | `app` | `intlayer/cms-frontend` | Tableau de bord sur `:3000` ; attend que le backend soit sain |
247
+ | `backend` | `intlayer/cms-backend` | API sur `:3100` avec Chromium ; attend Mongo, Redis et le bucket MinIO |
248
+ | `mongo` | `mongo:8` | Ensemble de réplicas à nœud unique `rs0`, initialisé par son propre healthcheck |
249
+ | `redis` | `redis:8-alpine` | Files d'attente et cache, persistance append-only |
250
+ | `minio` | `quay.io/minio/minio` | Stockage S3 sur `:9000`, console sur `:9001` |
251
+ | `minio-init` | `quay.io/minio/mc` | Tâche ponctuelle : crée le bucket et sa stratégie de téléchargement anonyme |
252
+
253
+ Les données sont conservées dans les volumes `intlayer_mongo-data`, `intlayer_redis-data` et `intlayer_minio-data`. Le câblage des services (`MONGODB_URI`, `REDIS_URL`, `S3_ENDPOINT`, l'URL interne du backend utilisée par le rendu côté serveur) est fixé dans le fichier compose et prévaut sur `.env`, qui ne contient que les secrets et intégrations optionnelles.
254
+
255
+ ### Prérequis
256
+
257
+ - **Docker** ≥ 24 avec le plugin Compose : l'installateur propose de l'installer sous Linux et macOS. Sous Windows, installez d'abord [Docker Desktop](https://docs.docker.com/desktop/setup/install/windows-install/) (backend WSL 2).
258
+ - Ports `3000`, `3100`, `9000` et `9001` libres sur l'hôte.
259
+ - Un service d'envoi d'e-mails : une clé API [Resend](https://resend.com) ou un relais SMTP.
260
+
261
+ ### 1. Installation
262
+
263
+ Écrit `docker-compose.yml` et un `.env` avec les secrets générés dans `./intlayer/`, et télécharge les images.
264
+
265
+ <Tabs group="os">
266
+ <Tab label="macOS / Linux" value="unix">
267
+
268
+ ```sh
269
+ curl -fsSL https://intlayer.org/install.sh | sh -s -- --mode compose
270
+ ```
271
+
272
+ Ou manuellement :
273
+
274
+ ```sh
275
+ mkdir intlayer && cd intlayer
276
+ curl -fsSLO https://raw.githubusercontent.com/aymericzip/intlayer/main/docker/selfhost/docker-compose.yml
277
+ curl -fsSL https://raw.githubusercontent.com/aymericzip/intlayer/main/docker/selfhost/.env.template -o .env
278
+ # renseignez BETTER_AUTH_SECRET et S3_SECRET_ACCESS_KEY (openssl rand -hex 32)
279
+ ```
280
+
281
+ </Tab>
282
+ <Tab label="Windows" value="windows">
283
+
284
+ Dans PowerShell :
285
+
286
+ ```powershell
287
+ $env:INTLAYER_MODE = "compose"; irm https://intlayer.org/install.ps1 | iex
288
+ ```
289
+
290
+ Ou manuellement :
291
+
292
+ ```powershell
293
+ mkdir intlayer; cd intlayer
294
+ irm https://raw.githubusercontent.com/aymericzip/intlayer/main/docker/selfhost/docker-compose.yml -OutFile docker-compose.yml
295
+ irm https://raw.githubusercontent.com/aymericzip/intlayer/main/docker/selfhost/.env.template -OutFile .env
296
+ # renseignez BETTER_AUTH_SECRET et S3_SECRET_ACCESS_KEY
297
+ ```
298
+
299
+ </Tab>
300
+ <Tab label="CLI Intlayer" value="cli">
301
+
302
+ ```bash
303
+ npx intlayer init infra --mode compose
304
+ ```
305
+
306
+ </Tab>
307
+ </Tabs>
308
+
309
+ ### 2. Configurer un service d'e-mail
310
+
311
+ Renseignez Resend **ou** SMTP dans `intlayer/.env`, exactement comme pour le conteneur tout-en-un (voir [Service d'e-mail global](#global-mailer)).
312
+
313
+ ### 3. Démarrer
314
+
315
+ ```sh
316
+ cd intlayer && docker compose up -d
317
+ ```
134
318
 
135
- Sur une instance vierge (base de données vide), l'ouverture du dashboard vous redirige vers la page **`/init`** :
319
+ Ouvrez **http://localhost:3000** et suivez la [Configuration initiale](#first-run-setup).
136
320
 
137
- 1. Créez le premier compte. Comme la collection users est vide, ce compte est automatiquement promu **super admin**.
138
- 2. Un email de vérification est envoyé (via Resend). La vérification d'email est **obligatoire** — c'est pourquoi `RESEND_API_KEY` doit être défini avant de commencer.
139
- 3. Cliquez sur le lien dans l'email, puis connectez-vous.
321
+ ### Magasins de données managés
140
322
 
141
- Une fois qu'un admin existe, `/init` redirige vers la page de connexion standard.
323
+ Supprimez le service que vous remplacez du fichier compose (ainsi que son entrée dans `depends_on` pour `backend`), puis surchargez la variable correspondante :
142
324
 
143
- ## Services
325
+ ```yaml fileName="docker-compose.yml"
326
+ services:
327
+ backend:
328
+ environment:
329
+ MONGODB_URI: mongodb+srv://user:password@cluster0.xxxxx.mongodb.net/intlayer
330
+ REDIS_URL: rediss://default:password@redis.example.com:6380
331
+ S3_ENDPOINT: https://s3.eu-west-1.amazonaws.com
332
+ S3_PUBLIC_URL: https://intlayer-assets.s3.eu-west-1.amazonaws.com
333
+ ```
334
+
335
+ `S3_ACCESS_KEY_ID` / `S3_SECRET_ACCESS_KEY` / `S3_BUCKET_NAME` conservent leur signification avec n'importe quel fournisseur compatible S3.
336
+
337
+ ### Montée en charge
338
+
339
+ `app` et `backend` sont sans état (stateless). Derrière un équilibreur de charge, `docker compose up -d --scale backend=3` fonctionne une fois que les mappages de ports fixes de l'hôte sont supprimés et que le proxy s'adresse aux services par leur nom. Les tâches en arrière-plan sont coordonnées via Redis (BullMQ), de sorte que plusieurs répliques de backend partagent la file d'attente en toute sécurité.
340
+
341
+ ### Compilation depuis les sources
342
+
343
+ Depuis un clone du dépôt, une surcharge remplace `image:` par `build:` pour les deux services Intlayer :
344
+
345
+ ```sh
346
+ cd docker/selfhost
347
+ docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --build
348
+ ```
349
+
350
+ C'est également ainsi que vous produisez des images pour un domaine personnalisé : passez les valeurs `VITE_*` comme arguments de build (voir [Limitations](#limitations)).
144
351
 
145
- | Service | Image | Port(s) hôte | Objectif |
146
- | ----------- | ----------------------------------------------- | ------------------------------ | ------------------------------------------------------------------------ |
147
- | **app** | construit à partir de `apps/app/Dockerfile` | `3000` | Tableau de bord TanStack Start (UI du CMS) |
148
- | **backend** | construit à partir de `apps/backend/Dockerfile` | `3100` | API REST Fastify (endpoint `/health`) |
149
- | **mongo** | `mongo:7` | interne | Réplica set à nœud unique (`rs0`) |
150
- | **redis** | `redis:7-alpine` | interne | Files d'attente de jobs (BullMQ) et mise en cache (ioredis) |
151
- | **minio** | `minio/minio` | `9000` (S3), `9001` (console) | Stockage d'objets compatible S3 pour les avatars et les captures d'écran |
152
- | **mailpit** | `axllent/mailpit` | `1025` (SMTP), `8025` (web UI) | Réceptacle local d'e-mails transactionnels |
352
+ ### Sauvegarde et mise à niveau
153
353
 
154
- > Le port `9000` de MinIO doit être accessible par le navigateur car les assets téléchargés (avatars, captures d'écran) sont chargés directement depuis `S3_PUBLIC_URL=http://localhost:9000/intlayer`.
354
+ ```sh
355
+ # Sauvegarder un volume (répéter pour intlayer_redis-data et intlayer_minio-data)
356
+ docker compose stop
357
+ docker run --rm -v intlayer_mongo-data:/data -v "$(pwd)":/backup busybox tar czf /backup/mongo-data.tar.gz /data
358
+ docker compose start
359
+
360
+ # Mise à niveau, les volumes sont conservés
361
+ docker compose pull && docker compose up -d
362
+ ```
363
+
364
+ </Tab>
365
+ </Tabs>
366
+
367
+ ### Paramètres de l'installateur
368
+
369
+ Sans `--mode` (ou `INTLAYER_MODE`), l'installateur affiche un menu : `desktop`, `docker` (tout-en-un) ou `compose`. Il lit également quelques variables d'environnement. Comme il est transmis dans le shell via un pipe, passez-les au shell plutôt qu'à `curl` :
370
+
371
+ ```sh
372
+ curl -fsSL https://intlayer.org/install.sh | INTLAYER_COMPOSE_DIR=./cms sh -s -- --mode compose
373
+ ```
374
+
375
+ ```powershell
376
+ $env:INTLAYER_MODE = "compose"; $env:INTLAYER_COMPOSE_DIR = ".\cms"; irm https://intlayer.org/install.ps1 | iex
377
+ ```
378
+
379
+ | Variable | Défaut | S'applique à | Description |
380
+ | ------------------------- | ------------------------- | ------------ | --------------------------------------------------------------------- |
381
+ | `INTLAYER_MODE` | _(demandé)_ | tous | `desktop`, `docker` ou `compose`, identique à `--mode` |
382
+ | `INTLAYER_DOWNLOAD_DIR` | `~/Downloads` | desktop | Où l'installateur de l'application est enregistré |
383
+ | `INTLAYER_IMAGE` | `intlayer/cms-all:latest` | docker | Image tout-en-un à télécharger |
384
+ | `INTLAYER_ENV_FILE` | `./intlayer.env` | docker | Où écrire le fichier d'environnement |
385
+ | `INTLAYER_CONTAINER_NAME` | `intlayer` | docker | Nom du conteneur |
386
+ | `INTLAYER_DATA_VOLUME` | `intlayer-data` | docker | Volume nommé monté sur `/data` |
387
+ | `INTLAYER_APP_PORT` | `3000` | docker | Port hôte pour le tableau de bord |
388
+ | `INTLAYER_API_PORT` | `3100` | docker | Port hôte pour l'API |
389
+ | `INTLAYER_S3_PORT` | `9000` | docker | Port hôte pour l'API S3 MinIO |
390
+ | `INTLAYER_CONSOLE_PORT` | `9001` | docker | Port hôte pour la console MinIO |
391
+ | `INTLAYER_COMPOSE_DIR` | `./intlayer` | compose | Où `docker-compose.yml` et `.env` sont écrits |
392
+ | `INTLAYER_SELFHOST_REF` | `main` | les deux | Référence Git d'où sont récupérés le fichier compose et le modèle env |
393
+
394
+ > Les variables de port ne modifient que le côté **hôte** du mappage. Les images publiées intègrent `http://localhost:3000`, `http://localhost:3100` et `http://localhost:9000` compilés dans le bundle du tableau de bord, conservez donc les valeurs par défaut à moins de construire vos propres images, voir [Limitations](#limitations).
395
+
396
+ ## Configuration initiale
397
+
398
+ Sur une nouvelle instance (base de données vide), l'ouverture du tableau de bord vous redirige vers la page **`/init`** :
399
+
400
+ 1. Créez le premier compte. La collection des utilisateurs étant vide, ce compte est automatiquement promu **super administrateur**.
401
+ 2. Un e-mail de vérification est envoyé via Resend ou votre relais SMTP. La vérification de l'e-mail est **obligatoire**, c'est pourquoi un service de messagerie doit être configuré avant de démarrer.
402
+ 3. Cliquez sur le lien dans l'e-mail, puis connectez-vous.
403
+
404
+ Une fois qu'un administrateur existe, `/init` redirige vers la page de connexion standard.
155
405
 
156
406
  ## Variables d'environnement
157
407
 
158
- ### Requis
159
-
160
- | Variable | Exemple | Description |
161
- | ---------------------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
162
- | `DB_ID` | `intlayer` | Utilisateur MongoDB Atlas |
163
- | `DB_MDP` | _(votre mot de passe)_ | Mot de passe MongoDB Atlas |
164
- | `DB_CLUSTER` | `cluster0.xxxxx.mongodb.net` | Hôte du cluster MongoDB Atlas (utilisé dans l'URI `mongodb+srv://`) |
165
- | `BETTER_AUTH_SECRET` | _(généré)_ | Secret de 32 octets pour la signature de session |
166
- | `S3_SECRET_ACCESS_KEY` | _(généré)_ | Secret pour le MinIO intégré |
167
- | `RESEND_API_KEY` | _(votre clé)_ | Email transactionnel via Resend. Requis pour la première configuration sauf si vous configurez un mailer SMTP global (voir [Global mailer](#global-mailer)) |
168
-
169
- ### Requis (auto-généré ou demandé)
170
-
171
- | Variable | Exemple | Description |
172
- | ---------------------- | ----------------------------------------------- | ------------------------------------------------------------------ |
173
- | `NODE_ENV` | `production` | Environnement d'exécution |
174
- | `PORT` | `3100` | Port d'écoute du backend |
175
- | `BACKEND_URL` | `http://localhost:3100` | URL publique de l'API backend |
176
- | `APP_URL` | `http://localhost:3000` | URL publique du tableau de bord |
177
- | `DOMAIN` | `localhost` | Domaine du cookie |
178
- | `MONGODB_URI` | `mongodb://mongo:27017/intlayer?replicaSet=rs0` | URI de connexion complète à MongoDB |
179
- | `REDIS_URL` | `redis://redis:6379` | URL de connexion Redis |
180
- | `BETTER_AUTH_SECRET` | _(généré)_ | Secret de 32 octets pour la signature de session |
181
- | `MAIL_PROVIDER` | `smtp` | Transport de courrier : `smtp` ou `resend` |
182
- | `MAIL_SMTP_HOST` | `mailpit` | Nom d'hôte SMTP (nom du conteneur Mailpit) |
183
- | `MAIL_SMTP_PORT` | `1025` | Port SMTP |
184
- | `MAIL_FROM` | `Intlayer <no-reply@localhost>` | Adresse de l'expéditeur |
185
- | `S3_ENDPOINT` | `http://minio:9000` | Endpoint compatible S3 |
186
- | `S3_PUBLIC_URL` | `http://localhost:9000/intlayer` | URL publique pour le chargement des assets par le navigateur |
187
- | `S3_BUCKET_NAME` | `intlayer` | Nom du bucket |
188
- | `S3_ACCESS_KEY_ID` | _(généré)_ | Clé d'accès MinIO |
189
- | `S3_SECRET_ACCESS_KEY` | _(généré)_ | Clé secrète MinIO |
190
- | `VITE_BACKEND_URL` | `http://localhost:3100` | URL du backend intégrée au tableau de bord lors de la construction |
191
- | `VITE_DOMAIN` | `localhost` | Domaine intégré au tableau de bord lors de la construction |
192
-
193
- ### Facultatif (les fonctionnalités se dégradent gracieusement en leur absence)
194
-
195
- | Variable | Fonctionnalité |
196
- | -------------------------------------------------------- | --------------------------------------------------------------- |
197
- | `OPENAI_API_KEY` | Traduction assistée par IA et audit de contenu |
198
- | `STRIPE_SECRET_KEY`, `STRIPE_WEBHOOK_SECRET`, `STRIPE_*` | Gestion de la facturation et des abonnements |
199
- | `RESEND_API_KEY` | E-mail transactionnel via Resend (outrepasse Mailpit si défini) |
200
- | `GITHUB_CLIENT_ID`, `GITHUB_CLIENT_SECRET` | Connexion OAuth GitHub |
201
- | `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET` | Connexion OAuth Google |
202
- | `GITLAB_CLIENT_ID`, `GITLAB_CLIENT_SECRET` | Connexion OAuth GitLab |
203
- | `MICROSOFT_CLIENT_ID`, `MICROSOFT_CLIENT_SECRET` | Connexion OAuth Microsoft |
204
- | `LINKEDIN_CLIENT_ID`, `LINKEDIN_CLIENT_SECRET` | Connexion OAuth LinkedIn |
205
- | `ATLASSIAN_CLIENT_ID`, `ATLASSIAN_CLIENT_SECRET` | Connexion OAuth Atlassian |
206
-
207
- ### Mailer global
208
-
209
- Par défaut, tous les emails transactionnels sont envoyés via Resend en utilisant `RESEND_API_KEY`. Les déploiements auto-hébergés peuvent à la place router **tous** les emails — y compris les emails non-organisationnels tels que les réinitialisations de mot de passe et les liens magiques — via un mailer global configuré avec des variables d'environnement.
210
-
211
- Définissez `MAIL_PROVIDER` pour l'activer. S'il n'est pas défini, le mailer Resend par défaut est utilisé.
212
-
213
- | Variable | Exemple | Description |
214
- | -------------------- | ------------------------------ | ---------------------------------------------------------------------------------------- |
215
- | `MAIL_PROVIDER` | `smtp` | Transport global : `smtp` ou `resend`. Laissez vide pour utiliser les valeurs par défaut |
216
- | `MAIL_FROM` | `Intlayer <no-reply@acme.com>` | En-tête d'expéditeur. Accepte une adresse simple ou un format `Nom <email>` |
217
- | `MAIL_SMTP_HOST` | `smtp.acme.com` | Hôte SMTP (requis quand `MAIL_PROVIDER=smtp`) |
218
- | `MAIL_SMTP_PORT` | `587` | Port SMTP (par défaut `587`) |
219
- | `MAIL_SMTP_SECURE` | `false` | TLS implicite. Définissez `true` pour le port `465` |
220
- | `MAIL_SMTP_USER` | _(votre utilisateur)_ | Nom d'utilisateur SMTP (optionnel ; omettez pour les relais non authentifiés) |
221
- | `MAIL_SMTP_PASSWORD` | _(votre mot de passe)_ | Mot de passe SMTP |
222
-
223
- > Priorité : le mailer propre d'une organisation (configuré depuis le tableau de bord **Organization**) a priorité sur le mailer global, qui a lui-même priorité sur la clé Resend par défaut.
224
-
225
- ## Connexion de votre projet Intlayer
226
-
227
- Une fois la stack en cours d'exécution, pointez votre projet vers le backend et le tableau de bord auto-hébergés au lieu de `intlayer.org`.
408
+ Les deux modes Docker lisent le même fichier (`intlayer.env` pour le conteneur, `.env` pour Compose), généré à partir de [`docker/selfhost/.env.template`](https://github.com/aymericzip/intlayer/blob/main/docker/selfhost/.env.template).
409
+
410
+ ### Obligatoires
411
+
412
+ | Variable | Exemple | Description |
413
+ | ---------------------- | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
414
+ | `BETTER_AUTH_SECRET` | _(généré)_ | Secret de 32 octets pour la signature des sessions |
415
+ | `S3_SECRET_ACCESS_KEY` | _(généré)_ | Secret pour l'instance MinIO intégrée |
416
+ | `RESEND_API_KEY` | _(votre clé)_ | E-mails transactionnels via Resend. Requis pour la configuration initiale à moins qu'un relais SMTP ne soit configuré (voir [Service d'e-mail global](#global-mailer)) |
417
+
418
+ ### Fixées par le déploiement
419
+
420
+ Celles-ci sont définies par l'image (tout-en-un) ou par le fichier compose, et ne nécessitent d'être surchargées que pour une topologie personnalisée.
421
+
422
+ | Variable | Tout-en-un | Docker Compose | Description |
423
+ | ------------------ | --------------------------------------------------- | -------------------------------- | ------------------------------------------------------------------------------------------------ |
424
+ | `PORT` | `3100` | `3100` | Port d'écoute du backend |
425
+ | `APP_URL` | `http://localhost:3000` | `http://localhost:3000` | URL publique du tableau de bord |
426
+ | `BACKEND_URL` | `http://localhost:3100` | `http://localhost:3100` | URL publique de l'API backend |
427
+ | `DOMAIN` | `localhost` | `localhost` | Domaine du cookie |
428
+ | `SELF_HOSTED` | `true` | `true` | Désactive les points de terminaison API cloud uniquement (facturation, abonnements, marketplace) |
429
+ | `MONGODB_URI` | `mongodb://127.0.0.1:27017/intlayer?replicaSet=rs0` | `mongodb://mongo:27017/…` | Chaîne de connexion MongoDB, tout cluster `mongodb://` ou `mongodb+srv://` fonctionne |
430
+ | `REDIS_URL` | `redis://127.0.0.1:6379` | `redis://redis:6379` | Redis |
431
+ | `S3_ENDPOINT` | `http://127.0.0.1:9000` | `http://minio:9000` | MinIO (serveur à serveur) |
432
+ | `S3_PUBLIC_URL` | `http://localhost:9000/intlayer` | `http://localhost:9000/intlayer` | URL publique pour le chargement des ressources dans le navigateur |
433
+ | `S3_BUCKET_NAME` | `intlayer` | `intlayer` | Nom du bucket |
434
+ | `S3_ACCESS_KEY_ID` | `intlayer` | `intlayer` | Clé d'accès MinIO |
435
+
436
+ Le service `app` de Compose reçoit en plus `INTLAYER_BACKEND_INTERNAL_URL=http://backend:3100` : le navigateur accède à l'API sur `localhost:3100`, mais le rendu côté serveur s'exécute à l'intérieur du réseau Compose et doit utiliser le nom du service.
437
+
438
+ ### Optionnelles (les fonctionnalités se dégradent en douceur en leur absence)
439
+
440
+ | Variable | Fonctionnalité |
441
+ | ------------------------------------------------ | ---------------------------------------------- |
442
+ | `OPENAI_API_KEY` | Traduction assistée par IA et audit de contenu |
443
+ | `GITHUB_CLIENT_ID`, `GITHUB_CLIENT_SECRET` | Connexion OAuth GitHub |
444
+ | `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET` | Connexion OAuth Google |
445
+ | `GITLAB_CLIENT_ID`, `GITLAB_CLIENT_SECRET` | Connexion OAuth GitLab |
446
+ | `MICROSOFT_CLIENT_ID`, `MICROSOFT_CLIENT_SECRET` | Connexion OAuth Microsoft |
447
+
448
+ ### Service d'e-mail global
449
+
450
+ Chaque e-mail transactionnel, y compris les e-mails hors organisation tels que les réinitialisations de mot de passe et liens magiques, passe par l'un des deux transports globaux :
451
+
452
+ - **Resend**, en utilisant `RESEND_API_KEY`.
453
+ - **SMTP**, en utilisant les variables `MAIL_SMTP_*`. Dès que `MAIL_SMTP_HOST` est défini, SMTP est utilisé et `RESEND_API_KEY` est ignoré.
454
+
455
+ `MAIL_PROVIDER` n'est nécessaire que pour forcer un transport lorsque les deux sont configurés (par exemple `MAIL_PROVIDER=resend` pour conserver Resend alors qu'un hôte SMTP est présent).
456
+
457
+ | Variable | Exemple | Description |
458
+ | -------------------- | ------------------------------ | ------------------------------------------------------------------------------------------ |
459
+ | `MAIL_FROM` | `Intlayer <no-reply@acme.com>` | En-tête d'expéditeur pour les deux transports. Accepte une adresse simple ou `Nom <email>` |
460
+ | `MAIL_SMTP_HOST` | `smtp.acme.com` | Hôte SMTP. Le définir sélectionne le transport SMTP |
461
+ | `MAIL_SMTP_PORT` | `587` | Port SMTP (par défaut `587`) |
462
+ | `MAIL_SMTP_SECURE` | `false` | TLS implicite. Définir sur `true` pour le port `465` |
463
+ | `MAIL_SMTP_USER` | _(votre utilisateur)_ | Nom d'utilisateur SMTP (optionnel ; omettre pour les relais non authentifiés) |
464
+ | `MAIL_SMTP_PASSWORD` | _(votre mot de passe)_ | Mot de passe SMTP |
465
+ | `MAIL_PROVIDER` | `resend` | Remplacement optionnel : `smtp` ou `resend`. Laisser vide pour la sélection automatique |
466
+
467
+ > Priorité : le service d'e-mail propre à une organisation (configuré depuis le tableau de bord de l'**Organisation**) a la priorité sur le service global, qui lui-même a la priorité sur la clé Resend par défaut.
468
+
469
+ ## Connecter votre projet Intlayer
470
+
471
+ Une fois la stack lancée, faites pointer votre projet vers le backend et le tableau de bord auto-hébergés plutôt que `intlayer.org`.
228
472
 
229
473
  ### Configuration du projet
230
474
 
@@ -258,15 +502,15 @@ Définissez les variables d'environnement dans le fichier `.env` de votre projet
258
502
  ```sh
259
503
  INTLAYER_CMS_URL=http://localhost:3000
260
504
  INTLAYER_BACKEND_URL=http://localhost:3100
261
- INTLAYER_CLIENT_ID=<your-client-id>
262
- INTLAYER_CLIENT_SECRET=<your-client-secret>
505
+ INTLAYER_CLIENT_ID=<votre-client-id>
506
+ INTLAYER_CLIENT_SECRET=<votre-client-secret>
263
507
  ```
264
508
 
265
509
  Créez des identifiants d'accès dans votre tableau de bord auto-hébergé sous **Projets → Clés d'accès** à l'adresse `http://localhost:3000/projects`.
266
510
 
267
511
  ### SDK `@intlayer/api`
268
512
 
269
- Lorsque vous utilisez le SDK `@intlayer/api` de manière programmatique, passez `backendURL` explicitement :
513
+ Lorsque vous utilisez le SDK `@intlayer/api` par programmation, passez `backendURL` explicitement :
270
514
 
271
515
  ```typescript fileName="cms.ts" codeFormat="typescript"
272
516
  import { createIntlayerCMS } from "@intlayer/api";
@@ -283,84 +527,17 @@ const cms = createIntlayerCMS({
283
527
  const { data: dictionaries } = await dictionaryEndpoint(cms).getDictionaries();
284
528
  ```
285
529
 
286
- ## Mise à niveau
287
-
288
- Ceci télécharge les dernières images et redémarre les conteneurs avec `docker compose pull && docker compose up -d`. Les volumes existants (`mongo-data`, `redis-data`, `minio-data`) sont préservés — aucune perte de données.
289
-
290
- ```sh
291
- docker compose pull
292
- docker compose up -d
293
- ```
294
-
295
- ## Sauvegarde et restauration
296
-
297
- Toutes les données persistantes résident dans trois volumes Docker nommés.
298
-
299
- ### Sauvegarde
300
-
301
- ```sh
302
- docker run --rm \
303
- -v intlayer_mongo-data:/data \
304
- -v "$(pwd)":/backup \
305
- busybox tar czf /backup/mongo-data.tar.gz /data
306
-
307
- docker run --rm \
308
- -v intlayer_redis-data:/data \
309
- -v "$(pwd)":/backup \
310
- busybox tar czf /backup/redis-data.tar.gz /data
311
-
312
- docker run --rm \
313
- -v intlayer_minio-data:/data \
314
- -v "$(pwd)":/backup \
315
- busybox tar czf /backup/minio-data.tar.gz /data
316
- ```
317
-
318
- ### Restauration
319
-
320
- ```sh
321
- docker run --rm \
322
- -v intlayer_mongo-data:/data \
323
- -v "$(pwd)":/backup \
324
- busybox tar xzf /backup/mongo-data.tar.gz -C /
325
-
326
- # Répétez pour redis-data et minio-data
327
- ```
328
-
329
530
  ## Limitations
330
531
 
331
- - **MongoDB must be external (Atlas).** The backend connects only over `mongodb+srv://` (built from `DB_ID` / `DB_MDP` / `DB_CLUSTER`), so a plain `mongodb://host:27017` — including the container's own bundled `mongod` — cannot be used. Provide a MongoDB Atlas cluster.
332
- - **No custom domain.** All browser-facing `VITE_*` URLs are inlined into the app at build time, and the published image ships with `localhost` values. The dashboard must be accessed at `http://localhost:3000`; serving it on a public domain would require rebuilding the image with the target URLs baked in and is not supported out of the box.
333
- - **Email requires a working mailer.** First-run setup enforces email verification, so either `RESEND_API_KEY` or a [global SMTP mailer](#global-mailer) (`MAIL_PROVIDER=smtp` + `MAIL_SMTP_*`) must be configured. After the first admin signs in, each organization can also configure its own SMTP or Resend mailer from the dashboard.
334
-
335
- ## Dépannage
336
-
337
- ### Le backend redémarre en boucle au premier démarrage
338
-
339
- MongoDB et Redis doivent être sains avant le démarrage du backend. Le fichier compose utilise `depends_on` avec `condition: service_healthy`. Si vous voyez des redémarrages répétés du backend, vérifiez que les contrôles de santé de `mongo` et `redis` sont réussis :
340
-
341
- ```sh
342
- docker compose ps
343
- docker compose logs mongo
344
- docker compose logs redis
345
- ```
346
-
347
- Recherchez `MongoDB connection error` près du haut du journal.
348
-
349
- ### Le tableau de bord ne peut pas atteindre l'API
350
-
351
- Vérifiez que `VITE_BACKEND_URL` correspond à l'URL où le backend est accessible depuis le **navigateur** (pas le réseau Docker). Si vous avez modifié le port du backend ou ajouté un proxy inverse, reconstruisez l'image du tableau de bord :
352
-
353
- ### Bucket MinIO manquant
354
-
355
- Si le service ponctuel `minio-init` n'a pas fonctionné (ou a fonctionné avant que MinIO ne soit prêt), créez le bucket manuellement :
356
-
357
- ```sh
358
- docker compose run --rm minio-init
359
- ```
532
+ - **Pas de domaine personnalisé, ni de remappage de ports.** Toutes les URL `VITE_*` destinées au navigateur sont intégrées au tableau de bord lors de la construction, et les images publiées (ainsi que l'application de bureau) sont fournies avec les valeurs `localhost` / Intlayer Cloud. Le tableau de bord doit être accessible sur `http://localhost:3000`, l'API sur `:3100` et MinIO sur `:9000`. Le servir sur un domaine public, ou faire pointer l'application de bureau vers un backend auto-hébergé, nécessite de reconstruire avec les URL cibles intégrées (`--build-arg VITE_BACKEND_URL=… VITE_SITE_URL=… VITE_DOMAIN=…` sur `docker/selfhost/Dockerfile`, ou via `docker-compose.build.yml`) et n'est pas pris en charge nativement.
533
+ - **Les e-mails nécessitent un service de messagerie fonctionnel.** La configuration initiale impose la vérification par e-mail, de sorte que soit `RESEND_API_KEY`, soit un [relais SMTP](#global-mailer) (`MAIL_SMTP_*`) doit être configuré. Une fois le premier administrateur connecté, chaque organisation peut également configurer son propre service SMTP ou Resend depuis le tableau de bord.
534
+ - **L'application de bureau nécessite Node.js** sur la machine pour démarrer son serveur intégré.
360
535
 
361
536
  ## Liens utiles
362
537
 
363
- - [Documentation du CMS Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/intlayer_CMS.md)
538
+ - [Documentation Intlayer CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/intlayer_CMS.md)
364
539
  - [Référence de configuration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/configuration.md)
365
- - [SDK CMS — `@intlayer/api`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/intlayer_CMS.md#programmatic-access-with-the-intlayerapi-sdk)
366
- - [Docker Image (aymercizip/intlayer-selfhost)](https://hub.docker.com/repository/docker/aymercizip/intlayer-selfhost/general)
540
+ - [SDK CMS : `@intlayer/api`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/intlayer_CMS.md#programmatic-access-with-the-intlayerapi-sdk)
541
+ - [Releases de l'application de bureau](https://github.com/aymericzip/intlayer/releases/latest)
542
+ - Docker Hub : [`intlayer/cms-all`](https://hub.docker.com/r/intlayer/cms-all), [`intlayer/cms-frontend`](https://hub.docker.com/r/intlayer/cms-frontend), [`intlayer/cms-backend`](https://hub.docker.com/r/intlayer/cms-backend), miroir sur GHCR sous `ghcr.io/aymericzip/intlayer/`
543
+ - [`docker/selfhost/`](https://github.com/aymericzip/intlayer/tree/main/docker/selfhost) : Dockerfile, `docker-compose.yml` et `.env.template`