@intlayer/docs 8.9.4-canary.0 → 8.9.5

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 (207) hide show
  1. package/dist/cjs/generated/docs.entry.cjs +20 -0
  2. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  3. package/dist/esm/generated/docs.entry.mjs +20 -0
  4. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  5. package/dist/types/generated/docs.entry.d.ts +1 -0
  6. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  7. package/docs/ar/benchmark/index.md +0 -3
  8. package/docs/ar/benchmark/nextjs.md +15 -6
  9. package/docs/ar/benchmark/solid.md +155 -0
  10. package/docs/ar/benchmark/svelte.md +148 -0
  11. package/docs/ar/benchmark/tanstack.md +12 -3
  12. package/docs/ar/benchmark/vue.md +160 -0
  13. package/docs/ar/configuration.md +16 -12
  14. package/docs/ar/dictionary/content_file.md +51 -1
  15. package/docs/ar/mcp_server.md +30 -17
  16. package/docs/ar/plugins/sync-po.md +333 -0
  17. package/docs/bn/configuration.md +16 -12
  18. package/docs/cs/configuration.md +16 -12
  19. package/docs/de/benchmark/index.md +0 -3
  20. package/docs/de/benchmark/nextjs.md +15 -6
  21. package/docs/de/benchmark/solid.md +155 -0
  22. package/docs/de/benchmark/svelte.md +148 -0
  23. package/docs/de/benchmark/tanstack.md +12 -3
  24. package/docs/de/benchmark/vue.md +160 -0
  25. package/docs/de/configuration.md +16 -12
  26. package/docs/de/dictionary/content_file.md +52 -2
  27. package/docs/de/mcp_server.md +29 -16
  28. package/docs/de/plugins/sync-po.md +332 -0
  29. package/docs/en/benchmark/nextjs.md +11 -2
  30. package/docs/en/benchmark/solid.md +22 -4
  31. package/docs/en/benchmark/svelte.md +17 -5
  32. package/docs/en/benchmark/tanstack.md +18 -3
  33. package/docs/en/benchmark/vue.md +17 -11
  34. package/docs/en/configuration.md +16 -13
  35. package/docs/en/dictionary/content_file.md +51 -1
  36. package/docs/en/mcp_server.md +31 -18
  37. package/docs/en/plugins/sync-po.md +333 -0
  38. package/docs/en-GB/benchmark/index.md +0 -3
  39. package/docs/en-GB/benchmark/nextjs.md +15 -6
  40. package/docs/en-GB/benchmark/solid.md +155 -0
  41. package/docs/en-GB/benchmark/svelte.md +148 -0
  42. package/docs/en-GB/benchmark/tanstack.md +12 -3
  43. package/docs/en-GB/benchmark/vue.md +160 -0
  44. package/docs/en-GB/configuration.md +15 -11
  45. package/docs/en-GB/dictionary/content_file.md +51 -1
  46. package/docs/en-GB/mcp_server.md +31 -18
  47. package/docs/en-GB/plugins/sync-po.md +333 -0
  48. package/docs/es/benchmark/index.md +0 -3
  49. package/docs/es/benchmark/nextjs.md +15 -6
  50. package/docs/es/benchmark/solid.md +155 -0
  51. package/docs/es/benchmark/svelte.md +148 -0
  52. package/docs/es/benchmark/tanstack.md +12 -3
  53. package/docs/es/benchmark/vue.md +160 -0
  54. package/docs/es/configuration.md +16 -12
  55. package/docs/es/dictionary/content_file.md +51 -1
  56. package/docs/es/mcp_server.md +30 -17
  57. package/docs/es/plugins/sync-po.md +333 -0
  58. package/docs/fr/benchmark/index.md +0 -3
  59. package/docs/fr/benchmark/nextjs.md +15 -6
  60. package/docs/fr/benchmark/solid.md +155 -0
  61. package/docs/fr/benchmark/svelte.md +148 -0
  62. package/docs/fr/benchmark/tanstack.md +12 -3
  63. package/docs/fr/benchmark/vue.md +160 -0
  64. package/docs/fr/configuration.md +16 -12
  65. package/docs/fr/dictionary/content_file.md +51 -1
  66. package/docs/fr/mcp_server.md +30 -17
  67. package/docs/fr/plugins/sync-po.md +333 -0
  68. package/docs/hi/benchmark/nextjs.md +15 -6
  69. package/docs/hi/benchmark/solid.md +155 -0
  70. package/docs/hi/benchmark/svelte.md +148 -0
  71. package/docs/hi/benchmark/tanstack.md +12 -3
  72. package/docs/hi/benchmark/vue.md +160 -0
  73. package/docs/hi/configuration.md +16 -12
  74. package/docs/hi/dictionary/content_file.md +51 -1
  75. package/docs/hi/mcp_server.md +31 -18
  76. package/docs/hi/plugins/sync-po.md +333 -0
  77. package/docs/id/benchmark/index.md +0 -3
  78. package/docs/id/benchmark/nextjs.md +15 -6
  79. package/docs/id/benchmark/solid.md +155 -0
  80. package/docs/id/benchmark/svelte.md +148 -0
  81. package/docs/id/benchmark/tanstack.md +12 -3
  82. package/docs/id/benchmark/vue.md +160 -0
  83. package/docs/id/configuration.md +16 -12
  84. package/docs/id/dictionary/content_file.md +51 -1
  85. package/docs/id/mcp_server.md +30 -17
  86. package/docs/id/plugins/sync-po.md +333 -0
  87. package/docs/it/benchmark/index.md +1 -4
  88. package/docs/it/benchmark/nextjs.md +15 -6
  89. package/docs/it/benchmark/solid.md +155 -0
  90. package/docs/it/benchmark/svelte.md +148 -0
  91. package/docs/it/benchmark/tanstack.md +12 -3
  92. package/docs/it/benchmark/vue.md +160 -0
  93. package/docs/it/configuration.md +16 -12
  94. package/docs/it/dictionary/content_file.md +51 -1
  95. package/docs/it/mcp_server.md +30 -17
  96. package/docs/it/plugins/sync-po.md +333 -0
  97. package/docs/ja/benchmark/index.md +5 -5
  98. package/docs/ja/benchmark/nextjs.md +15 -6
  99. package/docs/ja/benchmark/solid.md +155 -0
  100. package/docs/ja/benchmark/svelte.md +148 -0
  101. package/docs/ja/benchmark/tanstack.md +12 -3
  102. package/docs/ja/benchmark/vue.md +160 -0
  103. package/docs/ja/configuration.md +16 -12
  104. package/docs/ja/dictionary/content_file.md +50 -2
  105. package/docs/ja/intlayer_with_nextjs_no_locale_path.md +4 -3
  106. package/docs/ja/mcp_server.md +29 -16
  107. package/docs/ja/plugins/sync-po.md +333 -0
  108. package/docs/ko/benchmark/nextjs.md +15 -6
  109. package/docs/ko/benchmark/solid.md +155 -0
  110. package/docs/ko/benchmark/svelte.md +148 -0
  111. package/docs/ko/benchmark/tanstack.md +12 -3
  112. package/docs/ko/benchmark/vue.md +160 -0
  113. package/docs/ko/configuration.md +16 -12
  114. package/docs/ko/dictionary/content_file.md +51 -1
  115. package/docs/ko/intlayer_with_nextjs_no_locale_path.md +3 -2
  116. package/docs/ko/mcp_server.md +31 -18
  117. package/docs/ko/plugins/sync-po.md +333 -0
  118. package/docs/nl/configuration.md +16 -12
  119. package/docs/pl/benchmark/index.md +0 -3
  120. package/docs/pl/benchmark/nextjs.md +15 -6
  121. package/docs/pl/benchmark/solid.md +155 -0
  122. package/docs/pl/benchmark/svelte.md +148 -0
  123. package/docs/pl/benchmark/tanstack.md +12 -3
  124. package/docs/pl/benchmark/vue.md +160 -0
  125. package/docs/pl/configuration.md +16 -12
  126. package/docs/pl/dictionary/content_file.md +51 -1
  127. package/docs/pl/mcp_server.md +30 -17
  128. package/docs/pl/plugins/sync-po.md +333 -0
  129. package/docs/pt/benchmark/index.md +0 -3
  130. package/docs/pt/benchmark/nextjs.md +16 -7
  131. package/docs/pt/benchmark/solid.md +155 -0
  132. package/docs/pt/benchmark/svelte.md +148 -0
  133. package/docs/pt/benchmark/tanstack.md +13 -4
  134. package/docs/pt/benchmark/vue.md +160 -0
  135. package/docs/pt/configuration.md +16 -12
  136. package/docs/pt/dictionary/content_file.md +51 -1
  137. package/docs/pt/mcp_server.md +30 -17
  138. package/docs/pt/plugins/sync-po.md +333 -0
  139. package/docs/ru/benchmark/nextjs.md +15 -6
  140. package/docs/ru/benchmark/solid.md +155 -0
  141. package/docs/ru/benchmark/svelte.md +148 -0
  142. package/docs/ru/benchmark/tanstack.md +12 -3
  143. package/docs/ru/benchmark/vue.md +160 -0
  144. package/docs/ru/configuration.md +16 -12
  145. package/docs/ru/dictionary/content_file.md +52 -2
  146. package/docs/ru/mcp_server.md +30 -17
  147. package/docs/ru/plugins/sync-po.md +333 -0
  148. package/docs/tr/benchmark/index.md +0 -3
  149. package/docs/tr/benchmark/nextjs.md +15 -6
  150. package/docs/tr/benchmark/solid.md +155 -0
  151. package/docs/tr/benchmark/svelte.md +148 -0
  152. package/docs/tr/benchmark/tanstack.md +12 -3
  153. package/docs/tr/benchmark/vue.md +160 -0
  154. package/docs/tr/configuration.md +16 -12
  155. package/docs/tr/dictionary/content_file.md +51 -1
  156. package/docs/tr/mcp_server.md +31 -18
  157. package/docs/tr/plugins/sync-po.md +333 -0
  158. package/docs/uk/benchmark/nextjs.md +15 -6
  159. package/docs/uk/benchmark/solid.md +155 -0
  160. package/docs/uk/benchmark/svelte.md +148 -0
  161. package/docs/uk/benchmark/tanstack.md +12 -3
  162. package/docs/uk/benchmark/vue.md +160 -0
  163. package/docs/uk/configuration.md +16 -12
  164. package/docs/uk/dictionary/content_file.md +51 -1
  165. package/docs/uk/mcp_server.md +29 -16
  166. package/docs/uk/plugins/sync-po.md +333 -0
  167. package/docs/ur/configuration.md +16 -12
  168. package/docs/vi/benchmark/index.md +0 -3
  169. package/docs/vi/benchmark/nextjs.md +15 -6
  170. package/docs/vi/benchmark/solid.md +155 -0
  171. package/docs/vi/benchmark/svelte.md +148 -0
  172. package/docs/vi/benchmark/tanstack.md +12 -3
  173. package/docs/vi/benchmark/vue.md +160 -0
  174. package/docs/vi/configuration.md +16 -12
  175. package/docs/vi/dictionary/content_file.md +51 -1
  176. package/docs/vi/intlayer_with_nextjs_15.md +10 -57
  177. package/docs/vi/mcp_server.md +30 -17
  178. package/docs/vi/plugins/sync-po.md +333 -0
  179. package/docs/zh/benchmark/nextjs.md +15 -6
  180. package/docs/zh/benchmark/solid.md +155 -0
  181. package/docs/zh/benchmark/svelte.md +148 -0
  182. package/docs/zh/benchmark/tanstack.md +12 -3
  183. package/docs/zh/benchmark/vue.md +160 -0
  184. package/docs/zh/configuration.md +16 -12
  185. package/docs/zh/dictionary/content_file.md +51 -3
  186. package/docs/zh/mcp_server.md +31 -18
  187. package/docs/zh/plugins/sync-po.md +333 -0
  188. package/frequent_questions/ar/intlayerNode.md +3 -3
  189. package/frequent_questions/de/intlayerNode.md +3 -3
  190. package/frequent_questions/en/intlayerNode.md +3 -3
  191. package/frequent_questions/en-GB/intlayerNode.md +3 -3
  192. package/frequent_questions/es/intlayerNode.md +3 -3
  193. package/frequent_questions/fr/intlayerNode.md +3 -3
  194. package/frequent_questions/hi/intlayerNode.md +3 -3
  195. package/frequent_questions/id/intlayerNode.md +3 -3
  196. package/frequent_questions/it/intlayerNode.md +3 -3
  197. package/frequent_questions/ja/intlayerNode.md +3 -3
  198. package/frequent_questions/ko/intlayerNode.md +3 -3
  199. package/frequent_questions/pl/intlayerNode.md +3 -3
  200. package/frequent_questions/pt/intlayerNode.md +3 -3
  201. package/frequent_questions/ru/intlayerNode.md +3 -3
  202. package/frequent_questions/tr/intlayerNode.md +3 -3
  203. package/frequent_questions/uk/intlayerNode.md +3 -3
  204. package/frequent_questions/vi/intlayerNode.md +3 -3
  205. package/frequent_questions/zh/intlayerNode.md +3 -3
  206. package/package.json +8 -8
  207. package/src/generated/docs.entry.ts +20 -0
@@ -57,6 +57,13 @@ In practice, for the least optimized implementations, an internationalized page
57
57
 
58
58
  The other impact is on developer experience: how you declare content, types, namespace organization, dynamic loading, and reactivity when the locale changes.
59
59
 
60
+ ## TL;DR
61
+
62
+ - **Intlayer**: Recommended choice for professional Solid applications needing advanced features and optimization (v8.7.12).
63
+ - **@solid-primitives/i18n**: Excellent lightweight alternative for simple projects, though lacks advanced features like lazy loading.
64
+ - **solid-i18next**: Standard but heavy option (~4.7× Intlayer) with same downsides as React i18next.
65
+ - **Paraglide**: Innovative approach but complex DX and tree-shaking issues in some setups.
66
+
60
67
  ## Test your app
61
68
 
62
69
  To quickly spot i18n leakage issues, I set up a free scanner available [here](https://intlayer.org/i18n-seo-scanner).
@@ -88,8 +95,9 @@ For this benchmark, we compared the following libraries:
88
95
 
89
96
  - `Base App` (No i18n library)
90
97
  - `solid-intlayer` (v8.7.12)
91
- - `@solid-primitives/i18n` (v12.1.1)
98
+ - `@solid-primitives/i18n` (v2.2.1)
92
99
  - `solid-i18next` (v17.0.2)
100
+ - `@inlang/paraglide-js` (v2.17.0)
93
101
 
94
102
  The framework is `Solid` with a multilingual app of **10 pages** and **10 languages**.
95
103
 
@@ -133,19 +141,29 @@ I ran the same multilingual app in a real browser for every stack, then wrote do
133
141
 
134
142
  ### 1 - Solutions to avoid
135
143
 
144
+ > No clear solution to avoid in solid ecosystem.
145
+
146
+ ### 2 - Acceptable solutions
147
+
136
148
  **(solid-i18next)** (`solid-i18next@17.0.2`):
137
149
 
138
150
  `solid-i18next` is probably the most popular option because it was among the first to serve JavaScript app i18n needs. It also has a wide set of community plugins for specific problems.
139
151
 
140
- Still, it shares the same major downsides as stacks built on `t('a.b.c')`: optimizations are possible but very time-consuming, and large projects risk bad practices (namespaces + dynamic loading + types).
152
+ The package is heavy (~14.6kb, which is about 4.7× `solid-intlayer`).
141
153
 
142
- ### 2 - Experimental solutions
154
+ Still, it shares the same major downsides as stacks built on `t('a.b.c')`: optimizations are possible but very time-consuming, and large projects risk bad practices (namespaces + dynamic loading + types).
143
155
 
144
- **(@solid-primitives/i18n)** (`@solid-primitives/i18n@12.1.1`):
156
+ **(@solid-primitives/i18n)** (`@solid-primitives/i18n@2.2.1`):
145
157
 
146
158
  Solid primitive is extremely light and efficient, I recommend that solution for light projects, but it can quickly become lacking features for professional solutions including cookie management, proxy redirection, formatters etc.
147
159
  It also misses lazy loading and scoping namespaces for page size optimization.
148
160
 
161
+ **(Paraglide)** (`@inlang/paraglide-js@2.17.0`):
162
+
163
+ `Paraglide` offers an innovative, well-thought-out approach. Even so, in this benchmark the tree-shaking their company advertises did not work for my implementation. The workflow and DX are also more complex than other options.
164
+ Personally I dislike having to regenerate JS files before every push, which creates constant merge conflict risk via PRs.
165
+ Finally, in comparison with other solutions, Paraglide does not use a store (e.g. Solid signal) to retrieve the current locale to render the content. For each node parsed, it will request the locale from the localStorage / cookie etc. It leads to execution of unnecessary logic that impacts the component reactivity.
166
+
149
167
  ### 3 - Recommendations
150
168
 
151
169
  **(Intlayer)** (`solid-intlayer@8.7.12`):
@@ -57,6 +57,12 @@ In practice, for the least optimized implementations, an internationalized page
57
57
 
58
58
  The other impact is on developer experience: how you declare content, types, namespace organization, dynamic loading, and reactivity when the locale changes.
59
59
 
60
+ ## TL;DR
61
+
62
+ - **Intlayer**: The most performance-efficient choice (v8.7.12) with the smallest footprint.
63
+ - **Paraglide**: Strong contender for tree-shaking but has a more complex developer experience and reactivity overhead.
64
+ - **svelte-i18n**: Feature-complete and standard for Svelte, but carries a much larger bundle weight (~7× Intlayer).
65
+
60
66
  ## Test your app
61
67
 
62
68
  To quickly spot i18n leakage issues, I set up a free scanner available [here](https://intlayer.org/i18n-seo-scanner).
@@ -88,8 +94,8 @@ For this benchmark, we compared the following libraries:
88
94
 
89
95
  - `Base App` (No i18n library)
90
96
  - `svelte-intlayer` (v8.7.12)
91
- - `svelte-i18n` (v3.4.0)
92
- - `@inlang/paraglide-js` (v2.15.1)
97
+ - `svelte-i18n` (v4.0.1)
98
+ - `@inlang/paraglide-js` (v2.17.0)
93
99
 
94
100
  The framework is `Svelte` with a multilingual app of **10 pages** and **10 languages**.
95
101
 
@@ -133,7 +139,11 @@ I ran the same multilingual app in a real browser for every stack, then wrote do
133
139
 
134
140
  ### 1 - Solutions to avoid
135
141
 
136
- **(Paraglide)** (`@inlang/paraglide-js@2.15.1`):
142
+ > No clear solution to avoid in svelte ecosystem.
143
+
144
+ ### 2 - Acceptable solutions
145
+
146
+ **(Paraglide)** (`@inlang/paraglide-js@2.17.0`):
137
147
 
138
148
  `Paraglide` offers an innovative, well-thought-out approach. In the context of a Vite + Svelte app, the tree-shaking their company advertises works as expected, which is great.
139
149
  But in the case of a React + TanStack Start, the tree-shaking did not work as expected, same for Next.js. That said, I would be double-checking the usage of Paraglide in a Svelte and TanStack Start project.
@@ -141,11 +151,13 @@ The workflow and DX are also more complex than other options.
141
151
  Personally I dislike having to regenerate JS files before every push, which creates constant merge conflict risk via PRs. The tool also seems more focused on Vite than on Next.js.
142
152
  Finally, in comparison with other solutions, Paraglide does not use a store (e.g. Svelte store) to retrieve the current locale to render the content. For each node parsed, it will request the locale from the localStorage / cookie etc. It leads to execution of unnecessary logic that impacts the component reactivity.
143
153
 
154
+ > Note on paraglide: the solution inject code in your codebase to import, as a result the metric 'lib size' in the benchmark report is almost 0. Code gen is a good think, because the function used will include only the necessary logic (prefix all vs no prefix, cookie vs storage etc). In comparison Intlayer process to this filtering using env variables injection during the build to force the bundler to tree shake the content depending of the logic. Thanks to this, paraglide and intlayer end up being solution 6-10 times lighter than i18next or next-intl.
155
+
144
156
  **(svelte-i18n)** (`svelte-i18n@3.4.0`):
145
157
 
146
- This solution answers all needs for i18n in a Svelte project. But as it's the case for i18next or other main i18n solutions it's a bit heavy (15kb gzip in comparison with 2.3kb for intlayer once the app bundled).
158
+ This solution answers all needs for i18n in a Svelte project. But as it's the case for i18next or other main i18n solutions it's a bit heavy (~15.9kb, which is about `svelte-intlayer`).
147
159
 
148
- ### 2 - Recommendations
160
+ ### 3 - Recommendations
149
161
 
150
162
  **(Intlayer)** (`svelte-intlayer@8.7.12`):
151
163
 
@@ -57,6 +57,13 @@ In practice, for the least optimized implementations, an internationalized page
57
57
 
58
58
  The other impact is on developer experience: how you declare content, types, namespace organization, dynamic loading, and reactivity when the locale changes.
59
59
 
60
+ ## TL;DR
61
+
62
+ - **Intlayer**: Provides the best performance and smallest bundle size (v8.7.12) for TanStack Start.
63
+ - **react-i18next** & **use-intl**: Mature alternatives with large ecosystems, but significantly heavier and more complex to optimize.
64
+ - **Paraglide**: Innovative tree-shaking idea that does not work in practice. Complex DX and reactivity overhead in TanStack Start.
65
+ - **Avoid**: **General Translation (GT)** and **Lingo.dev** due to severe performance issues, AI quota limits, and vendor lock-in.
66
+
60
67
  ## Test your app
61
68
 
62
69
  To quickly spot i18n leakage issues, I set up a free scanner available [here](https://intlayer.org/i18n-seo-scanner).
@@ -87,7 +94,7 @@ Syntaxes built around `const t = useTranslation()` + `t('a.b.c')` are very conve
87
94
  For this benchmark, we compared the following libraries:
88
95
 
89
96
  - `Base App` (No i18n library)
90
- - `react-intlayer` (v8.7.5-canary.0)
97
+ - `react-intlayer` (v8.7.12)
91
98
  - `react-i18next` (v17.0.2)
92
99
  - `use-intl` (v4.9.1)
93
100
  - `@lingui/core` (v5.3.0)
@@ -146,7 +153,7 @@ Issues encountered:
146
153
 
147
154
  **(General Translation)** (`gt-react@latest`):
148
155
 
149
- - For an app around 110kb, `gt-react` can add more than 440kb extra (order of magnitude seen on the Next.js implementation in the same benchmark).
156
+ - For an app around 110kb, `gt-react` can add more than 440kb extra (~439.8kb, which is about 93× `react-intlayer`). There is a serious quality issue from the developer experience side.
150
157
  - `Quota Exceeded, please upgrade your plan` on the very first build with General Translation.
151
158
  - Translations are not rendered; I get the error `Error: <T> used on the client-side outside of <GTProvider>`, which seems to be a bug in the library.
152
159
  - While implementing **gt-tanstack-start-react**, I also came across an [issue](https://github.com/generaltranslation/gt/issues/1210#event-24510646961) with the library: `does not provide an export named 'printAST' - @formatjs/icu-messageformat-parser`, which was making the application break. After reporting this issue, the maintainer fixed it within 24 hours.
@@ -174,15 +181,19 @@ The idea behind `Wuchale` is interesting but not yet a viable solution. I hit re
174
181
  Personally I dislike having to regenerate JS files before every push, which creates constant merge conflict risk via PRs. The tool also seems more focused on Vite than on Next.js.
175
182
  Finally, in comparison with other solutions, Paraglide does not use a store (e.g. React context) to retrieve the current locale to render the content. For each node parsed, it will request the locale from the localStorage / cookie etc. It leads to execution of unnecessary logic that impacts the component reactivity.
176
183
 
184
+ > Note on paraglide: the solution inject code in your codebase to import, as a result the metric 'lib size' in the benchmark report is almost 0. Code gen is a good think, because the function used will include only the necessary logic (prefix all vs no prefix, cookie vs storage etc). In comparison Intlayer process to this filtering using env variables injections in the build to force the bundler to tree shake the content depending of the logic. Thanks to this, paraglide and intlayer end up being solution 6-10 times lighter than i18next or next-intl.
185
+
177
186
  **(Tolgee)** (`@tolgee/react@7.0.0`):
178
187
 
179
188
  `Tolgee` addresses many of the issues mentioned earlier. I found it harder to get started with than other tools with similar approaches. It does not provide type safety, which also makes catching missing keys at compile time much harder. I had to wrap Tolgee’s APIs with my own to add missing-key detection.
180
189
 
190
+ The package is fairly heavy (~11.1kb, which is more than 2× `react-intlayer`).
191
+
181
192
  On TanStack Start I also had reactivity problems: on locale change I had to force the provider to rerender and subscribe to locale-change events so loading in another language behaved correctly.
182
193
 
183
194
  **(use-intl)** (`use-intl@4.9.1`):
184
195
 
185
- `use-intl` is the most fashionable “intl” piece in the React ecosystem (same family as `next-intl`) and is often pushed by AI agents, but in my view wrongly so in a performance-first setting. Getting started is fairly simple. In practice, the process to optimize and limit leakage is quite complex. Likewise, combining dynamic loading + namespacing + TypeScript types slows development a lot.
196
+ `use-intl` is the most fashionable “intl” piece in the React ecosystem (same family as `next-intl`) and is often pushed by AI agents, but in my view wrongly so in a performance-first setting. Getting started is fairly simple. In practice, the process to optimize and limit leakage is quite complex. Likewise, combining dynamic loading + namespacing + TypeScript types slows development a lot. The package is also fairly heavy (~12.8kb, which is more than 2.5× `react-intlayer`).
186
197
 
187
198
  On TanStack Start you avoid Next.js-specific traps (`setRequestLocale`, static rendering), but the core issue is the same: without strict discipline, the bundle quickly carries too many messages and per-route namespace maintenance becomes painful.
188
199
 
@@ -192,6 +203,8 @@ On TanStack Start you avoid Next.js-specific traps (`setRequestLocale`, static r
192
203
 
193
204
  Still, it shares the same major downsides as stacks built on `t('a.b.c')`: optimizations are possible but very time-consuming, and large projects risk bad practices (namespaces + dynamic loading + types).
194
205
 
206
+ The package is especially heavy (~17.3kb, which is about 3.5× `react-intlayer`).
207
+
195
208
  Message formats also diverge: `use-intl` uses ICU MessageFormat, while `i18next` uses its own format, which complicates tooling or migrations if you mix them.
196
209
 
197
210
  **(Lingui)** (`@lingui/core@5.3.0`):
@@ -202,6 +215,8 @@ Message formats also diverge: `use-intl` uses ICU MessageFormat, while `i18next`
202
215
 
203
216
  `react-intl` is a performant implementation from the Format.js team. The DX stays verbose: `const intl = useIntl()` + `intl.formatMessage({ id: "xx.xx" })` adds complexity, extra JavaScript work, and ties the global i18n instance to many nodes in the React tree.
204
217
 
218
+ The package is also heavy (~14.4kb, which is about 3× `react-intlayer`).
219
+
205
220
  ### 4 - Recommendations
206
221
 
207
222
  This TanStack Start benchmark has no direct equivalent to `next-translate` (Next.js plugin + `getStaticProps`). For teams that really want a `t()` API with a mature ecosystem, `react-i18next` and `use-intl` remain “reasonable” choices, but expect to invest a lot of time optimizing to avoid leakage.
@@ -57,6 +57,12 @@ In practice, for the least optimized implementations, an internationalized page
57
57
 
58
58
  The other impact is on developer experience: how you declare content, types, namespace organization, dynamic loading, and reactivity when the locale changes.
59
59
 
60
+ ## TL;DR
61
+
62
+ - **Intlayer**: The most lightweight solution (v8.7.12) with built-in scoping and dynamic loading.
63
+ - **vue-i18n**: The industry standard with a rich ecosystem but can be significantly heavier and harder to optimize for code-splitting in large applications.
64
+ - **fluent-vue**: Innovative message organization but lacks type safety and is extremely heavy.
65
+
60
66
  ## Test your app
61
67
 
62
68
  To quickly spot i18n leakage issues, I set up a free scanner available [here](https://intlayer.org/i18n-seo-scanner).
@@ -88,8 +94,8 @@ For this benchmark, we compared the following libraries:
88
94
 
89
95
  - `Base App` (No i18n library)
90
96
  - `vue-intlayer` (v8.7.12)
91
- - `vue-i18n` (v11.1.1)
92
- - `fluent-vue` (v0.5.0)
97
+ - `vue-i18n` (v11.4.0)
98
+ - `fluent-vue` (v3.8.2)
93
99
 
94
100
  The framework is `Vue` with a multilingual app of **10 pages** and **10 languages**.
95
101
 
@@ -133,22 +139,22 @@ I ran the same multilingual app in a real browser for every stack, then wrote do
133
139
 
134
140
  ### 1 - Solutions to avoid
135
141
 
136
- **(vue-i18n)** (`vue-i18n@11.1.1`):
142
+ > No clear solution to avoid in vue ecosystem.
143
+
144
+ ### 2 - Acceptable solutions
145
+
146
+ **(vue-i18n)** (`vue-i18n@11.4.0`):
137
147
 
138
148
  - **vue-i18n** is without contestation the most used i18n library for vue, it has a lot of features and a huge ecosystem. but under the hood the solution is quite heavy. even if vue-i18n integrate lazy loading for messages, it miss a scoping feature. In the case of a classic Vue SPA app there is no issue, but for a nuxt app, using @nuxt/i18n, it leads to including the messages from all pages into a single one. For a big nuxt app including more than 10 pages, it can become really problematic.
139
149
 
150
+ The package is very heavy (~24.3kb, which is about 9× `vue-intlayer`).
151
+
140
152
  **(fluent-vue)** (`fluent-vue@0.5.0`):
141
153
 
142
- - **fluent-vue** offer one inovation attempt thought the .ftl format. the message organization is great, easier to get started. but in practice, the lack of typesafty increase the risk of error and can quickly become time consuming to debug. Moreever, that solution load the messages using a vite plugin that force the loading of all the content in all languages into each page. Additionally this is an extreamly heavy solution (92kb gziped in comparison of 24kb gzipped for vue-i18n and 2.7kb gzipped for intlayer once the app bundled on a vue app)
154
+ - **fluent-vue** offer one inovation attempt thought the .ftl format. the message organization is great, easier to get started. but in practice, the lack of typesafty increase the risk of error and can quickly become time consuming to debug. Moreever, that solution load the messages using a vite plugin that force the loading of all the content in all languages into each page. Additionally this is an extremely heavy solution (~92.7kb, which is about 34× `vue-intlayer`).
143
155
 
144
- ### 2 - Recommendations
156
+ ### 3 - Recommendations
145
157
 
146
158
  **(Intlayer)** (`vue-intlayer@8.7.12`):
147
159
 
148
160
  I will not personally judge `vue-intlayer` for objectivity’s sake, since it is my own solution.
149
-
150
- ### Personal note
151
-
152
- This note is personal and does not affect the benchmark results. Still, in the i18n world you often see consensus around a pattern like `const { t } = useI18n()` + `<>{t('xx.xx')}</>` for translated content.
153
-
154
- In Vue apps, injecting a function as a `VNode` is, in my view, an anti-pattern. It also adds avoidable complexity and JavaScript execution overhead (even if it is barely noticeable).
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2024-08-13
3
- updatedAt: 2026-04-08
3
+ updatedAt: 2026-05-12
4
4
  title: Configuration
5
5
  description: Learn how to configure Intlayer for your application. Understand the various settings and options available to customize Intlayer to your needs.
6
6
  keywords:
@@ -14,6 +14,9 @@ slugs:
14
14
  - concept
15
15
  - configuration
16
16
  history:
17
+ - version: 8.9.4
18
+ date: 2026-05-12
19
+ changes: "Add support for LM Studio provider"
17
20
  - version: 8.7.0
18
21
  date: 2026-04-08
19
22
  changes: "Add `prune` and `minify` options to the build configuration"
@@ -350,7 +353,7 @@ const config: IntlayerConfig = {
350
353
  ai: {
351
354
  /**
352
355
  * AI provider to use.
353
- * Options: 'openai', 'anthropic', 'mistral', 'deepseek', 'gemini', 'ollama', 'openrouter', 'alibaba', 'fireworks', 'groq', 'huggingface', 'bedrock', 'googlevertex', 'togetherai'
356
+ * Options: 'openai', 'anthropic', 'mistral', 'deepseek', 'gemini', 'ollama', 'openrouter', 'alibaba', 'fireworks', 'groq', 'huggingface', 'bedrock', 'googlevertex', 'togetherai', 'lmstudio'
354
357
  * Default: 'openai'
355
358
  */
356
359
  provider: "openai",
@@ -937,17 +940,17 @@ Intlayer supports multiple AI providers for enhanced flexibility and choice. Cur
937
940
  - **Groq**
938
941
  - **Amazon Bedrock**
939
942
  - **Together.ai**
940
- - **ollama**
941
-
942
- | Field | Description | Type | Default | Example | Note |
943
- | -------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- | ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
944
- | `provider` | The provider to use for the AI features of Intlayer. | `'openai'` &#124; <br/> `'anthropic'` &#124; <br/> `'mistral'` &#124; <br/> `'deepseek'` &#124; <br/> `'gemini'` &#124; <br/> `'ollama'` &#124; <br/> `'openrouter'` &#124; <br/> `'alibaba'` &#124; <br/> `'fireworks'` &#124; <br/> `'groq'` &#124; <br/> `'huggingface'` &#124; <br/> `'bedrock'` &#124; <br/> `'googleaistudio'` &#124; <br/> `'googlevertex'` &#124; <br/> `'togetherai'` | `undefined` | `'anthropic'` | Different providers require different API keys and have different pricing. |
945
- | `model` | The model to use for AI features. | `string` | None | `'gpt-4o-2024-11-20'` | Specific model varies by provider. |
946
- | `temperature` | Controls the randomness of AI responses. | `number` | None | `0.1` | Higher temperature = more creative and less predictable. |
947
- | `apiKey` | Your API key for the selected provider. | `string` | None | `process.env.OPENAI_API_KEY` | Keep secret; store in environment variables. |
948
- | `applicationContext` | Additional context about your application to help the AI generate more accurate translations (domain, audience, tone, terminology). | `string` | None | `'My application context'` | Can be used to add rules (e.g. `"You should not transform urls"`). |
949
- | `baseURL` | The base URL for the AI API. | `string` | None | `'https://api.openai.com/v1'` <br/> `'http://localhost:5000'` | Can point to a local or custom AI API endpoint. |
950
- | `dataSerialization` | Data serialization format for AI features. | `'json'` &#124; <br/> `'toon'` | `undefined` | `'toon'` | • `'json'`: standard, reliable; uses more tokens.<br/>• `'toon'`: fewer tokens, less consistent.<br/>• Additional parameters are passed to the AI model as context (reasoning effort, verbosity, etc.). |
943
+ - **LM Studio**
944
+
945
+ | Field | Description | Type | Default | Example | Note |
946
+ | -------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------- | ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
947
+ | `provider` | The provider to use for the AI features of Intlayer. | `'openai'` &#124; <br/> `'anthropic'` &#124; <br/> `'mistral'` &#124; <br/> `'deepseek'` &#124; <br/> `'gemini'` &#124; <br/> `'ollama'` &#124; <br/> `'openrouter'` &#124; <br/> `'alibaba'` &#124; <br/> `'fireworks'` &#124; <br/> `'groq'` &#124; <br/> `'huggingface'` &#124; <br/> `'bedrock'` &#124; <br/> `'googleaistudio'` &#124; <br/> `'googlevertex'` &#124; <br/> `'togetherai'` &#124; <br/> `'lmstudio'` | `undefined` | `'anthropic'` | Different providers require different API keys and have different pricing. |
948
+ | `model` | The model to use for AI features. | `string` | None | `'gpt-4o-2024-11-20'` | Specific model varies by provider. |
949
+ | `temperature` | Controls the randomness of AI responses. | `number` | None | `0.1` | Higher temperature = more creative and less predictable. |
950
+ | `apiKey` | Your API key for the selected provider. | `string` | None | `process.env.OPENAI_API_KEY` | Keep secret; store in environment variables. |
951
+ | `applicationContext` | Additional context about your application to help the AI generate more accurate translations (domain, audience, tone, terminology). | `string` | None | `'My application context'` | Can be used to add rules (e.g. `"You should not transform urls"`). |
952
+ | `baseURL` | The base URL for the AI API. | `string` | None | `'https://api.openai.com/v1'` <br/> `'http://localhost:5000'` | Can point to a local or custom AI API endpoint. |
953
+ | `dataSerialization` | Data serialization format for AI features. | `'json'` &#124; <br/> `'toon'` | `undefined` | `'toon'` | • `'json'`: standard, reliable; uses more tokens.<br/>• `'toon'`: fewer tokens, less consistent.<br/>• Additional parameters are passed to the AI model as context (reasoning effort, verbosity, etc.). |
951
954
 
952
955
  ### Build Configuration
953
956
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2025-02-07
3
- updatedAt: 2026-01-28
3
+ updatedAt: 2026-05-12
4
4
  title: Content File
5
5
  description: Learn how to customize the extensions for your content declaration files. Follow this documentation to implement conditions efficiently in your project.
6
6
  keywords:
@@ -12,6 +12,9 @@ slugs:
12
12
  - concept
13
13
  - content
14
14
  history:
15
+ - version: 8.9.0
16
+ date: 2026-05-12
17
+ changes: "Add `plural` content node type"
15
18
  - version: 8.0.0
16
19
  date: 2026-01-28
17
20
  changes: "Add `html` content node type"
@@ -69,6 +72,7 @@ import { type ReactNode } from "react";
69
72
  import {
70
73
  t,
71
74
  enu,
75
+ plural,
72
76
  cond,
73
77
  nest,
74
78
  md,
@@ -88,6 +92,7 @@ interface Content {
88
92
  };
89
93
  multilingualContent: string;
90
94
  quantityContent: string;
95
+ pluralContent: string;
91
96
  conditionalContent: string;
92
97
  markdownContent: never;
93
98
  htmlContent: never;
@@ -123,6 +128,10 @@ export default {
123
128
  ">5": "Some cars",
124
129
  ">19": "Many cars",
125
130
  }),
131
+ pluralContent: plural({
132
+ one: "One car",
133
+ other: "{{count}} cars",
134
+ }),
126
135
  conditionalContent: cond({
127
136
  true: "Validation is enabled",
128
137
  false: "Validation is disabled",
@@ -178,6 +187,13 @@ export default {
178
187
  ">19": "Many cars",
179
188
  },
180
189
  },
190
+ "pluralContent": {
191
+ "nodeType": "plural",
192
+ "plural": {
193
+ "one": "One car",
194
+ "other": "{{count}} cars",
195
+ },
196
+ },
181
197
  "conditionalContent": {
182
198
  "nodeType": "condition",
183
199
  "condition": {
@@ -233,6 +249,7 @@ Intlayer supports various content types through typed nodes:
233
249
  - **Translation Content**: Multilingual text with locale-specific values [see Translation Content](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/translation_content.md)
234
250
  - **Condition Content**: Conditional content based on boolean expressions [see Condition Content](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/condition_content.md)
235
251
  - **Enumeration Content**: Content that varies based on enumerated values [see Enumeration Content](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/enumeration_content.md)
252
+ - **Plural Content**: Content that varies based on plural rules [see Plural Content](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/plural.md)
236
253
  - **Insertion Content**: Content that can be inserted into other content [see Insertion Content](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/insertion_content.md)
237
254
  - **Markdown Content**: Rich text content in Markdown format [see Markdown Content](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/markdown_content.md)
238
255
  - **HTML Content**: Rich HTML content with optional custom components [see HTML Content](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/html.md)
@@ -547,6 +564,8 @@ multilingualContent: t({
547
564
  });
548
565
  ```
549
566
 
567
+ > See [Translation Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/translation.md) for more information.
568
+
550
569
  ### Condition Content (`cond`)
551
570
 
552
571
  Content that changes based on boolean conditions:
@@ -560,6 +579,23 @@ conditionalContent: cond({
560
579
  });
561
580
  ```
562
581
 
582
+ > See [Condition Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/condition.md) for more information.
583
+
584
+ ### Plural Content (`plural`)
585
+
586
+ Content that varies based on plural rules:
587
+
588
+ ```typescript
589
+ import { plural } from "intlayer";
590
+
591
+ pluralContent: plural({
592
+ one: "One car",
593
+ other: "{{count}} cars",
594
+ });
595
+ ```
596
+
597
+ > See [Plural Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/plural.md) for more information.
598
+
563
599
  ### Enumeration Content (`enu`)
564
600
 
565
601
  Content that varies based on enumerated values:
@@ -574,6 +610,8 @@ statusContent: enu({
574
610
  });
575
611
  ```
576
612
 
613
+ > See [Enumeration Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/enumeration.md) for more information.
614
+
577
615
  ### Insertion Content (`insert`)
578
616
 
579
617
  Content that can be inserted into other content:
@@ -584,6 +622,8 @@ import { insert } from "intlayer";
584
622
  insertionContent: insert("This text can be inserted anywhere");
585
623
  ```
586
624
 
625
+ > See [Insertion Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/insertion.md) for more information.
626
+
587
627
  ### Nested Content (`nest`)
588
628
 
589
629
  References to other dictionaries:
@@ -594,6 +634,8 @@ import { nest } from "intlayer";
594
634
  nestedContent: nest("about-page");
595
635
  ```
596
636
 
637
+ > See [Nested Content](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/nesting.md) for more information.
638
+
597
639
  ### Markdown Content (`md`)
598
640
 
599
641
  Rich text content in Markdown format:
@@ -611,6 +653,8 @@ localizedMarkdownContent: t({
611
653
  });
612
654
  ```
613
655
 
656
+ > See [Markdown Content](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/markdown.md) for more information.
657
+
614
658
  ### HTML Content (`html`)
615
659
 
616
660
  Rich HTML content that can use standard tags or custom components:
@@ -628,6 +672,8 @@ localizedHtmlContent: t({
628
672
  });
629
673
  ```
630
674
 
675
+ > See [HTML Content](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/html.md) for more information.
676
+
631
677
  ### Gender Content (`gender`)
632
678
 
633
679
  Content that varies based on gender:
@@ -642,6 +688,8 @@ genderContent: gender({
642
688
  });
643
689
  ```
644
690
 
691
+ > See [Gender Content](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/gender.md) for more information.
692
+
645
693
  ### File Content (`file`)
646
694
 
647
695
  References to external files:
@@ -652,6 +700,8 @@ import { file } from "intlayer";
652
700
  fileContent: file("./path/to/content.txt");
653
701
  ```
654
702
 
703
+ > See [File Content](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/file.md) for more information.
704
+
655
705
  ## Creating Content Files
656
706
 
657
707
  ### Basic Content File Structure
@@ -23,7 +23,7 @@ history:
23
23
  changes: "Add set up of Claude Desktop"
24
24
  - version: 5.5.12
25
25
  date: 2025-07-10
26
- changes: "Add SSE transport and distant server"
26
+ changes: "Add Streamable HTTP transport and distant server"
27
27
  - version: 5.5.10
28
28
  date: 2025-06-29
29
29
  changes: "Init history"
@@ -51,12 +51,12 @@ By enabling the Intlayer MCP Server in your IDE, you unlock:
51
51
 
52
52
  > View the full list of commands and options in the [Intlayer CLI documentation](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/cli/index.md).
53
53
 
54
- ## Local server (stdio) vs Remote server (SSE)
54
+ ## Local server (stdio) vs Remote server (Streamable HTTP)
55
55
 
56
56
  The MCP server can be used in two ways:
57
57
 
58
58
  - Local server (stdio)
59
- - Remote server (SSE)
59
+ - Remote server (Streamable HTTP)
60
60
 
61
61
  ### Local server (stdio) (recommended)
62
62
 
@@ -64,9 +64,9 @@ Intlayer provides a NPM package that can be installed locally on your machine. I
64
64
 
65
65
  This server is the recommended way to use the MCP server. As it integrates all the features of the MCP server, including the CLI tools.
66
66
 
67
- ### Remote server (SSE)
67
+ ### Remote server (Streamable HTTP)
68
68
 
69
- The MCP server can also be used remotely, using the SSE transport method. This server is hosted by Intlayer, and is available at https://mcp.intlayer.org. This server can be accessed publicly, without any authentication, and is free to use.
69
+ The MCP server can also be used remotely, using the Streamable HTTP transport method. This server is hosted by Intlayer, and is available at https://mcp.intlayer.org. This server can be accessed publicly, without any authentication, and is free to use.
70
70
 
71
71
  Note that the remote server does not integrate CLI tools, AI autocompletion, etc. The distant server is only for interaction with the documentation to help your AI assistant with the Intlayer ecosystem.
72
72
 
@@ -97,7 +97,7 @@ bun x intlayer init mcp
97
97
  This command will:
98
98
 
99
99
  1. Ask you which platform you are using (Cursor, VS Code, Claude Desktop, etc.).
100
- 2. Ask you which transport method you want to use (Local server (stdio) or Remote server (SSE)).
100
+ 2. Ask you which transport method you want to use (Local server (stdio) or Remote server (Streamable HTTP)).
101
101
  3. Automatically update your configuration file (e.g., `.cursor/mcp.json`, `.vscode/mcp.json`, or the global Claude Desktop config).
102
102
 
103
103
  ---
@@ -107,7 +107,7 @@ This command will:
107
107
  1. Open the Command Palette (Ctrl+Shift+P or Cmd+Shift+P).
108
108
  2. Type `Intlayer: Setup AI Agent Skills`
109
109
  3. Pick the platform you use (e.g. `VS Code`, `Cursor`, `Windsurf`, `OpenCode`, `Claude Code`, `GitHub Copilot Workspace`, etc.).
110
- 4. Pick the MCP to install (stdio, SSE)
110
+ 4. Pick the MCP to install (stdio, Streamable HTTP)
111
111
  5. Press Enter.
112
112
 
113
113
  ---
@@ -131,16 +131,16 @@ In your project root, add the following `.cursor/mcp.json` configuration file:
131
131
  }
132
132
  ```
133
133
 
134
- ### Remote server (SSE)
134
+ ### Remote server (Streamable HTTP)
135
135
 
136
- For connecting to a remote Intlayer MCP server using Server-Sent Events (SSE), you can configure your MCP client to connect to the hosted service.
136
+ For connecting to a remote Intlayer MCP server using Streamable HTTP, you can configure your MCP client to connect to the hosted service.
137
137
 
138
138
  ```json fileName=".cursor/mcp.json"
139
139
  {
140
140
  "mcpServers": {
141
- "intlayer": {
142
- "url": "https://mcp.intlayer.org",
143
- "transport": "sse"
141
+ "intlayer-sse": {
142
+ "command": "npx",
143
+ "args": ["-y", "mcp-remote@latest", "https://mcp.intlayer.org"]
144
144
  }
145
145
  }
146
146
  }
@@ -172,16 +172,16 @@ Create a `.vscode/mcp.json` file in your project root:
172
172
  }
173
173
  ```
174
174
 
175
- ### Remote server (SSE)
175
+ ### Remote server (Streamable HTTP)
176
176
 
177
- For connecting to a remote Intlayer MCP server using Server-Sent Events (SSE), you can configure your MCP client to connect to the hosted service.
177
+ For connecting to a remote Intlayer MCP server using Streamable HTTP, you can configure your MCP client to connect to the hosted service.
178
178
 
179
179
  ```json fileName=".vscode/mcp.json"
180
180
  {
181
181
  "servers": {
182
- "intlayer": {
183
- "url": "https://mcp.intlayer.org",
184
- "type": "sse"
182
+ "intlayer-sse": {
183
+ "command": "npx",
184
+ "args": ["-y", "mcp-remote@latest", "https://mcp.intlayer.org"]
185
185
  }
186
186
  }
187
187
  }
@@ -191,7 +191,7 @@ For connecting to a remote Intlayer MCP server using Server-Sent Events (SSE), y
191
191
 
192
192
  ## Set Up in ChatGPT
193
193
 
194
- ### Remote server (SSE)
194
+ ### Remote server (Streamable HTTP)
195
195
 
196
196
  Follow the [official documentation](https://platform.openai.com/docs/mcp#test-and-connect-your-mcp-server) to configure the MCP server in ChatGPT.
197
197
 
@@ -232,6 +232,19 @@ Path of the config file:
232
232
  }
233
233
  ```
234
234
 
235
+ ### Remote server (Streamable HTTP)
236
+
237
+ ```json fileName="claude_desktop_config.json"
238
+ {
239
+ "mcpServers": {
240
+ "intlayer-sse": {
241
+ "command": "npx",
242
+ "args": ["-y", "mcp-remote@latest", "https://mcp.intlayer.org"]
243
+ }
244
+ }
245
+ }
246
+ ```
247
+
235
248
  ---
236
249
 
237
250
  ## Using the MCP Server via CLI