What is this?
FormatJS is a monorepo of JavaScript internationalization (i18n) libraries — message formatting, date/time/number formatting, and pluralization — with react-intl as its most popular package for React apps.
Is this one library or a collection of packages?
It's a monorepo publishing around 20 separate npm packages (react-intl, intl-messageformat, @formatjs/intl-numberformat, cli tools, babel/eslint plugins, etc.) that you pick and install individually based on what you need.
How do I add FormatJS to my project?
Install the specific package for your use case via npm or yarn — react-intl for React apps, intl-messageformat for framework-agnostic message formatting, or one of the @formatjs/intl-* polyfills for specific Intl APIs.
Do I need React to use any of this?
No — react-intl is just the React binding; core packages like intl-messageformat and the @formatjs/intl-* polyfills work standalone in any JavaScript environment, browser or Node.
What is ICU MessageFormat and why does it matter here?
It's the syntax formatjs uses for translatable strings with placeholders, plurals, and gender/select cases (via intl-messageformat and icu-messageformat-parser), letting translators write one message string that adapts to any locale's grammar rules.
Why are there so many separate packages instead of one library?
Each Intl capability (DateTimeFormat, NumberFormat, PluralRules, ListFormat, Segmenter, etc.) ships as its own @formatjs/intl-* polyfill package so apps only pull in the formatting features and locale data they actually need.
Does it come with build tooling for translations?
Yes — @formatjs/cli extracts and compiles translation messages, and there are babel-plugin-formatjs and eslint-plugin-formatjs for extracting ids at build time and linting message usage.
Why use react-intl instead of the native Intl API directly?
react-intl and the @formatjs/intl-* packages polyfill and normalize behavior across browsers/Node versions where native Intl support is inconsistent or missing, while adding React components/hooks for formatting in JSX.
What are similar projects?
react-i18next, luxon, emotion, stylex, dayjs, Inquirer.js, react-spectrum, bootstrap-table
Which topics is it in?
polyfill, babel, internationalization, eslint, localization, translation, monorepo, i18n, multilingual, javascript-library, ui, react