Le dbt Hub est le canal de distribution standard pour les packages dbt open source — un registre, pas une plateforme d’hébergement. Les packages vivent sur GitHub ; le Hub indexe leurs releases. Au début 2026, l’écosystème compte plus de 400 packages couvrant les transformations spécifiques aux sources (packages Fivetran), les utilitaires transversaux (dbt-utils, dbt-expectations) et les outils de monitoring (Elementary).
Prérequis
La publication sur le Hub nécessite trois choses :
- Le package est hébergé dans un dépôt GitHub public
- Il contient un
dbt_project.ymlavec un champname - Les releases utilisent des tags de versionnage sémantique (ex.
v0.1.0)
C’est tout. Pas de métadonnées spéciales, pas de manifest séparé, pas de processus d’approbation au-delà de la PR initiale.
Le processus d’enregistrement
Faire apparaître votre première version sur le Hub est un processus en quatre étapes :
-
Créez une release GitHub avec un tag semver. Les tags comme
first-release,betaoulatestsont ignorés par l’indexeur du Hub. Utilisezv0.1.0,v1.0.0, etc. -
Ouvrez une pull request sur le dépôt
hub.getdbt.compour ajouter votre package à l’index. La PR ajoute votre dépôt à un manifest JSON. -
Attendez la revue. Les PRs sont généralement approuvées en un jour ouvré. L’équipe dbt Labs effectue une vérification de base —
dbt_project.ymlvalide, tags semver, dépôt public. -
Mises à jour automatiques ensuite. Un script appelé
hubcaps’exécute toutes les heures pour détecter automatiquement les nouvelles releases GitHub. Aucune autre PR n’est nécessaire pour les mises à jour de version.
Une fois enregistrées, les nouvelles releases sont récupérées par hubcap dans l’heure suivant la création d’une release GitHub. Le cycle devient : tagger une release, la pousser, et le Hub se met à jour automatiquement.
Comment les utilisateurs installent les packages du Hub
Une fois publié, les utilisateurs installent votre package avec une plage de version dans leur packages.yml :
packages: - package: your-namespace/my_package version: [">=0.1.0", "<1.0.0"]L’espace de noms est généralement votre nom d’utilisateur ou d’organisation GitHub. La plage de version permet à dbt de résoudre automatiquement la meilleure version compatible.
L’avantage des dépendances transitives
Les packages du Hub ont un avantage significatif par rapport aux packages Git : la résolution automatique des dépendances transitives.
Si votre package dépend de dbt-utils et que le projet de l’utilisateur dépend également de dbt-utils, le Hub réconcilie automatiquement les conflits de version. Il choisit la version la plus haute qui satisfait toutes les contraintes. Les packages Git ne peuvent pas faire cela — les conflits de version entre dépendances Git nécessitent une résolution manuelle, et les messages d’erreur sont souvent cryptiques.
Cela importe en pratique car la plupart des packages non triviaux dépendent de dbt-utils. Quand un utilisateur a cinq packages installés et que les cinq dépendent de dbt-utils, le Hub trouve une version qui fonctionne pour tout le monde. Avec des dépendances Git, vous devriez assurer manuellement la compatibilité.
Bonnes pratiques
La documentation hubcap présente les pratiques que l’équipe dbt Labs a affinées en maintenant l’écosystème :
Définir require-dbt-version
require-dbt-version: [">=1.3.0", "<3.0.0"]Les utilisateurs doivent connaître la compatibilité en amont. Sans cela, quelqu’un sur dbt 1.1 obtient des erreurs de compilation cryptiques au lieu d’un message clair « version incompatible ». Avec le moteur Fusion (dbt 2.0) désormais disponible, définir [">=1.3.0", "<3.0.0"] couvre les deux runtimes.
Déclarer les dépendances Hub quand c’est possible
Si votre package dépend de dbt-utils, référencez-le depuis le Hub, pas depuis Git :
# Bien — active la résolution transitivepackages: - package: dbt-labs/dbt_utils version: [">=1.0.0", "<2.0.0"]
# À éviter — casse la résolution transitivepackages: - git: "https://github.com/dbt-labs/dbt-utils.git" revision: v1.3.0Les dépendances Hub participent à la résolution de version. Les dépendances Git non.
Utiliser des plages de version larges
N’épinglez pas à des versions patch. version: "1.3.0" force chaque utilisateur à utiliser exactement cette version et crée des conflits avec d’autres packages qui dépendent aussi de dbt-utils mais attendent un patch différent.
# Trop restrictif — crée des conflits de dépendances- package: dbt-labs/dbt_utils version: "1.3.0"
# Mieux — permet la flexibilité- package: dbt-labs/dbt_utils version: [">=1.0.0", "<2.0.0"]Plus la plage qui fonctionne réellement est large, moins vos utilisateurs auront de problèmes.
Ne pas surcharger le comportement global
Votre package ne doit pas surcharger le comportement de dbt Core qui affecte les ressources en dehors de votre package. Surcharger generate_schema_name ou generate_alias_name dans un package change le comportement pour l’ensemble du projet de l’utilisateur, pas seulement pour vos modèles. Si vous avez besoin d’un comportement personnalisé, délimitez-le à vos propres modèles en utilisant le bloc config().
Préférer les macros cross-database intégrées
Depuis dbt-utils v1.0, les macros cross-database comme datediff, dateadd, safe_cast et hash se trouvent dans l’espace de noms dbt. Utilisez {{ dbt.datediff(...) }} plutôt que de réimplémenter vous-même l’arithmétique de dates. Cela réduit votre empreinte de dépendances et tire parti des implémentations spécifiques aux adaptateurs que dbt Core maintient.
Versionnage sémantique pour les packages
Suivez strictement le semver :
- Patch (0.1.0 → 0.1.1) : Corrections de bugs uniquement. Pas de changement de comportement.
- Minor (0.1.0 → 0.2.0) : Nouveaux modèles, nouvelles macros, nouvelles fonctionnalités. Comportement existant inchangé.
- Major (0.2.0 → 1.0.0) : Changements incompatibles — modèles renommés, macros supprimées, schémas de sortie modifiés.
Les packages pré-1.0 (0.x.y) peuvent traiter les versions mineures comme des changements incompatibles, ce qui est courant pendant la phase de définition de la bonne API. Une fois passé à 1.0.0, vous vous engagez à la stabilité.
Maintenez un CHANGELOG.md qui documente ce qui a changé dans chaque version. Les utilisateurs doivent savoir si la mise à niveau de 0.3.0 à 0.4.0 est sûre ou nécessite des étapes de migration.
Quand ne pas utiliser le Hub
Tous les packages n’ont pas leur place sur le Hub. Les packages internes avec une logique métier propriétaire, les packages qui ne fonctionnent qu’avec les données d’une entreprise spécifique et les packages expérimentaux qui ne sont pas encore prêts pour la communauté sont mieux distribués en tant que packages Git. Le Hub est fait pour les packages qui résolvent un problème que la communauté au sens large partage.