Skip to content

Releases: netbox-community/netbox

v4.5.0-beta1 - 2025-12-16

16 Dec 18:51
44e731a

Choose a tag to compare

Pre-release

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

  • Python 3.10 and 3.11 are no longer supported. NetBox now requires Python 3.12, 3.13, or 3.14.
  • GraphQL API queries which filter by object IDs or enums must now specify a filter lookup similar to other fields. For example, id: 123 becomes id: {exact: 123 }.
  • Rendering a device or virtual machine configuration is now restricted to users with the render_config permission for the applicable object type.
  • Retrieval of API token plaintexts is no longer supported. The ALLOW_TOKEN_RETRIEVAL config parameter has been removed.
  • API tokens can no longer be reassigned from one user to another.
  • A config context assigned to a platform will now also apply to any children of that platform. (Although this is typically desired behavior, it may introduce unanticipated changes for existing deployments.)
  • The /api/dcim/cable-terminations/ REST API endpoint is now read-only. Cable terminations must be set on cables directly via the /api/dcim/cables/ endpoint.
  • The UI view dedicated to swapping A/Z circuit terminations has been removed.
  • The experimental HTMX navigation feature has been removed.
  • The obsolete boolean field is_staff has been removed from the User model.
  • Removal of deprecated behavior
    • The /api/extras/object-types/ REST API endpoint has been removed. (Use /api/core/object-types/ instead.)
    • Webhooks no longer specify a model in payload data. (Reference object_type instead, which includes the parent app label.)
    • The obsolete module core.models.contenttypes has been removed (replaced in v4.4 by core.models.object_types).
    • The load_yaml() and load_json() utility methods have been removed from the base class for custom scripts.

New Features

Lookup Modifiers in Filter Forms (#7604)

Most object list filters within the UI have been extended to include optional lookup modifiers to support more complex queries. For instance, filters for numeric values now include a dropdown where a user can select "less than," "greater than," or "not" in addition to the default equivalency match. The specific modifiers available depend on the type of each filter.

(Note that this feature does not introduce any new filters. Rather, it makes available in the UI filters which already exist.)

Improved API Authentication Tokens (#20210)

This release introduces a new version of API token (v2) which implements several security improvements. HMAC hashing with a cryptographic pepper is used to authenticate these tokens, obviating the need to store plaintexts. The new tokens also employ a non-sensitive key which can be shared to identify tokens without divulging their plaintexts. We've also adopted the standard "bearer" HTTP header format, as shown below.

# v1 token header
Authorization: Token <TOKEN>

# v2 token header
Authorization: Bearer nbt_<KEY>.<TOKEN>

Note that v2 token keys are prefixed with the fixed string nbt_, which can be used to aid in secret detection.

Backward compatibility with legacy (v1) tokens is retained in this release. However, users are strongly encouraged to begin using only v2 tokens, as support for legacy tokens will be removed in NetBox v4.7.

Object Ownership (#20304)

An optional owner foreign key field has been added to most models. This enables the assignment of objects to a new Owner model, which represents a set of users and/or groups. Through this relationship, we can now convey ownership of objects within NetBox natively, without needing to rely on the assignment of tags or custom fields.

(Note that ownership differs significantly in function from tenancy. Ownership determines the parties responsible for the maintenance of an object, whereas as tenancy conveys an operational dependency.)

Advanced Port Mappings (#20564)

The previous many-to-one mapping of front to rear ports has been expanded to support bidirectional mappings. The rear_port and rear_port_position fields on the FrontPort model have been replaced with an intermediary PortMapping model, which supports any number of assignments between front port/position pair and a rear port/position pair. This change unlocks the ability to model complex inline devices that swap individual fiber pairs between cables.

Cable Profiles (#20788)

Cables can now be assigned profiles which determine how they are treated for path tracing. A profile indicates the number of discrete parallel channels or lanes carried by the cable among its endpoints. For example, a 1-to-4 breakout cable has four lanes, shared at one end via a common termination and split out at the other end to four separate terminations. Profiles, when assigned, enable NetBox to more accurately trace a specific connection within a cable, rather than the cable as a whole.

The assignment of cable profiles is optional: Cable tracing will continue to operate as before for cables with no profile assigned.

Enhancements

  • #16681 - Introduce a render_config permission, which is now required to render a device or virtual machine configuration
  • #18658 - Add a start_on_boot choice field for virtual machines
  • #19095 - Add support for Python 3.13 and 3.14
  • #19338 - Enable filter lookups for object IDs and enums in GraphQL API queries
  • #19523 - Cache the number of instances for device, module, and rack types, and enable filtering by these counts
  • #20417 - Add an optional color field for device type power outlets
  • #20476 - Once provisioned, the owner of an API token cannot be changed
  • #20492 - Completely disabled the means to retrieve legacy API token plaintexts (removed the ALLOW_TOKEN_RETRIEVAL config parameter)
  • #20639 - Apply config contexts to devices/VMs assigned any child platform of the parent platform
  • #20834 - Add an enabled boolean field to API tokens
  • #20917 - Include usage reference on API token views
  • #20925 - Add optional comments field to all subclasses of OrganizationalModel
  • #20929 - Require the render_config permission to view a rendered device/VM configuration in the UI
  • #20936 - Introduce the /api/authentication-check/ REST API endpoint for validating authentication tokens
  • #20959 - Include a count of related module types for a manufacturer in the REST API

Plugins

  • #13182 - Added PrimaryModel, OrganizationalModel, and NestedGroupModel to the plugins API, as well as their respective base classes for various resources

Other Changes

  • #16137 - Remove the obsolete boolean field is_staff from the User model
  • #17571 - Remove the experimental HTMX navigation feature
  • #17936 - Introduce a dedicated GFKSerializerField for representing generic foreign keys in API serializers
  • #19889 - Drop support for Python 3.10 and 3.11
  • #19898 - Remove the obsolete REST API endpoint /api/extras/object-types/
  • #20088 - Remove the non-deterministic model key from webhook payload data
  • #20095 - Remove the obsolete module core.models.contenttypes
  • #20096 - Remove the load_yaml() and load_json() utility methods from the BaseScript class
  • #20204 - Started migrating object views from custom HTML templates to declarative layouts
  • #20295 - Cable terminations may be modified via the REST API only by modifying the cable itself
  • #20617 - Introduce BaseModel as the global base class for models
  • #20683 - Remove the UI view dedicated to swapping A/Z circuit terminations
  • #20926 - Standardize naming of GraphQL filters

v4.4.8 - 2025-12-09

09 Dec 16:29

Choose a tag to compare

Enhancements

  • #20068 - Support the assignment of module type profile attributes via bulk import
  • #20914 - Enable filtering device components by tenant assigned to device

Bug Fixes

  • #19918 - Fix support for {module} resolution of components of child modules
  • #20759 - Improve legibility of object types in permissions form
  • #20860 - Ensure user-provided changelog message is recorded when creating device components via the UI
  • #20878 - Use the active database connection when executing custom scripts
  • #20888 - Resolve warnings about non-decimal values for min/max latitude & longitude fields

v4.4.7 - 2025-11-25

25 Nov 19:58
8b3f7ce

Choose a tag to compare

Enhancements

  • #20371 - Add Molex Micro-Fit 2x3 for power ports & power outlets
  • #20731 - Enable specifying data_source & data_file when bulk import config templates
  • #20820 - Enable filtering of custom fields by object type
  • #20823 - Disallow creation of API tokens with an expiration date in the past
  • #20841 - Support advanced filtering for available rack types when creating/editing a rack

Bug Fixes

  • #20134 - Prevent out-of-band HTMX content swaps in embedded tables
  • #20432 - Fix tracing of cables across multiple circuits in parallel
  • #20465 - Ensure that scripts are updated immediately when a new file is uploaded
  • #20638 - Correct OpenAPI schema for bulk create operations
  • #20649 - Enforce view permissions on REST API endpoint for custom scripts
  • #20740 - Ensure permissions constraints are enforced when executing custom scripts via the REST API
  • #20743 - Pass request context to custom script when triggered by an event rule
  • #20766 - Fix inadvertent translations on server error page
  • #20775 - Fix TypeError exception when bulk renaming unnamed devices
  • #20822 - Add missing auto_sync_enabled field in bulk edit forms
  • #20827 - Fix UI styling issue when toggling between light and dark mode
  • #20839 - Fix filtering by object type in UI for custom links and saved filters
  • #20840 - Remove extraneous references to airflow for RackType model
  • #20844 - Fix object type filter for L2VPN terminations
  • #20859 - Prevent dashboard crash due to exception raised by a widget
  • #20865 - Enforce proper min/max values for latitude & longitude fields

v4.4.6 - 2025-11-11

11 Nov 14:59

Choose a tag to compare

Enhancements

  • #14171 - Support VLAN assignment for device & VM interfaces being bulk imported
  • #20297 - Introduce additional coaxial cable types

Bug Fixes

  • #20378 - Prevent exception when attempting to delete a data source utilized by a custom script
  • #20645 - CSVChoiceField should defer to model field's default value when CSV field is empty
  • #20647 - Improve handling of empty strings during bulk imports
  • #20653 - Fix filtering of jobs by object type ID
  • #20660 - Optimize loading of custom script modules from remote storage
  • #20670 - Improve validation of related objects during bulk import
  • #20688 - Suppress non-harmful "No active configuration revision found" warning message
  • #20697 - Prevent duplication of signals which increment/decrement related object counts
  • #20699 - Ensure proper ordering of changelog entries resulting from cascading deletions
  • #20713 - Ensure a pre-change snapshot is recorded on virtual chassis members being added/removed
  • #20721 - Fix breadcrumb navigation links in UI for background tasks
  • #20738 - Deleting a virtual chassis should nullify the vc_position of all former members
  • #20750 - Fix cloning of permissions when only one action is enabled
  • #20755 - Prevent duplicate results under certain conditions when filtering providers
  • #20771 - Comments are required when creating a new journal entry
  • #20774 - Bulk action button labels should be translated

v4.4.5 - 2025-10-28

28 Oct 18:35

Choose a tag to compare

Enhancements

  • #19751 - Disable occupied module bays in form dropdowns when installing a new module
  • #20301 - Add a "dismiss all" option to the notifications dropdown
  • #20399 - Add assigned and primary boolean filters for MAC addresses
  • #20567 - Add contacts column to services table
  • #20675 - Enable NetBox Copilot integration
  • #20692 - Add contacts column to IP addresses table
  • #20700 - Add contacts table column for various additional models

Bug Fixes

  • #19872 - Ensure custom script validation failures display error messages
  • #20389 - Fix "select all" behavior for bulk rename views
  • #20422 - Enable filtering of aggregates and prefixes by family in GraphQL API
  • #20459 - Fix validation of is_oob & is_primary fields under IP address bulk import
  • #20466 - Fix querying of devices with a primary IP assigned in GraphQL API
  • #20498 - Enforce the validation regex (if set) for custom URL fields
  • #20524 - Raise a validation error when attempting to schedule a custom script for a past date/time
  • #20541 - Fix resolution of GraphQL object fields which rely on custom filters
  • #20551 - Fix automatic slug generation in quick-add UI form
  • #20606 - Enable copying of values from table columns rendered as badges
  • #20641 - Fix AttributeError exception raised by the object changes REST API endpoint
  • #20646 - Prevent cables from connecting to objects marked as connected
  • #20655 - Fix FieldError exception when attempting to sort permissions list by actions

v4.4.4 - 2025-10-15

15 Oct 19:27
bee0080

Choose a tag to compare

Bug Fixes

  • #20554 - Fix generic relation filters to accept <app>.<model> format matching POST requests
  • #20574 - Fix excessive storage initialization overhead when listing scripts with remote backends
  • #20584 - Enforce PoE mode requirement on interface templates when PoE type is set
  • #20585 - Fix API schema generation crash for models with single-field UniqueConstraints
  • #20587 - Fix upgrade.sh failure when removing stale content types

v4.4.3 - 2025-10-14

14 Oct 17:52

Choose a tag to compare

Enhancements

  • #20426 - Add a copy-to-clipboard button for custom script output
  • #20516 - Improve rendering of VLAN ID ranges in VLAN group tables

Bug Fixes

  • #19302 - Fix uniqueness validation in REST API for nullable fields
  • #19615 - Fix support for static file parameters in templates when external storage is in use
  • #19818 - Hide primary IP assignment fields when creating a new virtual machine in the UI
  • #19825 - Prevent cache for config revisions from being erroneously overwritten when debugging is enabled
  • #20140 - Changing a site's region or group should update any associated circuit terminations
  • #20156 - Fix display of rack elevation labels
  • #20290 - Fix migration error when upgrading to NetBox v4.4 from releases earlier than v4.3
  • #20471 - Saving an unmodified VLAN group should not generate a change record
  • #20475 - Collapse singleton VLAN IDs in VLAN group display
  • #20494 - Correct OpenAPI schema definition for IntegerRangeSerializer
  • #20496 - REST API should always honor MAX_PAGE_SIZE value
  • #20497 - Fix filtering of VLAN groups by VLAN ID range in GraphQL API
  • #20507 - Fix support for fetching ASN contacts via GraphQL API
  • #20523 - Hide password change form for users authenticated via SSO
  • #20542 - Fix the creation of MAC addresses using the "quick add" form

v4.4.2 - 2025-09-30

30 Sep 20:16

Choose a tag to compare

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

16 Sep 15:58
8fa1abd

Choose a tag to compare

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 missing scope 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

02 Sep 17:04
d8822c8

Choose a tag to compare

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