⚠ !!! WARNING This second beta version of Infrahub v1.5.0 does not support upgrading an existing database yet. It is supposed to be used for testing purposes only, starting from an empty database !!!
Main changes
Convert between object types
You can now convert an object from one schema type to another without recreating it. This is especially useful when evolving objects as their type changes—for example, transforming a Layer 2 interface into a Layer 3 interface on a device.
Conversion of object type is available via: GraphQL API, Infrahub Python SDK and the Web interface
To streamline conversions, Infrahub proposes a field mapping that aligns attributes and relationships from the source type to the destination type. You can review and adjust the suggestions and provide values for any fields where no suggestion is available.
The following query has been added to the GraphQL API:
FieldsMappingTypeConversion
returns suggested mapping between source and destination types
The following mutations have been added to the GraphQL API:
ConvertObjectType
converts an object using the provided mapping
The following methods have been added to the Infrahub Python SDK:
convert_object_type
converts an object using the provided mapping

Refactor HFID of objects
We’ve refactored how HFIDs are handled internally to improve performance and scalability.
Previously, HFIDs were computed on-the-fly at read time and were not stored in the database. On objects with many relationships, this could lead to slower queries and higher CPU usage.
With this release, Infrahub now computes the HFID at write time (on create and update) and persists it in the database. Reads no longer need to derive HFIDs dynamically, resulting in faster object retrieval and more predictable query performance.
Refactor the display_labels of objects
We’ve modernized how object display labels are defined and resolved, adding support for templating and relationships.
Previously, display_labels were evaluated dynamically at read time, which impacted query performance at scale and prevented us from supporting relationships.
What’s new:
- Computed at write time: display_label is now computed on create/update and stored, improving read performance.
- Templating with Jinja2: define display_label using the same Jinja2 syntax available for computed attributes, including first-level relationships.
- Simple single-attribute shorthand remains supported, e.g.
attribute__value
- For multi-field labels, use Jinja2:
{{ relationship__attribute__value }}-{{ attribute__value }}
- Simple single-attribute shorthand remains supported, e.g.
Deprecation and migration:
- The display_labels property is deprecated in favor of display_label.
- Infrahub automatically migrates existing schema nodes:
display_labels: ["name__value"]
→display_label: name__value
display_labels: ["type__value", "name__value"]
→display_label: {{ type__value }} {{ name__value }}
You can review the result on each schema node’s detail page (Menu > Object Management > Schemas).
⚠ Required action after migration:
Update your schema files to use the new display_label property and remove deprecated display_labels after verifying the automatic migration.
Refactor profiles
Profiles have been reworked for performance and future flexibility.
Previously, attribute values derived from profiles were resolved dynamically at read time, which could impact performance at scale. With 1.5.0b0:
- Attribute values influenced by profiles are now computed and stored at write time (create/update object or profile).
- Reads no longer have to compute derived values, improving query performance and predictability.
- This refactor lays groundwork to expand profile capabilities, such as adding relationships to profiles in future versions of Infrahub.
Memory optimizations
We reduced the memory footprint of the GraphQL schema in multi-branch setups:
- Branches that use the exact same schema now share the same in-memory GraphQL schema.
- Individual GraphQL types can be shared across schema versions across branches where compatible.
This lowers memory consumption and improves runtime efficiency.
Webhook improvements
Aligned the format of custom webhooks with the schema of standard webhooks
The format of the event data that custom webhooks receive in a Python transform, is now aligned with the format of events in standard webhooks. This allows users of custom webhooks to have access to the same data as standard webhooks.
An example of the format of the event data:
{
'data': {
'kind': 'BuiltinTag',
'action': 'created',
'fields': ['name', 'description'],
'node_id': '1869ad37-fb84-8958-58d8-1746970be2f5',
'changelog': {
'node_id': '1869ad37-fb84-8958-58d8-1746970be2f5',
'node_kind': 'BuiltinTag',
'attributes': {
'name': {'kind': 'Text', 'name': 'name', 'value': 'Green', 'properties': {'is_visible': {'name': 'is_visible', 'value': True, 'value_type': 'Boolean', 'value_previous': None, 'value_update_status': 'added'}, 'is_protected': {'name': 'is_protected', 'value': False, 'value_type': 'Boolean', 'value_previous': None, 'value_update_status': 'added'}}, 'value_previous': None, 'value_update_status': 'added'},
'description': {'kind': 'Text', 'name': 'description', 'value': None, 'properties': {'is_visible': {'name': 'is_visible', 'value': True, 'value_type': 'Boolean', 'value_previous': None, 'value_update_status': 'added'}, 'is_protected': {'name': 'is_protected', 'value': False, 'value_type': 'Boolean', 'value_previous': None, 'value_update_status': 'added'}}, 'value_previous': None, 'value_update_status': 'unchanged'}
},
'display_label': 'Green',
'relationships': {}
}
},
'id': 'fe0172b4-8b69-4597-b0f5-17294de85882',
'branch': 'main',
'account_id': '1869ab9e-873b-1908-58d0-1746a8ed315d',
'occured_at': '2025-09-29 06:33:05.523563+00:00',
'event': 'infrahub.node.created'
}
⚠ !!! *WARNING this is a breaking change, existing Python transforms for custom webhooks will need to be adapted to handle this new format.
Artifact definition name has been added to the webhook payload for artifact events
For artifact events, the webhook payload now includes the artifact definition name.
Events affected:
infrahub.artifact.created
infrahub.artifact.updated
This makes it easier to interpret artifacts in downstream systems without additional API queries and simplifies integration with configuration deployment frameworks.
Web interface improvements
- Bulk select objects in list view — select multiple rows to apply bulk actions more efficiently.
- Better navigation for large diffs — improvements to the branch and proposed change diff views help you navigate big changes faster.
- Task list: direct access to related nodes — from each task, you can jump directly to the related nodes for quicker investigation.
SDK improvements
Version 1.5.0b0 of Infrahub requires the usage of infrahub-sdk version v1.15.0b0, which has been published to PyPi.
Diff based on timestamp
create_diff
— manually create a diff between two timestamps on a branch.get_diff_summary
now accepts start/end timestamps to retrieve that diff.
Object type conversion
new convert_object_type
method — converts an object to a different type using field mappings.
Clearing attribute/relationships of objects
You can clear the value of an optional attribute and a cardinality one relationship of an object via the SDK.
Support for object file range expansion
Object templates support range expansion on string attributes to generate multiple similar objects more easily (e.g., device interfaces).
Deprecations
Graphql mutations
IPPrefixPoolGetResource
and IPAddressPoolGetResource
have been deprecated in favor of InfrahubIPPrefixPoolGetResource
and InfrahubIPAddressPoolGetResource
. The deprecated mutations will be removed in a future release. Please update your integrations accordingly.
SDK
In the SDK client the raise_for_error
attribute has been deprecated for the following methods:
execute_graphql
query_gql_query
get_diff_summary
allocate_next_ip_address
allocate_next_ip_prefix
Migrate to try/except for handling errors raised by these methods. The deprecated attribute will be removed in a future release.
Full changelog
Added
- Clean up deadlocks at set intervals controlled by the
INFRAHUB_CACHE_CLEAN_UP_DEADLOCKS_INTERVAL_MINS
environment variable with a default value of15
mins (#1290) - Add
InfrahubRecomputeComputedAttribute
GraphQL mutation to trigger computed attribute re-computation on all nodes of a given kind or a subset of nodes given their IDs - Added the name of the artifact definition to the payload of artifact webhook events.
- Allow objects to be converted to another type by mapping fields or defining custom values.
- For attributes, values from the source object will appear in the target form when the attribute type matches between the source and target schemas.
- For dropdowns and enums, if the set of options is identical in both schemas, the selected source value will appear in the target form; otherwise, no value will be shown.
- For relationships, linked objects from the source will appear in the target form when the related object type matches between the source and target schemas.
- The login form now automatically focuses on the first field.
- Added a "Select All" checkbox on list views that selects all rows currently loaded on the page.
- Added ability to select multiple rows at once by holding Shift and clicking in list views.
Fixed
-
Consistent font size for all events in the Proposed Change timeline
-
Proposed Change action buttons now keep their size and does not strectch anymore
-
Prevent overflow on the create new relationship button within the relationship input
-
In a proposed change, within the diff tree, clicking the arrow now only expands/collapses the tree without also triggering the item itself (and vice versa).
-
Diff tree and list of changes can be scrolled separately
-
Bugfix to allow updating the node kind to null when creating or updating a webhook (#6397)
-
Breaking change: The format of the data payload has been corrected for transform based webhooks so that they are consistend with standard webhooks as well as custom webhooks (without an attached transform). Due to this change any transforms attached to a webhook needs to be updated to account for the new format. (#6815)
-
Correctly display XML and CSV artifacts in the UI.
-
Added a fallback to plain text for unsupported content types. (#7294)
-
Fixed issue with number pool popover stuck in the top-left corner and not expandable during the initial render in some cases.
-
Improved 401 in UI: parallel queries now share a single refresh token call instead of each triggering their own.
-
Prevent creation of relationships with state
absent
(#4302) -
Fix a bug that allowed duplicate attributes and/or relationships on Node or Generic schemas to be merged into the default branch,
which would cause the application and workers to crash with an error message similar to the following:
ValueError: SchemaName: Names of attributes and relationships must be unique : ['field_name_1', 'field_name_2']
Added a new CLI command
infrahub db check-duplicate-schema-fields
to resolve this duplicated schema fields issue if it appears. (#7346) -
Prevent creation of attributes with state
absent
(#7353) -
Prevent creation of nodes with state
absent
(#7354) -
Fixed an issue where boolean fields in the object Details view always displayed a checkmark, even when the value was false. (#7372)
-
Fixed prefix utilization showing as greater than 100% after setting the pool attribute to false (#7388)
-
Corrected the labels on the branch list and detailed view to use the correct terminology
Housekeeping
- Refactor Generator execution triggered by an action.