npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@inlang/paraglide-js

v2.10.0

Published

[![NPM Downloads](https://img.shields.io/npm/dw/%40inlang%2Fparaglide-js?logo=npm&logoColor=red&label=npm%20downloads)](https://www.npmjs.com/package/@inlang/paraglide-js) [![GitHub Issues](https://img.shields.io/github/issues-closed/opral/paraglide-js?lo

Readme

NPM Downloads GitHub Issues Contributors Discord

Code Preview

// messages/en.json
{
  "greeting": "Hello {name}!"
}
import { m } from "./paraglide/messages.js";

m.greeting({ name: "World" }); // "Hello World!" — fully typesafe

The compiler generates typed message functions. Your bundler tree-shakes unused messages. Expect up to 70% smaller i18n bundle sizes compared to runtime i18n libraries (e.g. 47 KB vs 205 KB).

Why Paraglide?

| | | | ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Smaller i18n Bundle | Up to 70% smaller i18n bundle size than runtime i18n libraries. | | Tree-Shakable | Unused messages are eliminated by your bundler. | | Fully Typesafe | Autocomplete for message keys and parameters. Typos become compile errors. | | Framework Agnostic | Works with React, Vue, Svelte, Solid, TanStack, or vanilla JS/TS. | | Built-in i18n Routing | URL-based locale detection and localized paths out of the box. | | Built on inlang | Integrates with Sherlock (VS Code extension), Fink (translation editor), and more. |

Works With Your Stack

[!TIP] Paraglide is ideal for any Vite based app. Setup is just one plugin and Vite's tree-shaking eliminates unused messages automatically. Get started →

Quick Start

npx @inlang/paraglide-js init

The CLI sets up everything:

  • Creates your message files
  • Configures your bundler (Vite, Webpack, etc.)
  • Generates typesafe message functions

Then use your messages:

import { m } from "./paraglide/messages.js";
import { setLocale, getLocale } from "./paraglide/runtime.js";

// Use messages (typesafe, with autocomplete)
m.hello_world();
m.greeting({ name: "Ada" });

// Get/set locale
getLocale(); // "en"
setLocale("de"); // switches to German

Full Getting Started Guide →

How It Works

Paraglide compiles an inlang project into tree-shakable message functions. Your bundler eliminates unused messages at build time.

       ┌────────────────┐
       │ Inlang Project │
       └───────┬────────┘
               │
               ▼
  ┌────────────────────────┐
  │  Paraglide Compiler    │
  └───────────┬────────────┘
              │
              ▼
 ┌──────────────────────────┐
 │ ./paraglide/messages.js  │
 │ ./paraglide/runtime.js   │
 └──────────────────────────┘

Watch: How Paraglide JS works in 6 minutes →

Message Format

Paraglide uses Intl.PluralRules for locale-aware pluralization, supporting all CLDR plural categories (zero, one, two, few, many, other) and ordinals (1st, 2nd, 3rd). Gender and custom selects are supported via the variants system.

// Pluralization example
m.items_in_cart({ count: 1 }); // "1 item in cart"
m.items_in_cart({ count: 5 }); // "5 items in cart"

// Works correctly for complex locales (Russian, Arabic, etc.)

Message format is plugin-based — use the default inlang format, or switch to i18next, JSON, or ICU MessageFormat via plugins. If your team relies on ICU MessageFormat 1 syntax, use the inlang-icu-messageformat-1 plugin.

Pluralization & Variants Docs →

Comparison

| Feature | Paraglide | i18next | react-intl | | ---------------------- | ---------------------------------- | --------------------- | --------------------- | | i18n bundle size | Up to 70% smaller via tree-shaking | ❌ Ships all messages | ❌ Ships all messages | | Tree-shakable | ✅ | ❌ | ❌ | | Typesafe | ✅ | Partial | ❌ | | Framework agnostic | ✅ | Wrappers needed | React only | | i18n routing | ✅ Built-in | ❌ | ❌ |

Full Comparison →

What Developers Say

"Paraglide JS is by far the best option when it comes to internationalization. Nothing better on the market."

Ancient-Background17 · Reddit

"Just tried Paraglide JS. This is how i18n should be done! Totally new level of DX."

Patrik Engborg · @patrikengborg

"I was messing with various i18n frameworks and must say Paraglide was the smoothest experience. SSG and SSR worked out of the box."

Dalibor Hon · Discord

"I migrated from i18next. Paraglide reduced my i18n bundle from 40KB to ~2KB."

Daniel · Why I Replaced i18next with Paraglide JS

Talks

Ecosystem

Paraglide is built on the open inlang format. Works with:

| Tool | Description | | ----------------------------------------------------------------------- | ------------------------------------------------ | | Sherlock | VS Code extension for inline translation editing | | CLI | Machine translate from the terminal | | Fink | Translation editor for non-developers | | Parrot | Manage translations in Figma |

Explore the inlang ecosystem →

Documentation

Contributing

We welcome contributions! See CONTRIBUTING.md for guidelines.

License

MIT — see LICENSE