Risque principal
Python 3.8/3.9 ne sont plus supportés, GraphQL change de moteur, l’API REST retire/renomme plusieurs champs et l’ancien système de reports disparaît.
Rapport clair de migration — analyse validée sur les tags Git
Ce site synthétise les différences réelles entre les deux versions : changements de code, dépendances, architecture, API REST/GraphQL, interface, plugins et risques de migration.
Résumé exécutif
Python 3.8/3.9 ne sont plus supportés, GraphQL change de moteur, l’API REST retire/renomme plusieurs champs et l’ancien système de reports disparaît.
UI modernisée avec Tabler/Bootstrap 5.3, champs dynamiques REST API, GraphQL plus performant et vues admin migrées vers l’interface principale.
Plugins, scripts/reports, intégrations REST/GraphQL, permissions, filtres Location, custom fields et authentification distante.
Analyse du code
Comparaison directe entre les tags v3.7.8 et v4.0.11.
api/serializers_/.graphql/filters.py.Breaking changes
NetBox 4.0 retire le support Python 3.8 et 3.9. Prévoir Python 3.10+ et idéalement valider 3.11/3.12 selon votre OS.
Le format des filtres GraphQL change. Les requêtes existantes doivent être testées et parfois réécrites.
La fonctionnalité legacy reports disparaît. Les reports sont convertis automatiquement en custom scripts lors de l’upgrade.
object_type devient related_object_type. Les intégrations et exports qui consomment ce champ doivent être adaptés.
parent/parent_id ne retournent plus que les enfants directs. Utiliser ancestor/ancestor_id pour tous les descendants.
ENABLE_LOCALIZATION et les formats date/heure custom sont supprimés ; les dates/heures passent en ISO 8601.
API & données
/api/extras/content-types/ devient /api/extras/object-types/./api/extras/reports/ est supprimé.description est désormais inclus pour les modèles concernés.device_role, remplacé par role.members.permissions.?fields=... pour contrôler les champs retournés et optimiser les requêtes DB.NetBox remplace Graphene-Django par Strawberry-Django. C’est un changement structurel, pas seulement une dépendance.
schema.py, types.py et ajouter/mettre à jour filters.py.facility.LOGIN_REQUIRED passe de False à True dans l’exemple de configuration.ENABLE_LOCALIZATION supprimé.DATE_FORMAT, TIME_FORMAT et variantes supprimés.DJANGO_ADMIN_ENABLED peut être activé si des plugins dépendent encore de l’admin legacy.Plugins
Les imports depuis extras.plugins ne sont plus compatibles ; utiliser netbox.plugins.
Les modèles, serializers et filtres qui exposent des content types doivent être ajustés.
BootstrapMixin disparaît. Les Fieldsets deviennent plus structurés et la refonte Tabler peut casser des templates custom.
Les serializers brief mode et la couche GraphQL Strawberry imposent une revue spécifique des plugins exposant des APIs.
Plan migration
device_role, content-types, object_type, parent_id, requêtes GraphQL.Synthèse décisionnelle
Traçabilité
Repository : github.com/netbox-community/netbox
Tags comparés : v3.7.8 (be903a64a) vs v4.0.11 (0b120e6ad)
Commandes d’analyse : git diff --shortstat v3.7.8 v4.0.11, git diff --name-status, lecture de docs/release-notes/version-4.0.md, docs/plugins/development/migration-v4.md, base_requirements.txt, requirements.txt, configuration_example.py.
Date de génération : 2026-04-29 UTC