Releases: netbox-community/netbox
v4.3.4 - 2025-07-15
Enhancements
- #18811 - Match expanded form IPv6 addresses in global search
 - #19550 - Enable lazy loading for rack elevations
 - #19571 - Add a default module type profile for expansion cards
 - #19793 - Support custom dynamic navigation menu links
 - #19828 - Expose L2VPN termination in interface GraphQL response
 
Bug Fixes
- #19413 - Custom fields should be grouped in filter forms
 - #19633 - Introduce InvalidCondition exception and log all evaluations of invalid event rule conditions
 - #19800 - Module type bulk import should support profile assignment
 - #19806 - Introduce JobFailed exception to allow marking background jobs as failed
 - #19827 - Enforce uniqueness for device role names & slugs
 - #19839 - Enable export of parent assignment for recursively nested objects
 - #19876 - Remove Markdown rendering from CustomFieldChoiceSet description field
 
v4.3.3 - 2025-06-26
Enhancements
- #17183 - Enable associating tags with object types during bulk import
 - #17719 - Introduce a user preference for table row striping
 - #19492 - Add a UI button to download the output of an executed custom script
 - #19499 - Support qualifying interfaces by parent device when bulk importing wireless links
 
Bug Fixes
- #19529 - Fix support for running custom scripts via the 
runscriptmanagement command - #19555 - Fix support for 
schedule_atwhen invoking a custom script via the REST API - #19617 - Ensure consistent styling of "connect" buttons in UI
 - #19640 - Restore ability to filter FHRP group assignments by device/VM in GraphQL API
 - #19644 - Atomic transactions should always employ database routing
 - #19659 - Populate initial device/VM selection for "add a service" button
 - #19665 - Correct field reference in wireless link model validation
 - #19667 - Fix 
TypeErrorexception when creating a new module profile type with no schema - #19673 - Ignore custom field references when compiling table prefetches
 - #19677 - Fix exception when passing null value to 
present_in_vrffilter - #19680 - Correct chronological ordering of change records resulting from device deletions
 - #19687 - Cellular interface types should be considered non-connectable
 - #19702 - Fix 
DoesNotExistexception when deleting a notification group with an associated event rule - #19745 - Fix bulk import of services with IP addresses assigned to FHRP groups
 
v4.3.2 - 2025-06-05
Enhancements
- #19200 - Display assigned virtual chassis (if any) on device view
 - #19461 - Add color backgrounds for virtual circuit types
 - #19605 - Enable filtering IP addresses by family in GraphQL API
 - #19627 - Introduce object change migrators
 
Bug Fixes
- #19415 - Increase maximum supported distance for circuits and wireless links
 - #19475 - VLANs belonging to the same location as a VM's cluster should be eligible for assignment to interfaces on that VM
 - #19486 - Fix connection card rendering for console server ports
 - #19487 - Fix 
FieldErrorexception when ordering circuit or tunnel terminations by the terminating object - #19490 - Fix inclusion support for config templates populated via a data source
 - #19496 - Fix 
AttributeErrorexception when rendering a config template with no output - #19510 - Restore GraphQL API filtering for assigned IP addresses
 - #19520 - Restore ability to alter prefix scope via the REST API
 - #19587 - The 
occupiedfilter should include interfaces terminating a wireless link - #19599 - Fix 
AttributeErrorexception when sorting change history under user view - #19610 - Fix 
FieldErrorexception when sorting tunnel terminations by tenant - #19623 - Display description under provider account view
 
v4.3.1 - 2025-05-13
Enhancements
- #17073 - Enable global search for tags
 - #18419 - Enable specifying a queue name when calling 
Job.enqueue() - #19416 - Add the 1000BASE-SX interface type
 - #19434 - Add pre-populated interface speed choices for 2.5 and 5 Gbps
 
Bug Fixes
- #17107 - Fix cosmetic issue in cable traces ending at a provider network
 - #19309 - Improve REST API query performance for prefixes and IP addresses
 - #19361 - Fix incorrect GraphQL object types
 - #19375 - Fix table configuration after applying a saved table config
 - #19376 - Fix 
FieldDoesNotExistexception when global search results include a contact - #19380 - Fix column selections for child object tables
 - #19381 - Fix syncing of custom scripts from a remote data source
 - #19396 - Enable nullifying VLAN 
qinq_rolevia the REST API - #19397 - Correct enum type for IPRangeFilter in GraphQL API
 - #19432 - Update minimum required PostgreSQL version referenced by server error page
 - #19440 - Ensure data migrations use the correct database connection
 - #19444 - Fix change logging for contact group assignments
 - #19463 - Hide button dropdown for tables which do not support saved configs
 - #19464 - Fix bulk editing of inventory items from device view
 - #19465 - Fix ability to clear assigned prefix scope in UI
 - #19472 - Fix device column rendering in virtual device contexts table
 
v4.3.0 - 2025-05-01
Breaking Changes
- The GraphQL API Now uses an advanced syntax for filtering, to enable e.g. logical AND/OR filtering and custom field lookups.
 - PostgreSQL 13 is no longer supported. NetBox v4.3 requires PostgreSQL 14.0 or later.
 - The 
ALLOW_TOKEN_RETRIEVALconfiguration parameter now defaults to False. - The 
deviceandvirtual_machineforeign keys on the Service model have been replaced with a genericparentrelationship to support the assignment of services to FHRP groups as well. - The 
groupforeign key on the Contact model has been replaced with a many-to-manygroupsfield. django-storagesis now a required dependency. (It will be installed automatically on upgrade.)- PluginTemplateExtension no longer supports registration via the singular 
modelattribute (usemodelsinstead). - The legacy staged changes functionality has been removed.
 
New Features
Module Type Profiles & Custom Attributes (#19002)
The new module type profile model enables users to declare custom profiles for module types, with the ability to define custom attributes for each profile according to its functional role. For example, a CPU module type might declare architecture and clock speed attributes; a hard disk profile might declare attributes for type and speed.
Attributes can be declared on each profile using JSON schema, which allows for attributes to be declared as strings (text), integers, decimals, booleans, or choice fields. Profile attributes render as individual form fields when modifying a module type. Several profiles have been included by default to serve as examples, however these may be modified or removed.
Reusable Table Configurations (#14591)
After modifying the displayed columns and/or ordering for a specific object table in the user interface, users now have the option to save that configuration so that it can be reused in the future. Similar to saved filters, table configs can be shared with other users to easily replicate table layouts crafted to serve specific use cases.
Option to Treat IP Ranges as Fully Populated (#9763)
A new mark_populated boolean field has been added to the IPRange model. If set to true, NetBox will consider the IP range to be fully populated, and will not permit the creation of individual IP addresses within the range. For example, you might defer the management of an IP range to an external DHCP server, and wish for NetBox to treat the range as a opaque monolithic block for planning and allocation purposes.
Hierarchical Device Roles (#18245)
Device roles can now be arranged hierarchically, with one role optionally serving as a parent to one or more child roles. For example, you might wish to create a generic "Server" role for devices with "Application Server" and "Database Server" roles beneath it. A device could then be assigned to any of these three roles.
Periodic Synchronization of Data Sources (#18287)
Data sources can now be configured to synchronize automatically at a specified interval, as indicated by the new sync_interval field. No additional system configuration is necessary to support this functionality; background jobs will be scheduled automatically by the RQ worker process.
Proxy Routing (#18627)
User can now declare one or more proxy routers via the PROXY_ROUTERS configuration parameter to control the use of specific proxy servers for various outbound connections. For example, it is now possible to configure NetBox to use different proxies based on the type of outbound traffic or its destination.
Enhancements
- #7598 - Adopt advanced query filtering in GraphQL API to support filtering by custom fields
 - #8423 - Enable assigning services to FHRP groups
 - #15842 - Introduce the 
LOGIN_FORM_HIDDENconfiguration parameter - #16224 - Implement pagination support for the GraphQL API
 - #17170 - Enable the assignment of a contact to multiple contact groups
 - #17443 - Add a 
file_namefield to the export template model - #17602 - Add a 
commentsfield to all nested group models (Region, SiteGroup, Location, ContactGroup, TenantGroup, and WirelessLANGroup) - #17608 - Add a 
statusfield to the L2VPN model - #17653 - Enable declaring Jinja environment parameters on export templates (similar to config templates)
 - #17793 - Introduce a REST API endpoint for tagged objects (
/api/extras/tagged-objects/) - #17841 - Add a 
weightfield to the Tag model to influence ordering - #18296 - Add a 
tenantfield to the VLAN group model - #18352 - Add a 
statusfield to the power outlet model - #18417 - Add an 
outer_heightfield to the rack & rack type models - #18535 - The presence of incompatible plugins will no longer prevent NetBox from starting
 - #18780 - Introduce 
DATABASESandDATABASE_ROUTERSconfiguration parameters to enable defining connections to external databases (e.g. for plugins) - #18783 - Enable filtering all applicable models by tag ID
 - #18785 - Enable custom choices for rack, device, and module airflow
 - #18896 - Enable the use of remote storage for custom scripts
 
Plugins
- #16630 - Plugins can now inject content within the HTML 
<head>block via the newplugin_head()method on PluginTemplateExtension - #17424 - Extend ViewTab with a 
visibleargument to control tab rendering - #17857 - Added a 
release_trackattribute to PluginConfig - #18305 - Introduce plugin support for ContactsMixin
 - #19073 - Allow installed plugins to be omitted from the plugins list
 
Other Changes
- #18071 - Removed legacy staged changed functionality in favor of the netbox-branching plugin
 - #18072 - Drop support for the singular 
modelattribute on PluginTemplateExtension (usemodelsinstead) - #18191 - Remove redundant PostgreSQL indexes
 - #18236 - Upgrade the HTMX library to v2.0
 - #18540 - Operational plugins are now recorded in the application registry
 - #18623 - Upgrade the Tabler CSS theme to v1.2
 - #18743 - Upgrade Django to v5.2
 - #18751 - Change the default value for 
ALLOW_TOKEN_RETRIEVALto False - #18808 - Squashed migration dependencies have been altered to rectify an issue with Django's 
sqlmigratemanagement command - #18820 - PostgreSQL 13 is no longer supported
 - #19004 - The use of inventory items has been deprecated in favor of modules. Inventory items and roles may be removed in a future NetBox release.
 
v4.2.9 - 2025-04-30
Enhancements
- #17151 - Display circuit type with background color in circuits list
 - #17319 - Improve layout of component template edit forms
 - #17405 - Display plugin icons in plugins list
 - #18215 - Link to script results list from script history
 - #18334 - Add region, site group, site, location, and rack filters for modules
 - #18982 - Reference rack as related object in changelog records for rack reservations
 - #18989 - List virtual circuits under provider view
 - #19110 - Enable filtering devices and virtual machines by primary IP address
 - #19358 - Move release info from footer to the navigation menu
 
Bug Fixes
- #15739 - Account for parallel cables when calculating total path length
 - #15971 - Preserve "none" selection in filter form fields
 - #16238 - Fix styling for white, gray, and black custom link buttons
 - #17613 - Fix layout of object view content on mobile
 - #17676 - Fix support for module bay creation when bulk importing module types
 - #18706 - Fix validation for VLANs assigned to both a group and a site
 - #18717 - Ensure change logs populated for many-to-one changes
 - #19117 - Avoid 
AttributeErrorexception when bulk import objects which have a multi-object custom field with a default value - #19204 - Improve JSON serialization support for data returned by a custom script
 - #19217 - Ensure static assets for the debug toolbar are installed even if 
DEBUGis false - #19228 - Fix ordering of custom scripts to avoid 
NoReverseMatchexception - #19229 - Fix 
ValueErrorexception when attempting to nullify interface mode when a VLAN is assigned - #19275 - 
typefield should not be required when bulk editing interfaces - #19279 - 
statusfield should not be required when bulk editing inventory items - #19281 - Fix form validation failure when attempting to create a service from a service template
 - #19320 - Include Q-in-Q VLAN (if any) in VM interface details
 - #19322 - Correct URL paths for bulk import views
 - #19346 - Ensure all redirect URLs are validated before use
 
v4.3.0-beta2 - 2025-04-23
Caution
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.
Bug Fixes (From beta1)
- #19213 - Fix rendering of dropdown selection form fields
 - #19224 - Fix GraphQL API support for custom field choices
 - #19225 - Restore missing GraphQL API filters
 - #19263 - Render action buttons only if the record model matches the table model
 - #19264 - Support table configs on child object list views
 - #19266 - Fix copy-to-clipboard button for IP addresses
 
v4.2.8 - 2025-04-22
Enhancements
- #17136 - Introduce the 
--readonlyflag on upgrade script - #17908 - Add trace buttons to terminations under cable view
 - #18879 - Enable filtering prefixes by group of assigned VLAN
 - #18976 - Include FHRP group name on interface lists
 - #18978 - Add 802.1Q mode to interface filter form
 - #19038 - Show count of related VLAN groups under cluster view
 - #19040 - Add "copy to clipboard" button for rendered config
 - #19056 - Enable filtering devices by location slug
 - #19196 - Add filtering by VLAN translation policy to interface filter forms
 
Bug Fixes
- #18500 - 
prepare_cloned_fields()should validate cloning support on model - #18669 - Ensure default custom field values are respected when creating objects via the REST API
 - #18881 - Include missing related object counts under certain views
 - #18955 - Omit "clear" button on required choice fields
 - #18959 - Preserve ordering of terminations in cable traces
 - #18961 - Virtual chassis form should exclude members of other VCs when adding members
 - #19166 - Fix custom field choices bulk import support for 
base_choices - #19189 - The 
load_yaml()convenience method on BaseScript should use SafeLoader - #19195 - Language cookie should respect 
SESSION_COOKIE_SECUREvalue - #19230 - Allow label reuse when creating multiple components from a pattern
 - #19268 - Restore editing conflict protection for several object forms
 
v4.3.0-beta1 - 2025-04-14
Caution
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.
Breaking Changes
- The GraphQL API Now uses an advanced syntax for filtering, to enable e.g. logical AND/OR filtering and custom field lookups.
 - PostgreSQL 13 is no longer supported. NetBox v4.3 requires PostgreSQL 14.0 or later.
 - The 
ALLOW_TOKEN_RETRIEVALconfiguration parameter now defaults to False. - The 
deviceandvirtual_machineforeign keys on the Service model have been replaced with a genericparentrelationship to support the assignment of services to FHRP groups as well. - The 
groupforeign key on the Contact model has been replaced with a many-to-manygroupsfield. - PluginTemplateExtension no longer supports registration via the singular 
modelattribute (usemodelsinstead). - The legacy staged changes functionality has been removed.
 
New Features
Module Type Profiles & Custom Attributes (#19002)
The new module type profile model enables users to declare custom profiles for module types, with the ability to define custom attributes for each profile according to its functional role. For example, a CPU module type might declare architecture and clock speed attributes; a hard disk profile might declare attributes for type and speed.
Attributes can be declared on each profile using JSON schema, which allows for attributes to be declared as strings (text), integers, decimals, booleans, or choice fields. Profile attributes render as individual form fields when modifying a module type. Several profiles have been included by default to serve as examples, however these may be modified or removed.
Reusable Table Configurations (#14591)
After modifying the displayed columns and/or ordering for a specific object table in the user interface, users now have the option to save that configuration so that it can be reused in the future. Similar to saved filters, table configs can be shared with other users to easily replicate table layouts crafted to serve specific use cases.
Option to Treat IP Ranges as Fully Populated (#9763)
A new mark_populated boolean field has been added to the IPRange model. If set to true, NetBox will consider the IP range to be fully populated, and will not permit the creation of individual IP addresses within the range. For example, you might defer the management of an IP range to an external DHCP server, and wish for NetBox to treat the range as a opaque monolithic block for planning and allocation purposes.
Hierarchical Device Roles (#18245)
Device roles can now be arranged hierarchically, with one role optionally serving as a parent to one or more child roles. For example, you might wish to create a generic "Server" role for devices with "Application Server" and "Database Server" roles beneath it. A device could then be assigned to any of these three roles.
Periodic Synchronization of Data Sources (#18287)
Data sources can now be configured to synchronize automatically at a specified interval, as indicated by the new sync_interval field. No additional system configuration is necessary to support this functionality; background jobs will be scheduled automatically by the RQ worker process.
Proxy Routing (#18627)
User can now declare one or more proxy routers via the PROXY_ROUTERS configuration parameter to control the use of specific proxy servers for various outbound connections. For example, it is now possible to configure NetBox to use different proxies based on the type of outbound traffic or its destination.
Enhancements
- #7598 - Adopt advanced query filtering in GraphQL API to support filtering by custom fields
 - #8423 - Enable assigning services to FHRP groups
 - #15842 - Introduce the 
LOGIN_FORM_HIDDENconfiguration parameter - #16224 - Implement pagination support for the GraphQL API
 - #17170 - Enable the assignment of a contact to multiple contact groups
 - #17443 - Add a 
file_namefield to the export template model - #17602 - Add a 
commentsfield to all nested group models (Region, SiteGroup, Location, ContactGroup, TenantGroup, and WirelessLANGroup) - #17608 - Add a 
statusfield to the L2VPN model - #17653 - Enable declaring Jinja environment parameters on export templates (similar to config templates)
 - #17793 - Introduce a REST API endpoint for tagged objects (
/api/extras/tagged-objects/) - #17841 - Add a 
weightfield to the Tag model to influence ordering - #18296 - Add a 
tenantfield to the VLAN group model - #18352 - Add a 
statusfield to the power outlet model - #18417 - Add an 
outer_heightfield to the rack & rack type models - #18535 - The presence of incompatible plugins will no longer prevent NetBox from starting
 - #18780 - Introduce 
DATABASESandDATABASE_ROUTERSconfiguration parameters to enable defining connections to external databases (e.g. for plugins) - #18783 - Enable filtering all applicable models by tag ID
 - #18785 - Enable custom choices for rack, device, and module airflow
 
Plugins
- #16630 - Plugins can now inject content within the HTML 
<head>block via the newplugin_head()method on PluginTemplateExtension - #17424 - Extend ViewTab with a 
visibleargument to control tab rendering - #17857 - Added a 
release_trackattribute to PluginConfig - #18305 - Introduce plugin support for ContactsMixin
 - #19073 - Allow installed plugins to be omitted from the plugins list
 
Other Changes
- #18071 - Removed legacy staged changed functionality in favor of the netbox-branching plugin
 - #18072 - Drop support for the singular 
modelattribute on PluginTemplateExtension (usemodelsinstead) - #18191 - Remove redundant PostgreSQL indexes
 - #18236 - Upgrade the HTMX library to v2.0
 - #18540 - Operational plugins are now recorded in the application registry
 - #18623 - Upgrade the Tabler CSS theme to v1.0
 - #18743 - Upgrade Django to v5.2
 - #18751 - Change the default value for 
ALLOW_TOKEN_RETRIEVALto False - #18808 - Squashed migration dependencies have been altered to rectify an issue with Django's 
sqlmigratemanagement command - #18820 - PostgreSQL 13 is no longer supported
 - #19004 - The use of inventory items has been deprecated in favor of modules. Inventory items and roles may be removed in a future NetBox release.
 
v4.2.7 - 2025-04-10
Enhancements
- #16144 - Add support for plugin models to GetReturnURLMixin
 - #18138 - Enable filtering of ObjectVar and MultiObjectVar input selections for custom fields
 - #18656 - Enable FHRP group assignment when bulk importing IP addresses
 - #18980 - Optimize bulk updates of custom field values when custom fields are added/removed
 - #19018 - Add MoCA interface type
 
Bug Fixes
- #18553 - Avoid clearing site of assigned virtual machines when editing a cluster
 - #18738 - Respect declared ordering of custom scripts within a module
 - #18895 - Fix GraphQL support for interfaces which terminate virtual circuits
 - #18904 - Add missing tags column to config contexts table
 - #18964 - Fix "select all" behavior on object lists
 - #18965 - "Run script" button should respect default commit toggle for custom scripts
 - #18991 - Fix cable path tracing for pass-through ports in REST API
 - #18999 - Fix filtering of inventory items with no manufacturer in GraphQL API
 - #19021 - Preserve JSONField stylign when 
help_textis passed - #19023 - 
get_field_value()should honor null values on bound form fields - #19030 - Prevent pagination buttons from overlapping bulk action buttons on object lists
 - #19041 - Fix 
IndexErrorexception when creating multiple front ports with a label - #19092 - Fix clearing of scope field when bulk editing prefixes
 - #19122 - Fix styling of server error page