@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.
- package/dist/cjs/generated/docs.entry.cjs +20 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +20 -0
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +1 -0
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/benchmark/index.md +0 -3
- package/docs/ar/benchmark/nextjs.md +15 -6
- package/docs/ar/benchmark/solid.md +155 -0
- package/docs/ar/benchmark/svelte.md +148 -0
- package/docs/ar/benchmark/tanstack.md +12 -3
- package/docs/ar/benchmark/vue.md +160 -0
- package/docs/ar/configuration.md +16 -12
- package/docs/ar/dictionary/content_file.md +51 -1
- package/docs/ar/mcp_server.md +30 -17
- package/docs/ar/plugins/sync-po.md +333 -0
- package/docs/bn/configuration.md +16 -12
- package/docs/cs/configuration.md +16 -12
- package/docs/de/benchmark/index.md +0 -3
- package/docs/de/benchmark/nextjs.md +15 -6
- package/docs/de/benchmark/solid.md +155 -0
- package/docs/de/benchmark/svelte.md +148 -0
- package/docs/de/benchmark/tanstack.md +12 -3
- package/docs/de/benchmark/vue.md +160 -0
- package/docs/de/configuration.md +16 -12
- package/docs/de/dictionary/content_file.md +52 -2
- package/docs/de/mcp_server.md +29 -16
- package/docs/de/plugins/sync-po.md +332 -0
- package/docs/en/benchmark/nextjs.md +11 -2
- package/docs/en/benchmark/solid.md +22 -4
- package/docs/en/benchmark/svelte.md +17 -5
- package/docs/en/benchmark/tanstack.md +18 -3
- package/docs/en/benchmark/vue.md +17 -11
- package/docs/en/configuration.md +16 -13
- package/docs/en/dictionary/content_file.md +51 -1
- package/docs/en/mcp_server.md +31 -18
- package/docs/en/plugins/sync-po.md +333 -0
- package/docs/en-GB/benchmark/index.md +0 -3
- package/docs/en-GB/benchmark/nextjs.md +15 -6
- package/docs/en-GB/benchmark/solid.md +155 -0
- package/docs/en-GB/benchmark/svelte.md +148 -0
- package/docs/en-GB/benchmark/tanstack.md +12 -3
- package/docs/en-GB/benchmark/vue.md +160 -0
- package/docs/en-GB/configuration.md +15 -11
- package/docs/en-GB/dictionary/content_file.md +51 -1
- package/docs/en-GB/mcp_server.md +31 -18
- package/docs/en-GB/plugins/sync-po.md +333 -0
- package/docs/es/benchmark/index.md +0 -3
- package/docs/es/benchmark/nextjs.md +15 -6
- package/docs/es/benchmark/solid.md +155 -0
- package/docs/es/benchmark/svelte.md +148 -0
- package/docs/es/benchmark/tanstack.md +12 -3
- package/docs/es/benchmark/vue.md +160 -0
- package/docs/es/configuration.md +16 -12
- package/docs/es/dictionary/content_file.md +51 -1
- package/docs/es/mcp_server.md +30 -17
- package/docs/es/plugins/sync-po.md +333 -0
- package/docs/fr/benchmark/index.md +0 -3
- package/docs/fr/benchmark/nextjs.md +15 -6
- package/docs/fr/benchmark/solid.md +155 -0
- package/docs/fr/benchmark/svelte.md +148 -0
- package/docs/fr/benchmark/tanstack.md +12 -3
- package/docs/fr/benchmark/vue.md +160 -0
- package/docs/fr/configuration.md +16 -12
- package/docs/fr/dictionary/content_file.md +51 -1
- package/docs/fr/mcp_server.md +30 -17
- package/docs/fr/plugins/sync-po.md +333 -0
- package/docs/hi/benchmark/nextjs.md +15 -6
- package/docs/hi/benchmark/solid.md +155 -0
- package/docs/hi/benchmark/svelte.md +148 -0
- package/docs/hi/benchmark/tanstack.md +12 -3
- package/docs/hi/benchmark/vue.md +160 -0
- package/docs/hi/configuration.md +16 -12
- package/docs/hi/dictionary/content_file.md +51 -1
- package/docs/hi/mcp_server.md +31 -18
- package/docs/hi/plugins/sync-po.md +333 -0
- package/docs/id/benchmark/index.md +0 -3
- package/docs/id/benchmark/nextjs.md +15 -6
- package/docs/id/benchmark/solid.md +155 -0
- package/docs/id/benchmark/svelte.md +148 -0
- package/docs/id/benchmark/tanstack.md +12 -3
- package/docs/id/benchmark/vue.md +160 -0
- package/docs/id/configuration.md +16 -12
- package/docs/id/dictionary/content_file.md +51 -1
- package/docs/id/mcp_server.md +30 -17
- package/docs/id/plugins/sync-po.md +333 -0
- package/docs/it/benchmark/index.md +1 -4
- package/docs/it/benchmark/nextjs.md +15 -6
- package/docs/it/benchmark/solid.md +155 -0
- package/docs/it/benchmark/svelte.md +148 -0
- package/docs/it/benchmark/tanstack.md +12 -3
- package/docs/it/benchmark/vue.md +160 -0
- package/docs/it/configuration.md +16 -12
- package/docs/it/dictionary/content_file.md +51 -1
- package/docs/it/mcp_server.md +30 -17
- package/docs/it/plugins/sync-po.md +333 -0
- package/docs/ja/benchmark/index.md +5 -5
- package/docs/ja/benchmark/nextjs.md +15 -6
- package/docs/ja/benchmark/solid.md +155 -0
- package/docs/ja/benchmark/svelte.md +148 -0
- package/docs/ja/benchmark/tanstack.md +12 -3
- package/docs/ja/benchmark/vue.md +160 -0
- package/docs/ja/configuration.md +16 -12
- package/docs/ja/dictionary/content_file.md +50 -2
- package/docs/ja/intlayer_with_nextjs_no_locale_path.md +4 -3
- package/docs/ja/mcp_server.md +29 -16
- package/docs/ja/plugins/sync-po.md +333 -0
- package/docs/ko/benchmark/nextjs.md +15 -6
- package/docs/ko/benchmark/solid.md +155 -0
- package/docs/ko/benchmark/svelte.md +148 -0
- package/docs/ko/benchmark/tanstack.md +12 -3
- package/docs/ko/benchmark/vue.md +160 -0
- package/docs/ko/configuration.md +16 -12
- package/docs/ko/dictionary/content_file.md +51 -1
- package/docs/ko/intlayer_with_nextjs_no_locale_path.md +3 -2
- package/docs/ko/mcp_server.md +31 -18
- package/docs/ko/plugins/sync-po.md +333 -0
- package/docs/nl/configuration.md +16 -12
- package/docs/pl/benchmark/index.md +0 -3
- package/docs/pl/benchmark/nextjs.md +15 -6
- package/docs/pl/benchmark/solid.md +155 -0
- package/docs/pl/benchmark/svelte.md +148 -0
- package/docs/pl/benchmark/tanstack.md +12 -3
- package/docs/pl/benchmark/vue.md +160 -0
- package/docs/pl/configuration.md +16 -12
- package/docs/pl/dictionary/content_file.md +51 -1
- package/docs/pl/mcp_server.md +30 -17
- package/docs/pl/plugins/sync-po.md +333 -0
- package/docs/pt/benchmark/index.md +0 -3
- package/docs/pt/benchmark/nextjs.md +16 -7
- package/docs/pt/benchmark/solid.md +155 -0
- package/docs/pt/benchmark/svelte.md +148 -0
- package/docs/pt/benchmark/tanstack.md +13 -4
- package/docs/pt/benchmark/vue.md +160 -0
- package/docs/pt/configuration.md +16 -12
- package/docs/pt/dictionary/content_file.md +51 -1
- package/docs/pt/mcp_server.md +30 -17
- package/docs/pt/plugins/sync-po.md +333 -0
- package/docs/ru/benchmark/nextjs.md +15 -6
- package/docs/ru/benchmark/solid.md +155 -0
- package/docs/ru/benchmark/svelte.md +148 -0
- package/docs/ru/benchmark/tanstack.md +12 -3
- package/docs/ru/benchmark/vue.md +160 -0
- package/docs/ru/configuration.md +16 -12
- package/docs/ru/dictionary/content_file.md +52 -2
- package/docs/ru/mcp_server.md +30 -17
- package/docs/ru/plugins/sync-po.md +333 -0
- package/docs/tr/benchmark/index.md +0 -3
- package/docs/tr/benchmark/nextjs.md +15 -6
- package/docs/tr/benchmark/solid.md +155 -0
- package/docs/tr/benchmark/svelte.md +148 -0
- package/docs/tr/benchmark/tanstack.md +12 -3
- package/docs/tr/benchmark/vue.md +160 -0
- package/docs/tr/configuration.md +16 -12
- package/docs/tr/dictionary/content_file.md +51 -1
- package/docs/tr/mcp_server.md +31 -18
- package/docs/tr/plugins/sync-po.md +333 -0
- package/docs/uk/benchmark/nextjs.md +15 -6
- package/docs/uk/benchmark/solid.md +155 -0
- package/docs/uk/benchmark/svelte.md +148 -0
- package/docs/uk/benchmark/tanstack.md +12 -3
- package/docs/uk/benchmark/vue.md +160 -0
- package/docs/uk/configuration.md +16 -12
- package/docs/uk/dictionary/content_file.md +51 -1
- package/docs/uk/mcp_server.md +29 -16
- package/docs/uk/plugins/sync-po.md +333 -0
- package/docs/ur/configuration.md +16 -12
- package/docs/vi/benchmark/index.md +0 -3
- package/docs/vi/benchmark/nextjs.md +15 -6
- package/docs/vi/benchmark/solid.md +155 -0
- package/docs/vi/benchmark/svelte.md +148 -0
- package/docs/vi/benchmark/tanstack.md +12 -3
- package/docs/vi/benchmark/vue.md +160 -0
- package/docs/vi/configuration.md +16 -12
- package/docs/vi/dictionary/content_file.md +51 -1
- package/docs/vi/intlayer_with_nextjs_15.md +10 -57
- package/docs/vi/mcp_server.md +30 -17
- package/docs/vi/plugins/sync-po.md +333 -0
- package/docs/zh/benchmark/nextjs.md +15 -6
- package/docs/zh/benchmark/solid.md +155 -0
- package/docs/zh/benchmark/svelte.md +148 -0
- package/docs/zh/benchmark/tanstack.md +12 -3
- package/docs/zh/benchmark/vue.md +160 -0
- package/docs/zh/configuration.md +16 -12
- package/docs/zh/dictionary/content_file.md +51 -3
- package/docs/zh/mcp_server.md +31 -18
- package/docs/zh/plugins/sync-po.md +333 -0
- package/frequent_questions/ar/intlayerNode.md +3 -3
- package/frequent_questions/de/intlayerNode.md +3 -3
- package/frequent_questions/en/intlayerNode.md +3 -3
- package/frequent_questions/en-GB/intlayerNode.md +3 -3
- package/frequent_questions/es/intlayerNode.md +3 -3
- package/frequent_questions/fr/intlayerNode.md +3 -3
- package/frequent_questions/hi/intlayerNode.md +3 -3
- package/frequent_questions/id/intlayerNode.md +3 -3
- package/frequent_questions/it/intlayerNode.md +3 -3
- package/frequent_questions/ja/intlayerNode.md +3 -3
- package/frequent_questions/ko/intlayerNode.md +3 -3
- package/frequent_questions/pl/intlayerNode.md +3 -3
- package/frequent_questions/pt/intlayerNode.md +3 -3
- package/frequent_questions/ru/intlayerNode.md +3 -3
- package/frequent_questions/tr/intlayerNode.md +3 -3
- package/frequent_questions/uk/intlayerNode.md +3 -3
- package/frequent_questions/vi/intlayerNode.md +3 -3
- package/frequent_questions/zh/intlayerNode.md +3 -3
- package/package.json +8 -8
- 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` (
|
|
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
|
-
|
|
152
|
+
The package is heavy (~14.6kb, which is about 4.7× `solid-intlayer`).
|
|
141
153
|
|
|
142
|
-
|
|
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@
|
|
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` (
|
|
92
|
-
- `@inlang/paraglide-js` (v2.
|
|
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
|
-
|
|
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 (
|
|
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 7× `svelte-intlayer`).
|
|
147
159
|
|
|
148
|
-
###
|
|
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.
|
|
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 (
|
|
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.
|
package/docs/en/benchmark/vue.md
CHANGED
|
@@ -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.
|
|
92
|
-
- `fluent-vue` (
|
|
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
|
-
|
|
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
|
|
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
|
-
###
|
|
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).
|
package/docs/en/configuration.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2024-08-13
|
|
3
|
-
updatedAt: 2026-
|
|
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
|
-
- **
|
|
941
|
-
|
|
942
|
-
| Field | Description | Type
|
|
943
|
-
| -------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
|
|
944
|
-
| `provider` | The provider to use for the AI features of Intlayer. | `'openai'` | <br/> `'anthropic'` | <br/> `'mistral'` | <br/> `'deepseek'` | <br/> `'gemini'` | <br/> `'ollama'` | <br/> `'openrouter'` | <br/> `'alibaba'` | <br/> `'fireworks'` | <br/> `'groq'` | <br/> `'huggingface'` | <br/> `'bedrock'` | <br/> `'googleaistudio'` | <br/> `'googlevertex'` | <br/> `'togetherai'` | `undefined` | `'anthropic'` | Different providers require different API keys and have different pricing. |
|
|
945
|
-
| `model` | The model to use for AI features. | `string`
|
|
946
|
-
| `temperature` | Controls the randomness of AI responses. | `number`
|
|
947
|
-
| `apiKey` | Your API key for the selected provider. | `string`
|
|
948
|
-
| `applicationContext` | Additional context about your application to help the AI generate more accurate translations (domain, audience, tone, terminology). | `string`
|
|
949
|
-
| `baseURL` | The base URL for the AI API. | `string`
|
|
950
|
-
| `dataSerialization` | Data serialization format for AI features. | `'json'` | <br/> `'toon'`
|
|
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'` | <br/> `'anthropic'` | <br/> `'mistral'` | <br/> `'deepseek'` | <br/> `'gemini'` | <br/> `'ollama'` | <br/> `'openrouter'` | <br/> `'alibaba'` | <br/> `'fireworks'` | <br/> `'groq'` | <br/> `'huggingface'` | <br/> `'bedrock'` | <br/> `'googleaistudio'` | <br/> `'googlevertex'` | <br/> `'togetherai'` | <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'` | <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-
|
|
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
|
package/docs/en/mcp_server.md
CHANGED
|
@@ -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
|
|
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 (
|
|
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 (
|
|
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 (
|
|
67
|
+
### Remote server (Streamable HTTP)
|
|
68
68
|
|
|
69
|
-
The MCP server can also be used remotely, using the
|
|
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 (
|
|
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,
|
|
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 (
|
|
134
|
+
### Remote server (Streamable HTTP)
|
|
135
135
|
|
|
136
|
-
For connecting to a remote Intlayer MCP server using
|
|
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
|
-
"
|
|
143
|
-
"
|
|
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 (
|
|
175
|
+
### Remote server (Streamable HTTP)
|
|
176
176
|
|
|
177
|
-
For connecting to a remote Intlayer MCP server using
|
|
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
|
-
"
|
|
184
|
-
"
|
|
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 (
|
|
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
|