Release history
netbox releases
The premier source of truth powering network automation. Open source under Apache 2. Try NetBox Cloud free: https://netboxlabs.com/products/free-netbox-cloud/
All releases
15 shown
- Django upgraded to version 6.0 – ensure compatibility with any Django‑specific extensions.
- Deprecations: fields `username` and `request_id` in event data; management command `housekeeping`; custom template tag `querystring`; legacy Sentry configuration parameters; mapping `DEFAULT_ACTION_PERMISSIONS`; legacy view actions; key `models` in application registry; config parameter `LOGIN_REQUIRED`; pagination classes OptionalLimitOffsetPagination and ExpandableIPAddressField; utility function expand_ipaddress_pattern(). These will be removed in a future release.
- VirtualMachineType model for categorizing VMs by instance type
- CableBundle model to group individual cables into physical runs
- RackGroup model providing a secondary, location‑independent rack organization axis
Full changelog
New Features
Virtual Machine Types (#5795)
A new VirtualMachineType model has been introduced to enable categorization of virtual machines by instance type, analogous to how DeviceType categorizes physical hardware. VM types can be defined once and reused across many virtual machines.
Cable Bundles (#20151)
A new CableBundle model allows individual cables to be grouped together to represent physical cable runs that are managed as a unit; e.g. a bundle of 48 CAT6 cables between two patch panels. (Please note that this feature is not suitable for modeling individual fiber strands within a single cable.)
Rack Groups (#20961)
A flat RackGroup model has been reintroduced to provide a lightweight secondary axis of rack organization (e.g. by row or aisle) that is independent of the location hierarchy. Racks carry an optional foreign key to a RackGroup, and RackGroup can also serve as a scope for VLANGroup assignments.
ETag Support for REST API (#21356)
The REST API now returns an ETag header on responses for individual objects, derived from the object's last-updated timestamp. Clients can supply an If-Match header on PUT/PATCH requests to guard against conflicting concurrent updates; if the object has been modified since the ETag was issued, the server returns a 412 (Precondition Failed) response.
Cursor-based Pagination for REST API (#21363)
A new start query parameter has been introduced as an efficient alternative to the existing offset parameter for paginating large result sets. Rather than scanning the table up to a relative offset, the start parameter filters for objects with a primary key equal to or greater than the given value, enabling constant-time pagination regardless of result set size.
Enhancements
- #12024 - Permit virtual machines to be assigned to devices without a cluster
- #14329 - Improve diff highlighting for custom field data in change logs
- #15513 - Add bulk creation support for IP prefixes
- #17654 - Support role assignment for ASNs
- #19025 - Support optional schema validation for JSON custom fields
- #19034 - Annotate total reserved unit count on rack reservations
- #19138 - Include NAT addresses for primary & out-of-band IP addresses in REST API
- #19648 - Add a color custom field type
- #19796 - Support
{module}position inheritance for nested module bays - #19953 - Enable debugging support for ConfigTemplate rendering
- #20123 - Introduce options to control adoption/replication of device components via REST API (replicates UI behavior)
- #20152 - Support for marking module and device bays as disabled
- #20162 - Provide an option to execute as a background job when adding components to devices in bulk
- #20163 - Add changelog message support for bulk device component creation
- #20698 - Add read-only
total_vlan_idsattribute on VLAN group representation in REST & GraphQL APIs - #20916 - Include stack trace for unhandled exceptions in job logs
- #21157 - Include all public model classes in export template context
- #21409 - Introduce
CHANGELOG_RETAIN_CREATE_LAST_UPDATEconfiguration parameter to retain creation & most recent update record in change log for each object - #21575 - Introduce
{vc_position}template variable for device component template name/label - #21662 - Increase
rf_channel_frequencyprecision to 3 decimal places - #21702 - Include a serialized representation of the HTTP request in each webhook
- #21720 - Align HTTP basic auth regex of
EnhancedURLValidatorwith Django'sURLValidator - #21751 - Disable notifications for scripts running in the background
- #21770 - Enable specifying columns to include/exclude on embedded tables
- #21771 - Add support for partial tag assignment (
add_tags) and removal (remove_tags) via REST API - #21780 - Add changelog message support to bulk creation of IP addresses
- #21865 - Allow setting empty
INTERNAL_IPSto enable debug toolbar for all clients - #21924 - Improve styling and consistency of floating bulk action controls
- #22062 - Display API token ID & plaintext one time immediately upon creation
Performance Improvements
- #21455 - Ensure PostgreSQL indexes exist to support the default ordering of each model
- #21688 - Reduce per-position ORM lookups when tracing cable paths
- #21788 - Optimize bulk object export to avoid timeout errors on large querysets
Plugins
- #20924 - Introduce support for declarative layouts and reusable UI components
- #21357 - Provide an API for plugins to register custom model actions (for permission assignment)
Deprecations
- #21284 - Deprecate the
usernameandrequest_idfields in event data - #21304 - Deprecate the
housekeepingmanagement command - #21331 - Deprecate NetBox's custom
querystringtemplate tag - #21881 - Deprecate legacy Sentry configuration parameters
- #21884 - Deprecate the obsolete
DEFAULT_ACTION_PERMISSIONSmapping - #21887 - Deprecate support for legacy view actions
- #21890 - Deprecate
modelskey in application registry - #21936 - Deprecate the
LOGIN_REQUIREDconfiguration parameter - #22046 - Deprecate OptionalLimitOffsetPagination
- #22047 - Deprecate ExpandableIPAddressField
- #22048 - Deprecate the
expand_ipaddress_pattern()utility function
Other Changes
Fixed erroneous deletion of device assignment when editing a virtual machine.
Full changelog
Bug Fixes
- #21990 - Fix erroneous deletion of device assignment when editing a virtual machine
- #22005 - Fix filtering of interfaces by
connectedstatus to exclude incomplete cable paths - #22029 - Recast empty string values as null for unique nullable fields to avoid integrity errors
- #22031 - Fix error when adding a prefix from a VLAN with no tenant/site
- #22084 - Correct OpenAPI schema for
cable_endfield on cabled objects to indicate it may be null
- Support filtering by multiple object-type custom fields simultaneously
- Add profile filter support for modules
- Include PostgreSQL database schema in system details
Full changelog
Enhancements
- #21711 - Add
profilefilter support for modules - #21782 - Enable optional config template selection when rendering device configuration via a URL query parameter
- #21854 - Support filtering by multiple object-type custom fields simultaneously in filter forms
- #21866 - Include the PostgreSQL database schema in system details
- #21875 - Allow
dictsubclasses for theAPI_TOKEN_PEPPERSconfiguration parameter
Performance Improvements
- #21975 - Optimize queryset prefetching for CSV bulk export
Bug Fixes
- #21538 - Fix incorrect contact count for contact groups with contacts assigned to nested groups
- #21658 - Correct OpenAPI schema for
available-prefixesendpoint request body - #21683 - Fix import of modules with front-to-rear port mappings
- #21737 - Avoid saving invalid custom scripts to disk on upload
- #21893 - Fix permission scope filtering for constrained object permissions
- #21906 - Fix exception raised by REST API
POST/PATCHrequests missing a trailing slash - #21913 - Restore plugin template extensions for VRF and other declarative-layout views
- #21917 - Fix incorrect link peers for rear ports connected via trunk cable profiles
- #21947 - Fix saving of comments on MAC address entries
- #21949 - Correct power draw calculations for outlets within a PDU
- #21966 - Correct OpenAPI schema for available-VLANs endpoint request body
- #21985 - Restore color field in front port edit form
- #21989 - Validate
EventRule.action_dataas a JSON object to prevent server errors on object writes - #21995 - Clear unique fields when using "add another" for contacts
- #22002 - Enable horizontal scrolling for context table panels on the IP address view
- Adopted IEC unit labels for VM resources
- Added REST endpoint to upload custom scripts
- Introduced new 1C2P:2C1P cable profile
- OSFP224 1.6 Tbps interface type
- 50/800/1.6 Tbps speed options
- Path exclusions for data source synchronization
- Identify scope object by name or slug in bulk imports
- Lazy-loading image attachments
- Contact assignment for virtual circuits
- New interface types: 10GBASE-CU, 40GBASE-SR4 BiDi
- Device type details panel in device view
- Show platform parent on virtual machine view
- Cursor-based pagination in GraphQL API
- Owner group table columns and filters
- Field omission with ?omit= parameter
- Prefix length specification for available-ips endpoint
- VLAN selector defaults to group
- Python 3.10-3.11 support removed, requires Python 3.12+
- GraphQL ID/enum filters must use lookup syntax (e.g., id: {exact: 123})
- API token plaintext retrieval disabled, v2 tokens required
- API token v2 with HMAC hashing and bearer authentication
- Object ownership model for native ownership tracking
- Lookup modifiers in filter forms
- Reverse bridge relationships on interface detail pages