Releases: netbox-community/netbox
v4.4.2 - 2025-09-30
Enhancements
- #17010 - Show admin navigation menu items only for staff & superusers
- #19590 - Add columns for device site & location to device component tables
- #19765 - Linkify assigned object types under saved filter view
- #20308 - Add a hotkey (
/
) for the global search field - #20332 - Add a "none" option to object tag filters
- #20380 - Introduce the
SENTRY_CONFIG
configuration parameter - #20412 - Linkify cluster type on virtual machine detail view
- #20438 - Add
facility
field to bulk edit forms for sites and locations
Bug Fixes
- #18878 - Automatically assign a designated primary MAC address upon creation of a new interface
- #20243 - Prevent scheduled system jobs from re-running multiple times
- #20253 - Fix support for filtering object contact assignments in GraphQL API
- #20365 - Address various inaccuracies in generated OpenAPI schema
- #20375 - Preserve filter parameters when performing bulk operations
- #20390 - Fix styling of page size selection dropdown
- #20392 - Clean up ordering of interface type options
- #20398 - Fix misleading error reporting for min/max custom field values
- #20419 - Correct action buttons for child object views
- #20425 - Fix Markdown preview functionality within "quick add" modal
- #20441 - Fix display of the "groups" column in contact assignments table
v4.4.1 - 2025-09-16
Enhancements
- #15492 - Enable cloning of permissions
- #16381 - Display script result timestamps in system timezone
- #19262 - No longer restrict FHRP group assignment by assigned IP address
- #19408 - Support export templates for circuit terminations and virtual circuit terminations
- #19428 - Add an optional U height field to the devices table
- #19547 - Add individual "sync" buttons in data sources table
- #19865 - Reorganize cable type groupings
- #20222 - Enable the
HttpOnly
flag for CSRF cookie - #20237 - Include VPN tunnel groups in global search results
- #20241 - Record A & B terminations in cable changelog data
- #20277 - Add support for attribute assignment to
deserialize_object()
utility - #20321 - Add physical media types for transceiver interfaces
- #20347 - Add Wi-Fi Alliance aliases to 802.11 interface types
Bug Fixes
- #19729 - Restore
kind
filter for interfaces in GraphQL API - #19744 - Plugins list should be orderable by "active" column
- #19851 - Fix
ValueError
complaining of missingscope
when bulk importing wireless LANs - #19896 - Min/max values for decimal custom fields should accept decimal values
- #20197 - Correct validation for virtual chassis parent interface
- #20215 - All GraphQL filters for config contexts should be optional
- #20217 - Remove "0 VLANs available" row at end of VLAN range table
- #20221 - JSON fields should not coerce empty dictionaries to null
- #20227 - Ensure consistent padding of Markdown content
- #20234 - Fix "add" button link for prerequisite object warning in UI
- #20236 - Strip invalid characters from uploaded image file names
- #20238 - Fix support for outside IP assignment during bulk import of tunnel terminations
- #20242 - Avoid
AttributeError
exception on background jobs with no request ID - #20252 - Remove generic AddObject from ObjectChildrenView to prevent duplicate "add" buttons
- #20264 - Fix rendering of default icon in plugins list
- #20272 - ConfigContexts assigned to ancestor locations should apply to device/VM
- #20282 - Fix styling of prerequisite objects warning
- #20298 - Display a placeholder when an image thumbnail fails to load
- #20327 - Avoid calling
distinct()
on device/VM queryset when fetching config context data
v4.4.0 - 2025-09-02
New Features
Background Jobs for Bulk Operations (#19589, #19891)
Most bulk operations, such as the import, modification, or deletion of objects can now be executed as a background job. This frees the user to continue working in NetBox while the bulk operation is processed. Once completed, the user will be notified of the job's result.
Logging Mechanism for Background Jobs (#19816)
A dedicated logging mechanism has been implemented for background jobs. Jobs can now easily record log messages by calling e.g. self.logger.info("Log message")
under the run()
method. These messages are displayed along with the job's resulting data. Supported log levels include DEBUG
, INFO
, WARNING
, and ERROR
.
Changelog Comments (#19713)
When creating, editing, or deleting objects in NetBox, users now have the option of providing a short message explaining the change. This message will be recorded on the resulting changelog records for all affected objects.
Config Context Data Validation (#19377)
A new ConfigContextProfile model has been introduced to support JSON schema validation for config context data. If a validation schema has been defined for a profile, all config contexts assigned to it will have their data validated against the schema whenever a change is made. (The assignment of a config context to a profile is optional.)
Enhancements
- #17413 - Platforms belonging to different manufacturers may now have identical names
- #18204 - Improved layout of the image attachments view & tables
- #18528 - Introduced the
HOSTNAME
configuration parameter to override the system hostname reported by NetBox - #18984 - Added a
status
field for rack reservations - #18990 - Image attachments now include an optional description field
- #19134 - Interface transmit power now accepts negative values
- #19231 - Bulk renaming support has been implemented in the UI for most object types
- #19591 - Thumbnails for all images attached to an object are now displayed under a dedicated tab
- #19722 - The REST API endpoint for object types has been extended to include additional details
- #19739 - Introduced a user preference for CSV delimiter
- #19740 - Enable nesting of platforms within a hierarchy for improved organization
- #19773 - Extend the system UI view with additional information
- #19893 - The
/api/status/
REST API endpoint now includes the system hostname - #19920 - Contacts can now be assigned to ASNs
- #19945 - Introduce a new custom script variable to represent decimal values
- #19965 - Add REST & GraphQL API request counters to the Prometheus metrics exporter
- #20029 - Include complete representation of object type in webhook payload data
Plugins
- #18006 - A Javascript is now triggered when UI is toggled between light and dark mode
- #19735 - Custom individual and bulk operations can now be registered under individual views using
ObjectAction
- #20003 - Enable registration of callbacks to provide supplementary webhook payload data
- #20115 - Support the use of ArrayColumn for plugin tables
- #20129 - Enable plugins to register custom model features
Deprecations
- #19738 - The direct assignment of VLANs to sites is now discouraged in favor of VLAN groups
Other Changes
- #18349 - The housekeeping script has been replaced with a system job
- #18588 - The "Service" model has been renamed to "Application Service" for clarity (UI change only)
- #19829 - The REST API endpoint for object types is now available under
/api/core/
- #19924 - ObjectTypes are now tracked as concrete objects in the database (alongside ContentTypes)
- #19973 - Miscellaneous improvements to the
nbshell
management command
v4.3.7 - 2025-08-26
Enhancements
- #18147 - Add device & VM interface counts under related objects for VRFs
- #19990 - Button to add a missing prerequisite now includes a return URL
- #20122 - Improve color contrast of highlighted data under changelog diff view
- #20131 - Add object selector for interface to the MAC address edit form
Bug Fixes
- #18916 - Fix dynamic dropdown selection styling for required fields when no selection is made
- #19645 - Fix interface selection when adding a cable for a virtual chassis master
- #19669 - Restore token authentication support for fetching media assets
- #19970 - Device role child device counts should be cumulative
- #20012 - Fix support for
empty
filter lookup on custom fields - #20043 - Fix page styling when rack elevations are embedded
- #20098 - Fix
AttributeError
exception when assigning tags during bulk import - #20120 - Fix REST API serialization of jobs under
/api/core/background-tasks/
- #20157 - Fix
IntegrityError
exception when a duplicate notification is triggered - #20164 - Fix
ValueError
exception when attempting to add power outlets to devices in bulk
v4.4.0-beta1 - 2025-08-15
New Features
Background Jobs for Bulk Operations (#19589, #19891)
Most bulk operations, such as the import, modification, or deletion of objects can now be executed as a background job. This frees the user to continue working in NetBox while the bulk operation is processed. Once completed, the user will be notified of the job's result.
Logging Mechanism for Background Jobs (#19816)
A dedicated logging mechanism has been implemented for background jobs. Jobs can now easily record log messages by calling e.g. self.logger.info("Log message")
under the run()
method. These messages are displayed along with the job's resulting data. Supported log levels include DEBUG
, INFO
, WARNING
, and ERROR
.
Changelog Comments (#19713)
When creating, editing, or deleting objects in NetBox, users now have the option of providing a short message explaining the change. This message will be recorded on the resulting changelog records for all affected objects.
Config Context Data Validation (#19377)
A new ConfigContextProfile model has been introduced to support JSON schema validation for config context data. If a validation schema has been defined for a profile, all config contexts assigned to it will have their data validated against the schema whenever a change is made. (The assignment of a config context to a profile is optional.)
Enhancements
- #17413 - Platforms belonging to different manufacturers may now have identical names
- #18204 - Improved layout of the image attachments view & tables
- #18528 - Introduced the
HOSTNAME
configuration parameter to override the system hostname reported by NetBox - #18984 - Added a
status
field for rack reservations - #18990 - Image attachments now include an optional description field
- #19134 - Interface transmit power now accepts negative values
- #19231 - Bulk renaming support has been implemented in the UI for most object types
- #19591 - Thumbnails for all images attached to an object are now displayed under a dedicated tab
- #19722 - The REST API endpoint for object types has been extended to include additional details
- #19739 - Introduced a user preference for CSV delimiter
- #19740 - Enable nesting of platforms within a hierarchy for improved organization
- #19773 - Extend the system UI view with additional information
- #19893 - The
/api/status/
REST API endpoint now includes the system hostname - #19920 - Contacts can now be assigned to ASNs
- #19945 - Introduce a new custom script variable to represent decimal values
- #19965 - Add REST & GraphQL API request counters to the Prometheus metrics exporter
- #20029 - Include complete representation of object type in webhook payload data
Plugins
- #18006 - A Javascript is now triggered when UI is toggled between light and dark mode
- #19735 - Custom individual and bulk operations can now be registered under individual views using
ObjectAction
- #20003 - Enable registration of callbacks to provide supplementary webhook payload data
Deprecations
- #19738 - The direct assignment of VLANs to sites is now discouraged in favor of VLAN groups
Other Changes
- #18349 - The housekeeping script has been replaced with a system job
- #18588 - The "Service" model has been renamed to "Application Service" for clarity (UI change only)
- #19829 - The REST API endpoint for object types is now available under
/api/core/
- #19924 - ObjectTypes are now tracked as concrete objects in the database (alongside ContentTypes)
- #19973 - Miscellaneous improvements to the
nbshell
management command
v4.3.6 - 2025-08-12
Enhancements
- #17222 - Made unread notifications more visible with improved styling and positioning
- #18843 - Include color name when exporting cables
- #18873 - Add a request timeout parameter to the RSS feed dashboard widget
- #19622 - Allow sharing GraphQL queries as links
- #19728 - Added C18 power port type for audio devices
- #19968 - Improve object type selection form field when editing permissions
- #19977 - Improve performance when filtering device components by site, location, or rack
Bug Fixes
- #19321 - Reduce redundant database queries when bulk importing devices
- #19379 - Support singular VLAN IDs in list when editing a VLAN group
- #19812 - Implement
contains
GraphQL filter for IPAM prefixes and IP ranges - #19917 - Ensure deterministic ordering of duplicate MAC addresses
- #19996 - Correct dynamic query parameters for IP Address field in Add/Edit Service form
- #19998 - Fix missing changelog records for deleted tags
- #19999 - Corrected excessive whitespace in script list dashboard widget
- #20001 -
is_api_request()
should not evaluate a request's content type - #20009 - Ensure search parameter is escaped for export links under object list views
- #20017 - Fix highlighting of changed lines in changelog data
- #20023 - Add GiST index on prefixes table to vastly improve bulk deletion time
- #20030 - Fix height of object list action buttons & others
- #20033 - Fix
TypeError
exception when bulk deleting bookmarks - #20056 - Fixed missing RF role options in device type schema validation
v4.3.5 - 2025-07-29
Enhancements
- #18797 - Added jinja2.StrictUndefined option for config template rendering to catch undefined variables
- #18936 - Cable imports now accept color names (e.g. "red", "blue") in addition to hex color codes
- #19840 - Cable imports now support specifying site information for better organization
- #19902 - Device names in rack elevation SVG exports are automatically truncated to prevent overflow beyond rack unit boundaries
- #19903 - String field filters now support
regex
andiregex
lookups for advanced pattern matching - #19910 - Internet-dependent links are no longer visible when running in air-gapped environments
Bug Fixes
- #18900 - REST API paginator now raises proper exceptions when attempting to paginate unordered querysets
- #19916 - Rack elevation image/label dropdown functionality restored
- #19934 - Added missing description field to tenant bulk edit form
- #19956 - Prevent duplicate deletion records in changelog from cascading deletions
Note
Plugin Developer Advisory: The fix for bug #18900 now raises explicit exceptions when API endpoints attempt to paginate unordered querysets. Plugin maintainers should review their API viewsets to ensure proper queryset ordering is applied before pagination, either by using .order_by()
on querysets or by setting ordering
in model Meta classes. Previously silent pagination issues in plugin code will now raise QuerySetNotOrdered
exceptions and may require updates to maintain compatibility.
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
runscript
management command - #19555 - Fix support for
schedule_at
when 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
TypeError
exception 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_vrf
filter - #19680 - Correct chronological ordering of change records resulting from device deletions
- #19687 - Cellular interface types should be considered non-connectable
- #19702 - Fix
DoesNotExist
exception 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
FieldError
exception when ordering circuit or tunnel terminations by the terminating object - #19490 - Fix inclusion support for config templates populated via a data source
- #19496 - Fix
AttributeError
exception 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
occupied
filter should include interfaces terminating a wireless link - #19599 - Fix
AttributeError
exception when sorting change history under user view - #19610 - Fix
FieldError
exception when sorting tunnel terminations by tenant - #19623 - Display description under provider account view