Nautobot v3.0¶
This document describes all new features and changes in Nautobot 3.0.
Upgrade Actions¶
Administrators¶
- Job approval permissions have been updated in the UI and API. Approvers must now be granted the
extras.change_approvalworkflowstageandextras.view_approvalworkflowstagepermissions, replacing the previous requirement forextras.approve_job. This change aligns with updates to the approval workflow implementation and permissions model. - The
approval_requiredfield fromextras.Jobmodel has been removed. This is a breaking change for any custom Jobs or applications that reference this field. This functionality has been replaced by a new approval workflow system. For more information on how the new approach works, see approval workflow documentation- If you're upgrading from Nautobot 2.x, a management command,
nautobot-server check_job_approval_statusis available in 2.x to help identify jobs and scheduled jobs that still haveapproval_required=True. Running this command prior to upgrading can help you detect and address these cases by either clearing scheduled jobs or defining approval workflows for Jobs. - To maintain a similar approval process, see the steps in predefined approval workflow.
- If you're upgrading from Nautobot 2.x, a management command,
- A small number of breaking filter field changes may impact Dynamic Group filter definitions; you are recommended to run
nautobot-server validate_models extras.dynamicgroup extras.savedview(or the newly addedValidate Model Datasystem Job) after the upgrade to identify any impacted Dynamic Groups or Saved Views.
Job Authors & App Developers¶
- Apps that provide any user interface will likely require updates to account for the Bootstrap upgrade from v3.4 to v5.3 described below.
- The Data Compliance feature set from the Data Validation Engine App has been moved directly into core. Import paths that reference
nautobot_data_validation_engine.custom_validators.DataComplianceRuleornautobot_data_validation_engine.custom_validators.ComplianceErrorshould be updated tonautobot.apps.models.DataComplianceRuleandnautobot.apps.models.ComplianceError, respectively. - Code that calls the GraphQL
execute_query()andexecute_saved_query()functions may need to be updated to account for changes to the response object returned by these APIs. Specifically, theresponse.to_dict()method is no longer supported, but instead the returned data and any errors encountered may now be accessed directly asresponse.dataandresponse.errorsrespectively.
REST API Users¶
- Filtering data that supports a
typefilter in the REST API now also supports a correspondingtypefilter in GraphQL. (In Nautobot v2.x and earlier, the filter had to be referenced in GraphQL as_typeinstead.) Filtering by_typeis still supported where applicable but should be considered deprecated; please update your GraphQL queries accordingly. - As a part of adding support for associating a Device to multiple Clusters, the Device REST API no longer supports a
clusterfield; the field has been renamed toclustersand is now a list of related Clusters rather than a single record. See below for more details. - The REST API now defaults to excluding many-to-many fields (except for
tags,content_types, andobject_types) by default. Any code that relies on including many-to-many fields in the REST API response must explicitly request them by specifying theexclude_m2m=Falsequery parameter. Pynautobot and Nautobot Ansible users should ensure they are on the latest versions to maintain backwards compatibility. See Many-to-Many Fields in REST API below for more details.
Release Overview¶
Breaking Changes¶
Many-to-Many Fields in REST API (#7456)¶
In order to improve performance at scale, the REST API now defaults to excluding many-to-many fields (except for tags, content_types, and object_types) by default. Any code that relies on including many-to-many fields in the REST API response must explicitly request them by specifying the exclude_m2m=False query parameter. See Filtering Included Fields for more details.
Pynautobot users should ensure they add exclude_m2m=False to an individual request (nb.dcim.devices.all(exclude_m2m=False)) or (in pynautobot v3.0.0+) set the default for all requests (import pynautobot; nb = pynautobot.api(url, token, exclude_m2m=False)) to maintain prior behavior.
Nautobot Ansible users (using v6.0.0+ and pynautobot v3.0.0+) should see no change required when using module or inventory plugins. When using a lookup plugin, however, they will need to use the api_filters parameter to include M2M fields. For example: api_filters='exclude_m2m=False'.
Removed Python Code¶
Many previously deprecated classes have been fully removed now (see full table below). The most notable removal is the original PluginConfig class, which was replaced by NautobotAppConfig in v1.5.2. If your app still imports and inherits from PluginConfig, you should migrate to using NautobotAppConfig before upgrading to Nautobot 3.0.
To assist with identifying any remaining instances of deprecated code in your codebase, new rules have been added to pylint-nautobot in version v0.4.3+ that will flag any code that still imports and inherits from any of the deprecated classes.
Full table of code removals
| Removed | Replacement |
|---|---|
| nautobot.dcim.filters.DeviceComponentFilterSet | nautobot.dcim.filters.mixins.DeviceComponentModelFilterSetMixin |
| nautobot.dcim.filters.DeviceTypeComponentFilterSet | nautobot.dcim.filters.mixins.DeviceComponentTemplateModelFilterSetMixin |
| nautobot.dcim.filters.CableTerminationFilterSet | nautobot.dcim.filters.mixins.CableTerminationModelFilterSetMixin |
| nautobot.dcim.filters.PathEndpointFilterSet | nautobot.dcim.filters.mixins.PathEndpointModelFilterSetMixin |
| nautobot.dcim.filters.ConnectionFilterSet | nautobot.dcim.filters.ConnectionFilterSetMixin |
| nautobot.dcim.api.serializers.CableTerminationSerializer | nautobot.dcim.api.serializers.CableTerminationModelSerializerMixin |
| nautobot.dcim.api.serializers.ConnectedEndpointSerializer | nautobot.dcim.api.serializers.PathEndpointModelSerializerMixin |
| nautobot.extras.filters.CreatedUpdatedFilterSet | nautobot.extras.filters.mixins.CreatedUpdatedModelFilterSetMixin |
| nautobot.extras.filters.RelationshipModelFilterSet | nautobot.extras.filters.mixins.RelationshipModelFilterSetMixin |
| nautobot.extras.filters.CustomFieldModelFilterSet | nautobot.extras.filters.mixins.CustomFieldModelFilterSetMixin |
| nautobot.extras.filters.LocalContextFilterSet | nautobot.extras.filters.mixins.LocalContextModelFilterSetMixin |
| nautobot.extras.forms.forms.CustomFieldBulkCreateForm | nautobot.extras.forms.mixins.CustomFieldBulkCreateForm |
| nautobot.extras.forms.mixins.AddRemoveTagsForm | nautobot.extras.forms.mixins.TagsBulkEditFormMixin |
| nautobot.extras.forms.mixins.CustomFieldBulkEditForm | nautobot.extras.forms.mixins.CustomFieldModelBulkEditFormMixin |
| nautobot.extras.forms.mixins.CustomFieldModelForm | nautobot.extras.forms.mixins.CustomFieldModelFormMixin |
| nautobot.extras.forms.mixins.RelationshipModelForm | nautobot.extras.forms.mixins.RelationshipModelFormMixin |
| nautobot.extras.forms.mixins.StatusBulkEditFormMixin | nautobot.extras.forms.mixins.StatusModelBulkEditFormMixin |
| nautobot.extras.forms.mixins.StatusFilterFormMixin | nautobot.extras.forms.mixins.StatusModelFilterFormMixin |
| nautobot.tenancy.filters.TenancyFilterSet | nautobot.tenancy.filters.mixins.TenancyModelFilterSetMixin |
| nautobot.core.testing.filters.FilterTestCases.NameOnlyFilterTestCase | nautobot.core.testing.filters.FilterTestCases.FilterTestCase |
| nautobot.core.testing.filters.FilterTestCases.NameSlugFilterTestCase | nautobot.core.testing.filters.FilterTestCases.FilterTestCase |
| nautobot.extras.choices.CustomLinkButtonClassChoices | nautobot.extras.choices.ButtonClassChoices |
| nautobot.extras.plugins.PluginConfig | nautobot.extras.plugins.NautobotAppConfig |
| nautobot.extras.plugins.PluginTemplateExtension | nautobot.extras.plugins.TemplateExtension |
| nautobot.extras.plugins.PluginBanner | nautobot.extras.plugins.Banner |
| nautobot.extras.plugins.PluginFilterExtension | nautobot.extras.plugins.FilterExtension |
| nautobot.extras.plugins.PluginCustomValidator | nautobot.extras.plugins.CustomValidator |
Removed HTML Templates¶
Many legacy HTML templates have been removed. The majority of the removed templates are model specific such as circuits/circuit.html or dcim/device/base.html and have been superseded by generic templates such as generic/object_retrieve.html.
In order to ease the transition from these deprecated templates for app developers, we have included a migration script in Nautobot v2.4.21+ that will recursively parse through a directory's html files and replace any extends directives ({% extends ... %}) that reference a deprecated template with the replacement template. This script does not require Nautobot to be running and it can be run with the command nautobot-migrate-deprecated-templates <path> [--dry-run]. For more details, including a full table of deprecated templates and their replacements, see Deprecated Templates.
Removed Branding Options¶
Removed support for branding configuration options of header_bullet, nav_bullet, javascript, and css. Bullets are no longer used at all in the 3.0 design.
Added¶
UI Updates¶
Nautobot 3.0 introduces a refreshed user interface, building on the migration from Bootstrap 3 to Bootstrap 5 with several major enhancements:
Search¶
The search experience has been completely reimagined. A single, always-available search bar is now present throughout the application, accessible via Ctrl+K or Command+K. Advanced search syntax, such as in:<model name>, allows you to target specific models directly. The search results page now provides clearer visibility into active search parameters and makes it easy to distinguish between basic and advanced queries.
Saved Views¶
Saved Views have been improved to display their type more prominently, making it easier to identify when a Saved View is active and to understand the filters or configurations being applied. This streamlines workflows and reduces confusion when working with complex data sets.
Navigation Bar¶
The Navigation Bar has been redesigned for greater efficiency and usability. It now features support for marking items as favorites, incorporates intuitive icons, and uses a modern flyout design to maximize space and accessibility. Navigation is more consolidated, helping users quickly find and access key areas of Nautobot.
Load Balancer Models¶
Nautobot 3.0 introduces a Load Balancer data model, enabling you to model Virtual Servers, Pools, Pool Members, Health Checks, and Certificates. This feature provides compatibility for configuration generation (via Golden Configuration) with popular load balancing vendors such as F5, Citrix NetScaler, A10 Networks, VMware Avi Load Balancer, and Fortinet.
Key use cases include:
- Modeling load balancer resources for service, application, and inventory tracking.
- Generating device configurations using Nautobot Golden Configuration templates for supported vendors.
- Mapping Virtual Servers to backend servers and services.
- Managing certificate configuration and associated metadata.
VPN Models¶
Nautobot 3.0 adds a VPN data model to support modeling Virtual Private Networks (VPNs), including reusable profiles, policies, and tunnel endpoints. These models enable you to define IKE (Phase 1) and IPSec (Phase 2) policy parameters, manage tunnel endpoints, and associate VPNs with roles and secrets. Additionally, VPNs may optionally be associated with tenants so that administrators can indicate ownership of related model instances.
Key Use Cases include:
- Site-to-site IPSec VPN tunnel (transport mode)
- Site-to-site IPSec VPN tunnel (tunnel mode)
- Single hub-and-spoke VPN
- Multiple hub-and-spoke VPNs
Device Uniqueness Flexibility¶
Device Uniqueness is now less restrictive. Current behavior of Location + Tenant + Name is maintained in migration, but now in addition you can configure to Device name must be globally unique and No enforced uniqueness as well as you can set Device name required (cannot be blank or null).
Approval Workflows¶
Approval Workflows allows for a multi-stage review and approval of processes before making changes, running or creating specific objects in the system. They are defined in advance and attached to specific models based on certain constraints. Use cases include:
- Preventing accidental deletion of critical data by requiring manager approval before deletion jobs run.
- Requiring security team sign-off before enabling network changes in production.
- Ensuring multiple stakeholders approve large-scale bulk edits.
- Mandating peer review for scheduled jobs that affect multiple systems.
Data Validation Engine¶
The Nautobot Data Validation Engine functionality previously provided as a separate Nautobot App has been migrated into Nautobot as a core feature.
The data validation engine offers a set of user definable rules which are used to enforce business constraints on the data in Nautobot. These rules are tied to models and each rule is meant to enforce one aspect of a business use case.
Supported rule types include:
- Regular expression
- Min/max value
- Required fields
- Unique values
Additionally Data Compliance allows you to create validations on your data without actually enforcing them and easily convert them to enforcements once all of your data is compliant.
ECharts¶
ECharts is now included in the base image, with abstractions provided to easily add custom charts using ECharts.
GraphQL¶
You will notice a fresh new look for the GraphiQL interface, which has been upgraded to version 2.4.7. This update brings a modernized UI, improved usability, and better alignment with Nautobot's theming. Most user workflows remain unchanged, but you may find enhanced features such as improved query editing, autocompletion, and response formatting.
Changed¶
Bootstrap upgrade from v3.4 to v5.3¶
Nautobot now uses Bootstrap v5.3 as its underlying theming and layout engine. The base Nautobot UI has been refreshed accordingly. Apps will generally require corresponding updates for their UI to render properly. The impact of this upgrade will be much reduced if the App has already adopted the UI Component Framework introduced previously in Nautobot v2.4. A migration script is included in Nautobot 3.x to automate many of the HTML and CSS updates for App developers.
Device to Multiple Clusters (#7203)¶
The Device model has replaced its single cluster foreign-key field with a many-to-many clusters field, allowing multiple Clusters to be associatd with a single Device.
To provide a modicum of backwards-compatibility, the Device model and queryset still support a singular cluster property which can be retrieved and (in some cases) set for the case of a single associated Cluster, but App authors, Job Authors, and GraphQL users are encouraged to migrate to using clusters as soon as possible. The cluster property will raise a MultipleObjectsReturned exception if the Device in question has more than one associated Cluster.
Note that due to technical limitations, the Device REST API does not support a cluster field in Nautobot v3, so users of the REST API must migrate to reading the clusters field where applicable. Assignment of Devices to Clusters via the REST API is now managed via a dedicated endpoint /api/dcim/device-cluster-assignments/ similar to other many-to-many fields in Nautobot.
Filter Standardization Improvements (#1889)¶
To make Nautobot's UI, REST API, and GraphQL filters more self-consistent and standardized, the default filter type for foreign-key and one-to-one model fields has been changed from a single-value filter (ModelChoiceFilter) to a multi-value filter (ModelMultipleChoiceFilter). This change affects a small number of filters in Nautobot core, as most such fields were already explicitly covered by a ModelMultipleChoiceFilter or one of its derivatives, but the following implicit filters are known to have been affected by this change (in addition to any App model filters on one-to-one and foreign-key fields that also were not explicitly defined otherwise):
- Front Port Templates
rear_port_templatefilter - Power Outlets
power_portfilter - Module Bays
parent_modulefilter - Job Log Entries
job_resultfilter - Job Results
userfilter - IP Address to Interface
ip_addressfilter
For users of the UI and REST API, this is purely a feature enhancement to the above filters, as specifying single values in the URL query parameters remains supported, but multiple values are also supported now (for example /api/extras/job-log-entries/?job_result=<uuid1>&job_result=<uuid2>.)
For users of GraphQL, this is also a feature enhancement, as queries using the above filters can now specify either a single value (job_log_entries (job_result: "<uuid>") { message }) as before, or can now be updated to specify a list of values instead (job_log_entries (job_result: ["<uuid1>", "<uuid2>"]) { message }) if desired.
Impact to Dynamic Groups and Saved Views
For Dynamic Groups and Saved Views using the above filters, the group filter will need to be updated to replace the single string value with a list of strings, for example changing:
to
You can identify impacted records by running the nautobot-server validate_models extras.dynamicgroup extras.savedview management command, or the new Validate Model Data system Job; in the above case, the invalid group filter would be reported as below:
Removed¶
Button on Navbar¶
Buttons were removed from the NavBar as our research indicated they were infrequently used and caused clutter.
Job Approval Process¶
The Job Approval process was removed and replaced by Workflow Approvals.
Dependencies¶
GraphQL and GraphiQL Updates¶
The underlying GraphQL libraries (graphene, graphene-django, graphene-django-optimizer) used by Nautobot have been updated to new major versions, including a new major version of the GraphiQL UI. For the most part this upgrade will be seamless to end users, but the response object returned by Nautobot's execute_query() and execute_saved_query() Python APIs has changed type -- see Upgrade Actions above for specifics.
Added Python 3.13 Support and Removed Python 3.9 Support¶
As Python 3.9 has reached end-of-life, Nautobot 3.0 requires a minimum of Python 3.10. Python 3.13 support was added.
Added Echarts¶
Added the JavaScript Library ECharts version 6.0.0.
v3.0.1 (2025-11-24)¶
Added in v3.0.1¶
- #1629 - Added additional Celery worker metrics.
- #7970 - Detailed test cases for Dynamic Groups with Custom Fields filters.
- #8215 - Custom Celery worker health probes based on files.
Fixed in v3.0.1¶
- #8202 - Fixed Bulk operations when using Saved View and selecting all.
- #8211 - Fixed unwanted
<code>elements coloring in special views. - #8221 - Fixed NautobotUIViewSet custom action additional permissions being limited to one additional permission.
- #8235 - Fixed inability to set a default saved view for list views defined in an App.
- #8235 - Fixed inability to use UI Component Framework
BulkButtonfor a model defined in an App.
Documentation in v3.0.1¶
- #1629 - Updated prometheus metrics documentation.
- #8195 - Updated the RelationshipModel and UserGroup documentation to include the 3.0 screenshots.
- #8209 - Clean up migration and impact docs to include Saved Views as well.
- #8220 - Updated the homepage documentation to include the 3.0 screenshots.
Housekeeping in v3.0.1¶
- #8206 - Removed
card-bodyfrombody_wrapper_generic_table.html, because it doesn't work when the class is a table. - #8207 - Updated ip-address-merge-tool documentation to include 3.0 screenshots.
- #8208 - Improved message in approve/deny confirmation form.
- #8226 - Update grid resizing in Bootstrap migration script, making it is more constrained but idempotent.
v3.0.0 (2025-11-17)¶
Fixed in v3.0.0¶
- #8201 - Improved permissions enforcement on approval workflows.
v3.0.0rc2 (2025-11-14)¶
Added in v3.0.0rc2¶
- #8139 - Added default data for Approval Workflow.
- #8167 - Added ability to comment the approval workflow without having to approve or deny.
- #8174 - Added documentation about the enhanced Search functionality in Nautobot 3.0, and a corresponding link in the UI header.
- #8189 - Added missing imports into
nautobot.apps.*.
Changed in v3.0.0rc2¶
- #8110 - Updated breadcrumbs & titles for Modules.
- #8110 - Updated breadcrumbs on Data Validation to be consistent with other views.
- #8147 - Updated theme screenshots (light, dark, system) to match the 3.0 UI.
- #8149 - Disabled smooth scroll in order to display "Please fill out this field" tooltip on required fields which are not in the viewport during form submission.
- #8158 - Changed behavior of Interface and Interface Template creation forms to no longer prefill automatically with a
typeofVirtual. - #8158 - Changed behavior of Front Port, Front Port Template, Rear Port, and Rear Port Template creation forms to no longer prefill automatically with a
typeof8P8C. - #8168 - Changed logged in user thumbnail to MDI account icon.
- #8169 - Changed run job button to circle in job list and tiles view.
- #8170 - Grayed out non-sortable table column headers.
- #8172 - Changed
<code>tags background and text color to gray and enlarged their font size. - #8176 - Hid global page header on the Log In page.
Fixed in v3.0.0rc2¶
- #7336 - Fixed Prefix filter UI to permit
prefix_length=0. - #7848 - Fixed the Logs Cleanup job to skip records with a protected relationship instead of raising an error.
- #8025 - Fixed a
KeyErrorwhen viewing a record with a symmetric one-to-oneRelationshipdefined. - #8120 - Fixed Prefix filter UI to permit
prefix_length=128. - #8132 - Fixed theme flashing if LocalStorage, Cookie, and Browser diagree.
- #8136 - Fixed the ability to configure the Tenant panel table on the Tenant Group detail view.
- #8138 - Fixed viewset additional permissions potentially being processed multiple times.
- #8150 - Added 65535 as maximum value for port attribute in Load Balancer models.
- #8152 - Fixed object list checkbox handlers. Refactored object list checkbox event flow logic so it is more consistent and less prone to errors.
- #8155 - Fixed a GraphQL query error when executing queries with
limitoroffsetas a non-superuser. - #8158 - Fixed bulk-edit form for Interface Redundancy Groups to no longer automatically prepopulate with a
protocolofHSRP. - #8160 - Fixed select2 logic to correctly account for the possibility of multi-value
query_params. - #8164 - Fixed insertion order of middleware for
nautobot.core.settings_funcs.setup_structlog_logging. - #8171 - Fixed tables overflow on update/create forms on narrow viewports.
- #8178 - Fixed "Create and Add Another" behavior for UIViewSet-derived views.
- #8182 - Fixed the width of the log filter input in the JobResult detail view.
- #8184 - Fixed issues with creating/editing a Dynamic Group "group of groups" in the UI.
- #8186 - Fixed approval workflows not being checked for when bulk-editing or bulk-deleting records through the UI.
- #8189 - Fixed multiple locations where actions buttons was not included.
- #8191 - Fixed title on Approval Workflow tab and Dynamic Groups view.
- #8193 - Fixed rendering of approve and deny button, now they are rendered only when user is superuser or is in approver group.
- #8193 - Editing or adding a comment in an approved/denied/canceled stage no longer reverts the approval state.
- #8196 - Fixed
badge_count_override- now works correctly when the value is 0.
Dependencies in v3.0.0rc2¶
- #8187 - Updated dependency
@graphiql/toolkitto^0.11.3. - #8187 - Updated dependency
bootstrapto^5.3.8. - #8187 - Updated dependency
clipboardto2.0.11. - #8187 - Updated dependency
flatpickrto4.6.13. - #8187 - Updated dependency
htmx.orgto^2.0.8. - #8187 - Updated dependency
whatwg-fetchto3.6.20. - #8188 - Updated dependency
django-constanceto~4.3.4.
Documentation in v3.0.0rc2¶
- #8134 - Added a documentation fragment for disabling add button on table panels
- #8145 - Updated Saved View documentation to include 3.0 screenshots.
- #8147 - Documented best practices/standards for documentation media.
- #8147 - Consolidated Draw.io diagrams into a single file.
- #8148 - Updated documentation for the release management process.
- #8157 - Updated graphql documentation to include 3.0 screenshots.
- #8164 - Enhanced Load Balancer documentation with a diagram and additional model details.
- #8164 - Simplified migration guide by adding an overview and recommending the UI Component framework.
- #8173 - Updated CustomField documentation to include 3.0 screenshots.
- #8183 - Updated Request Profiling documentation to include 3.0 screenshots.
Housekeeping in v3.0.0rc2¶
- #8121 - Updated Nautobot documentation screenshots to reflect the latest UI.
- #8127 - Put the majority of v2 to v3 UI changes in a single list.
- #8127 - Added command to check Python files for legacy HTML to Bootstrap v3 to v5 migration script.
- #8154 - Updated Contact and Team documentation to include 3.0 screenshots.
- #8174 - Fixed
invoke djlintandinvoke djhtmltasks to apply to the example apps as well. - #8179 - Updated Wireless documentation to include 3.0 screenshots.
- #8181 - Updated
django_tables2accessors to use preferred dunder methods. - #8181 - Linked badges to tables via
related_field_nameandrelated_list_url_name. - #8181 - Updated multiple filters to support badge linking to tables.
- #8187 - Updated development dependency
autoprefixerto^10.4.22. - #8187 - Updated development dependency
mini-css-extract-pluginto^2.9.4. - #8187 - Updated development dependency
postcssto^8.5.6. - #8187 - Updated development dependency
sass-loaderto^16.0.6. - #8188 - Updated development dependency
fakerto^37.12.0. - #8188 - Updated development dependency
ruffto~0.14.5.
v3.0.0rc1 (2025-11-11)¶
Breaking Changes in v3.0.0rc1¶
- #8051 - Removed deprecated HTML templates that are no longer used.
- #8056 -
BaseBreadcrumbItem.as_pairnow returnsiteratorinstead oftuple[str, str]to support dynamic breadcrumb items. - #8081 - Removed support for branding options of
header_bullet,nav_bullet,javascript, andcss.
Added in v3.0.0rc1¶
- #7873 - Added support for assigning Configuration Contexts to Device Families.
- #8012 - Added Version Control and Ansible Automation to marketplace.
- #8014 - Added vpn.VPNTunnelEndpoint model constraints
- #8056 - Added
BaseModel.page_titleproperty with preferred object representation for titles. - #8064 - Added
ValidateModelDatasystem Job. - #8091 - Added dark mode support for
highlight.js. - #8093 - Added Load Balancer app and data models.
- #8107 - Added the
vrfsfilter to Devices and VirtualMachines. - #8107 - Added the
secrets_groupsfilter to Secrets. - #8107 - Added the
ancestorsfilter to Prefixes. - #8107 - Added the
servicesfilter to IPAddresses. - #8107 - Added the
load_balancer_pool_membersandvirtual_serversfilters to CertificateProfiles. - #8125 - Added
bus-globe,bus-shieldandbus-shield-checkNautobot icons. - #8130 - Added validation of model constraints when creating/editing an Approval Workflow Definition.
- #8130 - Added "Approval State" and "Enabled" filters to Scheduled Job filterset.
- #8130 - Added "Approval State" and "Enabled" columns to Scheduled Job table.
- #8143 - Merged up latest content and fixes from Nautobot v2.4.22.
Changed in v3.0.0rc1¶
- #7462 - Changed
Device.device_redundancy_group_priorityandInterfaceRedundancyGroupAssociation.priorityfromPositiveSmallIntegerFieldtoPositiveIntegerFieldto allow a wider range of values. - #8056 - Removed last breadcrumb item from custom breadcrumbs implementations.
- #8057 - Echart Theme is derived from the browser and not require the Python developer to assign.
- #8057 - Added new
LIGHTER_GREEN_AND_RED_ONLYEChartsThemeColors choice. - #8069 - Set all Select2 placeholders to hyphens:
---------. - #8071 - Underlined links in blue colored table rows and alerts.
- #8074 - Enforced constant width on the first column of attribute tables.
- #8075 - Changed Rack list view to not show space utilization and power utilization columns by default.
- #8080 - Removed "Log in" item from nav menu. When user is unauthenticated and not on login page the "Log in" button now shows up in the header.
- #8088 - Changed nav menu logo and icon size to 32px.
- #8090 - Updated titles for Modules and Cable trace.
- #8090 - Improved breadcrumbs for Rack Elevations and Software Versions.
- #8090 - Improved
helpers.pre_tagrendering for empty values. - #8098 - When applying filters, use selected advanced filter even if not manually applied by user (i.e. even if not added to the selected filters list with "Add Filter" button).
- #8099 - Changed icon for "Rename" buttons from
mdi-penciltomdi-rename. - #8107 - Changed the badge color from blue to gray for the ObjectsTablePanel badges without a link.
- #8125 - Changed VPN navigation icon from
atomtoshield-check. - #8130 - Changed Scheduled Job list view to not hide non-enabled schedules by default.
- #8131 - Changed the
nautobot-migrate-bootstrap-v3-to-v5script to also call thenautobot-migrate-deprecated-templatesscript by default.
Fixed in v3.0.0rc1¶
- #8058 - Fixed some tests skipped in v3.
- #8060 - Fixed dark mode for Rack Elevation view to match Rack view.
- #8062 - Fixed pagination of Job Result logs table.
- #8063 - Fixed a regression that removed many-to-many fields from change logs and webhook payloads.
- #8064 - Fixed style of "Profile job execution" and "Ignore singleton lock" checkboxes in Job forms.
- #8064 - Fixed style of checkboxes in user preferences table.
- #8064 - Added exception handler for the case where
nautobot-server refresh_dynamic_group_member_cachesencounters an exception with a specific group(s). - #8064 - Fixed rendering of Job
descriptionin its detail view page. - #8065 - Fixed remaining tests skipped in v3.
- #8072 - Fixed job detail view copy buttons.
- #8086 - Fixed StatsPanel causing traceback when it includes a filter_extension.
- #8087 - Fixed tab and tab panel spacings inside forms.
- #8088 - Fixed "Nautobot Powered" link in footer and nav menu branding icon.
- #8089 - Fixed ECharts text in dark mode.
- #8089 - Fixed ECharts with dynamic data. ECharts data is not overwritten by resolved data.
- #8089 - Fixed
combine_withoption. - #8090 - Fixed breadcrumbs rendering on generic views like Notes and Changelog.
- #8090 - Fixed status labels on Rack Elevations and Cable Trace.
- #8092 - Fixed title being hard-coded on list views instead of using view_titles.
- #8096 - Fixed filtering on VPN forms for Dynamic Groups and VPNTunnelEndpoint.
- #8099 - Fixed bulk-action buttons not rendering in the footer of object tables on non-default tabs.
- #8100 - Fixed tables when boolean field should use BooleanColumn.
- #8101 - Fixed Virtual Chassis edit member view.
- #8102 - Fixed missing/broken "Data Compliance" tab on Secret views.
- #8102 - Added missing Data Compliance support to GraphQLQuery and Note models.
- #8102 - Fixed Data Compliance URL patterns from
data_compliancetodata-compliance. - #8105 - Fixed detailed view top buttons alignment.
- #8106 - Fixed error in rendering Virtual Machine config context tab.
- #8106 - Fixed incorrect application of config contexts scoped by device-type or device-redundancy-group to all virtual machines.
- #8106 - Fixed incorrect permissions requirements to view various tabs on VPN Profile detail view.
- #8107 - Fixed various ObjectsTablePanel badge links that were invalid or broken.
- #8107 - Fixed the new path for the insourced DVE jobs.
- #8107 - Fixed the creation of Statuses for the insourced Load Balancer app.
- #8111 - Allowed space as valid character in Select2 tags.
- #8112 - Fixed missing Admin "Add" buttons on list views.
- #8118 - Fixed condition in
GetObjectViewTestCase.test_body_content_table_list_urlin which tests failed if it did not have data. - #8122 - Fixed rendering of API version badges in Swagger UI docs.
- #8124 - Fixed browseable API dark mode colors on syntax highlighting.
- #8124 - Fixed missing icons on browseable API GET button.
- #8124 - Fixed redundant header on browseable API pages.
- #8124 - Fixed missing theme modal on pages that only import footer.html.
- #8128 - Fixed a condition when trying to render a link on a button for an object that doesn't exist.
- #8130 - Fixed model constraints on approval workflows not correctly applying to scheduled jobs.
Documentation in v3.0.0rc1¶
Housekeeping in v3.0.0rc1¶
- #8078 - Fixed the rendering of the license badge in the App detail page.
- #8083 - Bumped
highlight.jsversion. - #8103 - Fixed bootstrap v3 to v5 script silently failing on invalid path arguments.
- #8107 - Added a unit test to verify all ObjectsTablePanel badges have a valid link.
- #8116 - Update navbar choices for icon and weight attributes to support the Nautobot Device Lifecycle App.
v3.0.0a3 (2025-10-29)¶
Added in v3.0.0a3¶
- #4499 - Added new Constance setting
DEVICE_UNIQUENESSto configure how Device instances are uniquely identified. - #4499 - Introduced a new Device Constraints management view accessible from the Data Validation Engine submenu. This endpoint allows staff users to configure device uniqueness and naming enforcement without accessing the generic Constance admin UI.
- #6422 - Added
tenantattribute toNamespace. - #7355 - Added VPN models.
- #7722 - Added
DataComplianceModelMixinand applied to base models. - #7722 - Added
DataComplianceModelMixintonautobot.apps.models. - #7927 - Added simplified dark theme to Swagger (
/api/docs/) and Redoc (/api/redoc/) views, without using Nautobot color palette, utilizing mostly CSSfilterproperty. - #7983 - Added tooltip with help text to column names in Approval Workflow Stage Definitions panel.
- #7989 - Implemented a centralized system for managing icons and weights in the navigation bar.
- #7989 - Added tests to ensure the navbar is is properly configured.
- #7997 - Added logic to
nautobot-migrate-bootstrap-v3-to-v5script to add missingclass="dropdown-item"to menu items. - #8034 - Added tooltip for details page timestamp below tabs to indicate type of timestamp: created or last updated.
Changed in v3.0.0a3¶
- #4499 - Device uniqueness enforcement has been moved from database-level constraints to application-level validation via custom validators.
- #7456 - Changed the default behavior of the REST API to exclude many-to-many fields (except for
tags,content_types, andobject_types) by default. - #7722 - Changed the Data Compliance tab to use a dynamic route pattern.
- #7856 - Stored JobLogEntry counts on JobResult for more efficient display of this information in list views.
- #7903 - Changed how App documentation is handled - it is now served via a dedicated endpoint whose access is restricted to authenticated users, replacing the previous static public serving.
- #7926 - Updated ECharts color palette.
- #7927 - Updated GraphiQL dark theme colors.
- #7944 - Increased default Bootstrap 5 breakpoints to narrow down view a little bit faster because of sidenav width.
- #7944 - Updated login page for better scaling on different screen sizes.
- #7944 - Changed forms behavior to wrap input below label on smaller screens.
- #7974 - Updated Nautobot icons.
- #7978 - Removed
logger.debug()call fromconstruct_cache_key()function as being too noisy. - #7982 - Changed the IPAM and circuit navigation icons.
- #7983 - Changed
prioritytoweight(where highest weight wins) in ApprovalWorkflowDefinition. - #7983 - Changed
weighttosequence(defines the order in which the stages take effect) in ApprovalWorkflowStageDefinition. - #7983 - Changed column name from "Min approvers" to "Minimum approvers".
- #7989 - Updated the recommended method for managing the
iconandweightattributes onNavMenuTab. - #8002 - Updated CSS filters and sidenav colors to the latest theme color palette.
- #8005 - Improved rendering of User profile page.
- #8008 - Changed the
DataCompliancemodel to not be change-logged and to not support custom fields (as it's not a user-editable model) and updated migrations accordingly. - #8011 - Changed buttons to be more consistent with placement of positive actions before negative actions.
- #8020 - Restored form-field label positions to once again be located below field inputs.
- #8021 - Changed various "radio-button-like" toggle elements in the UI to be self-consistently styled.
- #8028 - Default breadcrumbs are set to display list url on detail view only.
- #8028 - Instance detail item is removed from breadcrumbs path.
- #8029 - Globally replaced table native checkboxes with their Bootstrap
form-check-inputequivalents. - #8040 - Changed the label of the Collapse/Expand All buttons to specify they are for the groups rather than the panels.
- #8041 - Merged in latest content from Nautobot v2.4.21.
- #8044 - Moved "Custom Links" and "Job Buttons" to the left of the "default" action buttons on object detail view "main" tabs.
- #8044 - Changed default rendering of Component Framework
Buttonto only render on the "main" tab of object detail views.
Removed in v3.0.0a3¶
- #2850 - Removed many previously deprecated class aliases.
- #4499 - Removed database-level uniqueness constraints on Device (
location,tenant,name). - #4499 - Removed Constance setting
DEVICE_NAME_AS_NATURAL_KEY. - #8044 - Removed support for
block panel_buttonsin object detail view templates.
Fixed in v3.0.0a3¶
- #7924 - Standardized boolean fields on tables to use the default theme.
- #7936 - Fixed a class of circular-import issues by moving various FilterSet mixin classes from
nautobot.*.filters.mixinstonautobot.*.filter_mixinsmodules. - #7936 - Fixed suppression of circular-import issues when registering homepage and nav-menu items.
- #7945 - Fixed text color on badges with bg-secondary background.
- #7951 - Fixed various UI related bugs and inconsistencies with bootstrap 5 migration.
- #7975 - Fixed collapsing echarts.
- #7976 - Fixed wrapping on error pages, login page, bulk edit form.
- #7976 - Fixed col/offset not matching breakpoints - for example offset set for md but col set to lg.
- #7984 - Fixed DeviceUniquenessValidator by using
get_settings_or_configinstead ofgetattr. - #7985 - Fixed chart and table cards to no longer require two clicks to collapse.
- #7992 - Fixed bunch of CSS issues after UI v3 migration.
- #7993 - Added background colors to remaining badges.
- #7994 - Fixed colorless table rows.
- #7995 - Corrected missing/incorrect marking of various links and buttons as
disabledin appropriate contexts. - #7995 - Added
aria-disabled="true"attribute to various disabled links for improved accessibility. - #7997 - Added missing
class="dropdown-item"to various dropdown menu items. - #7997 - Fixed rendering of Custom Links and Job Buttons in Bootstrap 5.
- #8001 - Fixed collapsed sidenav icons invisible after selecting text.
- #8004 - Fixed display of related software images when editing a Device, Inventory Item, or Virtual Machine.
- #8006 - Removed "Advanced" tab from Change Log detail view.
- #8007 - Removed duplicated title/header text from various templates.
- #8013 - Fixed
d-nonebeing overridden by responsive display utility classes (e.g.d-md-flex), causing elements meant to be hidden to remain visible. - #8013 - Added the
requiredattribute to input fields(schedule_name,schedule_start_timeandrecurrence_custom_timewhen visible and applied thenb-requiredclass to their corresponding labels. - #8016 - Fixed Job Edit form layout and migrated its script to vanilla JavaScript.
- #8018 - Additional wrapping fixes to more templates.
- #8019 - Fixed rack elevation display in dark mode.
- #8020 - Fixed wrapping fields on narrow viewports.
- #8021 - Fixed incorrect logic in
django_querystringtemplatetag. - #8021 - Added missing
requestto the render context for rendering NautobotUIViewSet views. - #8021 - Added missing icons to various "Add components" menus for Device, Module, and ModuleType.
- #8021 - Added missing chevron when rendering grouped Custom Links or grouped Job Buttons.
- #8029 - Fixed job list and bulk edit styles.
- #8031 - Fixed missing background in second and subsequent columns in navbar flyouts in Safari.
- #8033 - Fixed form field behavior in Job edit form.
- #8034 - Fixed tooltips staying open after clicking the footer links or opening the theme modal.
- #8036 - Fixed some tests skipped in v3.
- #8044 - Fixed vertical misalignment of rendered Job Button and Custom Link grouped buttons.
- #8046 - Fixed marking menu item as active when adding to favorite.
- #8046 - Fixed redirect after deleting saved view.
- #8050 - Fixed some tests skipped in v3.
Documentation in v3.0.0a3¶
- #7934 - Prepare documentation for Version 3.0 release.
- #8052 - Added information to release-note about filter field changes from #1889 and their impacts.
Housekeeping in v3.0.0a3¶
- #7936 - Added
example_appandexample_app_with_view_overridetags to unit and integration tests that depend on these Apps. - #7936 - Added support for
--config-fileoption toinvoke testsand added alternative confignautobot/core/tests/nautobot_config_without_example_apps.pyto run tests without enabling the example Apps. - #7936 - Enhanced Nautobot test runner to automatically exclude tests tagged with
example_appand/orexample_app_with_view_overridewhen those Apps are not enabled. - #7948 - Disabled a flaky integration test that has been holding up merges and releases.
- #7979 - Increased timeout in integration test
click_navbar_entryto hopefully reduce spurious CI failures. - #7990 - Corrected static-docs test cases to correctly use
StaticLiveServerTestCasebase class. - #7990 - Added generated example-app docs to
.gitignore. - #7991 - Added a title to the login view.
- #8015 - Added
ssl-verify-server-cert=FALSEto MySQL/MariaDB dev environment configuration to avoid an exception when running tests locally. - #8044 - Updated some "example app" content to improve its compatibility with the Bootstrap 5 UI.
v3.0.0a2 (2025-10-07)¶
Note
v3.0.0a1 was inadvertently not published to PyPI and Docker image registries. v3.0.0a2 does not contain any changes to Nautobot code compared to v3.0.0a1, but should fix the publishing failure.
Housekeeping in v3.0.0a2¶
- #7928 - Enhanced
releaseGitHub Actions workflow to include prereleases and removed outdatedprereleaseworkflow.
v3.0.0a1 (2025-10-06)¶
Added in v3.0.0a1¶
- #1889 - Added
nautobot.apps.filters.ModelMultipleChoiceFilterfilterset filter class, which is a subclass ofdjango_filters.ModelMultipleChoiceFilterwith a few enhancements. This is now the default filter class for foreign-key, many-to-many, and one-to-one fields when defining a FilterSet withfields = '__all__'. - #6814 - Implemented base Nautobot Bootstrap 5 theme.
- #6866 - Migrated the Nautobot Data Validation Engine App into Nautobot Core.
- #6876 - Added
DataValidationFormMixinto indicate on the forms that fields are required due toRequiredValidationRuleset. - #6946 - Implemented v3 UI global footer.
- #6946 - Implemented v3 UI global header.
- #6947 - Implemented base v3 UI sidenav.
- #6999 - Added a data migration to update the
module_nameof jobs provided by Nautobot Data Validation Engine. - #7063 - Added initial Approval Workflow related models, UI, and API.
- #7068 - Added a possibility to set/unset navbar items as favorite and display them in separate navbar flyout.
- #7079 - Implemented v3 UI sidenav flyouts.
- #7117 - Added support for running Jobs under branches when the Nautobot Version Control app is installed.
- #7134 - Added support for job approvals via approval workflows.
- #7135 - Added state transition logic for Approval Workflow related models.
- #7136 - Added callbacks to called when a workflow has been initiated, approved or rejected.
- #7136 - Added
begin_approval_workflowtoApprovableModelMixinto can use it in save method of models which inherit fromApprovableModelMixin. - #7136 - Added ObjectManager with
find_for_modelmethod inApprovalWorkflowDefinition. - #7136 - Added ApprovalWorkflow table to
ScheduledJobView. - #7142 - Implemented tabs collapsing behavior.
- #7171 - Added data migration to copy existing Nautobot Data Validation Engine app data into the new core Data Validation tables.
- #7177 - Implemented Approval Workflow related UI.
- #7180 - Added Redis cache to
ValidationRule.objects.get_for_model()to improve performance of repeated lookups. - #7180 - Added
ValidationRule.objects.get_enabled_for_model()lookup method (with associated Redis cache for performance). - #7180 - Added
GitRepository.objects.get_for_provided_contents()lookup method (with associated Redis cache for performance). - #7186 - Added ARM64 build target for
nautobot-devimages undernextbranch CI. - #7203 - Added support for assigning a Device to more than one Cluster.
- #7203 - Added support for editing reverse many-to-many relations in bulk edit forms where applicable.
- #7226 - Added
configurabletable property to toggle table config button visibility. - #7239 - Added
prettieras JavaScript on demand source code formatter. - #7256 - Added new API actions under
api/extras/approval-workflow-stages/:approve,deny,commentand filterset parameterpending_my_approvalson the regular list endpoint. - #7256 - Added
users_that_already_deniedproperty toApprovalWorkflowStagemodel. - #7256 - Added
associated_approval_workflowsto theScheduledJobSerializeras a read-only list. - #7281 - Added missing flatpickr styles for both light and dark modes.
- #7301 - Added support for tables in cards, including collapsible cards.
- #7364 - Added pre-check migration (
extras.0125_approval_workflow_pre_check) to validate data consistency before removing theapproval_required flagfrom Job models. The migration aborts with a clear error message if any scheduled jobs still haveapproval_required=True. If any jobs (but not scheduled jobs) still have the flag set, a warning is printed advising to migrate them to the new approval workflow after the upgrade is completed. - #7411 - Implement v3 search UI.
- #7415 - Added
hide_in_diff_viewflag to hideObjectChange,JobLogEntryandJobResultdiffs in version control app. - #7415 - Marked users app as not version controlled -
is_version_controlled=False. - #7474 - Added the
runnableproperty to the ScheduledJob model. - #7474 - Added the
has_approval_workflow_definitionmethod to the ScheduledJob model. - #7474 - Added support for custom approval templates via a new
get_approval_template()method on models ScheduledJob. This allows objects to override the default approval UI when specific conditions are met (e.g. one-off jobs scheduled in the past). - #7538 - Improved Select2 styling and implemented Multi-badge component.
- #7642 - Added Advanced filters tab indicator that it contains some filters visible only in there.
- #7668 - Added Approval Workflow documentation.
- #7668 - Added User Groups documentation.
- #7697 - Created a small internal Nautobot icon library.
- #7718 - Added more icons to
nautobot-iconslibrary:refresh-cw,sliders-vertandsliders-vert-2. - #7726 - Added EChartsBase class. Base definition for an ECharts chart (no rendering logic). This class transforms input data, applies theme colors, and generates a valid ECharts option config.
- #7726 - Added
render_echartas templatetags. - #7726 - Added EChartsPanel class, thank to that ECharts can be used in UI Component.
- #7736 - Implemented sidenav branch picker for version control app.
- #7741 - Added
nautobot.apps.utils.construct_cache_key()function for consistent construction of Redis cache keys. - #7741 - Added awareness of Version Control active branch to various Redis caches.
- #7837 - Persist sidenav state in cookies and browser local storage.
- #7839 - Added
block job_form_wrapperto provide additional customization on Custom Job Forms. - #7842 - Added
CanceledApproval Workflow State. - #7842 - Added
nautobot.apps.choices.ApprovalWorkflowStateChoices. - #7895 - Added
ObjectApprovalWorkflowViewtonautobot.apps.views. - #7902 - Added
nautobot-migrate-bootstrap-v3-to-v5helper script that can be run by Apps to streamline their migration to Bootstrap v5.x for Nautobot v3.x compatibility. - #7902 - Added additional DjLint rules to flag various cases where HTML templates had not yet been migrated to Bootstrap v5.x compatibility.
Changed in v3.0.0a1¶
- #1889 - Changed default handling in Nautobot filterset classes (
BaseFilterSetand subclasses) for foreign-key and one-to-one fields such that they now default to generating a multi-value filter instead of a single-value filter. This may impact the definition of filter-based Dynamic Groups and of Object Permissions that were making use of single-value filters. - #1889 - Changed
NaturalKeyOrPKMultipleChoiceFilterand its subclasses to inherit from Nautobot's newModelMultipleChoiceFilterclass. The primary effect of this change is that the autogenerated label for such filters will be more descriptive. - #5745 - Upgraded the GraphiQL UI from version 1.x to version 2.4.7, including application of Nautobot UI colors to GraphiQL.
- #5745 - Changed the return type for the
execute_queryandexecute_saved_queryGraphQL-related Python APIs as a consequence of updating the underlying GraphQL libraries. - #6815 - Updated UI component-based detail views to Bootstrap 5.
- #6874 - Increased
namefields' length to 255 for RegularExpressionValidationRule, MinMaxValidationRule, RequiredValidationRule, and UniqueValidationRule. - #6874 - Specified a Generic Relation from BaseModel class to DataCompliance class so that if an object is deleted, its associated data compliance objects will also be deleted.
- #7134 - Changed
postmethod inJobRunViewto support job approvals via approval workflows. - #7134 - Changed
postmethod inJobViewSetBaseto support job approvals via approval workflows. - #7134 - Added
approval_workflowparameter toon_workflow_approved,on_workflow_initiatedandon_workflow_deniedmethods. - #7134 - Changed
ScheduledJob.on_workflow_initiatedby adding setapproval_required = Truewhen workflow was initiated. - #7134 - Changed
ScheduledJob.on_workflow_approvedby adding setapproved_atand publishing an approval event when workflow was approved. - #7134 - Changed
ScheduledJob.create_schedulemethod to accept an additionalvalidated_saveargument, allowing the option to skip saving the scheduled job object to the database. - #7171 - Renamed the new
nautobot.nautobot_data_validation_engineapp tonautobot.data_validation. - #7171 - Regenerated the database schema migrations for
nautobot.data_validationmodels. - #7183 - Migrate generic object list view to Bootstrap 5.
- #7203 - Removed bespoke "Add Devices to Cluster" and "Remove Devices from Cluster" forms/views and added this functionality into the base Cluster edit and bulk-edit forms/views.
- #7209 - Move filter form modal to flyout.
- #7226 - Moved table config button from top buttons row to table header and table config form from modal to drawer.
- #7227 - Migrated Saved Views dropdown menu to drawer.
- #7239 - Replaced
yarnwithnpm. - #7256 - The
approved_atfield fromextras.ScheduleJobmodel has been changed todecision_date. - #7276 - Moved table action buttons to dropdown menus.
- #7276 - Updated all table action button templates to render as dropdown items rather than flat structure buttons.
- #7316 - Make Approval Workflow's active stage clearer in the UI.
- #7333 - Migrated homepage to Bootstrap 5.
- #7333 - Abstracted out draggable API to a generic and reusable form.
- #7465 - Move all form buttons to sticky footers.
- #7474 - Simplified
runnableproperty logic in the Job model: removed check forhas_sensitive_variables andapproval_required. Now only depends onenabledandinstalledflags. - #7474 - Changed the
postmethod inJobRunViewand therunaction inJobViewSetBaseto check for an approval workflow on the scheduled job instead of usingapproval_required. - #7474 - Changed
extras/job_approval_confirmation.htmlto overrideextras/approval_workflow/approve.htmlfor ScheduledJob instances that meet specific conditions, displaying a warning when the job is past its scheduled start time. - #7486 - Changed Prefix table behavior to not show "utilization" by default, as it has significant performance impact when displayed.
- #7521 - Updated tabs injected via
{% block extra_tab_content %}and tabs generated from plugin to match Bootstrap 5 design. - #7521 - Updated
switch_tabfunction in integration tests to work with tabs hiding mechanism. - #7525 - Genericize and standardize the way "Collapse/Expand All" buttons work in the app using data-nb-toggle="collapse-all" data attribute.
- #7551 - Implement v3 UI design in table filters drawer Basic tab. Refactor some of the existing Select2 forms code.
- #7587 - Implemented v3 table advanced filter form,
- #7602 - Prefixed following classes with
nb-*:table-headings,description,style-lineandsidenav-*. - #7619 - Implemented saved view form new look and feel.
- #7635 - Fix sidenav and drawer height to viewport instead of an entire page.
- #7673 - Updated table config drawer.
- #7679 - Migrated unauthenticated pages to Bootstrap 5.
- #7738 - Use Nautobot standard layout (header, sidenav, footer) in special views (Admin, GraphiQL, DRF API docs, Swagger and Redoc).
- #7741 - Changed a number of Redis cache keys to be more standardized.
- #7800 - Separate
page_titleblock frombreadcrumbsin base Django templates. - #7823 - Updated titles and breadcrumbs for new views with added header like API Docs, GraphiQL, template renderer and user settings.
- #7832 - Improved active nav menu items determination logic and moved it from template to context processor.
- #7832 - Changed Scheduled Jobs URL path from
/extras/jobs/scheduled-jobs/to/extras/scheduled-jobs/. - #7832 - Restricted nav menu to highlight only one active item at a time.
- #7842 - The
has_approval_workflow_definitionmethod has been moved toApprovableModelMixinfromScheduledJobso that it can be used by any model that will be handled by the approval process. - #7842 - Replaced
APPROVAL_WORKFLOW_MODELSconstant withFeatureQueryandpopulate_model_features_registry. - #7842 - Changed rendering Approval Workflow tab in ScheduledJob; now renders only when the scheduled job has any associated approval workflows.
- #7842 - Flagged Approval Workflows and their various sub-models as non-versionable.
- #7872 - Improved Dropdown and Select2 highlighted items visibility.
- #7892 - Removed unnecessary and error-prone cache logic from the
PathEndpoint.connected_endpointproperty. - #7898 - Updated Nautobot theme, most notably dark theme color palette and navbar spacings and colors.
- #7902 - Ran
nautobot-migrate-bootstrap-v3-to-v5against all core HTML templates to auto-migrate many remaining Bootstrap 3 CSS classes and HTML structure to Bootstrap 5 equivalents, as well as identifying various CSS/HTML that needed manual updates. - #7902 - Ran updated DjLint rules against all core HTML templates and manually addressed any identified issues not already covered by the
nautobot-migrate-bootstrap-v3-to-v5script. - #7904 - Refined page header and tree hierarchy UI.
Removed in v3.0.0a1¶
- #6874 - Removed unused job
DeleteOrphanedDataComplianceData. - #7136 - Removed
ApprovableModelMixininheritance from Job. - #7136 - Removed job from
APPROVAL_WORKFLOW_MODELS. - #7136 - Removed ApprovalWorkflow table from
JobView. - #7180 - Removed
wrap_model_clean_methodsandcustom_validator_cleanmethods from thenautobot.appsnamespace as they should only ever be called by Nautobot itself as part of system startup. - #7203 - Removed
clusterfield from Device REST API serializer.clustersis available as a read-only field, and assignment of Devices to Clusters via the REST API is now possible via/api/dcim/device-cluster-assignments/. - #7226 - Removed
table_config_button_smallDjango template tag. - #7256 - Removed actions from
api/extras/scheduled-job/: approve, deny - #7256 - Removed
approved_by_userfield fromextras.ScheduleJobmodel. Now this information is stored inApprovalWorkflowStageResponsemodel. - #7411 - Remove v2 search.
- #7474 - Removed
approval_requiredandapproval_required_overrideflags from the Job model and base implementation class. - #7474 - Removed the
validatemethod fromJobSerializerthat checkedapproval_requiredagainsthas_sensitive_variables. - #7474 - Removed logic from the
cleanmethod in the Job model that validatedapproval_requiredagainsthas_sensitive_variables. - #7474 - Removed HTML code related to the
approval_requiredfield. - #7474 - Removed
ScheduledJobApprovalQueueListViewandJobApprovalRequestViewwith all relevant files, methods and tests. - #7525 - Removed
accordion-toggleandaccordion-toggle-alllegacy CSS classes. - #7538 - Removed legacy CSS classes:
filter-container,display-inline,filter-selection,filter-selection-choice,filter-selection-choice-remove,filter-selection-renderedandremove-filter-param. - #7842 - Removed job specific fields from
ObjectApprovalWorkflowView.
Fixed in v3.0.0a1¶
- #7117 - Fixed an exception when rendering Nautobot Version Control app diffs that include GitRepository or JobResult records.
- #7131 - Fixed Graphene v3 handling of
descriptionfilters. - #7131 - Restored GraphQL
_typefilters (as aliases oftypefilters) to preserve backwards compatibility with Nautobot v2.x. - #7134 - Resolved an issue where approval workflows were not correctly fetched due to querying the wrong relationship (
approval_workflow_instancesinstead ofassociated_approval_workflows). - #7134 - Fixed approvalworkflowdefinition_update templates.
- #7171 - Added handling for the ContactAssociation, MetadataType, ObjectMetadata, and Role models to
nautobot.core.utils.migration.migrate_content_type_references_to_new_model. - #7171 - Renamed the data-validation model database tables to fit within identifier length limits in Dolt and MySQL.
- #7171 - Fixed missing "Data Compliance" tab on relevant models.
- #7180 - Fixed an issue in which data-validation-engine checks would incorrectly run repeatedly when calling model
clean(), causing significant performance degradation. - #7180 - Changed data-validation-engine
BaseValidator.clean()implementation to use cacheable lookup APIs, improving performance of repeated modelclean()calls. - #7259 - Fixed not working JavaScript build by converting webpack config from CJS to ESM.
- #7261 - Fixed JS imports causing Webpack build failures.
- #7434 - Fixed Prefix tabs to properly render without HTTP 500.
- #7434 - Fixed module bays details to properly render title and breadcrumbs.
- #7474 - Fixed dryrun functionality in post method of JobRunView.
- #7480 - Fixed draggable homepage panels on Firefox.
- #7524 - Fixed broken theme preview page.
- #7525 - Fixed job list view not rendering jobs.
- #7563 - Fixed
data_validation.0002migration to handle a schema difference between the latest Data Validation Engine App and the version in Nautobot core. - #7652 - Fixed missing "Created/Updated" and action buttons on object detail views.
- #7653 - Fixed main tab sometimes incorrectly displayed as active in detail view.
- #7658 - Fixed a bug in CSV rendering of VarbinaryIPField values on Dolt.
- #7658 - Fixed a bug in
settings.pywhen usingNAUTOBOT_DB_ENGINE=django_prometheus.db.backends.mysql. - #7658 - Fixed a bug in Git repository refreshing where a data failure was not correctly detected under Dolt.
- #7658 - Fixed a bug in
get_celery_queues()caching. - #7659 - Fixed rendering of progress bars under 30%.
- #7660 - Fixed a rendering error in
/ipam/prefixes/<uuid>/prefixes/child-prefixes view. - #7707 - Fixed bug with Job Execution card always fully visible in Run Job form.
- #7713 - Fixed broken banner styles.
- #7719 - Fixed theme preview example layouts and components.
- #7721 - Fixed an issue where the current tab was not highlighted as active.
- #7740 - Fixed bug with invalid reference to Nautobot version control branch list URL.
- #7839 - Fixed Import Objects form by using
job_form_wrapperand tabs on the card-header. - #7843 - Fixed white background flash during page load in system dark color mode.
- #7881 - Fixed image rendering in echarts and approval workflow md files.
- #7894 - Fixed HTML rendering of numbered lists in the approval workflow documentation.
- #7896 - Fixed missing action button left border in case when there is only one action button.
- #7897 - Fixed non clickable interactive elements in collapsible card headers.
- #7912 - Hid sidenav tabs and groups with no items.
Dependencies in v3.0.0a1¶
- #4769 - Updated GraphiQL UI to version 2.4.7 (the version supported by
graphene-django3.2.0). - #5745 - Updated dependencies
graphene-djangoto~3.2.3andgraphene-django-optimizerto~0.10.0. - #7186 - Updated
netutilsminimum version to 1.12.0 as older versions do not support Python 3.13. - #7200 - Dropped support for Python 3.9. Python 3.10 is now the minimum version required by Nautobot.
- #7200 - Added support for Python 3.13. Python 3.13 is now the maximum version required by Nautobot.
- #7208 - Updated
select2dependency to v4.0.13. - #7208 - Added
select2-bootstrap-5-themedependency to makeselect2work withBootstrap5 - #7431 - Updated dependency
celeryto~5.5.3. - #7431 - Removed direct dependency on
kombuas the newer version ofceleryincludes an appropriate dependency. - #7675 - Replaced
mime-supportwithmedia-typesin Dockerfile dependencies. Themime-supportpackage is no longer available in newer Debian-basedpython:slimimages (starting with Debian 13 "Trixie"). For the same reason, thexmlsecdependency was upgraded to version1.3.16to ensure compatibility with the updated build environment. - #7680 - Added dependency on
htmxnpm package. - #7680 - Removed
django-htmxfrom the Python dependencies. - #7726 - Added dependency on
echartsnpm package.
Documentation in v3.0.0a1¶
- #7306 - Create v2.x to v3.0 UI migration guide.
- #7716 - Added docs to communicate about configurable columns performance impact.
- #7726 - Added documentation about new feature ECharts.
- #7730 - Added Involving Scheduled Job Approval example to Approval Workflow documentation.
- #7741 - Corrected formatting of autogenerated docs for various items in
nautobot.apps. - #7811 - Document UI best practices.
- #7891 - Fixed a dead link to the Django documentation.
- #7899 - Documented additional HTML changes needed in forms when migrating to Nautobot v3 and Bootstrap 5.
Housekeeping in v3.0.0a1¶
- #1889 - Removed explicit
labeldeclarations from many filterset filters where the enhanced automatic labeling should suffice. - #6874 - Refactored Nautobot Data Validation Engine code.
- #7180 - Added
--print-sqloption toinvoke nbshell. - #7449 - Fixed CI failures after the merge of #7433.
- #7474 - Cleaned up legacy logic and tests related to deprecated approval flags.
- #7497 - Migrate base.css and dark.css files with existing Nautobot styles into new packaging.
- #7505 - Added "npm" manager to Renovate configuration.
- #7523 - Added
docker-compose.dolt.ymland supporting files to enable local development and testing against a Dolt database. - #7630 - Added
ui-build-checkstep to pull request and integration CI workflows to check UI src and dist files validity and integrity. - #7652 - Added
test_has_timestamps_and_buttonsgeneric test case toGetObjectViewTestCasebase test class. - #7657 - Lint JS code.
- #7658 - Refactored Dolt development
Dockerfile-doltanddocker-compose.dolt.yml. - #7658 - Updated Dolt version in development environment to 1.58.2.
- #7658 - Removed the
doltdb_stucktag from test cases previously failing under Dolt. - #7658 - Updated test and subtest definitions in
nautobot/dcim/tests/test_filters.pyfor clarity and efficiency. - #7658 - Fixed an intermittent test failure in
nautobot.extras.tests.test_filters.ObjectMetadataTestCase. - #7659 - Added UI rebuild and tooling to development Docker Compose for developer convenience.
- #7726 - Updated example app to use related manager names.
- #7726 - Updated
UI_COLORSnames to match values in colors.scss. - #7739 - Add
0.3125rem(5px) spacer. - #7773 - Updated development dependency
coverageto~7.10.6. - #7785 - Added
invokecommands and renamed existingnpmcommands for frontend development. - #7799 - Fix broken
ui-build-checkCI job. - #7884 - Added legacy button templates usage check to action buttons presence unit test on detail view page.
- #7885 - Removed documentation dependency
mkdocs-include-markdown-pluginas older versions have a security vulnerability and Nautobot core hasn't actually needed this dependency since v2.0. - #7911 - Moved UI source files out of
project-staticto its own dedicateduidirectory.