pub — el gestor oficial de paquetes para el lenguaje Dart y Flutter SDK. Automatiza la descarga, instalación, actualización y eliminación de bibliotecas de terceros, la gestión de versiones de dependencias y la publicación de paquetes propios. El repositorio central es pub.dev, que alberga más de 50 000 paquetes. La configuración del proyecto se describe en el archivo pubspec.yaml.
Puntos clave
npm para JavaScript o pip para Pythonpubspec.lock fija versiones exactas para compilaciones reproduciblespub (Package Universal Browser) — un gestor de paquetes integrado que viene con Dart SDK. Gestiona bibliotecas externas, resuelve conflictos de versiones, descarga dependencias transitivas y almacena paquetes en caché localmente. En el ecosistema Flutter, pub se utiliza como herramienta principal para conectar plugins de navegación, clientes HTTP, gestores de estado y otros componentes.
Las funciones principales de pub incluyen: instalación de dependencias desde el registro pub.dev, rutas locales (dependencias path) y repositorios git; resolución de versiones según las reglas de versionado semántico; almacenamiento en caché de paquetes descargados en un directorio del sistema; publicación de paquetes propios en el registro público. Todas estas operaciones están disponibles a través del comando CLI dart pub o su equivalente flutter pub.
La arquitectura de pub se basa en un grafo cerrado de dependencias: el gestor construye un árbol donde cada paquete aparece exactamente una vez. Si dos bibliotecas requieren versiones diferentes del mismo paquete, pub intenta encontrar un rango compatible o informa de un error de conflicto. Esto difiere del enfoque de npm, que permite múltiples versiones del mismo paquete en diferentes nodos del árbol.
El archivo pubspec.yaml — el archivo de configuración central de cualquier proyecto Dart o Flutter. Está escrito en formato YAML y contiene metadatos, dependencias, configuración de compilación y restricciones del SDK. A continuación se muestra un ejemplo típico para una aplicación Flutter:
name: my_app
description: Ejemplo de aplicación Flutter
version: 1.0.0+1
publish_to: none
environment:
sdk: ">=3.0.0 <4.0.0"
flutter: ">=3.10.0"
dependencies:
flutter:
sdk: flutter
http: ^1.1.0
provider: ^6.0.5
shared_preferences: ^2.2.0
path_provider: ^2.1.0
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^3.0.0
mockito: ^5.4.3
flutter:
uses-material-design: true
assets:
- assets/images/
- assets/fonts/Campos clave de pubspec.yaml: name — nombre único del paquete (solo latín, guión bajo, dígitos); description — descripción breve (obligatoria para publicar); version — versión semántica con número de compilación opcional después del signo más; environment — versiones mínimas de Dart SDK y Flutter SDK; dependencies — dependencias principales de la aplicación; dev_dependencies — dependencias solo para desarrollo y pruebas; flutter — sección de configuración de Flutter (assets, fuentes, plugins).
El campo publish_to controla la disponibilidad de publicación: el valor none prohíbe la publicación (típico para aplicaciones), el valor predeterminado es https://pub.dev. El campo dependency_overrides permite anular forzosamente la versión de un paquete en situaciones de conflicto — usar con precaución, solo como solución temporal.
pub admite cuatro tipos de dependencias, cada uno especificado con su propia sintaxis dentro de pubspec.yaml:
El tipo estándar — el paquete se descarga del registro pub.dev u otro registro compatible. Se especifica el nombre del paquete y la versión. Ejemplo: http: ^1.1.0 descargará la última versión compatible del rango >=1.1.0 y <2.0.0 según las reglas de caret versioning.
Se utilizan para incluir Flutter SDK o Dart SDK. Sintaxis: flutter: sdk: flutter. El paquete se toma de la instalación local de Flutter SDK, no del registro. Las dependencias SDK no tienen versionado — su versión está determinada por la versión de Flutter instalada actualmente.
Apuntan a un directorio local que contiene un paquete. Útil al desarrollar una biblioteca y probar sin publicar. Sintaxis:
dependencies:
my_local_lib:
path: ../my_local_libLas dependencias path no se fijan en pubspec.lock — cada actualización se resuelve nuevamente desde la ruta especificada.
Permiten incluir un paquete directamente desde un repositorio git. Se admiten ramas, etiquetas y commits:
dependencies:
my_git_lib:
git:
url: https://github.com/user/my_git_lib.git
ref: mainLas dependencias git son convenientes para forks, correcciones no publicadas o trabajo en Pull Requests. Se recomienda especificar una etiqueta o commit concreto en lugar de una rama para evitar cambios inesperados durante la compilación.
pub sigue estrictamente Semantic Versioning 2.0: formato MAJOR.MINOR.PATCH, donde MAJOR — cambios incompatibles, MINOR — adiciones compatibles hacia atrás, PATCH — correcciones compatibles hacia atrás. Basándose en este esquema, pub determina la compatibilidad de los paquetes y resuelve conflictos.
Se utilizan tres operadores principales para especificar versiones en pubspec.yaml:
^1.2.3 equivale a >=1.2.3 y <2.0.0. El operador más común, ya que implica compatibilidad dentro de la versión major. Para paquetes con versión major 0 (cero) — ^0.1.2 significa >=0.1.2 y <0.2.0, siguiendo las reglas de SemVer para versiones inestables.~1.2.3 equivale a >=1.2.3 y <1.3.0. Fija la versión minor, permitiendo solo actualizaciones patch. Se usa con menos frecuencia, principalmente cuando se conoce una incompatibilidad a nivel de versión minor.>=1.2.0 <2.0.0 — notación explícita que brinda control total. Útil para restricciones complejas, por ejemplo al usar múltiples versiones de dependencias transitivas.Después de ejecutar dart pub get, pub genera un archivo pubspec.lock que fija las versiones exactas de todos los paquetes resueltos (directos y transitivos). Este archivo debe incluirse en el control de versiones para garantizar compilaciones reproducibles en todas las máquinas. Al ejecutar dart pub upgrade, el archivo lock se actualiza a las últimas versiones compatibles dentro de las restricciones especificadas.
Un error de dependency conflict ocurre cuando dos paquetes requieren rangos no superpuestos de la misma dependencia. pub informa qué paquetes están en conflicto y por qué. Solución: actualizar uno de los paquetes en conflicto a una versión compatible, usar dependency_overrides (medida temporal) o cambiar a un paquete alternativo.
Todas las operaciones de pub se realizan a través de una interfaz CLI unificada. Dart SDK usa el comando dart pub, Flutter SDK usa el equivalente flutter pub (además considera las dependencias y plugins de Flutter SDK). A continuación se presentan los comandos clave:
dart pub get — descarga todas las dependencias especificadas en pubspec.yaml, resuelve versiones y crea/actualiza pubspec.lock. Se ejecuta al clonar un proyecto por primera vez o después de cambiar dependencias.dart pub upgrade — actualiza todas las dependencias a las últimas versiones dentro de las restricciones de pubspec.yaml y sobrescribe pubspec.lock. Se puede actualizar un paquete individual: dart pub upgrade http.dart pub add <package> — añade una nueva dependencia a pubspec.yaml y ejecuta inmediatamente pub get. Ejemplo: dart pub add dio añade la última versión del paquete dio.dart pub remove <package> — elimina una dependencia de pubspec.yaml y reinicia la resolución del grafo.dart pub cache repair — recarga todos los paquetes en caché. Ayuda cuando la caché local está dañada o ocurren errores de suma de verificación.dart pub deps — imprime el árbol de dependencias en un formato de texto conveniente. Útil para analizar dependencias transitivas y encontrar duplicados.dart pub publish — publica el paquete actual en pub.dev. Antes de publicar, valida el pubspec.yaml, la licencia y la descripción.dart pub outdated — muestra una lista de dependencias obsoletas indicando la versión actual, deseada y la última disponible. Análogo a npm outdated.Todos los comandos también están disponibles en forma abreviada dart pub get como dart pub g (no todas las abreviaturas). En proyectos Flutter, los comandos llevan el prefijo flutter: flutter pub get, flutter pub add y así sucesivamente. La versión Flutter además verifica la compatibilidad de los plugins con la plataforma de destino.
pub.dev — el registro central de paquetes del ecosistema Dart y Flutter. En enero de 2025, se han publicado allí más de 50 000 paquetes, con descargas totales que superan los 10 mil millones. Cada paquete tiene una página con descripción, documentación, puntuaciones de popularidad, puntuaciones Pub Points y versiones.
Pub Points — un sistema automatizado de evaluación de calidad del paquete de 0 a 130 puntos. Considera: presencia de licencia, descripción, ejemplos, compatibilidad con la última versión estable de Dart, ausencia de vulnerabilidades, cobertura de pruebas, corrección del formato. Una puntuación alta aumenta la visibilidad del paquete en la búsqueda y la confianza de los usuarios.
El proceso de publicación incluye varios pasos:
pubspec.yaml: asegurar que name, description, version, license estén presentes (se recomienda identificador SPDX, por ejemplo MIT).dart pub publish --dry-run — una simulación sin enviar al servidor, muestra todos los archivos que se incluirán en el paquete y posibles errores.dart pub publish abrirá un navegador para la autenticación OAuth.Reglas importantes: solo se pueden publicar paquetes con un nombre único; una vez publicada, una versión no se puede eliminar (solo ocultar — dart pub unpublish — dentro de 7 días); para actualizaciones importantes, seguir las reglas de Semantic Versioning, no romper la API pública sin cambiar la versión major.
Preguntas frecuentes
dart pub get y dart pub upgrade?pub get carga versiones del pubspec.lock existente sin modificarlo (si no hay archivo lock — lo crea). pub upgrade ignora el archivo lock y resuelve todas las dependencias de nuevo al rango compatible más nuevo, luego sobrescribe el archivo lock.
Use una dependencia path: dependencies: my_package: path: ../my_package. La ruta es relativa a la raíz del proyecto. Estas dependencias no se fijan en pubspec.lock — en cada compilación, pub toma el contenido actual del directorio.
Actualizar los paquetes en conflicto a versiones con rangos superpuestos. Si es imposible — usar temporalmente dependency_overrides en pubspec.yaml o reemplazar uno de los paquetes por una alternativa. Ejecutar dart pub deps ayuda a visualizar el árbol de dependencias.
pubspec.lock fija las versiones exactas de todas las dependencias (directas y transitivas), garantizando compilaciones reproducibles en todas las máquinas de desarrollo y CI/CD. Sin él, cada ejecución de pub get podría seleccionar versiones ligeramente diferentes debido a nuevos lanzamientos patch.
Ejecutar dart pub publish --dry-run para una verificación previa, luego dart pub publish. En la primera publicación, se requiere autenticación con Google. El paquete debe tener un nombre único, descripción, licencia y versión correcta.
Pub Points — un sistema de puntuación de calidad de 0 a 130. Mejorar las puntuaciones añadiendo una licencia (MIT, Apache-2.0), una descripción detallada, ejemplos de uso, pruebas, manteniendo la compatibilidad con la última versión de Dart y corrigiendo las advertencias de sintaxis del analizador.
Resumen
pub get hasta pub publish cubren el ciclo de vida completo de gestión de paquetesDesarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también