diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml
index 80810f2ba..9ed740fff 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yaml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yaml
@@ -14,7 +14,7 @@ body:
attributes:
label: NetBox version
description: What version of NetBox are you currently running?
- placeholder: v3.4.3
+ placeholder: v3.4.4
validations:
required: true
- type: dropdown
diff --git a/.github/ISSUE_TEMPLATE/feature_request.yaml b/.github/ISSUE_TEMPLATE/feature_request.yaml
index 975fc025a..8e4ab54a5 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.yaml
+++ b/.github/ISSUE_TEMPLATE/feature_request.yaml
@@ -14,7 +14,7 @@ body:
attributes:
label: NetBox version
description: What version of NetBox are you currently running?
- placeholder: v3.4.3
+ placeholder: v3.4.4
validations:
required: true
- type: dropdown
diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml
index ab259af2a..3b37aae56 100644
--- a/.github/workflows/stale.yml
+++ b/.github/workflows/stale.yml
@@ -24,7 +24,7 @@ jobs:
necessary.
close-pr-message: >
This PR has been automatically closed due to lack of activity.
- days-before-stale: 60
+ days-before-stale: 90
days-before-close: 30
exempt-issue-labels: 'status: accepted,status: blocked,status: needs milestone'
operations-per-run: 100
diff --git a/README.md b/README.md
index e14f31b56..053aa8461 100644
--- a/README.md
+++ b/README.md
@@ -1,71 +1,59 @@
+
+ The premiere source of truth powering network automation
+
+
NetBox is the leading solution for modeling and documenting modern networks. By
combining the traditional disciplines of IP address management (IPAM) and
datacenter infrastructure management (DCIM) with powerful APIs and extensions,
NetBox provides the ideal "source of truth" to power network automation.
-Available as open source software under the Apache 2.0 license, NetBox is
-employed by thousands of organizations around the world.
+Available as open source software under the Apache 2.0 license, NetBox serves
+as the cornerstone for network automation in thousands of organizations.
-
-
-[](https://github.com/netbox-community/netbox/commits)
-[](https://github.com/netbox-community/netbox/issues)
-[](https://github.com/netbox-community/netbox/pulls)
-[](https://github.com/netbox-community/netbox/graphs/contributors)
- Stats via [Repography](https://repography.com)
-
-## About NetBox
+* **Physical infrasucture:** Accurately model the physical world, from global regions down to individual racks of gear. Then connect everything - network, console, and power!
+* **Modern IPAM:** All the standard IPAM functionality you expect, plus VRF import/export tracking, VLAN management, and overlay support.
+* **Data circuits:** Confidently manage the delivery of crtical circuits from various service providers, modeled seamlessly alongside your own infrastructure.
+* **Power tracking:** Map the distribution of power from upstream sources to individual feeds and outlets.
+* **Organization:** Manage tenant and contact assignments natively.
+* **Powerful search:** Easily find anything you need using a single global search function.
+* **Comprehensive logging:** Leverage both automatic change logging and user-submitted journal entries to track your network's growth over time.
+* **Endless customization:** Custom fields, custom links, tags, export templates, custom validation, reports, scripts, and more!
+* **Flexible permissions:** An advanced permissions systems enables very flexible delegation of permissions.
+* **Integrations:** Easily connect NetBox to your other tooling via its REST & GraphQL APIs.
+* **Plugins:** Not finding what you need in the core application? Try one of many community plugins - or build your own!

-Myriad infrastructure components can be modeled in NetBox, including:
+## Getting Started
-* Hierarchical regions, site groups, sites, and locations
-* Racks, devices, and device components
-* Cables and wireless connections
-* Power distribution
-* Data circuits and providers
-* Virtual machines and clusters
-* IP prefixes, ranges, and addresses
-* VRFs and route targets
-* L2VPN and overlays
-* FHRP groups (VRRP, HSRP, etc.)
-* AS numbers
-* VLANs and scoped VLAN groups
-* Organizational tenants and contacts
+* Just want to explore? Check out [our public demo](https://demo.netbox.dev/) right now!
+* The [official documentation](https://docs.netbox.dev) offers a comprehensive introduction.
+* Choose your deployment: [self-hosted](https://github.com/netbox-community/netbox), [Docker](https://github.com/netbox-community/netbox-docker), or [NetBox Cloud](https://netboxlabs.com/netbox-cloud/).
+* Check out [our wiki](https://github.com/netbox-community/netbox/wiki/Community-Contributions) for even more projects to get the most out of NetBox!
-In addition to its extensive built-in models and functionality, NetBox can be
-customized and extended through the use of:
+## Get Involved
-* Custom fields
-* Custom links
-* Configuration contexts
-* Custom model validation rules
-* Reports
-* Custom scripts
-* Export templates
-* Conditional webhooks
-* Plugins
-* Single sign-on (SSO) authentication
-* NAPALM integration
-* Detailed change logging
+* Follow [@NetBoxOfficial](https://twitter.com/NetBoxOfficial) on Twitter!
+* Join the conversation on [the discussion forum](https://github.com/netbox-community/netbox/discussions) and [Slack](https://netdev.chat/)!
+* Already a power user? You can [suggest a feature](https://github.com/netbox-community/netbox/issues/new?assignees=&labels=type%3A+feature&template=feature_request.yaml) or [report a bug](https://github.com/netbox-community/netbox/issues/new?assignees=&labels=type%3A+bug&template=bug_report.yaml) on GitHub.
+* Contributions from the community are encouraged and appreciated! Check out our [contributing guide](CONTRIBUTING.md) to get started.
-NetBox also features a complete REST API as well as a GraphQL API for easily
-integrating with other tools and systems.
-
-The complete documentation for NetBox can be found at [docs.netbox.dev](https://docs.netbox.dev/).
-A public demo instance is available at [demo.netbox.dev](https://demo.netbox.dev).
-
-NetBox runs as a web application atop the [Django](https://www.djangoproject.com/)
-Python framework with a [PostgreSQL](https://www.postgresql.org/) database. For a
-complete list of requirements, see `requirements.txt`. The code is available
-[on GitHub](https://github.com/netbox-community/netbox).
+## Project Stats
+
+
[](https://netboxlabs.com)
@@ -76,34 +64,10 @@ complete list of requirements, see `requirements.txt`. The code is available
[](https://sentry.io)
[](https://metal.equinix.com)
-
- [](https://stellar.tech)
-### Discussion
-
-* [GitHub Discussions](https://github.com/netbox-community/netbox/discussions) - Discussion forum hosted by GitHub; ideal for Q&A and other structured discussions
-* [Slack](https://netdev.chat/) - Real-time chat hosted by the NetDev Community; best for unstructured discussion or just hanging out
-
-### Installation
-
-Please see [the documentation](https://docs.netbox.dev/) for
-instructions on installing NetBox. To upgrade NetBox, please download the
-[latest release](https://github.com/netbox-community/netbox/releases) and
-run `upgrade.sh`.
-
-### Providing Feedback
-
-The best platform for general feedback, assistance, and other discussion is our
-[GitHub discussions](https://github.com/netbox-community/netbox/discussions).
-To report a bug or request a specific feature, please open a GitHub issue using
-the [appropriate template](https://github.com/netbox-community/netbox/issues/new/choose).
-
-If you are interested in contributing to the development of NetBox, please read
-our [contributing guide](CONTRIBUTING.md) prior to beginning any work.
-
-### Screenshots
+## Screenshots
")
@@ -112,8 +76,3 @@ our [contributing guide](CONTRIBUTING.md) prior to beginning any work.


-
-### Related projects
-
-Please see [our wiki](https://github.com/netbox-community/netbox/wiki/Community-Contributions)
-for a list of relevant community projects.
diff --git a/base_requirements.txt b/base_requirements.txt
index af8646493..41cfb581f 100644
--- a/base_requirements.txt
+++ b/base_requirements.txt
@@ -1,6 +1,6 @@
# HTML sanitizer
# https://github.com/mozilla/bleach
-bleach
+bleach<6.0
# The Python web framework on which NetBox is built
# https://github.com/django/django
diff --git a/docs/administration/housekeeping.md b/docs/administration/housekeeping.md
index da1a5443b..fcc3aa04e 100644
--- a/docs/administration/housekeeping.md
+++ b/docs/administration/housekeeping.md
@@ -5,6 +5,7 @@ NetBox includes a `housekeeping` management command that should be run nightly.
* Clearing expired authentication sessions from the database
* Deleting changelog records older than the configured [retention time](../configuration/miscellaneous.md#changelog_retention)
* Deleting job result records older than the configured [retention time](../configuration/miscellaneous.md#jobresult_retention)
+* Check for new NetBox releases (if [`RELEASE_CHECK_URL`](../configuration/miscellaneous.md#release_check_url) is set)
This command can be invoked directly, or by using the shell script provided at `/opt/netbox/contrib/netbox-housekeeping.sh`. This script can be linked from your cron scheduler's daily jobs directory (e.g. `/etc/cron.daily`) or referenced directly within the cron configuration file.
diff --git a/docs/configuration/miscellaneous.md b/docs/configuration/miscellaneous.md
index 4eb090554..eac5d0a2f 100644
--- a/docs/configuration/miscellaneous.md
+++ b/docs/configuration/miscellaneous.md
@@ -69,6 +69,14 @@ By default, NetBox will permit users to create duplicate prefixes and IP address
---
+## FILE_UPLOAD_MAX_MEMORY_SIZE
+
+Default: 2621440 (i.e. 2.5 MB).
+
+The maximum size (in bytes) that an upload will be before it gets streamed to the file system. Changing this setting can be useful for example to be able to upload files bigger than 2.5MB to custom scripts for processing.
+
+---
+
## GRAPHQL_ENABLED
!!! tip "Dynamic Configuration Parameter"
diff --git a/docs/customization/custom-scripts.md b/docs/customization/custom-scripts.md
index 6c02d08a1..eb4a8626b 100644
--- a/docs/customization/custom-scripts.md
+++ b/docs/customization/custom-scripts.md
@@ -140,6 +140,19 @@ obj.full_clean()
obj.save()
```
+## Error handling
+
+Sometimes things go wrong and a script will run into an `Exception`. If that happens and an uncaught exception is raised by the custom script, the execution is aborted and a full stack trace is reported.
+
+Although this is helpful for debugging, in some situations it might be required to cleanly abort the execution of a custom script (e.g. because of invalid input data) and thereby make sure no changes are performed on the database. In this case the script can throw an `AbortScript` exception, which will prevent the stack trace from being reported, but still terminating the script's execution and reporting a given error message.
+
+```python
+from utilities.exceptions import AbortScript
+
+if some_error:
+ raise AbortScript("Some meaningful error message")
+```
+
## Variable Reference
### Default Options
diff --git a/docs/development/adding-models.md b/docs/development/adding-models.md
index aef11d666..7de897a97 100644
--- a/docs/development/adding-models.md
+++ b/docs/development/adding-models.md
@@ -54,15 +54,19 @@ Each model should have a corresponding FilterSet class defined. This is used to
Create a table class for the model in `tables.py` by subclassing `utilities.tables.BaseTable`. Under the table's `Meta` class, be sure to list both the fields and default columns.
-## 9. Create the object template
+## 9. Create a SearchIndex subclass
+
+If this model will be included in global search results, create a subclass of `netbox.search.SearchIndex` for it and specify the fields to be indexed.
+
+## 10. Create the object template
Create the HTML template for the object view. (The other views each typically employ a generic template.) This template should extend `generic/object.html`.
-## 10. Add the model to the navigation menu
+## 11. Add the model to the navigation menu
Add the relevant navigation menu items in `netbox/netbox/navigation/menu.py`.
-## 11. REST API components
+## 12. REST API components
Create the following for each model:
@@ -71,13 +75,13 @@ Create the following for each model:
* API view in `api/views.py`
* Endpoint route in `api/urls.py`
-## 12. GraphQL API components
+## 13. GraphQL API components
Create a Graphene object type for the model in `graphql/types.py` by subclassing the appropriate class from `netbox.graphql.types`.
Also extend the schema class defined in `graphql/schema.py` with the individual object and object list fields per the established convention.
-## 13. Add tests
+## 14. Add tests
Add tests for the following:
@@ -85,7 +89,7 @@ Add tests for the following:
* API views
* Filter sets
-## 14. Documentation
+## 15. Documentation
Create a new documentation page for the model in `docs/models//.md`. Include this file under the "features" documentation where appropriate.
diff --git a/docs/development/application-registry.md b/docs/development/application-registry.md
index c2f894711..fe2c08d56 100644
--- a/docs/development/application-registry.md
+++ b/docs/development/application-registry.md
@@ -8,6 +8,14 @@ The registry can be inspected by importing `registry` from `extras.registry`.
## Stores
+### `data_backends`
+
+A dictionary mapping data backend types to their respective classes. These are used to interact with [remote data sources](../models/core/datasource.md).
+
+### `denormalized_fields`
+
+Stores registration made using `netbox.denormalized.register()`. For each model, a list of related models and their field mappings is maintained to facilitate automatic updates.
+
### `model_features`
A dictionary of particular features (e.g. custom fields) mapped to the NetBox models which support them, arranged by app. For example:
@@ -20,38 +28,23 @@ A dictionary of particular features (e.g. custom fields) mapped to the NetBox mo
...
},
'webhooks': {
- ...
+ 'extras': ['configcontext', 'tag', ...],
+ 'dcim': ['site', 'rack', 'devicetype', ...],
},
...
}
```
-### `plugin_menu_items`
+Supported model features are listed in the [features matrix](./models.md#features-matrix).
-Navigation menu items provided by NetBox plugins. Each plugin is registered as a key with the list of menu items it provides. An example:
+### `plugins`
-```python
-{
- 'Plugin A': (
-