WARNING: This is a beta release of NetBox intended for testing and evaluation. Do not use this software in production. Also be aware that no upgrade path is provided to future releases.
!!! tip "Plugin Maintainers"
Please see the dedicated [plugin migration guide](../plugins/development/migration-v4.md) for a checklist of changes that may be needed to ensure compatibility with NetBox v4.0.
device_role & device_role_id filters for devices have been removed. (Use role and role_id instead.)device_role field has been removed from the REST API serializer for devices. (Use role instead.)parent and parent_id filters for locations now return only immediate children of the specified location. (Use ancestor and ancestor_id to return all descendants.)object_type field on the CustomField model has been renamed to related_object_type.utilities.utils module has been removed and its resources reorganized into separate modules organized by function.NullableCharField class has been removed. (Use Django's stock CharField class with null=True instead.)annotated_date template filter and annotated_now template tag have been removed.The NetBox user interface has been completely refreshed and updated. This massive effort entailed:
The REST API now supports specifying which fields to include in the response data. For example, the response to a request for
GET /api/dcim/sites/?fields=name,status,region,tenant
will include only the four specified fields in the representation of each site. Additionally, the underlying database queries effected by such requests have been optimized to omit fields which are not included in the response, resulting in a substantial performance improvement.
The GraphQL engine has been changed from using Graphene-Django to Strawberry-Django. Changes include:
New resources have been introduced to enable advanced form rendering without a need for custom HTML templates. These include:
The legacy admin user interface is now disabled by default, and the few remaining views it provided have been relocated to the primary UI. NetBox deployments which still depend on the legacy admin functionality for plugins can enable it by setting the DJANGO_ADMIN_ENABLED configuration parameter to true.
htmx_talble template tag to simplify the rendering of embedded tablesfacility field to Location modeldescription field in "brief" REST API serializationsnested keyword argument allowing it to represent a related objectis_staff restriction on admin menu itemsvc_position fieldEXEMPT_EXCLUDE_MODELS to reference new user & group modelsDJANGO_ADMIN_ENABLED to True to enable it)extras.plugins (now netbox.plugins)ActionsMixinprocess_webhook() from extras.webhooks_worker (now extras.webhooks.send_webhook())BootstrapMixin form mixin classready() method of individual app configs, rather than relying on the class_prepared signaldevice_role and device_role_id filters for devicesNullableCharField classpsycopg librarydevice_role attribute from Device model (this field was renamed to role in v3.6)object_type field on the CustomField model has been renamed to related_object_type to avoid confusion with its object_types fieldutilities.utils moduleannotated_date template filter & annotated_now template tagENABLE_LOCALIZATION configuration parametersettings_and_registry() context processor/api/extras/content-types/ endpoint has moved to /api/extras/object-types//api/extras/reports/ endpoint has been removeddescription field is now included by default when using "brief mode" for all relevant modelsdevice_role has been removed (replaced by role in v3.6)location fieldmembers field to list the member devicescontent_types has been renamed to object_typesobject_type has been renamed to related_object_typecontent_types filter is now object_typecontent_type_id filter is now object_type_idcontent_types has been renamed to object_typescontent_types filter is now object_typecontent_type_id filter is now object_type_idcontent_types has been renamed to object_typescontent_types filter is now object_typecontent_type_id filter is now object_type_idcontent_types has been renamed to object_typescontent_types filter is now object_typecontent_type_id filter is now object_type_idcontent_type has been renamed to object_typecontent_type filter is now object_typecontent_types has been renamed to object_typescontent_types filter is now object_typecontent_type_id filter is now object_type_idcontent_type has been renamed to object_typecontent_type_id filter is now object_type_idpermissions fieldpermissions field