Lingvit

Native multilingual support for Remix & React Router v7

The @lingvit/remix package combines server-side rendering with client-side reactivity. Fast page loads, zero layout shifts, and localized URL paths out of the box.

What gets translated

  • Server-rendered loader data and meta tags
  • Client-side transitions and optimistic UI updates
  • Nested layouts and route boundaries
  • Localized route prefixes (/fr/about, /de/about)
  • Form actions and dynamic error banners
  • Streaming responses and defer() promises
  • SEO meta tags and canonical hreflang links
  • Interactive language switcher component

Setup guide

  1. Install @lingvit/remix

    Add the package to your Remix or React Router v7 application.

    npm install @lingvit/remix
  2. Wrap root.tsx with LingvitProvider

    Export the Lingvit loader and wrap your Document component.

    import { LingvitProvider } from '@lingvit/remix';
    
    export default function App() {
      return (
        <LingvitProvider projectKey="lng_pk_...">
          <Outlet />
        </LingvitProvider>
      );
    }
  3. Add the language switcher

    Render the pre-built switcher component or use the useLingvit() hook.

    import { LingvitSwitcher } from '@lingvit/remix';
    
    export function Header() {
      return <header><LingvitSwitcher /></header>;
    }

Frequently asked questions

Does it work with React Router v7?

Yes. The package is fully compatible with both Remix v2 and React Router v7.

Does it cause layout shift or hydration mismatch?

No. Content is translated during server-side rendering, ensuring HTML matches React hydration exactly.

How does URL routing work?

You can use sub-path prefixes (e.g. /fr/...) or keep single URLs and persist language preferences in cookies or session storage.

Can I translate dynamic form validation errors?

Yes. Dynamic strings returned from server actions can be translated using the useLingvit() translate function.

Start translating your Remix site

A monthly word generation allowance for new translations. Cached delivery uses no extra allowance.