@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: Self-Hosting Intlayer
5
- description: Run a complete Intlayer instance on your own infrastructure with a single command. No Intlayer Cloud account required.
5
+ description: "Run Intlayer on your own infrastructure: as a desktop app, a single all-in-one Docker container, or a scalable Docker Compose stack. No Intlayer Cloud account required."
6
6
  keywords:
7
7
  - Self-Hosting
8
8
  - Docker
9
9
  - Docker Compose
10
+ - Desktop app
10
11
  - Intlayer
11
12
  - CMS
12
13
  - Installation
@@ -19,210 +20,451 @@ author: aymericzip
19
20
 
20
21
  # Self-Hosting Intlayer
21
22
 
22
- Intlayer can run entirely on your own infrastructure. No Intlayer Cloud account required. A single command boots a production-ready stack:
23
+ Intlayer can run on your own infrastructure, no Intlayer Cloud account required. Three setups are available, all driven by the same installer (`install.sh`, `install.ps1` on Windows, or `npx intlayer init infra`):
23
24
 
24
- One command installs everything:
25
+ | Setup | What it is | Pick it for |
26
+ | --------------------- | ------------------------------------------------------------------------------- | --------------------------------------- |
27
+ | **Desktop app** | Native dashboard for macOS, Linux and Windows | A local client, nothing to host |
28
+ | **All-in-one Docker** | Dashboard, API, MongoDB, Redis and MinIO in a **single container** | Trials and small single-box installs |
29
+ | **Docker Compose** | **One container per service**, each datastore replaceable by a managed offering | Production, scaling, managed datastores |
30
+
31
+ ## Table of Contents
32
+
33
+ <TOC/>
34
+
35
+ ## Published images and packages
36
+
37
+ | Artifact | Docker Hub | GHCR mirror | Contents |
38
+ | -------------------- | ------------------------------------------------------------------------- | ------------------------------------------ | -------------------------------------------------------------------------------- |
39
+ | All-in-one container | [`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
+ | Dashboard (frontend) | [`intlayer/cms-frontend`](https://hub.docker.com/r/intlayer/cms-frontend) | `ghcr.io/aymericzip/intlayer/cms-frontend` | TanStack Start dashboard on Bun |
41
+ | API (backend) | [`intlayer/cms-backend`](https://hub.docker.com/r/intlayer/cms-backend) | `ghcr.io/aymericzip/intlayer/cms-backend` | Fastify REST API on Bun + Chromium |
42
+ | Desktop app | [GitHub releases](https://github.com/aymericzip/intlayer/releases/latest) | n/a | `.dmg` (macOS), `.deb` / `.rpm` / `.AppImage` (Linux), `.exe` / `.msi` (Windows) |
43
+
44
+ All three images are built from the same [`docker/selfhost/Dockerfile`](https://github.com/aymericzip/intlayer/tree/main/docker/selfhost) and published on every release. The Compose stack also pulls the official `mongo:8`, `redis:8-alpine` and `quay.io/minio/minio` images.
45
+
46
+ ## Setup
47
+
48
+ The installer asks which setup you want, checks the prerequisites (offering to install Docker), writes the environment file with the secrets already generated, and pulls the images. It never starts anything on its own: the Docker modes need a mailer first, so it ends by printing the command to run. Re-running it is safe: an existing environment file is never overwritten, which makes it the upgrade path too.
49
+
50
+ <Tabs group="mode">
51
+ <Tab label="Desktop app" value="desktop">
52
+
53
+ The Intlayer dashboard as a native application, built with Tauri. It signs in to the Intlayer Cloud (`https://app.intlayer.org`), so there is nothing to host. It is the right choice when you want a local client rather than a browser tab.
54
+
55
+ ### Install
56
+
57
+ The installer downloads the package for your OS and CPU, then opens it (macOS), installs it (`dpkg` / `rpm` on Linux) or launches the setup wizard (Windows). You can also download it by hand from the [releases page](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
- The installer downloads a `docker-compose.yml` and a `.env`, auto-generates the required secrets, and starts all containers with `docker compose up -d`.
66
+ </Tab>
67
+ <Tab label="Windows" value="windows">
31
68
 
32
- The only external dependency is **MongoDB**: the backend connects to a MongoDB **Atlas** cluster, which you provide. Everything else runs inside the container.
69
+ In PowerShell:
33
70
 
34
- ## Table of Contents
71
+ ```powershell
72
+ $env:INTLAYER_MODE = "desktop"; irm https://intlayer.org/install.ps1 | iex
73
+ ```
35
74
 
36
- <TOC/>
75
+ </Tab>
76
+ <Tab label="Intlayer CLI" value="cli">
37
77
 
38
- ## Architecture
78
+ ```bash
79
+ npx intlayer init infra --mode desktop
80
+ ```
81
+
82
+ </Tab>
83
+ </Tabs>
84
+
85
+ ### Requirements
86
+
87
+ - **Node.js**: the app embeds the dashboard's server and starts it with the machine's own `node` binary. Install it from [nodejs.org](https://nodejs.org) if the app does not start.
88
+
89
+ > The published desktop build talks to the Intlayer Cloud backend. Pointing it at a self-hosted backend requires rebuilding the app with `VITE_BACKEND_URL` set to your API, see [Limitations](#limitations).
90
+
91
+ </Tab>
92
+ <Tab label="All-in-one Docker" value="docker">
93
+
94
+ Everything runs inside the single `intlayer/cms-all` container, supervised by [s6-overlay](https://github.com/just-containers/s6-overlay), with every datastore persisted under one 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 (used for Puppeteer screenshot generation) is bundled inside the backend image. No separate container is needed.
110
+ | Service | Host port(s) | Purpose |
111
+ | ----------- | ----------------------------- | -------------------------------------------------------- |
112
+ | **app** | `3000` | Dashboard (CMS UI) |
113
+ | **backend** | `3100` | REST API (`/health` endpoint) |
114
+ | **mongo** | internal | MongoDB 8, single-node replica set `rs0` |
115
+ | **redis** | internal | Job queues (BullMQ) and caching |
116
+ | **minio** | `9000` (S3), `9001` (console) | S3-compatible object storage for avatars and screenshots |
117
+
118
+ Boot order is enforced by s6 dependencies (`mongod` → replica-set init, `minio` → bucket creation, then `backend`, then `app`), and services restart on exit, so the first boot recovers on its own.
56
119
 
57
- ## Prerequisites
120
+ ### Prerequisites
58
121
 
59
- - **Docker** ≥ 24 and **Docker Compose** ≥ v2. If either is missing, the installer prints the install link and exits.
60
- - Ports `3000`, `3100`, `8025`, `9000`, and `9001` available on the host.
61
- - A Linux or macOS host (or WSL2 on Windows).
122
+ - **Docker** ≥ 24: the installer offers to install it (via [get.docker.com](https://get.docker.com) on Linux, Homebrew on macOS). On Windows, install [Docker Desktop](https://docs.docker.com/desktop/setup/install/windows-install/) (WSL 2 backend) first.
123
+ - Ports `3000`, `3100`, `9000` and `9001` free on the host. MinIO `9000` must stay reachable by the browser, which loads assets straight from `S3_PUBLIC_URL`.
124
+ - A mailer: a [Resend](https://resend.com) API key or an SMTP relay.
62
125
 
63
- Everything else — Bun, Redis, MinIO, Chromium — ships inside the image.
126
+ ### 1. Install
64
127
 
65
- ## Quick start
128
+ Writes `./intlayer.env` with `BETTER_AUTH_SECRET` and `S3_SECRET_ACCESS_KEY` generated, and pulls `intlayer/cms-all:latest`.
66
129
 
67
- ### 1. Run the installer
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
- It verifies Docker is installed and running, writes `./intlayer.env` with `BETTER_AUTH_SECRET` and `S3_SECRET_ACCESS_KEY` already generated, and pulls the image. It does not start the container — the backend cannot boot without your database credentials.
137
+ </Tab>
138
+ <Tab label="Windows" value="windows">
74
139
 
75
- Re-running the installer is safe: an existing `intlayer.env` is never overwritten, so it doubles as the upgrade path.
140
+ In PowerShell:
76
141
 
77
- ### 2. Fill in your credentials
142
+ ```powershell
143
+ $env:INTLAYER_MODE = "docker"; irm https://intlayer.org/install.ps1 | iex
144
+ ```
78
145
 
79
- Open `intlayer.env` and complete the values marked `TODO`:
146
+ </Tab>
147
+ <Tab label="Intlayer CLI" value="cli">
148
+
149
+ ```bash
150
+ npx intlayer init infra --mode docker
151
+ ```
152
+
153
+ </Tab>
154
+ </Tabs>
155
+
156
+ ### 2. Configure a mailer
157
+
158
+ Open `intlayer.env` and fill in Resend **or** SMTP (details in [Global mailer](#global-mailer)):
80
159
 
81
160
  ```sh fileName="intlayer.env"
82
- DB_ID=<atlas-user>
83
- DB_MDP=<atlas-password>
84
- DB_CLUSTER=<cluster>.xxxxx.mongodb.net
161
+ # Option A: Resend
85
162
  RESEND_API_KEY=<your-resend-key>
86
- ```
87
163
 
88
- The file also carries commented-out blocks for the optional features — [SMTP mailer](#global-mailer), `OPENAI_API_KEY`, and the OAuth providers. Uncomment what you need.
164
+ # Option B: SMTP (takes over from Resend as soon as MAIL_SMTP_HOST is set)
165
+ MAIL_SMTP_HOST=smtp.example.com
166
+ MAIL_SMTP_PORT=587
167
+ MAIL_SMTP_USER=<user>
168
+ MAIL_SMTP_PASSWORD=<password>
169
+ MAIL_FROM=Intlayer <no-reply@example.com>
170
+ ```
89
171
 
90
- > The file is read by `docker run --env-file`, which does not strip quotes and treats everything after `=` as the value. Write bare values, and keep comments on their own lines.
172
+ ### 3. Start
91
173
 
92
- ### 3. Start the container
174
+ This is the command the installer prints:
93
175
 
94
- This is the command the installer prints when it finishes:
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
- Then open **http://localhost:3000**. First boot initialises the datastores, so give it a minute.
188
+ </Tab>
189
+ <Tab label="Windows" value="windows">
109
190
 
110
- > The dashboard is served on `localhost`. See [Limitations](#limitations) — custom domains are not supported by the published image.
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
+ ```
111
199
 
112
- ### Installer settings
200
+ </Tab>
201
+ <Tab label="Intlayer CLI" value="cli">
202
+
203
+ The CLI runs the installer, which prints the `docker run …` command shown in the other tabs. Copy it into your terminal once the mailer is configured.
204
+
205
+ </Tab>
206
+ </Tabs>
207
+
208
+ Open **http://localhost:3000** and follow [First-run setup](#first-run-setup). The first boot initialises the replica set and the bucket, so give it a minute.
209
+
210
+ ### Backup and upgrade
211
+
212
+ All state lives in the `intlayer-data` volume (`/data/mongo`, `/data/redis`, `/data/minio`).
213
+
214
+ ```sh
215
+ # Backup (stop the container first so MongoDB's files are consistent)
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
+ # Restore
221
+ docker run --rm -v intlayer-data:/data -v "$(pwd)":/backup busybox tar xzf /backup/intlayer-data.tar.gz -C /
222
+ ```
223
+
224
+ To upgrade, re-run the installer (it pulls the latest image and keeps `intlayer.env`), then `docker rm -f intlayer` and run the start command again. To use a managed MongoDB instead of the bundled one, set `MONGODB_URI` in `intlayer.env`.
225
+
226
+ </Tab>
227
+ <Tab label="Docker Compose" value="compose">
228
+
229
+ One container per service on a private Compose network. The dashboard and the API use the published `intlayer/cms-frontend` and `intlayer/cms-backend` images; the datastores use the official `mongo`, `redis` and `minio` images.
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 | Role |
245
+ | ------------ | ----------------------- | ------------------------------------------------------------------------- |
246
+ | `app` | `intlayer/cms-frontend` | Dashboard on `:3000`; waits for the backend to be healthy |
247
+ | `backend` | `intlayer/cms-backend` | API on `:3100` with Chromium; waits for Mongo, Redis and the MinIO bucket |
248
+ | `mongo` | `mongo:8` | Single-node replica set `rs0`, initiated by its own healthcheck |
249
+ | `redis` | `redis:8-alpine` | Queues and caching, append-only persistence |
250
+ | `minio` | `quay.io/minio/minio` | S3 storage on `:9000`, console on `:9001` |
251
+ | `minio-init` | `quay.io/minio/mc` | One-shot: creates the bucket and its anonymous-download policy |
252
+
253
+ Data is kept in the `intlayer_mongo-data`, `intlayer_redis-data` and `intlayer_minio-data` volumes. The service wiring (`MONGODB_URI`, `REDIS_URL`, `S3_ENDPOINT`, the internal backend URL used by server-side rendering) is fixed in the compose file and takes precedence over `.env`, which only carries secrets and optional integrations.
254
+
255
+ ### Prerequisites
256
+
257
+ - **Docker** ≥ 24 with the Compose plugin: the installer offers to install it on Linux and macOS. On Windows, install [Docker Desktop](https://docs.docker.com/desktop/setup/install/windows-install/) (WSL 2 backend) first.
258
+ - Ports `3000`, `3100`, `9000` and `9001` free on the host.
259
+ - A mailer: a [Resend](https://resend.com) API key or an SMTP relay.
260
+
261
+ ### 1. Install
262
+
263
+ Writes `docker-compose.yml` and a `.env` with the secrets generated into `./intlayer/`, and pulls the 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
+ Or by hand:
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
+ # fill in BETTER_AUTH_SECRET and S3_SECRET_ACCESS_KEY (openssl rand -hex 32)
279
+ ```
280
+
281
+ </Tab>
282
+ <Tab label="Windows" value="windows">
283
+
284
+ In PowerShell:
285
+
286
+ ```powershell
287
+ $env:INTLAYER_MODE = "compose"; irm https://intlayer.org/install.ps1 | iex
288
+ ```
289
+
290
+ Or by hand:
113
291
 
114
- The installer reads a few environment variables. Because it is piped into `sh`, pass them to the shell rather than to `curl`:
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
+ # fill in BETTER_AUTH_SECRET and S3_SECRET_ACCESS_KEY
297
+ ```
298
+
299
+ </Tab>
300
+ <Tab label="Intlayer CLI" value="cli">
301
+
302
+ ```bash
303
+ npx intlayer init infra --mode compose
304
+ ```
305
+
306
+ </Tab>
307
+ </Tabs>
308
+
309
+ ### 2. Configure a mailer
310
+
311
+ Fill in Resend **or** SMTP in `intlayer/.env`, exactly as for the all-in-one container (see [Global mailer](#global-mailer)).
312
+
313
+ ### 3. Start
115
314
 
116
315
  ```sh
117
- curl -fsSL https://intlayer.org/install.sh | INTLAYER_ENV_FILE=./config/intlayer.env sh
316
+ cd intlayer && docker compose up -d
317
+ ```
318
+
319
+ Open **http://localhost:3000** and follow [First-run setup](#first-run-setup).
320
+
321
+ ### Managed datastores
322
+
323
+ Delete the service you are replacing from the compose file (and its `depends_on` entry on `backend`), then override the matching variable:
324
+
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
118
333
  ```
119
334
 
120
- | Variable | Default | Description |
121
- | ------------------------- | --------------------------------------------- | ------------------------------- |
122
- | `INTLAYER_IMAGE` | `ghcr.io/aymericzip/intlayer-selfhost:latest` | Image to pull |
123
- | `INTLAYER_ENV_FILE` | `./intlayer.env` | Where to write the env file |
124
- | `INTLAYER_CONTAINER_NAME` | `intlayer` | Container name |
125
- | `INTLAYER_DATA_VOLUME` | `intlayer-data` | Named volume mounted at `/data` |
126
- | `INTLAYER_APP_PORT` | `3000` | Host port for the dashboard |
127
- | `INTLAYER_API_PORT` | `3100` | Host port for the API |
128
- | `INTLAYER_S3_PORT` | `9000` | Host port for the MinIO S3 API |
129
- | `INTLAYER_CONSOLE_PORT` | `9001` | Host port for the MinIO console |
335
+ `S3_ACCESS_KEY_ID` / `S3_SECRET_ACCESS_KEY` / `S3_BUCKET_NAME` keep their meaning against any S3-compatible provider.
130
336
 
131
- > The four port variables only change the **host** side of the mapping printed in the `docker run` command. The published image has `http://localhost:3000`, `http://localhost:3100` and `http://localhost:9000` compiled into the dashboard bundle at build time, so remapping them leaves the browser pointing at the old ports. Keep the defaults unless you are building your own image — see [Limitations](#limitations).
337
+ ### Scaling
132
338
 
133
- ## Quick start
339
+ `app` and `backend` are stateless. Behind a load balancer, `docker compose up -d --scale backend=3` works once the fixed host port mappings are removed and the proxy addresses the services by name. Background jobs are coordinated through Redis (BullMQ), so several backend replicas share the queue safely.
134
340
 
135
- What the installer does:
341
+ ### Building from source
136
342
 
137
- 1. Checks that `docker` and `docker compose` are present.
138
- 2. Downloads `docker-compose.yml` and `.env.example` into `./intlayer/`.
139
- 3. If no `.env` exists, copies the example and generates random secrets for `BETTER_AUTH_SECRET`, `S3_ACCESS_KEY_ID`, and `S3_SECRET_ACCESS_KEY` via `openssl rand`.
140
- 4. Runs `docker compose pull` + `docker compose up -d`.
141
- 5. Prints the URLs: dashboard `:3000`, API `:3100`, email UI `:8025`, MinIO console `:9001`.
343
+ From a checkout of the repository, an override switches the two Intlayer services from `image:` to `build:`:
142
344
 
143
- After the stack is up, open **http://localhost:3000** and create your first account.
345
+ ```sh
346
+ cd docker/selfhost
347
+ docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --build
348
+ ```
349
+
350
+ This is also how you produce images for a custom domain: pass the `VITE_*` values as build args (see [Limitations](#limitations)).
144
351
 
145
- ## Services
352
+ ### Backup and upgrade
146
353
 
147
- | Service | Image | Host port(s) | Purpose |
148
- | ----------- | ------------------------------------ | ------------------------------ | -------------------------------------------------------- |
149
- | **app** | built from `apps/app/Dockerfile` | `3000` | TanStack Start dashboard (CMS UI) |
150
- | **backend** | built from `apps/backend/Dockerfile` | `3100` | Fastify REST API (`/health` endpoint) |
151
- | **mongo** | `mongo:7` | internal | Single-node replica set (`rs0`) |
152
- | **redis** | `redis:7-alpine` | internal | Job queues (BullMQ) and caching (ioredis) |
153
- | **minio** | `minio/minio` | `9000` (S3), `9001` (console) | S3-compatible object storage for avatars and screenshots |
154
- | **mailpit** | `axllent/mailpit` | `1025` (SMTP), `8025` (web UI) | Local transactional email sink |
354
+ ```sh
355
+ # Backup one volume (repeat for intlayer_redis-data and 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
155
359
 
156
- > MinIO port `9000` must be reachable by the browser because uploaded assets (avatars, screenshots) are loaded directly from `S3_PUBLIC_URL=http://localhost:9000/intlayer`.
360
+ # Upgrade, volumes are kept
361
+ docker compose pull && docker compose up -d
362
+ ```
363
+
364
+ </Tab>
365
+ </Tabs>
366
+
367
+ ### Installer settings
368
+
369
+ Without `--mode` (or `INTLAYER_MODE`), the installer shows a menu: `desktop`, `docker` (all-in-one) or `compose`. It also reads a few environment variables. Because it is piped into the shell, pass them to the shell rather than to `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 | Default | Applies to | Description |
380
+ | ------------------------- | ------------------------- | ---------- | ---------------------------------------------------------- |
381
+ | `INTLAYER_MODE` | _(asked)_ | all | `desktop`, `docker` or `compose`, same as `--mode` |
382
+ | `INTLAYER_DOWNLOAD_DIR` | `~/Downloads` | desktop | Where the app installer is saved |
383
+ | `INTLAYER_IMAGE` | `intlayer/cms-all:latest` | docker | All-in-one image to pull |
384
+ | `INTLAYER_ENV_FILE` | `./intlayer.env` | docker | Where to write the environment file |
385
+ | `INTLAYER_CONTAINER_NAME` | `intlayer` | docker | Container name |
386
+ | `INTLAYER_DATA_VOLUME` | `intlayer-data` | docker | Named volume mounted at `/data` |
387
+ | `INTLAYER_APP_PORT` | `3000` | docker | Host port for the dashboard |
388
+ | `INTLAYER_API_PORT` | `3100` | docker | Host port for the API |
389
+ | `INTLAYER_S3_PORT` | `9000` | docker | Host port for the MinIO S3 API |
390
+ | `INTLAYER_CONSOLE_PORT` | `9001` | docker | Host port for the MinIO console |
391
+ | `INTLAYER_COMPOSE_DIR` | `./intlayer` | compose | Where `docker-compose.yml` and `.env` are written |
392
+ | `INTLAYER_SELFHOST_REF` | `main` | both | Git ref the compose file and env template are fetched from |
393
+
394
+ > The port variables only change the **host** side of the mapping. The published images have `http://localhost:3000`, `http://localhost:3100` and `http://localhost:9000` compiled into the dashboard bundle, so remapping them leaves the browser pointing at the old ports. Keep the defaults unless you build your own images, see [Limitations](#limitations).
395
+
396
+ ## First-run setup
397
+
398
+ On a fresh instance (empty database), opening the dashboard redirects you to the **`/init`** page:
399
+
400
+ 1. Create the first account. Because the users collection is empty, this account is automatically promoted to **super admin**.
401
+ 2. A verification email is sent through Resend or your SMTP relay. Email verification is **mandatory**, this is why a mailer must be configured before you start.
402
+ 3. Click the link in the email, then sign in.
403
+
404
+ Once an admin exists, `/init` redirects to the standard sign-in page.
157
405
 
158
406
  ## Environment variables
159
407
 
408
+ Both Docker modes read the same file (`intlayer.env` for the container, `.env` for Compose), generated from [`docker/selfhost/.env.template`](https://github.com/aymericzip/intlayer/blob/main/docker/selfhost/.env.template).
409
+
160
410
  ### Required
161
411
 
162
- | Variable | Example | Description |
163
- | ---------------------- | ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
164
- | `DB_ID` | `intlayer` | MongoDB Atlas user |
165
- | `DB_MDP` | _(your password)_ | MongoDB Atlas password |
166
- | `DB_CLUSTER` | `cluster0.xxxxx.mongodb.net` | MongoDB Atlas cluster host (used in the `mongodb+srv://` URI) |
167
- | `BETTER_AUTH_SECRET` | _(generated)_ | 32-byte secret for session signing |
168
- | `S3_SECRET_ACCESS_KEY` | _(generated)_ | Secret for the bundled MinIO |
169
- | `RESEND_API_KEY` | _(your key)_ | Transactional email via Resend. Required for first-run setup unless you configure a global SMTP mailer (see [Global mailer](#global-mailer)) |
170
-
171
- ### Required (auto-generated or prompted)
172
-
173
- | Variable | Example | Description |
174
- | ---------------------- | ----------------------------------------------- | -------------------------------------------------- |
175
- | `NODE_ENV` | `production` | Runtime environment |
176
- | `PORT` | `3100` | Backend listening port |
177
- | `BACKEND_URL` | `http://localhost:3100` | Public URL of the backend API |
178
- | `APP_URL` | `http://localhost:3000` | Public URL of the dashboard |
179
- | `DOMAIN` | `localhost` | Cookie domain |
180
- | `MONGODB_URI` | `mongodb://mongo:27017/intlayer?replicaSet=rs0` | Full MongoDB connection URI |
181
- | `REDIS_URL` | `redis://redis:6379` | Redis connection URL |
182
- | `BETTER_AUTH_SECRET` | _(generated)_ | 32-byte secret for session signing |
183
- | `MAIL_PROVIDER` | `smtp` | Mail transport: `smtp` or `resend` |
184
- | `MAIL_SMTP_HOST` | `mailpit` | SMTP hostname (Mailpit container name) |
185
- | `MAIL_SMTP_PORT` | `1025` | SMTP port |
186
- | `MAIL_FROM` | `Intlayer <no-reply@localhost>` | Sender address |
187
- | `S3_ENDPOINT` | `http://minio:9000` | S3-compatible endpoint |
188
- | `S3_PUBLIC_URL` | `http://localhost:9000/intlayer` | Public URL for browser asset loading |
189
- | `S3_BUCKET_NAME` | `intlayer` | Bucket name |
190
- | `S3_ACCESS_KEY_ID` | _(generated)_ | MinIO access key |
191
- | `S3_SECRET_ACCESS_KEY` | _(generated)_ | MinIO secret key |
192
- | `VITE_BACKEND_URL` | `http://localhost:3100` | Backend URL baked into the dashboard at build time |
193
- | `VITE_DOMAIN` | `localhost` | Domain baked into the dashboard at build time |
412
+ | Variable | Example | Description |
413
+ | ---------------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
414
+ | `BETTER_AUTH_SECRET` | _(generated)_ | 32-byte secret for session signing |
415
+ | `S3_SECRET_ACCESS_KEY` | _(generated)_ | Secret for the bundled MinIO |
416
+ | `RESEND_API_KEY` | _(your key)_ | Transactional email via Resend. Required for first-run setup unless an SMTP relay is configured instead (see [Global mailer](#global-mailer)) |
417
+
418
+ ### Fixed by the deployment
419
+
420
+ These are set by the image (all-in-one) or by the compose file, and only need overriding for a non-standard topology.
421
+
422
+ | Variable | All-in-one | Docker Compose | Description |
423
+ | ------------------ | --------------------------------------------------- | -------------------------------- | ----------------------------------------------------------------------------- |
424
+ | `PORT` | `3100` | `3100` | Backend listening port |
425
+ | `APP_URL` | `http://localhost:3000` | `http://localhost:3000` | Public URL of the dashboard |
426
+ | `BACKEND_URL` | `http://localhost:3100` | `http://localhost:3100` | Public URL of the backend API |
427
+ | `DOMAIN` | `localhost` | `localhost` | Cookie domain |
428
+ | `SELF_HOSTED` | `true` | `true` | Disables the cloud-only API endpoints (billing, subscriptions, marketplace) |
429
+ | `MONGODB_URI` | `mongodb://127.0.0.1:27017/intlayer?replicaSet=rs0` | `mongodb://mongo:27017/…` | MongoDB connection string, any `mongodb://` or `mongodb+srv://` cluster works |
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 (server-to-server) |
432
+ | `S3_PUBLIC_URL` | `http://localhost:9000/intlayer` | `http://localhost:9000/intlayer` | Public URL for browser asset loading |
433
+ | `S3_BUCKET_NAME` | `intlayer` | `intlayer` | Bucket name |
434
+ | `S3_ACCESS_KEY_ID` | `intlayer` | `intlayer` | MinIO access key |
435
+
436
+ The Compose `app` service additionally receives `INTLAYER_BACKEND_INTERNAL_URL=http://backend:3100`: the browser reaches the API on `localhost:3100`, but server-side rendering runs inside the Compose network and must use the service name.
194
437
 
195
438
  ### Optional (features degrade gracefully when absent)
196
439
 
197
- | Variable | Feature |
198
- | -------------------------------------------------------- | ----------------------------------------------------------- |
199
- | `OPENAI_API_KEY` | AI-assisted translation and content audit |
200
- | `STRIPE_SECRET_KEY`, `STRIPE_WEBHOOK_SECRET`, `STRIPE_*` | Billing and subscription management |
201
- | `RESEND_API_KEY` | Transactional email via Resend (overrides Mailpit when set) |
202
- | `GITHUB_CLIENT_ID`, `GITHUB_CLIENT_SECRET` | GitHub OAuth login |
203
- | `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET` | Google OAuth login |
204
- | `GITLAB_CLIENT_ID`, `GITLAB_CLIENT_SECRET` | GitLab OAuth login |
205
- | `MICROSOFT_CLIENT_ID`, `MICROSOFT_CLIENT_SECRET` | Microsoft OAuth login |
206
- | `LINKEDIN_CLIENT_ID`, `LINKEDIN_CLIENT_SECRET` | LinkedIn OAuth login |
207
- | `ATLASSIAN_CLIENT_ID`, `ATLASSIAN_CLIENT_SECRET` | Atlassian OAuth login |
440
+ | Variable | Feature |
441
+ | ------------------------------------------------ | ----------------------------------------- |
442
+ | `OPENAI_API_KEY` | AI-assisted translation and content audit |
443
+ | `GITHUB_CLIENT_ID`, `GITHUB_CLIENT_SECRET` | GitHub OAuth login |
444
+ | `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET` | Google OAuth login |
445
+ | `GITLAB_CLIENT_ID`, `GITLAB_CLIENT_SECRET` | GitLab OAuth login |
446
+ | `MICROSOFT_CLIENT_ID`, `MICROSOFT_CLIENT_SECRET` | Microsoft OAuth login |
208
447
 
209
448
  ### Global mailer
210
449
 
211
- By default, all transactional emails are sent through Resend using `RESEND_API_KEY`. Self-hosted deployments can instead route **every** email — including non-organisation emails such as password resets and magic links — through a global mailer configured with environment variables.
450
+ Every transactional email, including non-organization emails such as password resets and magic links, goes through one of two global transports:
212
451
 
213
- Set `MAIL_PROVIDER` to activate it. When unset, the default Resend mailer is used.
452
+ - **Resend**, using `RESEND_API_KEY`.
453
+ - **SMTP**, using the `MAIL_SMTP_*` variables. As soon as `MAIL_SMTP_HOST` is set, SMTP is used and `RESEND_API_KEY` is ignored.
214
454
 
215
- | Variable | Example | Description |
216
- | -------------------- | ------------------------------ | ----------------------------------------------------------------- |
217
- | `MAIL_PROVIDER` | `smtp` | Global transport: `smtp` or `resend`. Leave unset to use defaults |
218
- | `MAIL_FROM` | `Intlayer <no-reply@acme.com>` | Sender header. Accepts a bare address or `Name <email>` format |
219
- | `MAIL_SMTP_HOST` | `smtp.acme.com` | SMTP host (required when `MAIL_PROVIDER=smtp`) |
220
- | `MAIL_SMTP_PORT` | `587` | SMTP port (defaults to `587`) |
221
- | `MAIL_SMTP_SECURE` | `false` | Implicit TLS. Set `true` for port `465` |
222
- | `MAIL_SMTP_USER` | _(your user)_ | SMTP username (optional; omit for unauthenticated relays) |
223
- | `MAIL_SMTP_PASSWORD` | _(your password)_ | SMTP password |
455
+ `MAIL_PROVIDER` is only needed to force one transport when both are configured (for instance `MAIL_PROVIDER=resend` to keep Resend while an SMTP host is present).
224
456
 
225
- > Precedence: an organisation's own mailer (configured from the **Organisation** dashboard) takes priority over the global mailer, which in turn takes priority over the default Resend key.
457
+ | Variable | Example | Description |
458
+ | -------------------- | ------------------------------ | ---------------------------------------------------------------------------- |
459
+ | `MAIL_FROM` | `Intlayer <no-reply@acme.com>` | Sender header for either transport. Accepts a bare address or `Name <email>` |
460
+ | `MAIL_SMTP_HOST` | `smtp.acme.com` | SMTP host. Setting it selects the SMTP transport |
461
+ | `MAIL_SMTP_PORT` | `587` | SMTP port (defaults to `587`) |
462
+ | `MAIL_SMTP_SECURE` | `false` | Implicit TLS. Set `true` for port `465` |
463
+ | `MAIL_SMTP_USER` | _(your user)_ | SMTP username (optional; omit for unauthenticated relays) |
464
+ | `MAIL_SMTP_PASSWORD` | _(your password)_ | SMTP password |
465
+ | `MAIL_PROVIDER` | `resend` | Optional override: `smtp` or `resend`. Leave unset to auto-select |
466
+
467
+ > Precedence: an organization's own mailer (configured from the **Organization** dashboard) takes priority over the global mailer, which in turn takes priority over the default Resend key.
226
468
 
227
469
  ## Connecting your Intlayer project
228
470
 
@@ -285,84 +527,17 @@ const cms = createIntlayerCMS({
285
527
  const { data: dictionaries } = await dictionaryEndpoint(cms).getDictionaries();
286
528
  ```
287
529
 
288
- ## Upgrading
289
-
290
- This pulls the latest images and restarts containers with `docker compose pull && docker compose up -d`. Existing volumes (`mongo-data`, `redis-data`, `minio-data`) are preserved — no data loss.
291
-
292
- ```sh
293
- docker compose pull
294
- docker compose up -d
295
- ```
296
-
297
- ## Backup and restore
298
-
299
- All persistent data lives in three named Docker volumes.
300
-
301
- ### Backup
302
-
303
- ```sh
304
- docker run --rm \
305
- -v intlayer_mongo-data:/data \
306
- -v "$(pwd)":/backup \
307
- busybox tar czf /backup/mongo-data.tar.gz /data
308
-
309
- docker run --rm \
310
- -v intlayer_redis-data:/data \
311
- -v "$(pwd)":/backup \
312
- busybox tar czf /backup/redis-data.tar.gz /data
313
-
314
- docker run --rm \
315
- -v intlayer_minio-data:/data \
316
- -v "$(pwd)":/backup \
317
- busybox tar czf /backup/minio-data.tar.gz /data
318
- ```
319
-
320
- ### Restore
321
-
322
- ```sh
323
- docker run --rm \
324
- -v intlayer_mongo-data:/data \
325
- -v "$(pwd)":/backup \
326
- busybox tar xzf /backup/mongo-data.tar.gz -C /
327
-
328
- # Repeat for redis-data and minio-data
329
- ```
330
-
331
530
  ## Limitations
332
531
 
333
- - **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.
334
- - **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.
335
- - **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 organisation can also configure its own SMTP or Resend mailer from the dashboard.
336
-
337
- ## Troubleshooting
338
-
339
- ### Backend crash-loops on first start
340
-
341
- MongoDB and Redis must be healthy before the backend starts. The compose file uses `depends_on` with `condition: service_healthy`. If you see repeated backend restarts, check that the `mongo` and `redis` healthchecks pass:
342
-
343
- ```sh
344
- docker compose ps
345
- docker compose logs mongo
346
- docker compose logs redis
347
- ```
348
-
349
- Look for `MongoDB connection error` near the top of the log.
350
-
351
- ### Dashboard cannot reach the API
352
-
353
- Verify that `VITE_BACKEND_URL` matches the URL where the backend is reachable from the **browser** (not the Docker network). If you changed the backend port or added a reverse proxy, rebuild the dashboard image:
354
-
355
- ### MinIO bucket missing
356
-
357
- If the `minio-init` one-shot service didn't run (or ran before MinIO was ready), create the bucket manually:
358
-
359
- ```sh
360
- docker compose run --rm minio-init
361
- ```
532
+ - **No custom domain, and no port remapping.** All browser-facing `VITE_*` URLs are inlined into the dashboard at build time, and the published images (and the desktop app) ship with `localhost` / Intlayer Cloud values. The dashboard must be accessed at `http://localhost:3000`, the API at `:3100` and MinIO at `:9000`. Serving it on a public domain, or pointing the desktop app at a self-hosted backend, requires rebuilding with the target URLs baked in (`--build-arg VITE_BACKEND_URL=… VITE_SITE_URL=… VITE_DOMAIN=…` on `docker/selfhost/Dockerfile`, or through `docker-compose.build.yml`) and is not supported out of the box.
533
+ - **Email requires a working mailer.** First-run setup enforces email verification, so either `RESEND_API_KEY` or an [SMTP relay](#global-mailer) (`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.
534
+ - **The desktop app needs Node.js** on the machine to start its embedded server.
362
535
 
363
536
  ## Useful links
364
537
 
365
538
  - [Intlayer CMS documentation](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en-GB/intlayer_CMS.md)
366
539
  - [Configuration reference](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en-GB/configuration.md)
367
- - [CMS SDK — `@intlayer/api`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en-GB/intlayer_CMS.md#programmatic-access-with-the-intlayerapi-sdk)
368
- - [Docker Image (aymercizip/intlayer-selfhost)](https://hub.docker.com/repository/docker/aymercizip/intlayer-selfhost/general)
540
+ - [CMS SDK: `@intlayer/api`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en-GB/intlayer_CMS.md#programmatic-access-with-the-intlayerapi-sdk)
541
+ - [Desktop app releases](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), mirrored on GHCR under `ghcr.io/aymericzip/intlayer/`
543
+ - [`docker/selfhost/`](https://github.com/aymericzip/intlayer/tree/main/docker/selfhost): Dockerfile, `docker-compose.yml` and `.env.template`