# Installation

Install the Comvi i18n package for your framework with npm, pnpm, yarn or bun. One package per framework; the core comes with it.

Canonical: https://comvi.io/docs/i18n/installation

One package, named after your framework. The switcher in the header picks it.
**React**

`Terminal`

```bash
npm install @comvi/react
```

**Next.js**

`Terminal`

```bash
npm install @comvi/next
```

**Vue**

`Terminal`

```bash
npm install @comvi/vue
```

**Nuxt**

`Terminal`

```bash
npm install @comvi/nuxt
```

**Svelte**

`Terminal`

```bash
npm install @comvi/svelte
```

**Solid**

`Terminal`

```bash
npm install @comvi/solid
```

**Vanilla**

`Terminal`

```bash
npm install @comvi/core
```

Each binding depends on `@comvi/core`, so the core arrives with it and you do not list it
yourself. `pnpm add`, `yarn add` and `bun add` take the same package name.

## Packages

| Framework | Package | Peer dependencies | Guide |
| --- | --- | --- | --- |
| Vanilla JavaScript | `@comvi/core` | none | [Vanilla](/docs/i18n/vanilla) |
| React | `@comvi/react` | `react` | [React](/docs/i18n/react) |
| Next.js | `@comvi/next` | `next`, `react` | [Next.js](/docs/i18n/next) |
| Vue | `@comvi/vue` | `vue` | [Vue](/docs/i18n/vue) |
| Nuxt | `@comvi/nuxt` | `nuxt` | [Nuxt](/docs/i18n/nuxt) |
| Svelte | `@comvi/svelte` | `svelte` | [Svelte](/docs/i18n/svelte) |
| Solid | `@comvi/solid` | `solid-js` | [Solid](/docs/i18n/solid) |

The packages are ESM-only and versioned in lockstep, so install matching versions of every
`@comvi/*` package you use. Framework and Node ranges are on
[Compatibility](/docs/i18n/compatibility).

## Formatters

`formatNumber`, `formatDate`, `formatCurrency`, `formatRelativeTime` and `getTextDirection` are
exported from `@comvi/core` and from nowhere else. The versions `useI18n()` returns are bound to
the i18n instance and need no extra install. A module that imports one of the free functions directly,
a utility file outside any component say, imports it from `@comvi/core`, and at that point
`@comvi/core` belongs in your own `dependencies` rather than arriving as a transitive one.

## Read next

- [Quick start](/docs/i18n/quick-start): render a translated string and switch the locale in your framework.
- [Connect to Comvi](/docs/i18n/connect-comvi): load the catalogs from the platform CDN.
