# Migrating from emoji-mart emoji-picker-react runs **offline, under a strict Content Security Policy, with no CDN**. The emoji data for 28 languages is in the package, native emoji are the default, and the injected styles accept your policy's `nonce`. A React component replaces emoji-mart's web component, so the picker sits in your DOM where your CSS reaches it. Reasons teams switch, as of emoji-mart 5.6.0 (last published April 2024) and `@emoji-mart/react` 1.1.1: - **React 19.** `@emoji-mart/react` declares `react: ^16.8 || ^17 || ^18`, so a React 19 install fails with `ERESOLVE` unless you pass `--legacy-peer-deps`. emoji-picker-react supports React 16.8 through 19. - **Runtime CDN.** Without a `data` prop, emoji-mart downloads its dataset from `cdn.jsdelivr.net/npm/@emoji-mart/data@latest`, and non-English `locale`s download their translations the same way. Offline apps, strict `connect-src` policies and air-gapped deployments have to bundle both by hand. - **CSP.** emoji-mart injects a `