Jotai 3.0 llega como paquete solo ESM y retira las APIs obsoletas
La librería de estado atómico para React corta con CommonJS, UMD y SystemJS, y mueve atomFamily y loadable a paquetes aparte. La migración es mecánica para quien atendió los avisos de deprecación.

Jotai 3.0 ya es estable. La librería de gestión de estado atómico para React, mantenida dentro del colectivo Poimandres, publica un paquete solo ESM que se lleva por delante la build de CommonJS, los bundles UMD y SystemJS, el soporte de versiones antiguas de Node, React y TypeScript, y el plugin jotai/babel. El equipo lo describe como una actualización "mayormente compatible hacia atrás", pero el matiz importa.
Ese "sin cambios de ruptura" viene con asterisco: desaparecen atomFamily, loadable y el argumento setSelf de las funciones read de los átomos. Todas arrastraban avisos de deprecación desde finales de la línea v2, así que quien los atendiera debería actualizar sin tocar nada más. Quien siga importando por CommonJS o dependa de los bundles eliminados es el que va a notar el golpe.
Qué cambia por dentro
El paquete pasa a una estructura module-first, apunta a ES2020, lee NODE_ENV directamente en lugar de sustituirlo en tiempo de compilación y cambia Rollup por otro tooling. El mantenedor, Daishi Kato, lleva años documentando el problema de publicar CJS y ESM a la vez, y esto es la conclusión de ese trabajo: menos superficie que mantener y un core más pequeño.
La migración es mecánica para la mayoría. atomFamily se muda a jotai-family con una API idéntica y un helper nuevo llamado atomTree, así que basta con cambiar el import:
// v2
import { atomFamily } from 'jotai/utils'
// v3
import { atomFamily } from 'jotai-family'
Los usuarios de loadable van a parar a jotai-eager. El camino completo está en la guía de migración a la v3, y los detalles de la entrega, en las notas de la versión.
Lo que se queda fuera
En el hilo de ideas para la v3, un usuario criticó la retirada de setSelf: describe un patrón de átomo optimista con atomWithStorageWhileRevalidate que hidrata desde localStorage mientras pide datos frescos al servidor y no tiene reemplazo limpio sin ese argumento. En el mismo hilo hay una petición de ciclo de vida para el store por defecto, de forma que los tests puedan resetear estado sin meterse en APIs internas, algo que duele en aplicaciones grandes que tiran de getDefaultStore(). Kato confirmó en otra discusión que las funcionalidades nuevas y las rupturas mayores quedaron deliberadamente fuera del alcance de 3.0: los átomos seguros ante concurrencia y la sincronización con stores externos van a un v3.x o a un futuro v4.
El contexto ayuda a leer la jugada. Recoil, el proyecto de Facebook que popularizó el modelo atómico, se trata ya como deprecado, lo que deja a Jotai como sucesor de facto, mientras que Zustand, hermano suyo en Poimandres, ocupa el terreno del store único externo. Con 3.0 como limpieza y no como reinvención, el equipo apuesta a que un core más pequeño y nativo de ESM vale más para el ecosistema que ahora ancla que cualquier funcionalidad nueva. El paquete ya está en npm para quien quiera salir de la línea v2.

