Bibliotecas de componentes externas: un atajo caro
Las bibliotecas de componentes externas prometen velocidad pero atan a upgrades, marcas iguales y reescrituras cada dos años. Esto es lo que funciona.
Una biblioteca de componentes externa es un conjunto empaquetado de componentes UI prefabricados (botones, modales, tablas, formularios) instalado vía npm y usado en todo el producto para entregar más rápido. La categoría incluye Material UI, Chakra UI, Ant Design, Mantine, Radix UI, y la variante copia-y-posee popularizada por shadcn/ui.
Para un prototipo de fin de semana, el intercambio es justo. Para un producto que pretendes facturar en 2027, es el atajo más caro del frontend moderno.
Por qué duele más de lo que ayuda
Los componentes entregan más rápido el día uno. Cuestan más el día 365. El estudio Forrester Total Economic Impact 2024 sobre Figma Dev Mode cuantificó el valor de reutilización del design system interno en más de 4 millones de dólares para una organización compuesta, con 10 millones previstos al año siguiente, todo generado al hacer el sistema más fácil de usar, no añadiendo más componentes (fuente). La palanca está en el sistema, no en las piezas.
Las bibliotecas externas invierten esa matemática. Compras velocidad al precio de tres problemas estructurales: exposición a upgrades (otro decide cuándo se rompe tu producto), uniformidad de marca (tu dropdown se ve igual que cualquier otro dropdown de Material UI), y fricción de personalización (cada override es una pelea contra los defaults de la biblioteca).
Los números reales aparecen a escala. Un caso documentado: un producto Vue con más de 3.200 instancias de componentes ancladas a Vuetify. La biblioteca lanzó una major version con cambios incompatibles; el upgrade requirió semanas de reescrituras manuales y una suma significativa (fuente). Los equipos reportan reescribir desde cero a los dos años porque aplicar los breaking changes se volvió económicamente imposible.
Por qué los arreglos obvios no funcionan
La respuesta estándar es envolver todo. Los equipos construyen wrappers alrededor de la biblioteca para localizar el dolor de los upgrades. En el papel funciona. En la práctica los wrappers gotean. Una prop de la biblioteca que no expusiste se vuelve una feature request al siguiente sprint. Un breaking change en un componente hijo se propaga igual a través del wrapper. En 18 meses la capa de wrappers es un proyecto de mantenimiento por sí misma, y el impuesto de la abstracción se paga dos veces: una en cada lectura, una en cada upgrade.
El otro arreglo obvio es usar shadcn/ui porque posees el código. Eso está más cerca de lo correcto, pero es parcial. shadcn resuelve el problema de dependencias (sin upgrade hell), no el problema del sistema. Tokens, gobernanza, auditoría de accesibilidad, lenguaje de motion, theming, reuso multi-producto: nada de eso viene en la caja. Lo que copias siguen siendo 100 archivos de componentes con las decisiones de otra persona. La primera vez que necesites un date range picker que encaje con tu marca y tu piso de accesibilidad, lo escribes tú igual.
Lo que sí funciona
Tres patrones, en orden de costo.
1. Usa primitivas sin estilo, no componentes ya estilados
Radix UI, React Aria Components, Base UI: aportan el manejo de teclado, el cableado ARIA, el focus trap y los casos límite que tardan meses en hacerse bien. No entregan decisiones visuales. Escribes el CSS una vez, en tokens, y se queda tuyo. Es el punto de partida correcto para cualquier producto que pretenda vivir más de dos años. Una comparación reciente detalla cómo Base UI y Radix difieren como fundación.
2. Construye el sistema, no los componentes
Un design system no es una biblioteca de componentes. Es una capa de tokens (color, espaciado, tipografía, radios, sombras, motion), un modelo de theming (light, dark, alto contraste), un piso de accesibilidad (mínimo WCAG 2.2 AA, 2.1 AA para la ventana de cumplimiento de la European Accessibility Act vigente desde junio de 2025), y un patrón de gobernanza (quién añade, quién depreca, quién versiona). Los componentes son la parte más barata. La mayoría de los equipos construye primero los componentes y el sistema nunca. Invierte el orden. Cubrimos el lado aguas arriba en nuestro artículo sobre auditorías de design system.
3. Trata a shadcn como un starter, no como destino
Si partes de un kit copia-y-posee, copia lo que es genuinamente genérico (un button, un checkbox, un switch). Sustituye el styling con tus tokens el día uno, no el día 90. Borra los componentes que no usas dentro del primer sprint, o se calcificarán. Ejecuta una auditoría de accesibilidad sobre cada componente copiado dentro del primer mes: construido sobre Radix no te exime de la auditoría. El punto de poseer el código es poseerlo de verdad.
Cómo se ve en la práctica
El Studio corre sobre un design system CSS-only: 57 componentes, más de 140 tokens, cero runtime JavaScript, usado en múltiples proyectos consumer. Elegimos CSS-only porque cada producto que entregamos tiene que renderizar en el servidor con Core Web Vitals en verde, y una biblioteca con runtime JS impone un costo en cada página. Elegimos nuestros propios componentes porque cada proyecto que servimos tiene una marca que no podemos igualar haciendo override sobre los defaults de Material UI.
El trade-off es real y lo nombramos: construir un sistema así cuesta aproximadamente entre 6 y 12 semanas de trabajo enfocado antes de que el primer producto se entregue sobre él. Los equipos que necesitan validar una idea este mes no deberían hacerlo. Deberían entregar sobre Tailwind más tres componentes de shadcn y reconstruir después. Los equipos que construyen un producto que esperan facturar en 2028 deberían hacerlo ahora. Por nuestra experiencia, el break-even está alrededor del tercer proyecto consumer o el primer rebrand mayor, lo que llegue primero.
La pregunta de la biblioteca de componentes es en realidad una pregunta de duración. ¿Cuánto tiene que vivir esta UI, cuántas superficies tiene que cubrir, cuántas veces va a iterar la marca antes del sunset? Si la respuesta es semanas, una superficie, nunca: entrega sobre una biblioteca. Si la respuesta es años, varias superficies, varias veces: construye el sistema.
El atajo de las terceras partes solo es caro cuando lo sigues caminando más allá del punto para el que fue diseñado.
Studio
Empieza un proyecto.
Un partner único para empresas, sector público, startups y SaaS. Producción más rápida, tecnología moderna, costes reducidos. Un equipo, una factura.