News¶
Incus 7.6 has been released¶
30.10.2026
The Incus team is pleased to announce the release of Incus 7.6!
Another busy release with a strong focus on performance and smoother operations for larger environments, but that doesn't mean that standalone deployments have been left behind either with a number of improvements and new features targeting those too!
As usual, you can try Incus for yourself online: https://linuxcontainers.org/incus/try-it/
Security fixes¶
This release fixes 18 security issues:
- GHSA-3wxw-5gh2-j2x2 (critical) - Container configuration injection through OCI image config and
oci.*keys - GHSA-5c64-j5m6-8433 (critical) - Restricted clients can create and access resources in the default project
- GHSA-5pgx-q9xx-j3qv (critical) - Restricted project users can read or overwrite host files through special files, hard links or symlinks in backup or image metadata
- GHSA-cwg9-8mc4-hf7j (critical) - Token operations exposed through the event stream and cancellable by any client
- GHSA-jcw9-v2ff-8m79 (critical) - Restricted project users can create resources in the default project, bypassing project isolation (host root via dnsmasq, host file read via mkfs)
- GHSA-p45f-gqqj-6qq3 (critical) - Path traversal through snapshot names in custom volume backups
- GHSA-q9fc-p923-6vp7 (critical) - Path traversal, crash and storage pool restriction bypass through dependent volumes in migration
- GHSA-xg75-xf37-cph9 (critical) - Authentication and authorization bypass through unverified client certificate chains
- GHSA-3rgf-297m-775x (high) - Local users can hijack VM NBD migration and disk-export sockets
- GHSA-8r3h-vc36-6xpx (high) - Restricted and view-only clients can read resources in the default project
- GHSA-9c46-v3hw-v6m8 (high) - Rebuilding a never-started container makes it boot without a user namespace, running as privileged
- GHSA-h2j8-4crh-vhfc (high) - Incus exposes migration websocket secrets to project event listeners, allowing migration hijack
- GHSA-v736-5xp3-jghf (high) - Guest API caller impersonation through a forged cgroup name
- GHSA-8mgx-h4v8-xqv2 (medium) - S3 listener buffers signed request bodies before authentication
- GHSA-9f75-5fjw-5jvv (medium) - Incus broadcasts OVN ACL log events with an empty project, leaking them across projects
- GHSA-f7xp-22ph-v444 (medium) - Incus guest-API image export ignores the guest's project, exposing other projects' images
- GHSA-pf5w-m8m6-5265 (medium) - Recursive and all-projects responses disclose other projects' bucket S3 keys and profile configuration to restricted clients (incomplete fix of GHSA-x8gj-2q73-qr6j)
- GHSA-x6pw-mh5w-pq73 (medium) - Denial of service via a null snapshot entry in an instance backup
New features¶
SR-IOV NIC live migration¶
Virtual machines using sriov NICs can now be live migrated between cluster members.
Two mechanisms are supported:
- A new
failoveroption on bothsriovnetworks and NICs takes the name of a bridge (managed or not). Incus then adds avirtio-netfailover NIC on that bridge alongside the SR-IOV VF, letting guests which supportvirtio-netfailover transparently switch to it during the migration before getting a VF back on the target. - A new
variantoption selects a VFIO variant driver (currentlymlx5formlx5_vfio_pci) which allows for native VFIO live migration of the VF itself.
Initial support for switchdev mode was also added, with Incus configuring the VF representors as needed and allowing VLANs to be used with such NICs.
stgraber@vorash:~$ incus network create sriov0 --type=sriov parent=enp5s0f0 failover=incusbr0
stgraber@vorash:~$ incus launch images:debian/13 v1 --vm --network sriov0
stgraber@vorash:~$ incus move v1 --target server02
Documentation: https://linuxcontainers.org/incus/docs/main/reference/network_sriov/
Faster virtual machine live migrations¶
Live migration of virtual machines now uses QEMU's multifd feature, transferring memory over multiple parallel channels and significantly improving throughput on fast networks.
The memory and state transfer rate can also be capped through the new instances.migration.bwlimit server option, which is useful on shared networks where a single migration shouldn't be allowed to consume all the available bandwidth.
stgraber@vorash:~$ incus config set instances.migration.bwlimit=500MiB
Block volume transfers through the generic migration transport (used when the source and target storage drivers differ, as well as by incus-migrate) are now compressed with lz4 when both sides support it.
Documentation: https://linuxcontainers.org/incus/docs/main/server_config/
Virtual machine I/O and memory performance¶
A number of changes improve the performance of virtual machines:
virtiodisks now run through a dedicated QEMU I/O thread, taking disk I/O off the main loop and improving both throughput and latency.- Virtual machines that don't need
virtiofs(nested virtualization withsecurity.nestingset totrue, stateful migration or hosts withoutvirtiofsd) are now started with regular memory rather than shared memory, allowing transparent huge pages to be used. This makes a very significant difference for nested virtualization. - Free page reporting is now enabled on the memory balloon, allowing the host to reclaim memory freed by the guest.
- Large
write-zeroesrequests from the guest are now split into smaller chunks so that disk I/O limits apply to them properly.
Documentation: https://linuxcontainers.org/incus/docs/main/explanation/performance_tuning/#virtual-machine-memory-allocation
Custom volumes can follow their instances¶
Custom storage volumes on local storage pools can now be set to move along with the virtual machine they're attached to when it's moved to another cluster member, through the new migration.follow_instance volume option.
This only applies to volumes attached to a single virtual machine.
stgraber@vorash:~$ incus storage volume set local data migration.follow_instance=true
stgraber@vorash:~$ incus move v1 --target server02
Documentation: https://linuxcontainers.org/incus/docs/main/howto/move_instances/
Trusting a certificate authority¶
A CA certificate can now be added to the trust store, in which case any client certificate issued by that CA is trusted as if the CA entry itself had been presented.
Such clients are identified by the fingerprint of the CA entry and inherit its type, restrictions and projects. This makes it easy to use short-lived certificates from an internal PKI without having to update the trust store on every renewal.
stgraber@vorash:~$ incus config trust add-certificate ca.crt --restricted --projects=dev
Documentation: https://linuxcontainers.org/incus/docs/main/authentication/#trusting-a-certificate-authority
OVN NIC security filtering¶
The security.mac_filtering, security.ipv4_filtering and security.ipv6_filtering options are now available on OVN NICs, matching what's available on bridged NICs.
They're implemented through OVN port security, restricting the source MAC address and, when IP filtering is enabled, the IP addresses (including any static routes) that the instance may use.
stgraber@vorash:~$ incus config device set c1 eth0 security.mac_filtering=true security.ipv4_filtering=true security.ipv6_filtering=true
Documentation: https://linuxcontainers.org/incus/docs/main/reference/devices_nic/#nic-ovn
OVN network re-parenting¶
The parent option of OVN networks, introduced in Incus 7.5, can now be changed on existing networks, moving the network from one logical router to another.
Address forwards, load balancers and the SNAT rules of NICs with external addresses are moved along to the new parent. Removing the parent turns the network back into a standalone network.
stgraber@vorash:~$ incus network set net2 parent=net3
Documentation: https://linuxcontainers.org/incus/docs/main/reference/network_ovn/#child-networks
NAT address with l2proxy ingress mode¶
The ipv4.nat.address and ipv6.nat.address options on OVN networks were previously limited to uplinks using ovn.ingress_mode=routed.
They're now also supported with the default l2proxy ingress mode, in which case the NAT address is advertised on the uplink through proxy ARP/NDP.
stgraber@vorash:~$ incus network set ovn0 ipv4.nat.address=203.0.113.10
Documentation: https://linuxcontainers.org/incus/docs/main/reference/network_ovn/
BGP communities¶
A new bgp.communities option on bridge and ovn networks takes a comma-separated list of standard BGP communities (ASN:value) which are attached to all the prefixes advertised by that network.
stgraber@vorash:~$ incus network set incusbr0 bgp.communities=65000:100,65000:200
Documentation: https://linuxcontainers.org/incus/docs/main/howto/network_bgp/
Load balancer lifecycle events¶
Network load balancers now emit network-load-balancer-created, network-load-balancer-updated and network-load-balancer-deleted lifecycle events.
On top of that, a network-load-balancer-health-changed event is sent whenever a load balancer goes healthy or unhealthy, including the status of each of its backends' service monitors.
Documentation: https://linuxcontainers.org/incus/docs/main/events/
Cluster healing delay¶
Cluster healing is commonly combined with external tooling that powers off the failed server through its BMC or PDU, to make sure it's not still accessing shared storage while its instances get restarted elsewhere.
To make that reliable, Incus now sends a new cluster-member-offline lifecycle event as soon as a member is detected as offline and a new cluster.healing_delay server option controls how long to wait before the evacuation actually begins.
stgraber@vorash:~$ incus config set cluster.healing_delay=60
Documentation: https://linuxcontainers.org/incus/docs/main/howto/cluster_manage/
TPM endorsement keys in instance state¶
When instances.tpm.platform_cert is set, Incus provisions new TPM devices with endorsement keys and certificates signed by the platform CA.
The public part of those endorsement keys is now exposed through the instance state (and shown in incus info), both as a SHA-256 fingerprint and as a PEM encoded public key, allowing an external attestation service to bind an endorsement key to a specific instance without accessing the guest.
stgraber@vorash:~$ incus query /1.0/instances/v1/state | jq .tpm
Documentation: https://linuxcontainers.org/incus/docs/main/reference/devices_tpm/#endorsement-keys
Disk I/O counters in instance state¶
The disk section of the instance state now includes a counters field for each disk, reporting bytes read and written along with the number of completed read and write operations.
This is currently only populated for virtual machines, using the block statistics reported by QEMU.
stgraber@vorash:~$ incus query /1.0/instances/v1/state | jq .disk
Boot priority improvements¶
The boot.priority option on NIC and disk devices can now be set to skip to exclude the device from the boot sequence of a virtual machine. NICs are now skipped by default, avoiding slow network boot attempts on every start.
A new boot.pxe instance option (defaulting to false) enables PXE on all the NICs that are part of the boot sequence. HTTP boot remains always enabled for those NICs.
stgraber@vorash:~$ incus config device set v1 eth0 boot.priority=10
stgraber@vorash:~$ incus config set v1 boot.pxe=true
Documentation: https://linuxcontainers.org/incus/docs/main/reference/devices_nic/
S3 backup target region¶
Instance and volume backups uploaded to an S3 compatible store can now be given a region, for stores whose region can't be derived from their URL.
Client certificate generation¶
The incus remote generate-certificate command now accepts --tls-cert and --tls-key to generate a separate client certificate and key at the chosen paths, as well as --encrypt to protect the newly generated private key with a passphrase.
stgraber@vorash:~$ incus remote generate-certificate --tls-cert ./my-client.crt --tls-key ./my-client.key --encrypt
stgraber@vorash:~$ incus remote add my-remote <token> --tls-cert ./my-client.crt --tls-key ./my-client.key
Documentation: https://linuxcontainers.org/incus/docs/main/remotes/#generate-a-client-certificate
Request details in the authorization scriptlet¶
The details argument passed to the authorization scriptlet now includes the request URL, Path, Query parameters and HTTP Method, allowing for much finer grained authorization decisions.
Documentation: https://linuxcontainers.org/incus/docs/main/authorization/#scriptlet
TLS JWT cookie login¶
Browser based clients can't set HTTP headers on WebSocket connections, which made it impossible for them to use TLS JWT tokens for things like the console or exec.
New /tls/login and /tls/logout endpoints now allow such clients to send the token once and have it stored in a Secure, HttpOnly cookie which is then accepted by all API endpoints and WebSocket connections until the token expires.
Documentation: https://linuxcontainers.org/incus/docs/main/authentication/
OIDC opaque access tokens¶
Incus now supports OIDC providers that issue opaque (non-JWT) access tokens.
In that case, Incus verifies the ID token instead, checking that it was issued by the configured issuer for the configured client ID. The incus client transparently sends the ID token alongside the opaque access token.
Documentation: https://linuxcontainers.org/incus/docs/main/authentication/#authentication-openid
Preliminary loongarch64 support¶
Incus can now run on loongarch64 systems, including preliminary support for virtual machines with the matching EDK2 firmware.
Documentation: https://linuxcontainers.org/incus/docs/main/architectures/
Complete changelog¶
Here is a complete list of all changes in this release:
Full commit list
- devcontainer: bump Go to 1.26
- incus/server/cluster/gateway: Export IsLeader function to determine cluster leader
- incus/server/lifecycle/network_load_balancer: Add NetworkLoadBalancerHealthChanged event
- shared/api: Add NetworkLoadBalancerHealthChanged event
- incus/server/state: Add IsLeader to clusterGateway interface
- incus/server/instance/drivers/qemu: dont interpret ErrNonReusuableSucceeded as error
- incus/server/instance/drivers/lxc: dont interpret ErrNonReusuableSucceeded as error
- doc: Move warning for macOS in howto/insntances_create
- incusd/instance/lxc: Use IsRootDiskDevice in diskState
- incusd/instance/qemu: Report disk usage for all disk devices in state
- incusd/instance: Resolve the custom volume project in diskState
- shared/tls: Add PublicKeyChain
- shared/tls: Add GetRemoteCertificates
- incusd/endpoints: Return the full certificate chain from NetworkPublicKey
- incusd: Sync the full cluster certificate chain from the leader
- tests: Cover joining with a cluster certificate chain
- incusd/mirror: Never follow symlinks in mirrored directories
- incusd/instance/qemu: Seed NVRAM from the real file rather than its symlink
- incusd/device/tpm: Refuse a state path that isn't a real directory
- incus/image: Sort properties in image info
- incusd/endpoints: Don't block the local accept loop on the STARTTLS peek
- incusd/networks: Fix start priority of networks with a parent
- tests: Make the sparse file test independent of the page size
- incusd/instance/qemu: Allow live-update of security.tags
- incus: Allow building for NetBSD
- Revert "goreleaser: Temporarily disable netbsd artifacts"
- Update gomod
- incusd: Allow the server certificate update over HTTPS
- incus/admin: Support remotes in update-certificate
- i18n: Update translation templates
- incusd/instance: Fix nil dereference in canMigrate on device load error
- incusd/instance: Only let a migration inherit its own lock when stopping
- incusd/instance: Wait for state changes before migrating
- incusd/instance: Don't fail a move on source cleanup errors
- incusd/instance/qmp: Add agent TEMPLATED status
- incusd/instance/qemu: Clear template state when the agent reports applying them
- incus-agent: Report template application before rebooting for cloud-init
- tests: Add VM cloud-init test
- github: Run the VM cloud-init test
- Translated using Weblate (Georgian)
- shared/api: Add disk I/O counters to instance state
- incusd/instance/qemu: Report disk I/O counters in instance state
- api: instance_state_disk_counters
- doc/rest-api: Refresh swagger YAML
- api: Add instances_state_tpm extension
- shared/api: Add TPM state to instance state
- incusd/device/tpm: Record and expose endorsement keys
- incusd/instance: Report TPM devices in instance state
- incus/info: Show TPM endorsement keys
- doc: Document TPM endorsement key exposure
- doc/rest-api: Refresh swagger YAML
- i18n: Update translation templates
- incusd/network/ovn: Allow changing a networks parent
- doc: Update OVN network parent documentation
- tests: Add OVN network reparenting tests
- incus/server/network/driver/ovn: Fire LoadBalancerHealthChanged event
- doc/events: Add loadbalancer lifecycle events to doc/events.md
- shared/logger: Add WarnOnErrorExcept to the Logger interface
- shared/resources: Fix double close of ethtool socket
- shared/resources: Base memory usage on MemAvailable
- client: Drop the context-free VM agent connection debug line
- incusd/cluster: Fix swapped CPU and memory usage in rebalance scoring
- incusd/cluster: Use the instance's project when rebalancing
- incusd/instance: Log placement scriptlet refusals
- incusd/instance: Only warn on unexpected metrics and state query errors
- incusd/instance: Remove devices before deleting the instance volume
- incusd/instance: Fix error messages altered by variable rename
- incusd/device/nic: Only warn on MTU lookup failures for existing host interfaces
- incusd/storage: Don't fail UnmountInstance on a volume still in use
- incusd/storage/zfs: Tolerate deleted datasets when filling the property cache
- incusd/images: Don't ignore move errors when importing a split image from a member
- incusd/images: Keep expired cached image files still used by other projects
- incusd/images: Return not found when exporting an image whose file is missing
- incusd/auth/openfga: Tolerate tuple conflicts during resource sync
- incusd/auth/openfga: Read tuples page by page when syncing resources
- doc/clustering: Document member count, latency and clock requirements
- incusd/network/ovn: Add UpdateLogicalSwitchPortSecurity
- incusd/network/ovn: Apply port security to instance ports
- incusd/device/nic_ovn: Add security filtering options
- api: Add ovn_nic_security_filtering extension
- doc: Update configs
- tests: Cover OVN NIC port security filtering
- incusd/network/ovn: Restrict the IC southbound monitor to used tables
- Translated using Weblate (Portuguese)
- incusd/storage/zfs: Only list snapshots when a snapshot is queried
- incusd/storage/zfs: Wait for snapshot device removal on unmount
- internal/server/db/cluster: Add certificate fetch statement
- internal/server/warnings: Add ClusterTx methods for warning resolution
- cmd/incusd: Implement go-cowsql transaction.DB with Node and Cluster
- internal/server/cluster: Add COWSQL cluster implementations
- internal/server/cluster: Update cluster package
- internal/server/db: Add wrapper for NodeInfo
- internal/server/state: Update other packages
- cmd/incusd: Update API packages
- cmd/incusd: Update joiner accept logic
- cmd/incusd: Update daemon
- shared/tls: Add CertInfo constructor
- internal/server/cluster: Update cluster package tests
- internal/server: Fix linter errors
- incusd/apparmor: Don't allow reading everything when LD_LIBRARY_PATH is unset
- incusd/network: Fix OVN network creation retries
- tests: Cover clustered OVN network creation retries
- github: Run the OVN cluster retry test
- internal/server/instance/driver/qemu: use hashed block node name when resizing
- Update go-cowsql dependency
- internal/server/db: Add RemoveNodeByName
- cmd/incusd: Set raft node name on join
- shared/logger: Add configurable slog wrapper
- cmd/incusd: Remove unused latency option
- cmd/incusd: Fetch and compare joiner server cert
- cmd/incusd: Skip cert refresh if still initializing
- shared/subprocess: Write pid files atomically
- shared/subprocess: Only signal the process that was recorded
- incusd/dnsmasq: Remove pid file after killing dnsmasq
- incusd/network: Use network config to detect dnsmasq use
- tests: Check stale dnsmasq.pid never signals other processes
- incusd/instance: Add HashName
- incusd/instance/qemu: Use instance.HashName
- incus-agent: Hash long virtiofs mount tags on hotplug
- incusd/auth/openfga: Don't hold online lock during requests
- incusd/auth/openfga: Return offline error from GetPermissionChecker
- incusd/instance/agent-loader: Make macOS agent drive non-browsable
- api: authorization_scriptlet_request
- incusd/auth: Expose request data to the authorization scriptlet
- doc: Add new fields to the authorization scriptlet
- tests: Fix race in OVN reparenting test
- incusd/instance: Add boot.pxe
- incusd/instances/qemu: Add fw_cfg configuration
- incusd/device/nic: Modify boot.priority handling
- incusd/device/disk: Modify boot.priority handling
- incusd/instance/qemu: Ignore skipped boot devices
- doc: Update configs
- api: vm_boot_priority_skip
- doc: Add PXE to wordlist
- incusd/network/ovn: Allow ipv4.nat.address and ipv6.nat.address under l2proxy ingress mode
- api: Add network_ovn_nat_address_l2proxy extension
- doc: Update configs
- tests: Add test for NAT addresses under l2proxy ingress mode
- doc/network_ovn: Mention how NAT addresses are advertised
- incusd/device: Add DiskVMVirtiofsSupported
- incusd/instance/qemu: Use non-shared memory when virtiofs isn't wanted
- incusd/instance: Document the memory allocation of nested virtual machines
- doc: Update configs
- doc: Explain virtual machine memory allocation
- tests: Check virtual machine memory allocation
- incusd/storage: Copy dependent volumes from snapshot when copying an instance snapshot
- tests: Check dependent volumes on copy from instance snapshot
- shared: Move ESLGUIDVar from util to uefi
- incus/low-level: Update ESLGUIDVar
- incusd/instance/qemu: Update ESLGUIDVar
- shared/util: Add Unix to Go mode converter
- shared/tls: Read the ACME certificate under the name lego writes
- incusd/cluster/config: Validate acme.domain
- doc: Update configs
- incusd/storage/s3: Return NoSuchKey for missing objects
- tests: Check missing bucket objects report NoSuchKey
- incusd/storage: Map dependent volumes to devices for snapshot sources
- incusd/storage: Copy dependent volumes from the instance snapshot
- tests: Check copying from a snapshot uses the dependent volume snapshots
- incusd/storage: Refresh dependent volumes from the instance snapshot
- incusd: Keep the target's dependent volumes when refreshing
- incusd: Point copied snapshots at the new dependent volumes
- incus/copy: Keep the target's dependent volumes and root disk on refresh
- incusd/network/ovs: Fix removing one of several OVN bridge mappings
- tests: Check OVN bridge mapping removal
- incusd/network: Report OVN child networks as users of their parent
- tests: Check a refused OVN parent delete keeps the gateway
- incusd/network/acl: Skip IP addresses when collecting referenced ACLs
- incusd/project: Strip restricted volatile keys from backup imports
- incusd: Allow backup imports into restricted projects
- tests: Check backup import into a restricted project
- incus-agent: Wait 10s for exec websockets to connect
- client: Connect exec websockets concurrently
- incusd/storage/s3: Parse xl.meta structurally when detecting inline data
- incusd/storage/s3: Log minio bucket migrations
- incusd/storage/s3: Skip already migrated objects
- incusd/storage/lvm: Run report commands in silent mode
- shared/api: Support 4-character permissions in ParseFileHeaders
- incus/utils: Implement chmod-style mode parser
- incus/utils: Prevent masking sticky and setXid bits
- incus/file: Use new mode parser
- incus/storage_volume_file: Use new mode parser
- incus/image: Make unset-property accept a list of properties
- incus/usage: Enforce non-emptiness of placeholders
- incus/utils_sftp: Fix non-UNIX fingerprinting
- i18n: Update translation templates
- incusd/network/ovn: Only update other_config on logical switch changes
- incusd/network/ovn: Tolerate a missing transit switch on remote peer delete
- incusd/network/ovn: Clean up external interfaces on delete
- tests: Check OVN external interface cleanup
- incusd/storage/lvm: Refuse logical volume names too long for device-mapper
- incusd/storage/lvm: Only remove the config repair directory once unmounted
- incusd/storage/lvm: Fix the backing chain of copied qcow2 volumes
- incusd/instance/qemu: Skip the disk size probe on remote cluster moves
- incusd/instance/qemu: Size backed overlays from their backing node
- incusd/auth/oidc: Verify the ID token when the access token is opaque
- client: Send the ID token alongside opaque access tokens
- api: Add oidc_id_token extension
- incusd/cluster/config: Clarify OIDC options with opaque access tokens
- doc: Update configs
- doc/authentication: Mention opaque OIDC access tokens
- mini-oidc: Add a device client issuing opaque access tokens
- tests: Check OIDC login with opaque access tokens
- Translated using Weblate (Portuguese)
- incusd: Revert interrupted evacuation states at startup
- incusd: Wait for backup uploads to complete
- incusd/storage_volumes_snapshot: Block direct rename of dependent volume snapshots
- incusd/storage: Rename dependent volume snapshots on instance snapshot rename
- tests: Check dependent volume snapshot rename
- Fix comment for defaultConsoleSpiceCommand
- cmd/incus: Fix recursive keepalive proxy startup
- shared/scriptlet: Don't panic on marshaling uuid.UUID and other non-addressable arrays
- incusd/network/acl: Skip address sets when collecting referenced ACLs
- tests: Check address set subjects in OVN ACL rules
- incusd/network/ovn: Restore the health check when reverting a load balancer update
- incusd/storage/lvm: Don't move the GPT alt header on qcow2 volumes
- incusd/storage: Move the GPT alt header inside qcow2 volumes on resize
- incusd/instance/qemu: Resize the active node of a qcow2 chain
- incusd: Don't leak the backup tarball writer on failure
- incusd/storage/zfs: Unmount stale snapshot mounts before deletion
- incusd/storage/zfs: Consider the filesystem dataset in HasVolume
- incusd/instance/qemu: Unmount snapshots through the snapshot path
- incusd: Clear stale snapshot mounts at startup
- incusd/storage: Get snapshot sizes without mounting on ZFS
- internal/server/storage: Avoid nested snapshot repair transactions
- incusd/auth/tls: Only grant metrics access to metrics certificates
- incusd/cluster/config: Document core.trust_ca_certificates behavior
- doc: Update configs
- doc/authentication: Document core.trust_ca_certificates
- internal/server/bgp: Preserve shared peer counts
- cmd/incus: Enable persistent hook traversal
- incusd/storage: Fix qcow2 volume size after live snapshot
- internal/server/db/query: Report canceled transactions
- test/clustering: Wait for returning member readiness
- incusd/acme: Forward HTTP-01 challenges from all cluster members
- doc/authentication: Mention HTTP-01 handling in clusters
- incusd/instance/qemu: Add preliminary loongarch64 support
- incusd/instance/edk2: Add preliminary loongarch64 support
- incusd/device/disk: Add loongarch64 support
- doc/architectures: Add loongarch64 support
- Add: Community-Scripts in third_party.md
- Add 'Proxmox' to the wordlist
- Add 'VE' to the wordlist
- oss-scanner: Add build and threat model for Anthropic's OSS Scanner
- incusd/storage: Compare snapshot creation dates at second precision
- tests: Check that a refresh back to the source is incremental
- incusd/storage: Use the virtual size of qcow2 volumes on copy and migration
- incusd: Use the virtual size of qcow2 volumes on storage volume migration
- test/mini-oidc: Fix port selection race
- Translated using Weblate (French)
- incusd/storage/drivers: Delete conflicting subvolume on btrfs refresh
- incusd/storage/drivers: Use a target-held snapshot as refresh parent
- api: Add certificate_ca_trust extension
- incusd/util: Add CheckTrustStateIssuer
- incusd: Trust certificates issued by a trusted CA certificate
- doc/authentication: Document CA trust entries
- tests: Cover CA trust entries
- tests: Wait for firmware state instead of fixed sleeps in nvram_vm
- tests: Wait for role to propagate on cluster rebalance
- Update gomod
- doc/rest-api: Refresh swagger YAML
- incusd/firewall/nftables: Skip UDP checksum rules in user namespaces
- incusd/instance/qemu: Use the custom volume content type on live move
- cmd/incusd: Use the environment_runtime_hooks extension
- incusd/instances/lxc: Use the environment_runtime_hooks extension
- lxc-to-incus: support environment_runtime_hooks
- internal/server/bgp/server: Don't error if removePrefixByUUID cant find uuid
- incusd/network/ovn: Keep changed uplink addresses on uplink change
- incusd/instance/qemu: Keep direct I/O on the metadata image data file
- tests: Add clustering test on nested virtual machines
- github: Add clustering VM job
- incusd/instance/qemu: Only export root and dependent disks over NBD
- incusd/instance: Update NBD endpoint description
- doc/rest-api: Refresh swagger YAML
- incus/low-level: Update NBD and bitmap help text
- i18n: Update translation templates
- incusd/instance/qemu: Add a metadata image to dependent disks
- incusd/instance/qemu: Support the metadata image on RBD
- tests: Check persistent bitmaps on dependent volumes
- incusd/project: Allow local images with restricted.images.servers
- tests: Cover local images with restricted.images.servers
- internal/server/network/driver/ovn: Fix routerExtPortIPs outside of transaction
- incus/admin: Use a plain signal channel in waitready (errcheck)
- incusd: Use a plain signal channel in waitready (errcheck)
- incusd/images: Use a plain signal channel for image sync (errcheck)
- incusd/instance/operationlock: Use a plain signal channel (errcheck)
- incusd/instance: Use a plain signal channel for console disconnection (errcheck)
- incusd/console: Log websocket mirror errors (errcheck)
- incus-agent: Log websocket mirror errors (errcheck)
- shared/ws: Add a helper to wait for a mirror to finish
- client: Wait for websocket mirrors through their done channel (errcheck)
- incus-migrate: Wait for websocket mirrors through their done channel (errcheck)
- lxc-to-incus: Wait for websocket mirrors through their done channel (errcheck)
- incusd/forkproxy: Report relay errors from both directions (errcheck)
- incusd/forkproxy: Close the unix relay channel on exit
- api: Add network_bgp_communities extension
- shared/validate: Add IsBGPCommunity
- internal/server/bgp: Add support for communities
- internal/server/network/bridge: Add bgp.communities
- internal/server/network/ovn: Add bgp.communities
- doc: Add BGP communities to the BGP how-to
- tests: Add test for BGP communities
- doc: Update configs
- CONTRIBUTING: generated files should get their own commits
- client: Expose ResolveUnixSocket with fallback to /var/lib/incus
- incusd/callhook: Use central socket resolution
- incusd/instances: Log the timeout when forcefully stopping at shutdown
- incusd/instances: Fall back to a regular shutdown when a stateful stop fails
- incusd/db: Move instance warnings with the instance on cluster move
- incusd/db/warnings: Add InstanceForcedStop
- incusd/warnings: Keep restart-surviving warnings on startup
- incusd: Record a warning when an instance is forcefully stopped
- tests: Check the forced stop warning
- incusd/storage/s3: Don't skip keys when following a continuation token
- incusd/storage/s3: Support marker in ListObjects
- incusd/storage/s3: Return the bucket name in object listings
- tests: Add storage bucket listing pagination test
- incusd/networks: Report networks whose driver fails to load as unavailable
- incusd: Clearer error when the OVN southbound address isn't set
- tests: Check OVN networks are listed when OVN is unreachable
- incusd/instance/lxc: Don't crash starting an OCI container without an ID map
- tests: Check starting a rebuilt OCI container that was never started
- incusd/storage: Support migrating a QCOW2 volume snapshot
- incusd/instance/drivers: Send dependent volume snapshots when migrating a snapshot
- tests: Check copying snapshots with a dependent volume across servers
- cmd/generate-database: context backed prepared stmts
- incusd/db: Update generated cluster db mappers
- incus/remote: Share event streams in the keepalive proxy
- incus/remote: Keep spare TLS connections in the keepalive proxy
- client: Tolerate a late control websocket on finished exec operations
- shared/cliconfig: Serialize keepalive proxy startup
- incus/remote: Don't start a proxy over a live socket
- tests: Add keepalive proxy test
- incusd/migration: Add block transfer features to the header
- incusd/migration: Update protobuf
- incusd/migration: Add block transfer feature helpers
- incusd/migration: Add helpers to compress block transfers
- Update gomod
- incusd/migration: Negotiate block transfer features
- incusd/storage: Build fresh dependent volume headers on the target
- incusd/migration: Remove the dependent volume header update helper
- incusd/storage: Ignore block features echoed by older targets
- incusd/storage: Offer compression for block transfers
- incusd/storage: Compress block transfers when negotiated
- incus-migrate: Compress block transfers when supported by the server
- tests: Check block volume copies through the generic transport
- oss-scanner: Note the capability-dependent test
- github: Tolerate a missing linux-modules-extra package
- github: Build LXC and LXCFS from source
- github: Move repeated steps into composite actions
- tests: Run VMs with non-shared memory
- incusd/storage/qcow2: Create images with lazy refcounts
- incusd/storage/qcow2: Add Qcow2EnableLazyRefcounts
- incusd/instance/qemu: Keep discarded qcow2 clusters allocated on block devices
- incusd/instance/qemu: Enable lazy refcounts on existing qcow2 volumes
- incusd/instance/qemu: Keep helper block node names apart from devices
- incusd/storage/qcow2: Create images with lazy refcounts
- incusd/instance/qemu: Encode device names in PCI, GPU and 9p identifiers
- incusd/storage/qcow2: Add Qcow2EnableLazyRefcounts
- incusd/device/usb: Encode the device name in the QEMU identifier
- incusd/instance/qemu: Keep discarded qcow2 clusters allocated on block devices
- incusd/instance/qemu: Enable lazy refcounts on existing qcow2 volumes
- incusd/instance: Scope device volatile keys to their device
- shared/validate: Add IsDeviceName
- incusd/instance: Restrict device names to QEMU identifier characters
- incusd/instance: Track device volatile keys in a map
- incusd/instance: Reject device names taking over another device's volatile keys
- doc: Document device name restrictions
- tests: Check device name handling
- api: Add instances_migration_bwlimit extension
- incusd/cluster/config: Add instances.migration.bwlimit
- incusd/instance/qemu: Apply the migration bandwidth limit
- doc: Update configs
- incusd/instance/qemu: Enable free page reporting on the balloon
- shared/cliconfig: Share client key decryption
- cmd/incus: Add certificate generation output paths
- cmd/incus: Support client key encryption
- cmd/incus: Support encrypted client key imports
- tests: Cover certificate generation and encrypted imports
- doc: Document certificate generation and encryption
- i18n: Update translation templates
- incusd/instance/qemu: Keep disk caching on qcow2 snapshot overlays
- incusd/instance/qemu: Write out the commit base when deleting a running qcow2 snapshot
- tests: Add lvmcluster snapshot and copy tests to clustering-vm
- client: Fall back to verification_uri for OIDC device login
- incus-agent: Stop the Windows service when the HTTP server fails
- internal/server/device/disk: don't block migration for emulated NVMe disks
- incusd/acme: Only forward genuine HTTP-01 challenge paths
- incusd/images: Keep replaced image files while another project uses them
- incusd/images: Remove old image files from members after a refresh
- tests: Check image files after a cluster image refresh
- api: Add backup_s3_region extension
- shared/api: Add region to backup targets
- incusd/backup: Use the backup target region
- doc/rest-api: Refresh swagger YAML
- incusd/netutils: Resolve veth peers with a targeted netlink lookup
- incusd/instance: Stop dumping the host links when rendering state
- incusd/networks: Stop dumping the host links for each network
- incusd/netutils: Only check the link dump for netns id awareness
- incusd/network: Properly account for the failover key
- incusd/project: Properly restrict the failover key
- api: nic_sriov_migration
- incusd/instance/config: Add volatile.
.failover.host_name - incusd/device/config: Add failover network interface support
- incusd/network/sriov: Add failover key and improve checks
- incusd/instance/qemu: Add QemuArchConfig
- incusd/device/nic_sriov: Implement failover bridge support
- doc: Update metadata
- incusd/instance/qemu: Remove unused argument in deviceAttachNIC
- incusd/instance/qemu: Implement SR-IOV NIC live migration
- incusd: Use /sys/class/net helpers
- incusd/device/infiniband: Use /sys/class/net helpers
- incusd/device/nic: Use /sys/class/net helpers
- incusd/network/physical: Use /sys/class/net helpers
- incusd/instance/lxc: Use /sys/class/net helpers
- incusd/migration: Add multifdChannels to the migration header
- incusd/migration: Update protobuf
- incusd/instance/qmp: Add unix socket migration channels
- incusd/migration: Allow extra connections on the state channel
- incusd/migration: Expose extra state connections to the instance drivers
- incusd/instance/qemu: Use multifd for live migration
- incus/console: Prevent splitting on socket path
- incusd/events: Don't log while holding the listener lock
- incusd/certificates: Accept a certificate along with a trust token
- doc/rest-api: Refresh swagger YAML
- tests: Fix and wire the remote token test
- tests: Cover trust token enrollment with a supplied certificate
- incusd/util: Accept the TLS JWT from a cookie
- api: auth_tls_jwt_cookie
- incusd: Add TLS JWT login and logout endpoints
- doc: Document the TLS JWT cookie login
- tests: Cover the TLS JWT cookie login
- incusd/instance: Add IsVMBootStateKey
- incusd/instance/qemu: Check received boot states against the limits
- incusd/project: Keep the VM boot state of stateful transfers
- incusd/instance: Keep the VM boot state when copying with state
- incusd/instance: Refresh the OCI entry point keys on rebuild
- tests: Check the OCI entry point follows the image across rebuilds
- incusd/storage/cephfs: Export volumes from a temporary snapshot
- tests: Cover cephfs volume export and import
- shared/api: Add the cluster-member-offline lifecycle event
- incusd/lifecycle: Add the cluster-member-offline action
- incusd/cluster/config: Add cluster.healing_delay
- api: cluster_healing_delay
- incusd/cluster: Announce offline members and wait before healing them
- doc: Update metadata
- doc/clustering: Document the healing delay and offline event
- tests: Cover the cluster healing delay
- api: Add storage_volume_migration_follow_instance extension
- incusd/storage: Add migration.follow_instance volume config key
- incusd/storage/btrfs: Document migration.follow_instance
- incusd/storage/dir: Document migration.follow_instance
- incusd/storage/lvm: Document migration.follow_instance
- incusd/storage/zfs: Document migration.follow_instance
- incusd/instance/qemu: Migrate following volumes like dependent ones
- incusd/device/disk: Validate volumes following their instance
- incusd: Delete following volumes from the source after a cluster move
- doc: Explain migration.follow_instance on instance moves
- doc: Update configs
- tests: Add tests for migration.follow_instance
- incusd/instance/qmp: Add block node dirty bitmap query
- incusd/instance/qemu: Fix bitmap listing during NBD exports
- incusd/instance/qmp: Drop unused block query
- incusd/instance/qmp: Match QEMU's quit shutdown reason
- incusd/instance/lxc: Restart from the stop hook on its own lock
- incusd/instance/qemu: Restart from the stop hook on its own lock
- incusd/instance/operationlock: Keep instance-initiated locks private
- incusd/instance/qemu: Find the QEMU process by UUID when the pid file is gone
- incusd/mirror: Only replicate deletions on the final sync
- incusd/network/ovn: Refresh load balancer BGP prefixes on update revert
- incusd/network/ovn: Refuse parent change on networks with peerings
- incusd/network/ovn: Refuse parent change with running l3only instances
- tests: Add test for OVN parent change with peerings
- incusd/network/ovn: Rebuild parent peerings on parent change
- incusd/network/ovn: Factor out forward and load balancer OVN apply
- incusd/network/ovn: Move forwards and load balancers on parent change
- incusd/network/ovn: Move NIC external address SNAT on parent change
- tests: Add test for OVN forwards and load balancers on parent change
- doc: Update OVN child network parent change
- incusd/device: Keep mount flags when remounting disks read-only
- incusd/cluster: Retry starting healed instances
- tests: Cover more snapshot deletes and stateful snapshots on lvmcluster
- incusd/instances: Copy running instances through their member
- tests: Copy a running instance across members on shared storage
- incus-simplestreams: Add --image-version
- incusd/migrate: Fix goroutine leak in controlChannel
- cmd/generate-database/db: Fix type parsing on go 1.27+
- incus-agent: Load configuration when running as a Windows service
- doc: Fix Windows incus-agent.yml path
- incusd/instance: Record the delete result in the operation lock
- incusd/instance/qemu: Don't mix metrics sources for a running VM
- incusd/storage/linstor: Clean up resource definitions on failed creates
- incusd/storage/linstor: Bound the controller dial timeout
- incusd/storage/linstor: Wait for replicas to sync before resizing
- incusd/storage/linstor: Apply drbd.* keys to pre-existing resource groups
- incusd/storage/linstor: Attach diskless replicas on non-autoplaceable nodes
- incusd/storage: Retry pool initialization every 15s
- incusd/instance/qmp: Wait on migration events on the target
- incusd/migration: Limit extra state connections to the negotiated count
- incusd/instance/qemu: Harden multifd migration sockets and fail on broken channels
- incusd/instance/qemu: Enable migration events on the target
- incusd/storage/btrfs: Skip quotas on ISO volumes
- api: nic_sriov_migration_native
- incusd/network/sriov: Add variant key
- incusd/device/nic: Allow specifying VFIO driver
- incusd/device/nic_sriov: Add variant key
- doc: Update metadata
- incusd/instance/qemu: Implement native VFIO migration
- doc: Add VFIO to wordlist
- incusd/device/nic_sriov: Only create failover bridge when VM is live-migratable
- incusd/network/sriov: Fix clearing failover key
- incus-simplestreams: Fix remove of a combined image next to split files
- incus-simplestreams: Fix remove when several products share the metadata
- simplestreams: Reject an empty fingerprint in GetImage
- Translated using Weblate (French)
- incusd/operations: Fix nil handler race in Connect
- incusd: Re-register disks when a storage pool initializes late
- incusd/storage/linstor: Drop inherited diskless members after a clone
- incusd/instance/qmp: Add GetIOThreads
- incusd/instance/qemu: Run virtio disks through an iothread
- incusd/instance/qemu: Cap guest write-zeroes requests
- incus/export: Randomize temporary name
- incus/storage_bucket: Randomize temporary export name
- incus/storage_volume: Randomize temporary export name
- test: Hardcode Microsoft db
- incusd/storage: Only look up qcow2 backing chains on block volumes
- incusd/storage/lvm: Restrict block.type to block volumes
- incusd/storage/lvm: Don't activate volumes just to resize them
- incusd/storage/lvm: Only treat VM filesystem volumes as qcow2 config volumes
- incusd/storage: Mount qcow2 volumes with their snapshots when resizing
- incusd/instance/config: Add representor and migratable volatile state keys
- incusd/device/nic: Support switchdev mode for SR-IOV NICs
- gomod: Replace vishvananda/netlink
- incusd/device/nic: Support setting migratable capability on SR-IOV VFs
- doc: Update metadata
- doc: Update wordlist
- internal/linux/nbd: Add an NBD client for kernel device attachment
- incusd/storage: Attach qemu-nbd exports through netlink
- incusd/storage: Keep qemu-nbd socket paths short
- incusd/storage: Flush NBD devices before disconnecting
- incusd/instance/lxc: Reject line breaks in LXC config values
- incusd/instance/lxc: Only parse config.json for OCI containers
- incusd/instance/lxc: Keep loader variables out of the forklxc environment
- incusd/dev_incus: Anchor the cgroup based monitor detection
- incusd: Check resource creation against the effective project
- incusd/auth/tls: Restrict inherited reads to the certificate's projects
- incusd/operations: Protect token operations from events and cancellation
- incusd/storage/s3: Verify signed payloads without buffering
- incusd/storage: Validate dependent volumes received through migration
- incusd/storage: Validate snapshot names from the backup index on import
- incusd: Only trust the key-proven client certificate
- incusd/dev_incus: Pin image export to the instance's project
- incusd/events: Restrict network-acl events to privileged viewers
- incusd/instance/lxc: Allocate an idmap when none is set at start
- incusd: Authorize effective project on resource creation
- incusd: Fix cross-project disclosure in recursive and all-projects listings
- incusd/storage: Strip non-regular files from instance metadata
- incusd/instance/qemu: Confine NBD migration sockets to the run directory
- incusd: Reject null snapshot entries on backup import
- incusd/operations: Keep websocket secrets out of events and queries
- Translated using Weblate (French)
- incusd/instance/qemu: Keep the stop hook's restart lock non-reusable
- incusd/instance/lxc: Keep the stop hook's restart lock non-reusable
- incusd/instance/operationlock: Let a forced stop take over a pending shutdown
- Makefile: Bump to Go 1.26.9
- Update gomod
- Release Incus 7.6
Documentation¶
The Incus documentation can be found at:
https://linuxcontainers.org/incus/docs/main/
Packages¶
There are no official Incus packages as Incus upstream only releases regular release tarballs. The release tarball, client binaries and checksums can be found at: https://github.com/lxc/incus/releases/tag/v7.6.0
Below are some available options to get Incus up and running.
Installing the Incus server on Linux¶
Incus is available for most common Linux distributions. You'll find detailed installation instructions in our documentation.
https://linuxcontainers.org/incus/docs/main/installing/
Homebrew package for the Incus client¶
The client tool is available through HomeBrew for both Linux and MacOS.
https://formulae.brew.sh/formula/incus
Chocolatey package for the Incus client¶
The client tool is available through Chocolatey for Windows users.
https://community.chocolatey.org/packages/incus/7.6.0
Winget package for the Incus client¶
The client tool is also available through Winget for Windows users.
https://winstall.app/apps/LinuxContainers.Incus
Support¶
Monthly feature releases are only supported up until the next release comes out. Users needing a longer support length and less frequent changes should consider using Incus 7.0 LTS instead.
Community support is provided at: https://discuss.linuxcontainers.org
Commercial support is available through: https://zabbly.com/incus
Bugs can be reported at: https://github.com/lxc/incus/issues
Incus 6.0.7 LTS has been released¶
29.10.2026
Introduction¶
The Incus team is pleased to announce the release of Incus 6.0.7!
This is the seventh bugfix release for Incus 6.0 which is supported until June 2029.
With Incus 7.0 LTS now available, the 6.0 branch has moved to security-only maintenance. This is the first release in that mode, so it doesn't bring any new features or backported improvements, only security fixes and the changes needed to keep building with current toolchains.
Changes¶
This update addresses the following security issues:
- CVE-2026-33542 (medium) - Incus does not verify combined fingerprint when downloading images from simplestreams servers
- CVE-2026-33711 (low) - Local privilege escalation through VM screenshot path
- CVE-2026-33743 (medium) - Denial of service through crafted bucket backup file
- CVE-2026-33897 (critical) - Arbitrary file read and write through pongo templates
- CVE-2026-33898 (high) - Authentication bypass on local Incus UI web server
- CVE-2026-33945 (critical) - Arbitrary file write through systemd-creds option
- CVE-2026-35527 (medium) - Blind SSRF via image import preflight HEAD request
- CVE-2026-40195 (medium) - Nil-pointer dereference panic via bucket metadata
- CVE-2026-40197 (medium) - Nil-pointer dereference via custom volume import
- CVE-2026-40243 (low) - OVN TLS verification accepts peer-supplied roots
- CVE-2026-40251 (medium) - Panic via snapshot bounds check
- CVE-2026-41647 (medium) - Nil-pointer dereference via S3 bucket import
- CVE-2026-41648 (low) - Unbounded YAML metadata decode
- CVE-2026-41684 (medium) - Nil dereferences on restore via malformed YAML
- CVE-2026-41685 (medium) - Unbounded binary import disk exhaustion
- CVE-2026-48756 (low) - Nil-pointer dereference in CreateCustomVolumeFromBackup
- CVE-2026-48749 (critical) - Arbitrary file read+write on host via
rootfs/symlink in malicious image - CVE-2026-48750 (critical) - Arbitrary file write on host via
exec-outputsymlink in crafted image - CVE-2026-48751 (critical) - Restricted project bypass leading to arbitrary command execution
- CVE-2026-48752 (critical) - Arbitrary file read+write on host via
templates/symlink in malicious image - CVE-2026-48755 (critical) - Argument injection in backup compression algorithm leading to arbitrary file write and command execution
- CVE-2026-48769 (critical) - Arbitrary file write on client due to trusted image hash
- CVE-2026-55621 (high) - Project restriction bypass for custom volume copy across projects
- CVE-2026-55622 (high) - Project restriction bypass in instance copy across projects
- CVE-2026-62313 (medium) - Project isolation restriction bypass by omitting
security.idmap.isolated - CVE-2026-62940 (critical) - Project restriction bypass via instance migration config override
- CVE-2026-62941 (critical) - Project restriction bypass via cross-project instance copy
- CVE-2026-63125 (critical) - Arbitrary file write on host via
backup.yamlsymlink in crafted image - CVE-2026-63343 (critical) - Arbitrary file read+write on host via
metadata.yamlsymlink in crafted image - CVE-2026-81493 (critical) - Arbitrary file write on host via image fingerprint path traversal
- CVE-2026-81495 (critical) - Arbitrary file write on host via path traversal in custom volume import
- CVE-2026-81496 (critical) - Arbitrary file write on host via path traversal in instance backup import
- CVE-2026-81497 (high) - Arbitrary host file read+write via VM template path traversal (incomplete fix of CVE-2026-48752)
- CVE-2026-81498 (high) - Container configuration newline injection through
nvidia.driver.capabilities - CVE-2026-81500 (medium) - Incus CLI path traversal when exporting an image from a malicious server
- CVE-2026-81501 (medium) - Restricted client can import a private image from another project
- CVE-2026-115370 (medium) - Restricted project can use pull mode migration through clustered refresh
- CVE-2026-115371 (high) - Restricted client can read storage bucket keys in the default project
- CVE-2026-115373 (medium) - Authorization bypass lets a restricted client read any operation in another project
- CVE-2026-115376 (high) - Project restriction bypass for custom volume copy with omitted source type
- CVE-2026-115377 (critical) - Arbitrary file write on host via symlink in migration stream
- CVE-2026-115378 (medium) - Incus CLI arbitrary file write via malicious
incus-agentduring recursive file pull - CVE-2026-85185 (LXD also affecting Incus) (critical) - Arbitrary file write and deletion on host via unvalidated btrfs subvolume path in optimized backup and migration
- CVE-2026-85526 (LXD also affecting Incus) (critical) - Path traversal via btrfs optimized backup
subvolumes[].path
A number of additional hardening changes are also included, such as default request body limits, stricter HTTP listener timeouts, constant-time secret comparisons and tighter OIDC cookie and websocket origin handling.
All of those have been previously fixed in regular monthly releases and been widely backported by the various distributions shipping Incus 6.0 LTS.
Please note that this release raises the minimum Go version needed to build Incus to Go 1.26.
The full list of commits is available below:
Detailed changelog
- shared/ws: Remove CheckOrigin bypass
- incusd/s3: Use standard TLS config on S3 API calls
- incusd/auth/oidc: Tighten cookie policy
- incus-agent: Tighten HTTP listener configuration
- incusd: Tighten HTTP listener configuration
- incusd/certificates: Prevent any type change
- tests: Confirm certificate type can't be changed
- incus-migrate: Fix OVA handling within os.Root
- client: Make ImageFileRequest require a ReadWriteSeeker
- incus: Update for changes to incus.ImageFileRequest
- incusd: Update for changes to incus.ImageFileRequest
- client/simplestreams: Validate the full image hash
- incusd/instance_console: Prevent symlink attacks
- incusd/storage/s3: Don't assume backup structure
- incusd/instance: Use restricted pongo2 parser
- incus/remote: Actually validate the token code in
incus webui - doc/authentication: Clarify the type of incus.allowed_subnets
- incusd/auth/oidc: Cleanup and tighten subnet claim handling
- incusd/instances_post: Add extra validation during backup import
- incusd/instance/lxc: Confine credentials write to credentials directory
- incusd: Limit request body to 1MiB by default
- incusd: Configure exceptions to the 1MiB limit
- tests: Rewrite out-of-space test to use profiles
- incusd: Don't expose the API extension list pre-authentication
- incusd/images: Add image server restriction check in image URL download path
- incusd/storage/bucket: Validate expected metadata on import
- incusd/storage/volume: Validate snapshot entries on import
- incusd/network/ovn: Fix TLS validation logic
- incusd/storage/instance: Fix bad snapshot index calculation
- incusd/storage/s3: Fix nil pointer dereference on truncated input
- incusd: Limit tarball YAML reads to 1MiB
- incusd: Fix nil pointer dereference in instance backup restore
- incusd: Use QuotaWriter for backup and ISO uploads
- shared/archive: Improve detection and error handling
- shared/validate: Fix name validation on single character
- incusd/instance/lxc: Use os.Root for templating
- incusd/storage: Guard nil ExpiresAt in CreateCustomVolumeFromBackup
- incusd: Reject rootfs symlink for instances
- incusd/exec: Reject exec-output symlink
- incusd/instance: Enforce project restrictions on snapshot restore
- shared/logger: Add WarnOnError helper
- incusd/instance: Confine template access to instance root
- shared/validate: Reject compression algorithm arguments
- incusd/images: Validate fingerprint on direct download
- incusd/storage: Check source volume access on copy
- incusd/instances: Check source instance access on copy
- incusd: Use constant-time comparison for secrets
- incusd: Limit websocket control message size
- incusd/storage: Strip unsafe symlinks in externally-supplied instance data
- incusd/storage: Allow expected symlinks in instance metadata
- internal/instance: Prevent line breaks in NVIDIA config values
- incusd/storage: Confine backup.yaml write to instance root
- incusd/instance: Confine metadata.yaml access to instance root
- incusd/instance/qemu: Confine template access to instance root
- incusd/images: Validate image fingerprint for all protocols
- incusd/storage: Validate volume name on ISO and backup import
- incusd/instances: Validate instance name on backup import
- incusd/instances: Re-check restrictions after copy config merge
- incusd/instance: Enforce project restrictions on migration overrides
- incusd/project: Enforce isolated restriction when idmap key omitted
- incusd/instance: Fix NVIDIA require.cuda and require.driver handling
- incusd/instance: Confine exec-output access to its directory
- incusd: Fail closed on unknown authorization project expansion
- incusd/instance/qemu: Use os.Root for template output
- client/images: Prevent path traversal in downloaded image name
- incusd/images: Check access before reusing cross-project image
- incusd/storage/s3: Pin certificate for local S3 bucket transfers
- incus/file: Contain recursive pull symlinks
- incusd: Don't follow symlinks when receiving migration data
- incusd/storage: Treat volume creation with a source as a copy
- incusd/storage/drivers: Confine btrfs subvolume paths
- incusd/operations: Check project access on operation get and wait
- incusd/operations: Hide access token operations from non-admins
- incusd/storage/buckets: Require can_edit to read bucket keys
- incusd/profiles: Check project restrictions on profile creation
- incusd/instances: Check project restrictions on clustered refresh
- Makefile: Switch to new golangci-lint install script
- gomod: Update go-cowsql
- shared/archive: Avoid concurrent calls to Wait
- doc/rest-api: Refresh swagger YAML
- incusd/instances/common: Fix typo
- github: Download MinIO from GitHub releases
- generate-database: Fix test on Go 1.27
- gomod: Update golang.org/x/tools
- ci: authenticate OpenFGA release lookups
- Makefile: Bump minimum to Go 1.26
- gomod: Bump minimum to Go 1.26
- doc/requirements: Bump minimum to Go 1.26
- Update gomod
- doc/rest-api: Refresh swagger YAML
- incusd: Fix bad type in format strings
- incusd/cgroup: Fix parse error messages
- tests: Use a 4GiB btrfs test pool
Support and upgrade¶
The Incus 6.0 branch is supported until June 2029. It's always strongly recommended to keep up and run the latest LTS bugfix release.
Downloads¶
- Main release tarball: incus-6.0.7.tar.xz
- GPG signature: incus-6.0.7.tar.xz.asc
Incus 7.0.2 LTS has been released¶
29.10.2026
Introduction¶
The Incus team is pleased to announce the release of Incus 7.0.2!
This is the second bugfix release for Incus 7.0 which is supported until June 2031.
Changes¶
As usual this bugfix releases focus on stability and hardening.
Minor improvements have also been backported, specifically anything which does not require data migration, database changes or cause any unexpected change to user facing behavior.
The number of such improvements will decrease over time within the LTS branch.
Some of the highlights for this release are:
- Near-live migration (
incus move --refreshand therefresh-migrateevacuation action) - Live project moves within a cluster
- NVRAM variable management for virtual machines
- Secure Boot key management for virtual machines
- NVRAM and Secure Boot overrides at instance creation
- NVRAM access from the QEMU scriptlet
- New
incus low-levelcommand withnvram,secureboot,repairandbitmapssub-commands - Port forwarding to instances with
incus port-forward - OVN child networks sharing a parent's logical router
- Multicast snooping and relay on OVN networks
- Networks shared across projects through
restricted.networks.access - DNS NOTIFY support for network zones
dns.include_hostson bridge networksipv6.racontrol on bridge and OVN networks- BGP unnumbered peers
- Security tags for OpenFGA authorization
- OIDC claims in the authorization scriptlet
- Multiple authorizers with per-client routing
- Cluster member and storage pool metrics
- Image locations in the API
initial.copyfor custom volume disks- Burst limits for NIC and disk devices
- Combined byte/s and IOPS limits on disks
- I/O limits for
unix-blockdevices - Queuing disciplines on NIC devices
- GPU clique for GPUDirect in virtual machines
- Native-context GPU device type
security.nestingfor virtual machinessecurity.protection.start- Fixed ID map ranges on non-isolated containers
- Ceph
librbdbackend for virtual machines - ACME External Account Binding and HTTP-01 forwarding in clusters
- CPU clusters in the resources API
- NetBSD support for the Incus agent
- Interactive exec sessions on Windows
- Native Windows and macOS client installers
--archiveforincus file pushandincus file pullincus list --all-remotes- Parallel compression with
pigz - Modernized CLI table rendering
Please note that this release raises the minimum requirements to Go 1.26 for building Incus and to Open vSwitch 3.3.0 and OVN 24.03.0 for OVN networking.
This update also addresses the following security issues:
- CVE-2026-62313 (medium) - Project isolation restriction bypass by omitting
security.idmap.isolated - CVE-2026-62867 (critical) - Argument injection through storage volume
block.create_options - CVE-2026-62940 (critical) - Project restriction bypass via instance migration config override
- CVE-2026-62941 (critical) - Project restriction bypass via cross-project instance copy
- CVE-2026-63125 (critical) - Arbitrary file write on host via
backup.yamlsymlink in crafted image - CVE-2026-63343 (critical) - Arbitrary file read+write on host via
metadata.yamlsymlink in crafted image - CVE-2026-81493 (critical) - Arbitrary file write on host via image fingerprint path traversal
- CVE-2026-81494 (critical) - Arbitrary file write on host via image-planted symlinks and
oci.dns.*newline injection - CVE-2026-81495 (critical) - Arbitrary file write on host via path traversal in custom volume import
- CVE-2026-81496 (critical) - Arbitrary file write on host via path traversal in instance backup import
- CVE-2026-81497 (high) - Arbitrary host file read+write via VM template path traversal (incomplete fix of CVE-2026-48752)
- CVE-2026-81498 (high) - Container configuration newline injection through
nvidia.driver.capabilities - CVE-2026-81499 (medium) - Project restriction bypass on network address sets
- CVE-2026-81500 (medium) - Incus CLI path traversal when exporting an image from a malicious server
- CVE-2026-81501 (medium) - Restricted client can import a private image from another project
- CVE-2026-115370 (medium) - Restricted project can use pull mode migration through clustered refresh
- CVE-2026-115371 (high) - Restricted client can read storage bucket keys in the default project
- CVE-2026-115372 (critical) - Project restriction bypass for
block.create_optionsvia volume update, copy and move - CVE-2026-115373 (medium) - Authorization bypass lets a restricted client read any operation in another project
- CVE-2026-115374 (high) - Read of other bucket objects via unsigned header on presigned S3 upload URL
- CVE-2026-115375 (critical) - Arbitrary file write on host via path traversal in instance backup dependent volumes
- CVE-2026-115376 (high) - Project restriction bypass for custom volume copy with omitted source type
- CVE-2026-115377 (critical) - Arbitrary file write on host via symlink in migration stream
- CVE-2026-115378 (medium) - Incus CLI arbitrary file write via malicious
incus-agentduring recursive file pull - CVE-2026-85185 (LXD also affecting Incus) (critical) - Arbitrary file write and deletion on host via unvalidated btrfs subvolume path in optimized backup and migration
- CVE-2026-85526 (LXD also affecting Incus) (critical) - Path traversal via btrfs optimized backup
subvolumes[].path
All of those have been previously fixed in regular monthly releases and been widely backported by the various distributions shipping Incus 7.0 LTS.
The full list of commits is available below:
Detailed changelog
- incus/move: Apply --storage pool to dependent disks
- github: Build Windows and MacOS native installers.
- incusd/instance/qemu/qmp: Run guest memory dump detached
- incusd/instance/qemu/qmp: Add per-command timeout
- github: Add a build workflow
- build(deps): bump actions/download-artifact from 4 to 8
- build(deps): bump actions/upload-artifact from 4 to 7
- incusd/instance/qemu/qmp: Bump timeout for block commands
- incusd/instance/qemu/qmp: Bump timeout for slow synchronous commands
- incus/server/storage/driver/ceph: Wait, if image is already in the unpacking stage on another cluster member.
- incusd: Switch OCI network configuration to interfaces.json
- incusd/device: Mention "none" as valid NIC gateway value
- incusd: Support "none" gateways in OCI containers
- doc: Update configuration option metadata
- cmd/incus-agent: Implement Windows osLoadModules to check viosock service
- cmd/incus-agent: Only start agent http server if osLoadModules succeeds
- cmd/incus-agent: Write state data to ringbuffer if no http server present
- internal/server/instance/drivers/qmp: Bump ringbuffer size to 16K
- internal/server/instance/drivers/qmp: Record instance state retrieved from ringbuffer
- internal/server/instance/drivers: Treat degraded agent as offline, except when fetching state
- incusd/instance/qmp: Bump some more timeouts
- incusd/instance/qemu: Use a shared memory backend on all architectures
- incus/server/storage/driver/backend: Wait, if image is already in the unpacking stage on another cluster member.
- incus/server/storage/driver/cephfs: Implement stub for IsImageCloneSourceReady function
- incus/server/storage/driver/common: Implement stub for IsImageCloneSourceReady function
- incus/server/storage/driver/linstor: Implement stub for IsImageCloneSourceReady function
- incus/server/storage/driver/lvm: Implement stub for IsImageCloneSourceReady function
- incus/server/storage/driver/truenas: Implement stub for IsImageCloneSourceReady function
- incusd/network/ovn: Add Enabled option to OVNSwitchPortOpts
- incusd/network/ovn: Add UpdateLogicalSwitchPortEnabled
- incusd/network/ovn: Add GetLogicalSwitchActivePorts
- incusd/network/ovn: Make SetLogicalSwitchQoSRules replace existing rules
- incusd/network/ovn: Extract instanceDevicePortOpts
- incusd/network/ovn: Only consider enabled switch ports as active
- incusd/network/ovn: Tweak instance port startup logic
- incusd/network/ovn: Keep instance ports until device removal
- incusd/network/ovn: Create instance ports on device add
- incusd/forknet: Wait up to 5s for initial DHCP configuration
- api: network_bgp_peer_interface
- incusd/bgp: Add support for unnumbered peers
- incusd/network: Add bgp.peers.NAME.interface
- doc: Update config
- doc/network/bgp: Document BGP unnumbered
- incusd/network/ovn: Fix NAT for network forward default targets
- incsd/device/config: Add DataFilePath field to MountEntryItem
- incusd/instance/drivers: Add support for raw-format block devices
- incusd/instance: Allow security.nesting on VMs
- incusd/instance/qemu: Turn off svm and vmx when security.nesting is disabled
- api: projects_restricted_virtual_machines_nesting
- incusd/project: Add restricted.virtual-machines.nesting
- doc: Update config
- incusd/auth: Move OpenFGA config to authorization.* namespace
- doc/authorization: Update for authorization config namespace
- doc: Update config
- api: authorization_config
- tests: Update OpenFGA tests for authorization config keys
- api: network_allocations_network extension
- shared/api: add Network field to NetworkAllocations
- incusd/network-allocations: populate network field
- doc/rest-api: Refresh swagger YAML
- incus/network: add --summary flag to list-allocations
- incusd/storage/ceph: Tolerate concurrently deleted RBD entities in zombie cleanup
- incusd/storage/ceph: Serialize volume deletion on the parent image
- incusd/storage/ceph: Tolerate concurrent-deletion handling for non-image parents and renames
- i18n: Update translation templates
- api: Add gpu_native_context extension
- incusd/device: Add native-context GPU device type
- incusd/instance/drivers: Support native-context GPU in QEMU
- incusd: Fix race between forkfile cleanup and respawn
- incusd/events: Don't warn on double connection close
- incusd/apparmor: Fix alignment
- incusd/apparmor: Allow DRM render nodes for native-context GPU
- doc: Document the native-context GPU type
- doc: Update config
- incusd/linux: Add GrantPosixACLUser
- incusd/device: Grant render node access to native-context GPUs
- incusd/network/bridge: Don't NAT traffic between managed bridge networks
- incusd/storage/zfs: Clear volume quota during optimized refresh
- incusd/metrics: Add storage pool usage metric types
- incusd/metrics: Collect storage pool usage
- doc: Document storage pool metrics
- incusd/storage/zfs: Restore volume quota on refresh error
- api: Add instance_port_forward extension
- shared/api: Add InstancePortForwardPost
- client: Add GetInstancePortForwardConn
- incus-agent: Add port-forward API
- incusd/forknet: Add connect command
- incusd/instance: Add PortForwardConn
- incusd/auth: Add can_connect_tcp
- incusd/instances: Add port-forward API
- incus: Add port-forward command
- tests: Add port forward tests
- doc/rest-api: Refresh swagger YAML
- incusd/metrics: Rename incus_storage_pool_total_bytes to incus_storage_pool_size_bytes
- incusd/seccomp: Handle syscalls from non-leader threads
- incusd/instance/lxc: Stop the DHCP client from the stop hook
- shared/tls: Use first successful connection in RFC3493Dialer
- incusd/instances/common: Fix typo
- incusd/device: Handle CIDR values in NIC ipv4.address/ipv6.address
- incusd/network: Handle CIDR values in NIC ipv4.address/ipv6.address
- client: Only retry TLS dial on certificate verification errors
- incusd/network/ovn: Tolerate stop failures during network deletion
- incusd/device/nic_ovn: Guard cleanup against unavailable network
- incusd/networks: Run driver deletion for locally pending networks
- incusd: Honor target parameter in bitmap endpoints
- incusd/cluster: Resolve instance volumes by name in ConnectIfVolumeIsRemote
- incus/console: Escape spaces in SPICE console socket URI
- incus: Don't persist INCUS_REMOTE as the default remote
- incusd/storage/s3: Support conditional writes
- incusd/instance/qmp: Rework block job monitoring
- incusd/instance/qemu: Harden ephemeral snapshot teardown
- incusd/instance/qmp: Remove unused event channel logic
- client: Always set TLS ServerName on dial
- incusd/storage/btrfs: Restrict subvolume sources under the daemon dir
- incusd: Don't warn on double close of downloaded image files
- incus/cluster_group: Change group separator in assign subcommand
- incus/profile: Change profile separator in assign subcommand
- test: Fix assign separator
- incus/file: Fix progress reporting on stdin push
- incus/import: Fix progress reporting on stdin import
- incus/storage_bucket: Fix progress reporting on stdin import
- incus/storage_volume: Fix progress reporting on stdin import
- incus/storage_volume_file: Fix progress reporting on stdin push
- incusd/network/zone: Return a single SOA record on plain SOA queries
- incusd/storage: Fix races in connectOfflineNBD
- incusd/locking: Make unlock functions release only their own lock
- incusd/storage: Hold NBD operation lock for the whole session
- build(deps): bump actions/setup-go from 6 to 7
- incusd/network/ovn: Detect stale database connections
- incusd/network/ovn: Remove NB client singleton
- incusd/storage: Use qcow2 virtual size as instance block size
- incusd/storage: Skip root disk size check on remote cluster move
- incusd/device: Make disk I/O limit parsing reusable
- api: Add unix_block_limits extension
- incusd/device: Add I/O limits for unix-block devices
- doc: Update config
- incusd/auth: Add allow/deny authorizers
- incusd/request: Add CtxUnixIsRoot
- incusd: Add support for multiple authorizers
- incusd: Set defaults for authorization.client.* keys
- tests: Add authorization router tests
- tests: Set authorization.client.* keys
- doc/authorization: Update for authorization client routing
- doc: Update config
- api: authorization_client_routing
- incusd/device: Require CIDR address when NIC gateway is set
- incusd/storage: Honor writable flag on offline NBD exports
- incusd/seccomp: Use namespace credentials for FUSE mounts
- incusd/dev_incus: Detect LXC monitors from cgroup v2
- incus: Rename debug subcommand to low-level and advertise it
- api: instance_nvram
- shared/api: Add InstanceNVRAMVariable struct
- shared/uefi: Add OVMF parsing primitives
- shared/uefi: Add various variable dissectors
- incusd/instance: Add GetNVRAM
- client: Add NVRAM getters
- incusd/instances: Add NVRAM API
- doc/rest-api: Refresh swagger YAML
- incus/low-level: Add nvram subcommand
- incusd/instance/qemu: Initialize NVRAM on first query
- golangci: Ignore GUID names and comments
- shared/uefi: Add some OVMF dumping primitives
- incusd/instance: Add SetNVRAM
- client: Add NVRAM variable deletion
- incusd/instances: Add NVRAM variable deletion
- doc/rest-api: Refresh swagger YAML
- incus/low-level: Add nvram unset subcommand
- api: Add disk_io_limits_combined extension
- incusd/device: Allow combining byte/s and IOPS limits
- doc/storage_volumes: Mention combined I/O limits
- doc: Update config
- Add storage note about loop devices on COW fs
- incusd/instance/lxc: Use project-qualified CRIU restore name
- incusd/instance/lxc: Clean devices after failed CRIU restore
- incusd/storage: Fix instance copy for non-block volumes
- shared/ask: fix password prompt loop on Windows
- incusd/storage: Add support for '--refresh' for instances with dependent disks
- shared/ask: Fix newlines after functional blocks
- incusd/storage/drivers: Don't set received UUID on main btrfs volume
- incusd: Add cpus= argument to forkqemu
- incusd/instance/qemu: Confine QEMU startup to a single CPU type
- api: resources_cpu_cluster
- shared/api: Add Cluster to ResourcesCPUCore
- shared/resources: Fix CPU core grouping to handle core clusters
- incusd/instance/qemu: Make CPU topology validation cluster-aware
- incus/info: Show the CPU cluster of each core
- doc/rest-api: Refresh swagger YAML
- incusd/instance/lxc: Fix OCI entrypoint escaping
- incusd/seccomp: Report FUSE mount helper failures
- incusd/storage/drivers: Fix volume activation of filesystem snapshots
- incusd/instance/qemu: Resize metadata image on disk size change
- incusd: Drop metadata image on instance copy and import
- incusd/storage: Strip unsafe symlinks in externally-supplied instance data
- incusd/storage/s3: Reject symlinks in bucket backups
- incusd/instance/qemu: Fix publish of qcow2-backed volumes
- incusd/auth: Fill missing local bucket location
- doc: Ignore bugzilla.opensuse.org in linkcheck
- i18n: Update translation templates
- incusd/storage: Allow expected symlinks in instance metadata
- incusd/instance/qmp: Bump blockdev-add/del timeouts
- internal/filter: Prefer exact key match in ValueOf
- internal/filter: Only allow abbreviating the namespace in DotPrefixMatch
- internal/filter: Workaround spellcheck
- incus/network/allocations: Add a network column
- incusd/cluster: Allow certificate updates with offline members on same-key renewals
- incusd/daemon: Sync cluster certificate from leader on startup
- incusd: Keep cluster listener when core.https_address changes
- incusd/firewall/nftables: Use a bridges set for cross-bridge NAT exclusions
- incusd/network/bridge: Drop the cross-bridge NAT rules refresh
- incusd/firewall: Remove unused SNATOpts.ExcludeInterfaces
- build(deps): bump KineticCafe/actions-dco from 3.1.0 to 3.2.0
- build(deps): bump actions/labeler from 6 to 7
- incusd/cgroup: Add swap accounting detection
- incusd/seccomp: Skip swap in sysinfo when swap accounting is unavailable
- incusd/instance/lxc: Handle missing swap accounting
- api: acme_eab
- shared/tls: Add EAB support to RunACMEChallenge
- incusd/cluster/config: Add acme.eab.kid and acme.eab.hmac
- incusd/acme: Pass EAB configuration to lego
- doc/authentication: Mention External Account Binding
- doc: Update config
- doc: Add EAB and HMAC to wordlist
- incusd/instance: Prevent root disk re-creation on running instances
- incusd/instance/qemu: Prevent root disk hot-unplug
- incusd/instance-types: Use clouds.yaml for the list of clouds
- incusd/instance-types: Add support for root disk size
- incusd: Document HTTP 201 return code in Swagger specs
- incusd: Fix incorrect return codes in Swagger specs
- incusd/network_integrations: Return 201 with Location on rename
- incusd: Document HTTP 412 on instance and snapshot PUT/PATCH
- incusd/response: Add Conflict swagger response definition
- incusd: Document baseline error codes for endpoints using SmartError
- doc/rest-api: Refresh swagger YAML
- incusd/storage: Strip sub-path from dependent volume sources
- incusd/migration: Strip sub-path from dependent volume source overrides
- incusd/instance: Strip sub-path from dependent volume sources
- incusd: Strip sub-path from dependent volume sources
- incusd/storage: Allow unattached volumes in qcow2 migration
- incusd/instance/qmp: Add copy-before-write export helpers
- incusd/instance/qemu: Use copy-before-write overlays for NBD exports
- incusd/main_forkfile: Set SFTP max packet size to 128KiB
- incus-agent: Set SFTP max packet size to 128KiB
- internal/linux: detect initial user namespace by inode
- incus/launch: Link to the supported instance types
- doc/howto/instances_create: Update instance types link
- incusd/storage/ceph: Bound RBD unmap with a 30s timeout
- shared/archive: Add CompressionThreads
- incusd/images: Support reproducible pigz output
- shared/archive: Prefer pigz for decompression when available
- incusd/images: Prefer pigz for compression when available
- client/oci: Use pgzip for image compression
- tests: Update godeps
- incusd/qemu: Use pgzip for state compression
- incus/list: Add --all-remotes
- tests: Add --all-remotes test
- client: Add ETag on NVRAM variable getter
- incusd/instances: Add ETag on NVRAM variable getter
- client: Add NVRAM variable update
- incusd/instances: Diverse fixes
- shared/api: Add InstanceNVRAMVariablePut struct
- shared/uefi: Add some OVMF formatting primitives
- incusd/instances: Add NVRAM variable update
- doc/rest-api: Refresh swagger YAML
- incus: Modify argument order in flag helpers
- incus/usage: Add MakeKV
- incus/usage: Add AsSingleton
- incus/low-level: Add nvram set subcommand
- incus/low-level: Add nvram edit subcommand
- api: instance_nvram (updated)
- incusd/firewall/nftables: Fix template race in applyNftConfig
- incusd: Fix repair endpoint swagger method
- client: Add RepairInstance
- incus/low-level: Add bitmaps subcommand
- incus/low-level: Add repair subcommand
- client: Add GetStorageVolumeBitmap
- incus/storage_volume: Add bitmap subcommand
- incusd/instance/qemu: Release operation lock on snapshot size failure
- incusd/operations: Remove operation from map on DB registration failure
- incusd: Fix goroutine leak when cluster instance list times out
- generate-database: Add ReferenceID filtering for reference tables
- incusd/db: Add ReferenceID filtering to Config and Device
- incusd/db/cluster: Update generated code
- incusd/db/cluster: Add referenced profile query helpers
- incusd/db: Only load referenced profiles when filling instances
- incusd/db/cluster: Scope profile queries in Instance.ToAPI
- incusd: Only load referenced profile data
- incusd/backup: Only load referenced profile data
- incusd/project: Scope config queries to project resources
- incusd/scriptlet: Scope instance device query
- incusd/db: Port instance config and device fill to generated queries
- incusd/instances: Add NVRAM rebuild as a repair action
- incusd/instance: Add ResetNVRAM
- api: instance_nvram (updated)
- incus/low-level: Add rebuild-nvram to the list of repair actions
- incusd/instances: Fix capitalization
- incusd/project: Restrict volume creation options in restricted projects
- internal/instance: Prevent line breaks in NVIDIA config values
- incusd/instance: Confine OCI network writes to instance root
- incusd/storage: Confine backup.yaml write to instance root
- incusd/instance: Confine metadata.yaml access to instance root
- incusd/instance/qemu: Confine template access to instance root
- incusd/images: Validate image fingerprint for all protocols
- incusd/storage: Validate volume name on ISO and backup import
- incusd/instances: Validate instance name on backup import
- incusd/instances: Re-check restrictions after copy config merge
- incusd/instance: Enforce project restrictions on migration overrides
- incusd/project: Enforce isolated restriction when idmap key omitted
- incusd: Expand network address set project for authorization
- incusd/instance: Fix NVIDIA require.cuda and require.driver handling
- incusd/instance: Confine exec-output access to its directory
- incusd: Fail closed on unknown authorization project expansion
- incusd/instance/qemu: Use os.Root for template output
- client: Make GetRawInstanceNVRAMGUIDVar return attributes
- incusd/response: Allow custom headers in devIncusResponse
- shared/uefi: Export dumpAttributes
- incusd/instances: Add headers to raw NVRAM variable response
- incus/low-level: Support more formats in NVRAM getter and setter
- Makefile: Bump to 1.25.12
- Update gomod
- i18n: Update translation templates
- incus/low-level: Fix naming inconsistency
- docs: Clarify the sentence about Incus owning the ZFS pool/dataset
- incusd/daemon: Drop else branches in project expansion
- incusd/bgp: Resolve neighbor address for unnumbered peers
- i18n: Update translation templates
- shared/api: Hide additional sensitive config keys
- incusd/instance/qmp: Bump query-migrate timeout
- incusd/db: Have NetworkNodeConfigs only consider the requested network
- incusd/network/ovn: Skip empty transactions in SetChassisGroupPriority
- generate-database: Fix GetMany generation for entities without filters
- incus/remote: Restrict proxy /1.0 cache to GET and invalidate on changes
- incusd/endpoints: Fix proxy protocol handling
- incusd/storage: Unmount leftover mounts in CleanupInstancePaths
- incusd/device: Check interface isn't in use by host before passthrough
- incusd/instance/lxc: Fix mount options of OCI /run tmpfs
- incusd/instance/lxc: Skip OCI /run tmpfs when image populates /run
- incusd/cluster: Stop instances in place when evacuation has no target
- api: instance_protection_start
- internal/instance: Add security.protection.start
- incusd/instance: Add support for security.protection.start
- doc: Update config
- incusd/instance: Clarify protection errors
- incusd/forknet: Fix concurrent DHCP resolv.conf handling
- incusd/instance: Update oci.dns.* descriptions
- doc: Update config
- incusd/instance/lxc: Enable edns0 in OCI resolv.conf
- incusd/forknet: Enable edns0 in resolv.conf
- incus: Add support for client-side near-live migration
- incus: Add refresh flag to move
- incusd/instance/drivers: Prevent migration of dependent disk during final sync
- shared/uefi: Various device path fixes
- api: instance_nvram_bulk_update
- client: Add NVRAM bulk update
- incusd/instances: Add NVRAM bulk update
- doc/rest-api: Refresh swagger YAML
- incus/low-level: Accept multiple arguments for nvram set and unset
- client: use a copy of ProtocolIncus for WithContext
- incus/low-level: Allow unsetting nvram with empty set value
- client: Preserve tempPath in UseProject and UseTarget
- incusd/network/ovn: Replace stale SNAT rule on external address change
- incusd/device/nic_ovn: Allow live update of ipv4/ipv6.address.external
- incusd/db: Add generated network, network_config and network_node entities
- incusd/db: Add GetCreatedNetworksInfo
- incusd/network: Add LoadAllCreated
- incusd/network: Reduce database queries in OVN network startup
- incusd/networks: Reduce database queries during network startup
- incusd: Use cached server name for warning operations
- incusd/cluster: Add ConnectIfBucketIsRemote
- incusd: Add forwardedResponseIfBucketIsRemote
- incusd: Forward storage bucket requests to the cluster member holding the bucket
- doc: Document storage bucket handling in clusters
- internal/migration: Don't double close websocket writer
- incusd/instance/qmp: Ignore timeouts during migration
- incusd/network/ovn: Don't replace DNAT rules sharing a logical IP
- incusd/network/ovn: Use tag_request on nested switch ports
- tests: Add OVN test suite
- tests: Register OVN tests
- github: Add OVN tests job
- doc/requirements: Bump minimum OVS/OVN versions
- Makefile: Bump minimum OVS/OVN versions
- internal/server/network: Update generated OVSDB schemas
- incusd/network/ovn: Add logical switch port ARP proxy helpers
- incusd/network/ovn: Use ARP proxy for l2proxy uplink ingress
- incusd/network/ovn: Add GetLogicalRouterNATs
- incusd/patches: Convert OVN l2proxy NAT rules to ARP proxy
- tests: Convert OVN l2proxy NAT checks to ARP proxy
- client: Handle unmanaged networks in preseed
- incusd/storage/lvm: Wipe source device rather than VG name
- incusd: Add instanceShutdownOrForceStop
- incusd: Allow cluster-internal instance changes on evacuated members
- shared/api: Add 'Refresh' to InstancePost
- incus/move: Pass Refresh to InstancePost
- incusd: Add support for near-live migration
- incusd: Add support for 'refresh-migrate' action in evacuation path
- internal/instance: Add 'refresh-migrate' option to 'cluster.evacuate'
- tests: Add tests for near-live migration
- doc: Update config
- api: instance_refresh_migration
- doc/rest-api: Refresh swagger YAML
- client: Detect dead event connections
- incusd/events: Deliver events in order
- incusd/projects: Send project-updated after the update
- client: Add EventListener.SetOrdered
- doc: Document event ordering
- client: Fix Disconnect not disconnecting
- incusd/storage/lvm: Detect block type in ListVolumes
- incusd/storage: Tolerate missing snapshot record on delete
- incusd/storage: Repair snapshot records on refresh
- incus/admin_sql: Fix integer rendering
- api: image_locations
- shared/api: Add Locations to Image
- incusd/db/images: Fill in image locations
- doc/rest-api: Refresh swagger YAML
- api: network_ovn_multicast
- incusd/network/ovn: Add multicast helpers
- incusd/network/ovn: Add bridge.multicast_snooping and bridge.multicast_relay
- doc: Update configs
- incusd/instance/qemu: Use temporary data-file when growing metadata image
- i18n: Update translation templates
- tests: Skip OVN tests when INCUS_OFFLINE is set
- tests: Add cgroup test suite
- github: Add cgroup tests job
- tests: Add interception test suite
- github: Add interception tests job
- tests: Add network bridge firewall test suite
- github: Add network bridge firewall tests job
- tests: Add storage buckets drivers test suite
- github: Add storage buckets drivers tests job
- doc: Document instance-migrated lifecycle event
- incusd/storage/linstor: Fix snapshot resource definition races
- incusd/storage/cephfs: Sync filesystem before snapshot creation
- tests: Wait for nc listeners in network address set test
- tests: Use a 4GiB btrfs test pool
- incusd: Retry transient database errors in the admin SQL endpoint
- incusd/db: Make AddImageToLocalNode idempotent
- tests: Wait for monitor subscription in dev-incus test
- incusd: Retry cluster role handover while another change is in progress
- instance: Derive process start time from proc stat
- incusd/storage/linstor: Mount snapshot volumes read-only
- incus/create: Allow --environment-file to be passed multiple times
- incus: Mention repeatable flags in help strings
- shared/simplestreams: Include variant in image description
- client: Fix crash on listener disconnect without error
- incusd/network/zone: Allow underscore-prefixed names
- incusd/patches: Upgrade OpenFGA model
- incusd: Use x-example in swagger operation parameters
- incusd: Fix header definitions in swagger comments
- incusd: Fix body parameters in swagger comments
- incusd/instance_nvram: Mark var path parameter as required
- incusd: Fix response examples in swagger comments
- shared/api: Drop invalid examples from preseed structs
- shared/api: Drop swagger:model from metadata map key types
- incusd/metadata: Fix swagger definition of configuration endpoint
- incusd/storage: Fix swagger body definition for volume backup rename
- test/lint: Validate swagger spec
- doc/rest-api: Refresh swagger YAML
- incusd: Fix storage volume project expansion
- tests: Cover inherited storage volume authorization
- incusd/storage/linstor: Retry resource definition deletion
- tests: Use future expiry for volume snapshot property test
- incusd: Make cluster role handover resilient to leader changes
- shared/tls: Renew certificates at 80% of validity period
- incusd/acme: Update for CertificateNeedsUpdate change
- incusd/acme: Run renewal check hourly
- incusd: Give up on cluster database after failed role handover
- incusd/images: Propagate old image deletion errors during refresh
- incusd/storage/btrfs: Wait for quota rescan after enabling quotas
- incusd: Bound global database close during shutdown
- incusd/instance/qemu: Record maxcpus in boot state
- incusd/db/cluster: Make node_cluster_group deletion a DeleteMany
- incusd: Fix PATCH of cluster group with multiple members
- global: Fix warnings on double file close
- incusd: Simplify global database shutdown
- incusd/events: Send events outside of the lock
- gomod: Update go-cowsql
- incusd/storage/linstor: Enforce minimum DRBD volume size
- incusd/storage/linstor: Enforce exact DRBD volume sizes
- incusd/storage/lvm: Only grow snapshot CoW capacity when needed
- incusd/qemu: Make generated configuration deterministic
- github: Drop storage_buckets_drivers from extended tests
- tests: Switch to debian/13 test image
- github: Run network_bridge_firewall test on arm64
- tests: Allow overriding the CLI command timeout
- tests: Add cpu vm test suite
- tests: Add guestapi vm test suite
- tests: Add network routed test suite
- tests: Add storage disks vm test suite
- tests: Add storage vm test suite
- tests: Add storage volumes vm test suite
- github: Add VM tests job
- shared/uefi: Diverse fixes
- shared/uefi: Refactor dissection primitives
- shared/uefi: Add missing writers
- shared/uefi: Add formatting primitives
- shared/uefi: Add device path string representation lexer
- shared/uefi: Add device path formatting
- shared/uefi: Add device path tests
- shared/uefi: Implement Boot#### formatting
- incus/image: Add support for properties columns in image list
- doc/storage: Add TrueNAS to data storage location table
- lxc: Start live migration action operation before pre-dumps
- incusd/network/ovn: Handle dynamic addresses and removal for ipv4/ipv6.address.external
- incusd/device/nic_ovn: Remove stale SNAT rules on external address update
- incusd/firewall: Restrict wildcard proxy NAT to local addresses
- tests: Update proxy NAT wildcard listen address checks
- incusd/images: Split pruneExpiredImage into its own function
- incusd/images: Hold image lock when pruning and auto-updating images
- Revert "client: Add EventListener.SetOrdered"
- client: Add EventListener.AddChannel
- doc: Document AddChannel/RemoveChannel
- doc: Fix events table alignment
- incus/monitor: Port to EventListener.AddChannel
- incus/remote: Explain trust token prompt in verbose mode
- incus/remote: Add --tls-cert, --tls-key and --tls-p12 to remote add
- incus/remote: Move client certificates on rename
- incus/remote: Delete client certificates on removal
- i18n: Update translation templates
- incusd/cluster: Apply cluster configuration before member init
- incusd/project: Require OVN for features.networks
- doc: Update configs
- tests: Handle OVN requirement for features.networks
- incusd/instance/qmp: Use job-complete instead of block-job-complete
- incusd/instance/qemu: Use -qmp chardev instead of mon config section
- incusd/instance/qemu: Use confidential-guest-support instead of memory-encryption
- incusd/instance/qemu: Remove -mem-path and -mem-prealloc
- incusd/instance/qemu: Move sandbox configuration to qemu.conf
- incusd/instance/qemu: Move RTC configuration to qemu.conf
- incusd/instance/qemu: Move SPICE configuration to qemu.conf
- lxc: Make incremental memory migration opt-in
- storage/ceph: Ignore detached devices during RBD sysfs scan
- lxc: Normalize received CRIU state ownership
- incusd/networks: Fix panic when a network fails to start
- incusd/networks: Notify cluster members before local deletion
- incusd/cluster: Fail fast when target member is offline
- incusd/cluster: Mark offline members as unavailable for event connections
- incusd/cluster: Avoid expensive connectivity probes in NewNotifier
- incusd/cluster: Add connection timeouts to intra-cluster TLS dialer
- incusd/images: Surface write errors from compression pipeline
- incusd/instance/qemu: Cancel incoming state transfer on source failure
- client: Reconnect operation event listener on connection failure
- doc: explain how to resize virtual-machine/* volumes
- doc: storage_volumes: prefer
key=valueoverkey value - shared/subprocess: Make TryRunCommand always use C as locale
- incusd/storage/lvm: Force use of C locale everywhere isLVMNotFoundExitError is used
- incusd/storage/lvm: Check error output in isLVMNotFoundExitError
- incusd/storage/lvm: Preserve sanlock global lock on clustered pool deletion
- incusd/images: Skip offline members during image distribution
- incusd/storage: Don't query offline members in volume listing
- incusd/storage/dir: Set quota project on block volumes
- incusd/storage/dir: Set up quota when restoring custom volumes from backup
- incusd/response: Don't warn on already closed connections
- incusd/instance/qemu: Don't warn on already removed snapshot file
- incusd/instance/qemu: Return Bad Request when no NBD session is active
- shared/uefi: Implement Key#### formatting
- shared/uefi: Make formatters mandatory
- shared/uefi: Accept hexadecimal Boot#### variables
- client/oci: Move unpackOCIImage to ProtocolOCI
- gomod: Add opencontainers/image-spec
- client/oci: Strip volume mounts during unpack
- tests: Update client dependency list
- incusd/storage/drivers: Add flushBlockDeviceCache
- incusd/storage/linstor: Invalidate stale device caches on mount
- incusd/storage/linstor: Unmount volumes synchronously
- incusd/instance/qemu: Sync shared config volume during live migration
- incusd/instance/qemu: Skip config drive generation on live migration receive
- incusd/instance/qemu: Add IsLiveMigration
- incusd/device/tpm: Move swtpm control socket to the devices path
- incusd/device/tpm: Enable swtpm migration handling
- incusd/instance/qmp: Make MigrateWait event-driven
- incusd/instance/qemu: Enable migration status events
- incusd/storage: Fix source snapshot project on same-pool custom volume refresh
- incus/server/device/nic/ovn: hot-reloadable ovn nic limits
- incusd/storage/drivers/linstor: Sync filesystem instead of freezing it before snapshots
- incusd/storage: Add cleanupDependencies argument to DeleteInstanceSnapshot
- incusd/storage/drivers: Add NearLiveMigration to driver Info struct
- incusd: Add dependent disk support for in-cluster near-live migration
- incusd/instance/drivers: Add dependent disk support for in-cluster near-live migration
- tests: Add near-live migration dependent disks tests
- incusd/storage: Add skipDisks argument to GenerateDependentVolumesOffer
- incusd/instance: Add SkipDependentVolumes to MigrateSendArgs
- incusd: Add support for near-live migration for shared root storage and local dependent disks
- incusd/instances: Add non-volatileness check for NVRAM variables
- shared/uefi: Make ESL, ESLNode and ESLEntry public
- shared/uefi: Add Secure Boot vendor GUIDs
- incus/low-level: Add secureboot list subcommand
- incus/low-level: Add secureboot remove subcommand
- incus/low-level: Add secureboot add subcommand
- incus/low-level: Fix unmarshalling to nil pointer
- incus/low-level: Simplify default NVRAM list cols
- incus/low-level: Add column description for nvram list
- incus/low-level: Fix repair autocomplete
- incus/config_trust: Add full fingerprint column
- incusd/instance_post: Skip unchecked err
- golangci: Tweak static-check
- generate-database: Fix test on Go 1.27
- incusd/device: Add support for disk burst limits
- incusd/instance/drivers: Add support for disk burst limits
- tests: Add tests for disk burst limits
- doc: Add documentation for disk burst limits
- doc: Update configs
- api: device_burst_limits
- incus/query: Add --data-file flag
- incusd/device: Use network project for address set refresh on bridged NIC
- shared/uefi: Keep non-NV_VARIABLE_STORE regions
- shared/uefi: Sort GUIDs by name
- shared/uefi: Implement PlatformConfig dissector
- shared/uefi: Refactor Boot#### variable name parsing
- shared/uefi: Make Boot public
- shared/uefi: Implement BootNext dissector
- incus/start: Add --override-boot flag
- api: Add network_ipv6_ra extension
- incusd/network/bridge: Add ipv6.ra config key
- incusd/network/ovn: Add ipv6.ra config key
- doc: Update configs
- incusd/project: Add support for networks shared through restricted.networks.access
- incusd: Handle networks shared through restricted.networks.access
- incusd/device: Resolve shared networks for NIC devices
- incusd/network: Account for shared networks in usage checks
- incusd: Validate restricted.networks.access against project networks
- doc: Update configs
- tests: Add coverage for shared networks in projects
- incusd/auth: Add network shares to the authorizer interface
- incusd/auth: Add shared network support to OpenFGA
- incusd/auth: Update generated OpenFGA model
- incusd: Maintain OpenFGA network shares
- incusd: Add auth_openfga_shared_networks patch
- tests: Add OpenFGA shared network coverage
- incus/low-level: Fix unset capability of nvram set
- incusd/network/ovn: Add DeleteMACBindings
- incusd/network/ovn: Delete stale MAC bindings on instance port stop
- tests: Add NVRAM VM tests
- github: Add NVRAM VM tests job
- shared/uefi: Add getters and setters to the store
- shared/uefi: Make formatters more robust
- incusd/instances: Use new store interface
- incusd/instance/qemu: Avoid needlessly rewriting the NVRAM
- incusd/scriptlet/qemu: Add NVRAM manipulation funs
- incusd/instance/qemu: Pass NVRAM to QEMU scriptlet
- shared/scriptlet: Implement bytes (un)marshalling
- tests: Add NVRAM scriptlet test
- api: qemu_scriptlet_nvram
- doc/ref/instance_options: Update QEMU scriptlet functions
- i18n: Update translation templates
- incusd/ip: Add Addr.FlushDynamic
- incusd/device: Allow "none" NIC addresses without filtering
- incusd/forknet: Disable IPv6 autoconf on statically configured interfaces
- doc: Update configs
- incusd/ip: Add support for nic burst limits
- incusd/device: Add support for nic burst limits
- incusd/network/ovn: Add support for nic burst limits
- tests: Add tests for nic burst limits
- doc: Update configs
- api: device_burst_limits
- incusd/instance/qmp: Set a write deadline on monitor commands
- api: Add storage_ceph_rbd_backend extension
- incusd/storage/ceph: Add ceph.rbd.backend config key
- doc: Update configs
- incusd/images: Consider both architecture names when filtering
- incus/image: Consider both architecture names when filtering
- incusd: Allow recovering shared storage pools when clustered
- incus/admin: Allow recovering shared storage pools when clustered
- doc: Cover shared pool recovery on clusters
- shared/cmd: Fix progress rendering on non-terminals
- incusd/events: Don't warn when the peer closed the connection first
- incus/network: Use global --project flag in list-allocations
- incus: Add shell completion for --project flag
- incus: Add shell completion for --target-project flag
- client: Fix event connection cleanup on listener failure
- client: Make operation reconnection more resilient
- incusd/instance/lxc: Don't fail Stop when the container stopped on its own
- incusd: Block instance creation from backup while evacuated
- incusd/cluster: Wait for ongoing instance creations before evacuating
- incusd/instance/qemu: Include stderr output in restore crash errors
- incusd/instance: Factor memory into balanced NUMA node selection
- incusd: Validate project in bulk instance state update
- incusd/cluster: Collect per-instance evacuation and restore errors
- incusd/instance/qmp: Add MigrateCancel
- incusd/instance/qemu: Treat live migration hand-over as cut-off
- incusd: Keep instance database location in sync after live migration hand-over
- shared/uefi: Add Incus GUID
- incus/low-level: Use new Incus vendor
- shared/util: Add ESLGUIDVar
- cmd/low-level: Use util.ESLGUIDVar
- shared/validate: Add IsRawNVRAMVariable and IsPEM
- incusd/instance/config: Add initial.nvram., initial.nvram-binary. and initial.secureboot.*
- doc: Update configs
- incusd/instance/qemu: Add support for NVRAM config overrides
- tests: Add NVRAM config override test
- api: instance_nvram_config
- incusd/dns: Add NOTIFY support
- incusd/network/zone: Bump SOA refresh to 15min
- incusd/network/zone: Send NOTIFY on zone and record changes
- incusd/network: Add DNSNotifyZones helper
- incusd/network/zone: Add dnsmasq file watcher
- incusd: Start network zones watcher
- incusd/network/ovn: Send NOTIFY on port and uplink changes
- incusd/networks: Send NOTIFY on network create, update and delete
- doc: Document network zone DNS NOTIFY
- incusd/instance/lxc: Fix instance directory ownership with raw.idmap
- tests: Add raw.idmap host root mapping test
- api: Add storage_cephobject_endpoint_cert extension
- incusd/storage/cephobject: Replace endpoint_cert_file with endpoint_cert
- incusd/patches: Convert cephobject.radosgw.endpoint_cert_file
- doc: Update configs
- shared/validate: Make IsPEM match anchor regexes
- Makefile: Bump minimum to Go 1.26
- gomod: Bump minimum to Go 1.26
- doc/requirements: Bump minimum to Go 1.26
- Use strings.SplitSeq to iterate over split strings
- Use new(expr) instead of protobuf pointer helpers
- Use range over int in counting loops
- Use standard library iterators
- Use strings.Builder for string concatenation
- Use fmt.Appendf
- Use errors.AsType
- Use slices.Backward for reverse iteration
- Use strings.Cut
- incusd/cgroup: Fix parse error messages
- incusd/db: Return Conflict error on duplicate storage volume record
- incusd/storage: Fix error wrapping in VolumeDBCreate
- incusd/storage/linstor: Set resource definition properties at clone time
- incusd/storage/linstor: Implement IsImageCloneSourceReady
- incusd/storage: Handle concurrent image volume creation across cluster members
- Use httputil.ReverseProxy.Rewrite
- incusd/network_integrations: Validate PEM blobs
- incusd/cluster/config: Remove unused LokiServer
- incusd/cluster/config: Validate PEM blobs
- incus/server/config: Validate PEM blobs
- doc: Update configs
- incusd/network/ovn: Allow multiple CAs
- shared/tls: Add ReadCerts
- incusd: Allow multiple CAs
- incusd/storage/linstor: Allow multiple CAs
- incusd/network/acl: Fix OVN ACL matching for cross-chassis traffic
- incusd/patches: Regenerate OVN ACL rules for address set matching
- incus/low-level: Add secureboot export subcommand
- incus/low-level: Add bundle support in secureboot add
- incus/low-level: Add secureboot import subcommand
- tests: Improve low-level secureboot coverage
- incusd/firewall/nftables: Allow EUI-64 link-local address with IPv6 filtering
- tests: Check link-local handling with IPv6 filtering
- incusd/ip: Add QdiscGeneric
- incusd/instance: Add CPUUsage
- incusd/network: Add GetTXQueueCount
- api: device_queue_disc
- incusd/device: Add support for nic queuing disciplines
- doc: Document queuing disciplines
- doc: Update configs
- tests: Add tests for nic queuing disciplines
- shared/tls: Don't duplicate issuer certificates in ACME chain
- incusd/network/ovn: Don't wait forever for database reconnection
- shared/cmd: Modernize table look
- shared/cmd: Prevent merging the last column
- tests: Reduce assumptions on list format
- doc: Use new key=value syntax
- doc: Use new table layout
- shared/uefi: Correctly handle padded VARS files
- client: Add RawQueryWithHeaders
- incus/query: Add --header flag
- test: Add test for query --header
- incus/oci: Don't URL-escape credentials in skopeo authfile
- incusd/network: Switch to backoff/v7
- incus: Switch to go-viper/mapstructure/v2
- incusd/device: Switch to gopacket/gopacket
- Update gomod
- doc/rest-api: Refresh swagger YAML
- incusd/storage/zfs: Reset host-facing properties of delegated datasets
- tests: Check properties of delegated ZFS datasets
- doc/storage/zfs: Document dataset delegation
- incusd/images: Check access before reusing cross-project image
- client/images: Prevent path traversal in downloaded image name
- incusd/instance/edk2: Add FirmwarePair.HasNVRAM
- incusd/scriptlet/qemu: Handle firmwares without NVRAM
- incusd/instance/qemu: Skip NVRAM handling with SeaBIOS firmware
- doc: Note NVRAM scriptlet functions need EDK2 firmware
- incusd: Validate OCI config.json before use
- incusd: Consistently say 'an NVRAM'
- incusd/instance/qemu: Close NVRAM file after writing
- incusd/instance/qemu: Never drop runtime state while QEMU is alive
- incusd/instance/qemu/qmp: Raise default command timeout to 2s
- client/oidc: Route provider requests through a dedicated transport
- client/oidc: Drop empty form parameters sent to the provider
- incusd/storage/drivers: Add cluster size to qcow2 ImageInfo
- incusd/instance/qemu: Advertise qcow2 cluster size as discard granularity
- internal/io: Add GetUmask and Lchtimes helpers
- incus/file: Add --archive to file push/pull
- tests: Add --archive file transfer coverage
- incus/cluster: Don't use unix socket URL as the join address
- i18n: Update translation templates
- incus-agent: Abstract exec process handling
- incus-agent: Report exit status of Windows exec sessions
- incus-agent: Fix PATHEXT for Windows exec sessions
- incus-agent: Forward exec signals on Windows
- incus-agent: Support interactive exec sessions on Windows
- incusd/device: Allow importing dependent volumes with snapshots
- tests: Check dependent volume snapshots survive export/import
- incus-agent: Externalize PTY logic
- incus-agent: Basic signal handling on Windows
- incus-agent: Add NetBSD agent
- incusd/instance/agent-loader: Add NetBSD files
- incusd/instance/agent-loader: Rename FreeBSD rc.d directory
- shared/osinfo: Add NetBSD
- incusd/instance/qemu: Add NetBSD support
- goreleaser: Add NetBSD
- doc/instance/create: Add NetBSD and update other agents
- github: Tune shellcheck exclusions
- doc/wordlist: Update wordlist
- incusd/instance: Mention images available for other instance types
- incusd/images: Check source instance access on publish
- incusd/cluster: Wait for all blocking instance operations before evacuating
- incusd/instance: Apply evacuation guard to forwarded state changes
- incusd/instance/lxc: Check liblxc state when tolerating stop failures
- incusd/instance: Balance NUMA nodes on committed memory
- incusd/cluster: Stop Ready and Frozen instances before a restore migration
- incusd/instance: Reject stateless cluster moves of running instances
- incusd/device/tpm: Mount the instance volume when removing state
- incusd/instances: Prefer images.default_architecture for multi-arch sources
- incusd/instance/qmp: Split query and operational command timeouts
- incusd/instance/qmp: Tolerate monitor timeouts in blockJobWait
- incusd/instance/qemu: Report busy monitor as running
- incusd/instance/qemu: Log failure to resume after failed migration
- incusd/instance/qemu: Wait for the NBD server before blockdev-add
- incusd/instance/qemu: Accept qemu-kvm binary name in PID validation
- incus/image: Don't warn on already closed files during import
- Set PKCE challenge and verifier values
- cmd/generate-database/db: Add nullable field support
- incusd/network/bridge: Clean up tunnel interfaces on failed start
- incusd/network/physical: Restore the original MTU on stop
- incusd/instance: Treat pool and project changes as migrations
- api: network_bridge_dns_include_hosts
- incusd/network/bridge: Add dns.include_hosts
- doc: Update configs
- tests: Add dns.include_hosts test
- incusd/db/query: Fix giving-up warning in Retry
- incusd/cluster: Fix IsCowsqlNode return value
- incusd/cluster: Fix lock leak in heartbeat Send
- incusd/cluster: Fix typos
- doc: Mention FreeBSD client
- incusd: Restore in-memory config when update triggers fail
- incusd/config: Distinguish unset keys from explicit defaults
- tests: Add server config default value test
- incusd: Allow unsetting OVN connection when no OVN network exists
- tests: Add OVN server config test
- incusd/network/ovn: Inherit uplink bridge MTU when none is configured
- tests: Check OVN uplink veth MTU
- incusd: Don't close a nil pipe reader on backup failure
- incusd/storage/ceph: Fix qemu-nbd image spec
- tests: Add ceph librbd test
- github: Install qemu with librbd support for ceph tests
- cmd/incus: Remove url escape for spice socket path.
- incus-agent: Fix paths on BSDs
- incus-agent: Factor code for UNIXes
- incus-agent: Please gofumpt
- incusd/instance/qemu/qmp: Be lenient about events with trailing \r
- incusd/instance/qemu: Disable multiport serial on NetBSD
- incusd/instance/drivers: Update serial tests
- doc/instance/create: Document new NetBSD tuning
- incusd/instance/config: Add volatile.last_state.agent.once
- incusd/instance/qemu: Make template application more robust
- doc: Update config
- incusd/instance/qemu: Remove unused argument
- incusd: Fix typo
- incusd/instance/agent-loader: Log agent output
- doc: Add multiport to wordlist
- i18n: Update translation templates
- incusd/storage/drivers: Add ReconnectQemuNbd and DisconnectQemuNbdWait
- incusd/storage/ceph: Reconnect NBD devices in place after resize
- tests: Add ceph-librbd driver to VM storage suites
- github: Run VM storage tests on ceph-librbd
- incusd/rsync: Only transfer xattrs settable without CAP_SYS_ADMIN
- incusd/storage/zfs: Delete target volume before full transfer on refresh
- internal/linux: Add SparseFileWrapper
- incusd/storage: Use linux.SparseFileWrapper
- incusd/cluster/evacuation: Stop in place when scriptlet has no candidates
- incusd/mirror: Add file mirroring package
- internal/linux: Add SetMountReadOnly
- incusd/device/tpm: Run swtpm on a local mirrored copy of its state
- incusd/instance/qemu: Run QEMU on a local mirrored copy of the UEFI variables
- incusd/instance/qemu: Make the config volume read-only during live migration on shared storage
- incusd/storage: Flush local instance state before snapshots, copies and backups
- incusd/storage/drivers: Repair VM config volumes with recorded errors before mounting
- incusd/scriptlet: Track pending instance placements
- incusd/cluster/evacuation: Serialize target selection and record pending placements
- incusd/instance: Reserve NUMA nodes for starting and incoming instances
- incusd/apparmor/rsync: Allow reading destination ancestors
- incusd/api: Exclude node-local config from untargeted cluster ETag
- incusd/cluster: Reject internal rebalance/handover requests during startup
- incus/device: Set NVIDIA device UUIDs for physical GPUs
- incusd/storage/drivers: Add generic property cache
- incusd/storage/zfs: Use generic property cache
- incusd/storage/truenas: Use generic property cache
- incusd/storage/linstor: Add getVolumeIndex
- incusd/storage/linstor: Use filesystem stats for mounted volumes
- incusd/storage/linstor: Cache volume usage lookups
- incusd/storage/lvm: Cache thin volume usage lookups
- incusd/ovn: gofumpt
- incusd/instance/qmp: Handle ringbuf-read racing a chardev swap
- incusd/instance/qemu: Make ConsoleLog tolerant of concurrent console attach
- incusd/instance/lxc: Record migration transfer errors before signaling completion
- incusd/instance/qemu: Record migration transfer error before signaling completion
- incusd/project: Delete network peers on forced project deletion
- tests: Check forced project deletion with OVN peers
- incusd/images: Return error on invalid export request
- incusd/images: Preserve image type on push mode copy
- incusd/network/ovn: Limit initial connection setup
- incusd/network/ovn: Fail fast and name the database when unavailable
- incusd/network/acl: Resolve profile projects in a single transaction
- incusd/network/address-set: Resolve profile projects in a single transaction
- incusd/network/ovn: Scope mutual peer lookups to the target network
- incusd/instance/qemu: Don't pass nil exec streams to the agent client
- internal/server/storage/drivers: Handle dotted Ceph client IDs
- internal/server/util: Recognize named unconfined AppArmor profiles
- internal/server/instance/drivers: Unmount residual Unix devices during cleanup
- incusd/project: Fix unrestricted project check on volatile keys
- incusd/project: Allow snapshot restore with changed volatile keys
- tests: Add restricted project snapshot restore test
- tests: Cover OVN peering with several peers on one network
- incusd/instance/qmp: Make clearing the event handler sticky
- incusd/instance/qemu: Ignore duplicate stop hooks
- incusd/instance/lxc: Reuse exact-sized ID map gaps
- tests: Check exact-sized isolated ID map reuse
- api: gpu_physical_clique
- incusd/device/gpu: Add clique option to physical GPUs in VMs
- incusd/instance/qemu: Set x-nv-gpudirect-clique on passed-through GPUs
- doc: Document GPU clique option
- doc: Add DMA and GPUDirect to wordlist
- doc: Update configs
- incusd/instance: Fix project change dropped on cross-member moves
- tests: Add cross-project cluster move tests
- client: Don't attempt reconnection on websocket operations
- incusd/storage/zfs: Clean up parent dataset on failed migration
- shared/scriptlet: Flatten embedded pointer structs when marshalling
- api: authorization_scriptlet_claims
- incusd/request: Add OIDC claims context keys and forwarding header
- incusd/auth/oidc: Return validated claims from Auth
- incusd: Store validated OIDC claims in the request context
- incusd/cluster: Forward OIDC claims to other members
- incusd/auth: Expose OIDC claims to the authorization scriptlet
- doc: Document the Claims field of the authorization scriptlet
- incusd/mirror: Don't prune persistent files on start
- incusd/instance/qemu: Regenerate NVRAM when the symlink is dangling
- incus/server/network/driver/common: Remove loadbalancer bgp prefix on network delete
- incusd/instances: Log instance rendering failures
- incusd/backup: Fall back to the index config when backup.yaml is missing
- tests: Import a backup without backup.yaml
- incusd/firewall/nftables: Replace bridge filter chains atomically
- incusd/device/nic/bridged: Keep existing filters when an update fails
- incusd/network/acl: Reject rules the host firewall can't apply
- incusd/network/bridge: Validate ACL actions against the host firewall
- incusd/device/nic/bridged: Validate ACL actions against the host firewall
- doc: Note that allow-stateless is OVN only
- client: Fail clearly when OIDC provider has no device authorization endpoint
- incusd/instance/lxc: Hold the ID map lock until the allocation is persisted
- tests: Check concurrent isolated ID map allocation
- incusd/network/ovn: Match IPv6 load balancer health monitors
- incusd/instance: Add OCI config helpers
- incusd/instance/lxc: Export the OCI image environment as defaults
- incusd: Use the OCI image environment as exec defaults
- incusd: Stop copying the OCI environment into the instance config
- tests: Check OCI environment overrides and rebuild
- api: instance_project_move_live
- incusd/instance: Reject project moves when an attached volume can't follow
- incusd/instance: Reject project moves of instances with backups
- incusd/instance: Allow live project moves within a cluster
- incusd/instance: Resolve the volume project when removing dependent volumes
- incusd/storage: Fix migration type negotiation for dependent volumes
- incusd/instance: Pass the cluster move flag when negotiating dependent volume types
- incusd/instance: Let dependent volumes follow an instance across projects
- doc: Document live project moves
- tests: Add cross-project move tests
- incusd/instance/qemu: Reject live migration of filesystem dependent volumes
- incusd/storage: Resolve the volume project for dependent volumes
- incusd/instance: Resolve the volume project when deleting dependent volumes
- incusd/instance: Resolve the volume project for near-live dependent volume transfers
- incusd/instance: Let dependent volumes on local pools follow a project move to another member
- doc: Document dependent volumes in project moves with shared storage volumes
- tests: Add tests for dependent volumes in projects sharing storage volumes
- incusd: Keep the OS API reachable during shutdown
- incusd: Bound instance stops during shutdown
- incusd: Let a forced shutdown override one in progress
- incusd/storage/lvm: Use shared activation for ISO volumes on clustered pools
- incusd/storage/lvm: Rename both volumes of VM snapshots
- incusd/storage/lvm: Keep the original volumes until a restore fully succeeds
- tests: Rename VM snapshots before restoring them
- incusd/device: Reject unknown GPU types instead of passing through
- incusd/apparmor: Allow reading the local QEMU data directory
- tests: Check unknown GPU types are refused
- incusd/storage/zfs: Only reset datasets overriding the systemd ignore flag
- tests: Check delegated child datasets are reset
- incusd/instance: Don't shadow the project package name
- incusd/project: Re-check limits when recording instances and volumes
- incusd/storage: Check project limits when moving custom volumes
- incusd/cluster: Don't run update trigger under the gateway lock
- incusd/network/zone: Refresh TSIG cluster-wide and notify peers on creation
- incusd/network/bridge: Notify DNS peers on network update
- incus/remote: Make remote name checks stricter
- shared/cliconfig: Include diagnosis data in error path
- incus/usage: Defer remote error handling and clarify messages
- incus/list: Clarify --all-remotes usage
- incus: Hint missing space after remote on empty match list
- api: metrics_cluster_members
- incusd/metrics: Add cluster member metric types
- incusd/metrics: Add cluster member info, status and role metrics
- tests: Check cluster member metrics
- doc: Document cluster member metrics
- i18n: Update translation templates
- incusd/firewall/nftables: Don't widen ACL rules for the other IP family
- tests: Check mixed-family ACL rule rendering
- incusd/firewall/nftables: Match ICMP on l4proto in ACL rules
- incusd/device/nic/bridged: Don't require br_netfilter for IPv6 filtering
- incusd/firewall/nftables: Allow DHCPv4 discovery through the forward chain
- tests: Check DHCPv4 exception and ICMPv6 ACL rendering
- incusd/firewall/nftables: Replace address set members in one transaction
- incusd/network/address-set: Reject overlapping addresses
- tests: Check a rejected address set edit keeps the applied set
- tests: Check bridged NIC ACL failures keep the filters
- Added incant to the list of third party software
- incusd/cluster: Include member lookups in heartbeat round duration
- incusd/cluster: Stamp member heartbeats at write time
- incusd/db: Add GetNICConflictCandidateIDs
- incusd/device/nic_bridged: Only load instances that may conflict
- incusd: Only query local instances for forwarded instance listings
- incusd/instances: Load local instances in one query when listing all projects
- incusd/storage: Fix custom volume usage always reporting zero total size
- api: instance_security_tags
- incusd/auth: Add security tag object type
- incusd/auth: Add instance security tags to the authorizer interface
- incusd/auth: Add security tags to the OpenFGA model
- incusd/auth: Add security tag support to OpenFGA
- incusd/auth: Update generated OpenFGA model
- shared/validate: Add IsSecurityTagList
- incusd/instance: Add security.tags
- incusd/instance: Sync security tags with the authorizer
- incusd: Include security tags in OpenFGA resource sync
- incusd/patches: Add auth_openfga_security_tags
- doc: Update configs
- tests: Add OpenFGA security tags test
- doc: Document security tags
- internal/filter: Add RegexpToLike
- incusd/instances: Push simple name filters down to the database
- incusd/instances: Forward filters to other cluster members
- incusd/instance/qemu: Abort snapshot transfer on failed live migration
- incusd/instance: Reject security.idmap.base on isolated containers
- incusd/instance/lxc: Use fixed ID map bases on non-isolated containers
- incusd/patches: Disable isolation on containers with a fixed ID map base
- incusd/instance: Update security.idmap.base description
- doc: Update configs
- doc: Describe fixed ID map ranges
- tests: Cover fixed ID map ranges
- incusd/db: Turn nodeSpecificNetworkConfig into network type aware function
- incusd: Switch usages to network type aware IsNodeSpecificNetworkConfig
- incusd/network/ovn: Add DeleteLogicalRouterNATByLogicalIP
- incusd/network/ovn: Resolve the network owning the logical router
- incusd/network/ovn: Support networks sharing a logical router
- incusd/network/ovn: Add support for child networks
- incusd/network: Put OVN networks with a parent in the logical dependency group
- incusd/network/ovn: Handle child networks in router wide features
- api: network_ovn_parent
- doc: Document OVN child networks
- doc: Update configs
- tests: Add OVN child network tests
- incusd/seccomp: Retry pidfd_open with PIDFD_THREAD on ENOENT
- incusd/network/ovn: Don't load a self-referencing parent
- incus/server/storage/driver/ceph: Flatten image in background during instance creation
- incusd/storage/ceph: Only flatten clones and wait for it before deleting
- incusd/storage/ceph: Release the source snapshot after flattening
- incusd/storage/ceph: Describe background flattening for ceph.rbd.clone_copy
- doc: Update configs
- tests: Cover ceph.rbd.clone_copy=false copies
- api: Add disk_initial_copy extension
- incusd/storage: Add volatile.initial.copied volume key
- incusd/device/disk: Add initial.copy for custom volumes
- incusd/instance/lxc: Allow adding initial.copy disks to existing instances
- tests: Add initial.copy disk test
- doc: Document initial.copy
- doc: Update configs
- client/oci: Expose OCI image labels as oci.* image properties
- tests: Cover OCI image labels
- incusd/profiles: Check project restrictions on profile creation
- incusd/network/ovn: Route child networks through the parent's peerings
- incusd/network/acl: Match the child networks of a peer
- incusd/network/ovn: Allow NAT addresses on child networks
- tests: Cover peering and NAT addresses with OVN child networks
- doc: Document peering and NAT addresses on OVN child networks
- api: Add internal_debug_pprof extension
- incusd: Add /internal/debug/pprof
- tests: Cover /internal/debug/pprof over HTTPS
- doc: Document profiling through the API
- incusd/cluster: Disconnect source client after restore
- incusd/instance/qemu: Only watch console disconnection for text console
- incusd/console: Time out waiting for websockets to connect
- incusd/logging: Don't block event delivery when Loki can't keep up
- incusd/instance: Cache boot time when computing process start time
- shared/resources: Read interface counters from sysfs
- incusd/instance/qemu: Read NIC counters directly for metrics
- incusd/metrics: Reduce allocations when rendering metrics
- shared/resources: Parse the PCI ID database only once
- shared/resources: Avoid over-allocating when reading sysfs files
- shared/resources: Resolve udev links once and count processes cheaply
- doc/rest-api: Refresh swagger YAML
- incus/file: Contain recursive pull symlinks
- incusd: Don't follow symlinks when receiving migration data
- incusd/storage: Treat volume creation with a source as a copy
- incusd/storage/drivers: Confine btrfs subvolume paths
- incusd/storage: Validate dependent volume names on backup import
- incusd/storage: Ignore backup project for dependent volumes
- incusd/storage/s3: Require x-amz-* headers to be signed
- incusd/operations: Check project access on operation get and wait
- incusd/operations: Hide access token operations from non-admins
- incusd/storage/buckets: Require can_edit to read bucket keys
- incusd/project: Restrict volume options on update and copy
- incusd/instances: Check project restrictions on clustered refresh
- Update gomod
- goreleaser: Temporarily disable netbsd artifacts
- devcontainer: bump Go to 1.26
- incus/server/instance/drivers/qemu: dont interpret ErrNonReusuableSucceeded as error
- incus/server/instance/drivers/lxc: dont interpret ErrNonReusuableSucceeded as error
- doc: Move warning for macOS in howto/insntances_create
- incusd/instance/lxc: Use IsRootDiskDevice in diskState
- incusd/instance/qemu: Report disk usage for all disk devices in state
- incusd/instance: Resolve the custom volume project in diskState
- shared/tls: Add PublicKeyChain
- shared/tls: Add GetRemoteCertificates
- incusd/endpoints: Return the full certificate chain from NetworkPublicKey
- incusd: Sync the full cluster certificate chain from the leader
- tests: Cover joining with a cluster certificate chain
- incusd/mirror: Never follow symlinks in mirrored directories
- incusd/instance/qemu: Seed NVRAM from the real file rather than its symlink
- incusd/device/tpm: Refuse a state path that isn't a real directory
- incus/image: Sort properties in image info
- incusd/endpoints: Don't block the local accept loop on the STARTTLS peek
- incusd/networks: Fix start priority of networks with a parent
- tests: Make the sparse file test independent of the page size
- incusd/instance/qemu: Allow live-update of security.tags
- incus: Allow building for NetBSD
- incusd: Allow the server certificate update over HTTPS
- incus/admin: Support remotes in update-certificate
- incusd/instance: Fix nil dereference in canMigrate on device load error
- incusd/instance: Only let a migration inherit its own lock when stopping
- incusd/instance: Wait for state changes before migrating
- incusd/instance: Don't fail a move on source cleanup errors
- incusd/instance/qmp: Add agent TEMPLATED status
- incusd/instance/qemu: Clear template state when the agent reports applying them
- incus-agent: Report template application before rebooting for cloud-init
- tests: Add VM cloud-init test
- github: Run the VM cloud-init test
- incusd/cluster: Fix swapped CPU and memory usage in rebalance scoring
- incusd/cluster: Use the instance's project when rebalancing
- incusd/instance: Log placement scriptlet refusals
- shared/logger: Add WarnOnErrorExcept to the Logger interface
- shared/resources: Fix double close of ethtool socket
- shared/resources: Base memory usage on MemAvailable
- client: Drop the context-free VM agent connection debug line
- incusd/instance: Only warn on unexpected metrics and state query errors
- incusd/instance: Remove devices before deleting the instance volume
- incusd/instance: Fix error messages altered by variable rename
- incusd/device/nic: Only warn on MTU lookup failures for existing host interfaces
- incusd/storage: Don't fail UnmountInstance on a volume still in use
- incusd/storage/zfs: Tolerate deleted datasets when filling the property cache
- incusd/images: Don't ignore move errors when importing a split image from a member
- incusd/images: Keep expired cached image files still used by other projects
- incusd/images: Return not found when exporting an image whose file is missing
- incusd/auth/openfga: Tolerate tuple conflicts during resource sync
- incusd/auth/openfga: Read tuples page by page when syncing resources
- doc/clustering: Document member count, latency and clock requirements
- incusd/network/ovn: Restrict the IC southbound monitor to used tables
- incusd/storage/zfs: Only list snapshots when a snapshot is queried
- incusd/storage/zfs: Wait for snapshot device removal on unmount
- incusd/apparmor: Don't allow reading everything when LD_LIBRARY_PATH is unset
- incusd/network: Fix OVN network creation retries
- tests: Cover clustered OVN network creation retries
- github: Run the OVN cluster retry test
- internal/server/instance/driver/qemu: use hashed block node name when resizing
- shared/subprocess: Write pid files atomically
- shared/subprocess: Only signal the process that was recorded
- incusd/dnsmasq: Remove pid file after killing dnsmasq
- incusd/network: Use network config to detect dnsmasq use
- tests: Check stale dnsmasq.pid never signals other processes
- incusd/instance: Add HashName
- incusd/instance/qemu: Use instance.HashName
- incus-agent: Hash long virtiofs mount tags on hotplug
- i18n: Update translation templates
- Update gomod
- incusd/auth/openfga: Don't hold online lock during requests
- incusd/auth/openfga: Return offline error from GetPermissionChecker
- incusd/instance/agent-loader: Make macOS agent drive non-browsable
- incusd/device: Add DiskVMVirtiofsSupported
- incusd/instance/qemu: Use non-shared memory when virtiofs isn't wanted
- incusd/instance: Document the memory allocation of nested virtual machines
- doc: Update configs
- doc: Explain virtual machine memory allocation
- tests: Check virtual machine memory allocation
- incusd/storage: Copy dependent volumes from snapshot when copying an instance snapshot
- tests: Check dependent volumes on copy from instance snapshot
- shared: Move ESLGUIDVar from util to uefi
- incus/low-level: Update ESLGUIDVar
- incusd/instance/qemu: Update ESLGUIDVar
- shared/util: Add Unix to Go mode converter
- shared/tls: Read the ACME certificate under the name lego writes
- incusd/cluster/config: Validate acme.domain
- doc: Update configs
- incusd/storage/s3: Return NoSuchKey for missing objects
- tests: Check missing bucket objects report NoSuchKey
- incusd/storage: Map dependent volumes to devices for snapshot sources
- incusd/storage: Copy dependent volumes from the instance snapshot
- tests: Check copying from a snapshot uses the dependent volume snapshots
- incusd/storage: Refresh dependent volumes from the instance snapshot
- incusd: Keep the target's dependent volumes when refreshing
- incusd: Point copied snapshots at the new dependent volumes
- incus/copy: Keep the target's dependent volumes and root disk on refresh
- incusd/network/ovs: Fix removing one of several OVN bridge mappings
- tests: Check OVN bridge mapping removal
- incusd/network: Report OVN child networks as users of their parent
- tests: Check a refused OVN parent delete keeps the gateway
- incusd/network/acl: Skip IP addresses when collecting referenced ACLs
- incusd/project: Strip restricted volatile keys from backup imports
- incusd: Allow backup imports into restricted projects
- tests: Check backup import into a restricted project
- incus-agent: Wait 10s for exec websockets to connect
- client: Connect exec websockets concurrently
- incusd/storage/s3: Parse xl.meta structurally when detecting inline data
- incusd/storage/s3: Log minio bucket migrations
- incusd/storage/s3: Skip already migrated objects
- incusd/storage/lvm: Run report commands in silent mode
- shared/api: Support 4-character permissions in ParseFileHeaders
- incus/utils: Implement chmod-style mode parser
- incus/utils: Prevent masking sticky and setXid bits
- incus/file: Use new mode parser
- incus/storage_volume_file: Use new mode parser
- incus/image: Make unset-property accept a list of properties
- incus/usage: Enforce non-emptiness of placeholders
- incus/utils_sftp: Fix non-UNIX fingerprinting
- incusd/network/ovn: Only update other_config on logical switch changes
- incusd/network/ovn: Tolerate a missing transit switch on remote peer delete
- incusd/network/ovn: Clean up external interfaces on delete
- tests: Check OVN external interface cleanup
- incusd/storage/lvm: Refuse logical volume names too long for device-mapper
- incusd/storage/lvm: Only remove the config repair directory once unmounted
- incusd/storage/lvm: Fix the backing chain of copied qcow2 volumes
- incusd/instance/qemu: Skip the disk size probe on remote cluster moves
- incusd/instance/qemu: Size backed overlays from their backing node
- incusd/auth/oidc: Verify the ID token when the access token is opaque
- client: Send the ID token alongside opaque access tokens
- incusd: Revert interrupted evacuation states at startup
- incusd: Wait for backup uploads to complete
- incusd/storage_volumes_snapshot: Block direct rename of dependent volume snapshots
- incusd/storage: Rename dependent volume snapshots on instance snapshot rename
- tests: Check dependent volume snapshot rename
- Fix comment for defaultConsoleSpiceCommand
- cmd/incus: Fix recursive keepalive proxy startup
- shared/scriptlet: Don't panic on marshaling uuid.UUID and other non-addressable arrays
- incusd/network/acl: Skip address sets when collecting referenced ACLs
- tests: Check address set subjects in OVN ACL rules
- incusd/network/ovn: Restore the health check when reverting a load balancer update
- incusd/storage/lvm: Don't move the GPT alt header on qcow2 volumes
- incusd/storage: Move the GPT alt header inside qcow2 volumes on resize
- incusd/instance/qemu: Resize the active node of a qcow2 chain
- incusd: Don't leak the backup tarball writer on failure
- incusd/storage/zfs: Unmount stale snapshot mounts before deletion
- incusd/storage/zfs: Consider the filesystem dataset in HasVolume
- incusd/instance/qemu: Unmount snapshots through the snapshot path
- incusd: Clear stale snapshot mounts at startup
- incusd/storage: Get snapshot sizes without mounting on ZFS
- internal/server/storage: Avoid nested snapshot repair transactions
- incusd/auth/tls: Only grant metrics access to metrics certificates
- incusd/cluster/config: Document core.trust_ca_certificates behavior
- doc: Update configs
- doc/authentication: Document core.trust_ca_certificates
- internal/server/bgp: Preserve shared peer counts
- cmd/incus: Enable persistent hook traversal
- incusd/storage: Fix qcow2 volume size after live snapshot
- internal/server/db/query: Report canceled transactions
- test/clustering: Wait for returning member readiness
- i18n: Update translation templates
- Update gomod
- mini-oidc: Add a device client issuing opaque access tokens
- tests: Check OIDC login with opaque access tokens
- incusd/acme: Forward HTTP-01 challenges from all cluster members
- doc/authentication: Mention HTTP-01 handling in clusters
- incusd/storage: Compare snapshot creation dates at second precision
- tests: Check that a refresh back to the source is incremental
- incusd/storage: Use the virtual size of qcow2 volumes on copy and migration
- incusd: Use the virtual size of qcow2 volumes on storage volume migration
- test/mini-oidc: Fix port selection race
- incusd/storage/drivers: Delete conflicting subvolume on btrfs refresh
- incusd/storage/drivers: Use a target-held snapshot as refresh parent
- tests: Wait for firmware state instead of fixed sleeps in nvram_vm
- tests: Wait for role to propagate on cluster rebalance
- incusd/firewall/nftables: Skip UDP checksum rules in user namespaces
- incusd/instance/qemu: Use the custom volume content type on live move
- cmd/incusd: Use the environment_runtime_hooks extension
- incusd/instances/lxc: Use the environment_runtime_hooks extension
- lxc-to-incus: support environment_runtime_hooks
- incusd/network/ovn: Keep changed uplink addresses on uplink change
- internal/server/bgp/server: Don't error if removePrefixByUUID cant find uuid
- tests: Add clustering test on nested virtual machines
- github: Add clustering VM job
- incusd/instance/qemu: Keep direct I/O on the metadata image data file
- incusd/instance/qemu: Only export root and dependent disks over NBD
- incusd/instance: Update NBD endpoint description
- doc/rest-api: Refresh swagger YAML
- incus/low-level: Update NBD and bitmap help text
- incusd/instance/qemu: Add a metadata image to dependent disks
- incusd/instance/qemu: Support the metadata image on RBD
- tests: Check persistent bitmaps on dependent volumes
- incusd/project: Allow local images with restricted.images.servers
- tests: Cover local images with restricted.images.servers
- internal/server/network/driver/ovn: Fix routerExtPortIPs outside of transaction
- i18n: Update translation templates
- doc/rest-api: Refresh swagger YAML
- Update gomod
- incusd/network/ovn: Allow changing a networks parent
- doc: Update OVN network parent documentation
- tests: Add OVN network reparenting tests
- tests: Fix race in OVN reparenting test
- incus/admin: Use a plain signal channel in waitready (errcheck)
- incusd: Use a plain signal channel in waitready (errcheck)
- incusd/images: Use a plain signal channel for image sync (errcheck)
- incusd/instance/operationlock: Use a plain signal channel (errcheck)
- incusd/instance: Use a plain signal channel for console disconnection (errcheck)
- incusd/console: Log websocket mirror errors (errcheck)
- incus-agent: Log websocket mirror errors (errcheck)
- shared/ws: Add a helper to wait for a mirror to finish
- client: Wait for websocket mirrors through their done channel (errcheck)
- incus-migrate: Wait for websocket mirrors through their done channel (errcheck)
- lxc-to-incus: Wait for websocket mirrors through their done channel (errcheck)
- incusd/forkproxy: Report relay errors from both directions (errcheck)
- incusd/forkproxy: Close the unix relay channel on exit
- incusd/cluster: Don't drain the proxy copiers on forced stop (errcheck)
- doc/rest-api: Refresh swagger YAML
Support and upgrade¶
The Incus 7.0 branch is supported until June 2031.
It's always strongly recommended to keep up and run the latest LTS bugfix release.
Downloads¶
- Main release tarball: incus-7.0.2.tar.xz
- GPG signature: incus-7.0.2.tar.xz.asc
Incus 7.5 has been released¶
25.09.2026
The Incus team is pleased to announce the release of Incus 7.5!
This release introduces another good mix of new features for everyone, touching storage, network, clustering, access control, OCI containers and improved agent support. It also significantly improves performance for large scale environments and fixes a variety of bugs and security issues.
As usual, you can try Incus for yourself online: Linux Containers - Incus - Try it online
NOTE: The actual release version for download is 7.5.1 as 7.5.0 failed producing some of the release artifacts and needed a re-release.
Security fixes¶
This release fixes 11 security issues:
- CVE-2026-85185 (critical) - Arbitrary file deletion and directory placement on host via btrfs subvolume path traversal in optimized backups and migration
- CVE-2026-85526 (critical) - Arbitrary file deletion and directory placement on host via btrfs subvolume path traversal in optimized backups
- GHSA-443p-7392-h4v2 (medium) - Restricted project can use pull mode migration through clustered refresh
- GHSA-4cph-ccqv-hm3c (critical) - Project restriction bypass for
block.create_optionsvia volume update, copy and move - GHSA-579w-c4rw-c8q3 (critical) - Arbitrary file write on host via symlink in migration stream
- GHSA-hpjh-q53p-f27r (critical) - Arbitrary file write on host via path traversal in instance backup dependent volumes
- GHSA-jh4v-j34r-2mgh (high) - Project restriction bypass for custom volume copy with omitted source type
- GHSA-mfwv-x733-9446 (medium) - Authorization bypass lets a restricted client read any operation in another project
- GHSA-mmj7-8rgf-mx2h (high) - Read of other bucket objects via unsigned header on presigned S3 upload URL
- GHSA-wfvq-qh87-gm4j (medium) - Incus CLI arbitrary file write via malicious
incus-agentduring recursive file pull - GHSA-x8gj-2q73-qr6j (high) - Restricted client can read storage bucket keys in the default project
New features¶
OVN child networks¶
OVN networks can now be created with a parent pointing to another OVN network in the same project.
Rather than getting a logical router of its own, the child network attaches its logical switch and subnet to the logical router of its parent. This allows several internal subnets to be routed by a single logical router, sharing its uplink, external address and peerings.
stgraber@vorash:~$ incus network create net1 --type=ovn network=UPLINK ipv4.address=192.0.2.1/24
stgraber@vorash:~$ incus network create net2 --type=ovn parent=net1 ipv4.address=198.51.100.1/24
stgraber@vorash:~$ incus launch images:debian/13 c1 --network net2
A child network keeps its own subnet, DHCP, DNS records, ACLs and instance ports. It can enable NAT independently of its parent and can use ipv4.nat.address and ipv6.nat.address to translate to an address of its own, making it possible to have one subnet translated while another is routed natively on the same router.
Peerings are handled by the parent network and cover the subnets of all its children.
Documentation: https://linuxcontainers.org/incus/docs/main/reference/network_ovn/#child-networks
Live project moves within a cluster¶
A running instance can now be moved to a different project as part of a live migration to another cluster member by combining --target-project with --target.
stgraber@vorash:~$ incus move v1 --target incus02 --target-project prod
The instance's devices must resolve to the same set in the target project.
Custom volumes marked as dependent will follow the instance.
Documentation: https://linuxcontainers.org/incus/docs/main/howto/move_instances/
Initial copy for custom volume disks¶
disk devices backed by a custom storage volume and attached to containers gained an initial.copy property.
When set to true, the content already present at the device path inside the container is copied into the volume the first time the volume is used, if it's empty. This matches what application containers expect when shipping data in the directories that later get volumes mounted onto them.
stgraber@vorash:~$ incus storage volume create default mysql-data
stgraber@vorash:~$ incus config device add mysql data disk pool=default source=mysql-data path=/var/lib/mysql initial.copy=true
The copy only ever happens once per volume, as recorded in the volume's volatile.initial.copied key.
Documentation: https://linuxcontainers.org/incus/docs/main/reference/devices_disk/#initial-copy
Instance security tags¶
A new security.tags instance configuration key holds a comma-separated list of tags.
Incus doesn't use those tags in its own authorization decisions, instead they're exposed to the authorization backend. With OpenFGA, every tag becomes a security_tag object holding a tag relation with every instance carrying it, making it easy for external tooling to write policies based on tags rather than on individual instances.
stgraber@vorash:~$ incus config set c1 security.tags=pci,production
Documentation: https://linuxcontainers.org/incus/docs/main/authorization/#security-tags
OIDC claims in the authorization scriptlet¶
The details argument passed to the authorization scriptlet gained a Claims field holding the validated OIDC token claims of the client.
This allows writing rules based on any claim provided by the identity provider, such as groups or email, without having to maintain a separate mapping in the scriptlet.
Documentation: https://linuxcontainers.org/incus/docs/main/authorization/#scriptlet
Cluster member metrics¶
The /1.0/metrics endpoint now reports cluster member information:
incus_cluster_memberwith the member's architecture and failure domainincus_cluster_member_statuswith one sample per possible statusincus_cluster_member_rolewith one sample per role heldincus_cluster_member_groupwith one sample per group the member belongs to
This makes it easy to alert on an offline or evacuated cluster member directly from Prometheus.
Documentation: https://linuxcontainers.org/incus/docs/main/reference/provided_metrics/
NVIDIA GPUDirect P2P for virtual machines¶
Physical gpu devices passed through to virtual machines gained a nvidia.clique configuration key.
Setting the same clique ID (0 to 15) on several GPUs passed to the same virtual machine advertises them as a GPUDirect P2P clique to the guest driver, allowing direct DMA between the GPUs.
Documentation: https://linuxcontainers.org/incus/docs/main/reference/devices_gpu/
Improved Windows agent¶
The Windows agent now allows for interactive incus exec sessions and also improves handling for signal forwarding.
NetBSD virtual machines¶
The Incus agent is now available for NetBSD guests, on top of the existing Linux, FreeBSD, macOS and Windows support.
As with the other BSDs, setting image.os to something starting with NetBSD will automatically apply the needed tuning to the virtual machine.
FreeBSD client package¶
The Incus client is now packaged in FreeBSD Ports and can be installed with pkg install incus-client. Prebuilt FreeBSD client binaries are also included with every release.
Archive mode for file transfers¶
incus file push and incus file pull gained an --archive (-a) flag, behaving like cp -a.
Ownership, mode and timestamps are now only preserved when using --archive (which also implies --recursive), with regular transfers behaving like a plain cp.
stgraber@vorash:~$ incus file pull --archive c1/etc/ ./etc-backup/
OCI image labels and environment¶
Images imported from OCI registries now expose their standard labels (org.opencontainers.image.*) as oci.* image properties, making the image title, version, source or description visible through incus image info and usable with the new image property columns.
The image environment is also no longer copied into the instance configuration at creation time. Instead it's used as the default environment for incus exec, keeping the instance configuration clean and letting image updates carry environment changes.
Bridge DNS host records¶
bridge networks gained a dns.include_hosts configuration key, controlling whether the network's dnsmasq serves records from the host's /etc/hosts file.
Setting it to false avoids exposing host-only entries to instances while keeping AppArmor confinement.
Documentation: https://linuxcontainers.org/incus/docs/main/reference/network_bridge/
Profiling through the API¶
The Go pprof profiles of incusd are now available under /internal/debug/pprof/ on every listener, restricted to clients allowed to administer the server.
Unlike core.debug_address, this works at any time, over HTTPS and without changing the server configuration.
stgraber@vorash:~$ incus query --raw my-remote:/internal/debug/pprof/heap > heap.pprof
stgraber@vorash:~$ go tool pprof heap.pprof
Documentation: https://linuxcontainers.org/incus/docs/main/debugging/#profiling-incusd
Complete changelog¶
Here is a complete list of all changes in this release:
Full commit list
- incus-agent: Abstract exec process handling
- incus-agent: Report exit status of Windows exec sessions
- incus-agent: Fix PATHEXT for Windows exec sessions
- incus-agent: Forward exec signals on Windows
- incus-agent: Support interactive exec sessions on Windows
- incusd/instance/edk2: Add FirmwarePair.HasNVRAM
- incusd/scriptlet/qemu: Handle firmwares without NVRAM
- incusd/instance/qemu: Skip NVRAM handling with SeaBIOS firmware
- doc: Note NVRAM scriptlet functions need EDK2 firmware
- incusd: Validate OCI config.json before use
- incusd: Consistently say 'an NVRAM'
- incusd/instance/qemu: Close NVRAM file after writing
- incusd/instance/qemu: Never drop runtime state while QEMU is alive
- incusd/instance/qemu/qmp: Raise default command timeout to 2s
- client/oidc: Route provider requests through a dedicated transport
- client/oidc: Drop empty form parameters sent to the provider
- incusd/device: Allow importing dependent volumes with snapshots
- tests: Check dependent volume snapshots survive export/import
- incusd/storage/drivers: Add cluster size to qcow2 ImageInfo
- incusd/instance/qemu: Advertise qcow2 cluster size as discard granularity
- internal/io: Add GetUmask and Lchtimes helpers
- incus/file: Add --archive to file push/pull
- tests: Add --archive file transfer coverage
- i18n: Update translation templates
- incus/cluster: Don't use unix socket URL as the join address
- incus-agent: Externalize PTY logic
- incus-agent: Basic signal handling on Windows
- incus-agent: Add NetBSD agent
- incusd/instance/agent-loader: Add NetBSD files
- incusd/instance/agent-loader: Rename FreeBSD rc.d directory
- shared/osinfo: Add NetBSD
- incusd/instance/qemu: Add NetBSD support
- goreleaser: Add NetBSD
- doc/instance/create: Add NetBSD and update other agents
- github: Tune shellcheck exclusions
- doc/wordlist: Update wordlist
- Translated using Weblate (German)
- Translated using Weblate (German)
- Translated using Weblate (German)
- Translated using Weblate (German)
- Translated using Weblate (German)
- Translated using Weblate (Spanish)
- Translated using Weblate (Spanish)
- Translated using Weblate (Spanish)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (Italian)
- Translated using Weblate (Italian)
- Translated using Weblate (Japanese)
- Translated using Weblate (Japanese)
- Translated using Weblate (Japanese)
- Translated using Weblate (Japanese)
- Translated using Weblate (Dutch)
- Translated using Weblate (Dutch)
- Translated using Weblate (Portuguese (Brazil))
- Translated using Weblate (Portuguese (Brazil))
- Translated using Weblate (Portuguese (Brazil))
- Translated using Weblate (Russian)
- Translated using Weblate (Russian)
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Portuguese)
- Translated using Weblate (Portuguese)
- Translated using Weblate (Portuguese)
- Translated using Weblate (Norwegian Bokmål)
- Translated using Weblate (Norwegian Bokmål)
- Translated using Weblate (Indonesian)
- Translated using Weblate (Indonesian)
- Translated using Weblate (Indonesian)
- Translated using Weblate (Chinese (Traditional Han script))
- Translated using Weblate (Chinese (Traditional Han script))
- Translated using Weblate (Tamil)
- Translated using Weblate (Swedish)
- Translated using Weblate (Swedish)
- Translated using Weblate (Swedish)
- Translated using Weblate (Greek)
- Translated using Weblate (Georgian)
- Translated using Weblate (Georgian)
- Translated using Weblate (Portuguese)
- incusd/instance: Mention images available for other instance types
- incusd/images: Check source instance access on publish
- incusd/cluster: Wait for all blocking instance operations before evacuating
- incusd/instance: Apply evacuation guard to forwarded state changes
- incusd/instance/lxc: Check liblxc state when tolerating stop failures
- incusd/instance: Balance NUMA nodes on committed memory
- incusd/cluster: Stop Ready and Frozen instances before a restore migration
- incusd/instance: Reject stateless cluster moves of running instances
- incusd/device/tpm: Mount the instance volume when removing state
- incusd/instances: Prefer images.default_architecture for multi-arch sources
- incusd/instance/qmp: Split query and operational command timeouts
- incusd/instance/qmp: Tolerate monitor timeouts in blockJobWait
- incusd/instance/qemu: Report busy monitor as running
- incusd/instance/qemu: Log failure to resume after failed migration
- incusd/instance/qemu: Wait for the NBD server before blockdev-add
- incusd/instance/qemu: Accept qemu-kvm binary name in PID validation
- incus/image: Don't warn on already closed files during import
- Set PKCE challenge and verifier values
- cmd/generate-database/db: Add nullable field support
- incusd/network/bridge: Clean up tunnel interfaces on failed start
- incusd/network/physical: Restore the original MTU on stop
- incusd/instance: Treat pool and project changes as migrations
- api: network_bridge_dns_include_hosts
- incusd/network/bridge: Add dns.include_hosts
- doc: Update configs
- tests: Add dns.include_hosts test
- incusd/db/query: Fix giving-up warning in Retry
- incusd/cluster: Fix IsCowsqlNode return value
- incusd/cluster: Fix lock leak in heartbeat Send
- incusd/cluster: Fix typos
- doc: Mention FreeBSD client
- incusd: Restore in-memory config when update triggers fail
- incusd/config: Distinguish unset keys from explicit defaults
- tests: Add server config default value test
- incusd: Allow unsetting OVN connection when no OVN network exists
- tests: Add OVN server config test
- incusd/network/ovn: Inherit uplink bridge MTU when none is configured
- tests: Check OVN uplink veth MTU
- incusd: Don't close a nil pipe reader on backup failure
- incusd/storage/ceph: Fix qemu-nbd image spec
- tests: Add ceph librbd test
- github: Install qemu with librbd support for ceph tests
- cmd/incus: Remove url escape for spice socket path.
- incusd/storage/drivers: Add ReconnectQemuNbd and DisconnectQemuNbdWait
- incusd/storage/ceph: Reconnect NBD devices in place after resize
- tests: Add ceph-librbd driver to VM storage suites
- github: Run VM storage tests on ceph-librbd
- incus-agent: Fix paths on BSDs
- incus-agent: Factor code for UNIXes
- incus-agent: Please gofumpt
- incusd/instance/qemu/qmp: Be lenient about events with trailing \r
- incusd/instance/qemu: Disable multiport serial on NetBSD
- incusd/instance/drivers: Update serial tests
- doc/instance/create: Document new NetBSD tuning
- incusd/instance/config: Add volatile.last_state.agent.once
- incusd/instance/qemu: Make template application more robust
- doc: Update config
- incusd/instance/qemu: Remove unused argument
- incusd: Fix typo
- incusd/instance/agent-loader: Log agent output
- doc: Add multiport to wordlist
- incusd/rsync: Only transfer xattrs settable without CAP_SYS_ADMIN
- incusd/storage/zfs: Delete target volume before full transfer on refresh
- internal/linux: Add SparseFileWrapper
- incusd/storage: Use linux.SparseFileWrapper
- incusd/cluster/evacuation: Stop in place when scriptlet has no candidates
- incusd/mirror: Add file mirroring package
- internal/linux: Add SetMountReadOnly
- incusd/device/tpm: Run swtpm on a local mirrored copy of its state
- incusd/instance/qemu: Run QEMU on a local mirrored copy of the UEFI variables
- incusd/instance/qemu: Make the config volume read-only during live migration on shared storage
- incusd/storage: Flush local instance state before snapshots, copies and backups
- incusd/storage/drivers: Repair VM config volumes with recorded errors before mounting
- incusd/scriptlet: Track pending instance placements
- incusd/cluster/evacuation: Serialize target selection and record pending placements
- incusd/instance: Reserve NUMA nodes for starting and incoming instances
- incusd/apparmor/rsync: Allow reading destination ancestors
- incusd/api: Exclude node-local config from untargeted cluster ETag
- incusd/cluster: Reject internal rebalance/handover requests during startup
- incus/device: Set NVIDIA device UUIDs for physical GPUs
- incusd/storage/drivers: Add generic property cache
- incusd/storage/zfs: Use generic property cache
- incusd/storage/truenas: Use generic property cache
- incusd/storage/linstor: Add getVolumeIndex
- incusd/storage/linstor: Use filesystem stats for mounted volumes
- incusd/storage/linstor: Cache volume usage lookups
- incusd/storage/lvm: Cache thin volume usage lookups
- incusd/ovn: gofumpt
- incusd/instance/qmp: Handle ringbuf-read racing a chardev swap
- incusd/instance/qemu: Make ConsoleLog tolerant of concurrent console attach
- incusd/instance/lxc: Record migration transfer errors before signaling completion
- incusd/instance/qemu: Record migration transfer error before signaling completion
- incusd/project: Delete network peers on forced project deletion
- tests: Check forced project deletion with OVN peers
- incusd/images: Return error on invalid export request
- incusd/images: Preserve image type on push mode copy
- Translated using Weblate (Georgian)
- incusd/network/ovn: Limit initial connection setup
- incusd/network/ovn: Fail fast and name the database when unavailable
- incusd/network/acl: Resolve profile projects in a single transaction
- incusd/network/address-set: Resolve profile projects in a single transaction
- incusd/network/ovn: Scope mutual peer lookups to the target network
- incusd/instance/qemu: Don't pass nil exec streams to the agent client
- internal/server/storage/drivers: Handle dotted Ceph client IDs
- internal/server/util: Recognize named unconfined AppArmor profiles
- internal/server/instance/drivers: Unmount residual Unix devices during cleanup
- incusd/project: Fix unrestricted project check on volatile keys
- incusd/project: Allow snapshot restore with changed volatile keys
- tests: Add restricted project snapshot restore test
- tests: Cover OVN peering with several peers on one network
- incusd/instance/qmp: Make clearing the event handler sticky
- incusd/instance/qemu: Ignore duplicate stop hooks
- incusd/instance/lxc: Reuse exact-sized ID map gaps
- tests: Check exact-sized isolated ID map reuse
- api: gpu_physical_clique
- incusd/device/gpu: Add clique option to physical GPUs in VMs
- incusd/instance/qemu: Set x-nv-gpudirect-clique on passed-through GPUs
- doc: Document GPU clique option
- doc: Add DMA and GPUDirect to wordlist
- doc: Update configs
- incusd/instance: Fix project change dropped on cross-member moves
- tests: Add cross-project cluster move tests
- client: Don't attempt reconnection on websocket operations
- incusd/storage/zfs: Clean up parent dataset on failed migration
- shared/scriptlet: Flatten embedded pointer structs when marshalling
- api: authorization_scriptlet_claims
- incusd/request: Add OIDC claims context keys and forwarding header
- incusd/auth/oidc: Return validated claims from Auth
- incusd: Store validated OIDC claims in the request context
- incusd/cluster: Forward OIDC claims to other members
- incusd/auth: Expose OIDC claims to the authorization scriptlet
- doc: Document the Claims field of the authorization scriptlet
- incusd/mirror: Don't prune persistent files on start
- incusd/instance/qemu: Regenerate NVRAM when the symlink is dangling
- incus/server/network/driver/common: Remove loadbalancer bgp prefix on network delete
- incusd/instances: Log instance rendering failures
- incusd/backup: Fall back to the index config when backup.yaml is missing
- tests: Import a backup without backup.yaml
- incusd/firewall/nftables: Replace bridge filter chains atomically
- incusd/device/nic/bridged: Keep existing filters when an update fails
- incusd/network/acl: Reject rules the host firewall can't apply
- incusd/network/bridge: Validate ACL actions against the host firewall
- incusd/device/nic/bridged: Validate ACL actions against the host firewall
- doc: Note that allow-stateless is OVN only
- client: Fail clearly when OIDC provider has no device authorization endpoint
- incusd/instance/lxc: Hold the ID map lock until the allocation is persisted
- tests: Check concurrent isolated ID map allocation
- incusd/network/ovn: Match IPv6 load balancer health monitors
- incusd/instance: Add OCI config helpers
- incusd/instance/lxc: Export the OCI image environment as defaults
- incusd: Use the OCI image environment as exec defaults
- incusd: Stop copying the OCI environment into the instance config
- tests: Check OCI environment overrides and rebuild
- api: instance_project_move_live
- incusd/instance: Reject project moves when an attached volume can't follow
- incusd/instance: Reject project moves of instances with backups
- incusd/instance: Allow live project moves within a cluster
- incusd/instance: Resolve the volume project when removing dependent volumes
- incusd/storage: Fix migration type negotiation for dependent volumes
- incusd/instance: Pass the cluster move flag when negotiating dependent volume types
- incusd/instance: Let dependent volumes follow an instance across projects
- doc: Document live project moves
- tests: Add cross-project move tests
- incusd/instance/qemu: Reject live migration of filesystem dependent volumes
- incusd/storage: Resolve the volume project for dependent volumes
- incusd/instance: Resolve the volume project when deleting dependent volumes
- incusd/instance: Resolve the volume project for near-live dependent volume transfers
- incusd/instance: Let dependent volumes on local pools follow a project move to another member
- doc: Document dependent volumes in project moves with shared storage volumes
- tests: Add tests for dependent volumes in projects sharing storage volumes
- incusd: Keep the OS API reachable during shutdown
- incusd: Bound instance stops during shutdown
- incusd: Let a forced shutdown override one in progress
- incusd/storage/lvm: Use shared activation for ISO volumes on clustered pools
- incusd/storage/lvm: Rename both volumes of VM snapshots
- incusd/storage/lvm: Keep the original volumes until a restore fully succeeds
- tests: Rename VM snapshots before restoring them
- incusd/device: Reject unknown GPU types instead of passing through
- incusd/apparmor: Allow reading the local QEMU data directory
- tests: Check unknown GPU types are refused
- incusd/storage/zfs: Only reset datasets overriding the systemd ignore flag
- tests: Check delegated child datasets are reset
- incusd/firewall/nftables: Don't widen ACL rules for the other IP family
- tests: Check mixed-family ACL rule rendering
- incusd/firewall/nftables: Match ICMP on l4proto in ACL rules
- incusd/device/nic/bridged: Don't require br_netfilter for IPv6 filtering
- incusd/firewall/nftables: Allow DHCPv4 discovery through the forward chain
- tests: Check DHCPv4 exception and ICMPv6 ACL rendering
- incusd/firewall/nftables: Replace address set members in one transaction
- incusd/network/address-set: Reject overlapping addresses
- tests: Check a rejected address set edit keeps the applied set
- tests: Check bridged NIC ACL failures keep the filters
- incusd/instance: Don't shadow the project package name
- incusd/project: Re-check limits when recording instances and volumes
- incusd/storage: Check project limits when moving custom volumes
- incusd/cluster: Don't run update trigger under the gateway lock
- incusd/network/zone: Refresh TSIG cluster-wide and notify peers on creation
- incusd/network/bridge: Notify DNS peers on network update
- incus/remote: Make remote name checks stricter
- shared/cliconfig: Include diagnosis data in error path
- incus/usage: Defer remote error handling and clarify messages
- incus/list: Clarify --all-remotes usage
- incus: Hint missing space after remote on empty match list
- i18n: Update translation templates
- api: metrics_cluster_members
- incusd/metrics: Add cluster member metric types
- incusd/metrics: Add cluster member info, status and role metrics
- tests: Check cluster member metrics
- doc: Document cluster member metrics
- Added incant to the list of third party software
- Translated using Weblate (Portuguese)
- incusd/cluster: Include member lookups in heartbeat round duration
- incusd/cluster: Stamp member heartbeats at write time
- incusd/db: Add GetNICConflictCandidateIDs
- incusd/device/nic_bridged: Only load instances that may conflict
- incusd: Only query local instances for forwarded instance listings
- incusd/instances: Load local instances in one query when listing all projects
- incusd/storage: Fix custom volume usage always reporting zero total size
- api: instance_security_tags
- incusd/auth: Add security tag object type
- incusd/auth: Add instance security tags to the authorizer interface
- incusd/auth: Add security tags to the OpenFGA model
- incusd/auth: Add security tag support to OpenFGA
- incusd/auth: Update generated OpenFGA model
- shared/validate: Add IsSecurityTagList
- incusd/instance: Add security.tags
- incusd/instance: Sync security tags with the authorizer
- incusd: Include security tags in OpenFGA resource sync
- incusd/patches: Add auth_openfga_security_tags
- doc: Update configs
- tests: Add OpenFGA security tags test
- doc: Document security tags
- internal/filter: Add RegexpToLike
- incusd/instances: Push simple name filters down to the database
- incusd/instances: Forward filters to other cluster members
- incusd/instance/qemu: Abort snapshot transfer on failed live migration
- incusd/instance: Reject security.idmap.base on isolated containers
- incusd/instance/lxc: Use fixed ID map bases on non-isolated containers
- incusd/patches: Disable isolation on containers with a fixed ID map base
- incusd/instance: Update security.idmap.base description
- doc: Update configs
- doc: Describe fixed ID map ranges
- tests: Cover fixed ID map ranges
- incusd/db: Turn nodeSpecificNetworkConfig into network type aware function
- incusd: Switch usages to network type aware IsNodeSpecificNetworkConfig
- incusd/network/ovn: Add DeleteLogicalRouterNATByLogicalIP
- incusd/network/ovn: Resolve the network owning the logical router
- incusd/network/ovn: Support networks sharing a logical router
- incusd/network/ovn: Add support for child networks
- incusd/network: Put OVN networks with a parent in the logical dependency group
- incusd/network/ovn: Handle child networks in router wide features
- api: network_ovn_parent
- doc: Document OVN child networks
- doc: Update configs
- tests: Add OVN child network tests
- incusd/seccomp: Retry pidfd_open with PIDFD_THREAD on ENOENT
- incusd/network/ovn: Don't load a self-referencing parent
- incus/server/storage/driver/ceph: Flatten image in background during instance creation
- incusd/storage/ceph: Only flatten clones and wait for it before deleting
- incusd/storage/ceph: Release the source snapshot after flattening
- incusd/storage/ceph: Describe background flattening for ceph.rbd.clone_copy
- doc: Update configs
- tests: Cover ceph.rbd.clone_copy=false copies
- api: Add disk_initial_copy extension
- incusd/storage: Add volatile.initial.copied volume key
- incusd/device/disk: Add initial.copy for custom volumes
- incusd/instance/lxc: Allow adding initial.copy disks to existing instances
- tests: Add initial.copy disk test
- doc: Document initial.copy
- doc: Update configs
- client/oci: Expose OCI image labels as oci.* image properties
- tests: Cover OCI image labels
- incusd/profiles: Check project restrictions on profile creation
- incusd/network/ovn: Route child networks through the parent's peerings
- incusd/network/acl: Match the child networks of a peer
- incusd/network/ovn: Allow NAT addresses on child networks
- tests: Cover peering and NAT addresses with OVN child networks
- doc: Document peering and NAT addresses on OVN child networks
- api: Add internal_debug_pprof extension
- incusd: Add /internal/debug/pprof
- tests: Cover /internal/debug/pprof over HTTPS
- doc: Document profiling through the API
- incusd/cluster: Disconnect source client after restore
- incusd/instance/qemu: Only watch console disconnection for text console
- incusd/console: Time out waiting for websockets to connect
- incusd/logging: Don't block event delivery when Loki can't keep up
- incusd/instance: Cache boot time when computing process start time
- shared/resources: Read interface counters from sysfs
- incusd/instance/qemu: Read NIC counters directly for metrics
- incusd/metrics: Reduce allocations when rendering metrics
- shared/resources: Parse the PCI ID database only once
- shared/resources: Avoid over-allocating when reading sysfs files
- shared/resources: Resolve udev links once and count processes cheaply
- Update gomod
- doc/rest-api: Refresh swagger YAML
- incus/file: Contain recursive pull symlinks
- incusd: Don't follow symlinks when receiving migration data
- incusd/storage: Treat volume creation with a source as a copy
- incusd/storage/drivers: Confine btrfs subvolume paths
- incusd/storage: Validate dependent volume names on backup import
- incusd/storage: Ignore backup project for dependent volumes
- incusd/storage/s3: Require x-amz-* headers to be signed
- incusd/operations: Check project access on operation get and wait
- incusd/operations: Hide access token operations from non-admins
- incusd/storage/buckets: Require can_edit to read bucket keys
- incusd/project: Restrict volume options on update and copy
- incusd/instances: Check project restrictions on clustered refresh
- Release Incus 7.5
Documentation¶
The Incus documentation can be found at:
https://linuxcontainers.org/incus/docs/main/
Packages¶
There are no official Incus packages as Incus upstream only releases regular release tarballs. Below are some available options to get Incus up and running.
Installing the Incus server on Linux¶
Incus is available for most common Linux distributions. You'll find detailed installation instructions in our documentation.
https://linuxcontainers.org/incus/docs/main/installing/
Homebrew package for the Incus client¶
The client tool is available through HomeBrew for both Linux and MacOS.
https://formulae.brew.sh/formula/incus
Chocolatey package for the Incus client¶
The client tool is available through Chocolatey for Windows users.
https://community.chocolatey.org/packages/incus/7.5.1
Winget package for the Incus client¶
The client tool is also available through Winget for Windows users.
https://winstall.app/apps/LinuxContainers.Incus
Support¶
Monthly feature releases are only supported up until the next release comes out. Users needing a longer support length and less frequent changes should consider using Incus 7.0 LTS instead.
Community support is provided at: https://discuss.linuxcontainers.org
Commercial support is available through: https://zabbly.com/incus
Bugs can be reported at: https://github.com/lxc/incus/issues
Incus 7.4 has been released¶
28.08.2026
The Incus team is pleased to announce the release of Incus 7.4!
Another pretty busy month for us as we clear a lot of our Github backlog, fix quite a few longstanding bugs and land a good mix of new features too!
As usual, you can try Incus for yourself online: Linux Containers - Incus - Try it online
Security fixes¶
This release fixes 2 security issues:
- CVE-2026-81500 (medium) - Client-side path traversal when exporting an image from a malicious server
- CVE-2026-81501 (medium) - Private image import from another project by a restricted client
New features¶
UEFI Secure Boot key management¶
Following the introduction of NVRAM access in Incus 7.3, this release adds a full set of tools to manage the UEFI Secure Boot databases of virtual machines.
A new incus low-level secureboot command allows listing, adding, removing, exporting and importing Secure Boot database entries.
stgraber@vorash:~$ incus low-level secureboot list v1 db
┌──────┬───────────────────────┬──────────────┬───────────────────────────────────────┐
│ TYPE │ OWNER GUID NAME │ FINGERPRINT │ SUBJECT │
├──────┼───────────────────────┼──────────────┼───────────────────────────────────────┤
│ x509 │ MICROSOFT_VENDOR_GUID │ 48e99b991f57 │ Microsoft Corporation UEFI CA 2011 │
│ │ ├──────────────┼───────────────────────────────────────┤
│ │ │ 076f1fea90ac │ Windows UEFI CA 2023 │
│ │ ├──────────────┼───────────────────────────────────────┤
│ │ │ e5be3e64c6e6 │ Microsoft Option ROM UEFI CA 2023 │
│ │ ├──────────────┼───────────────────────────────────────┤
│ │ │ e8e95f0733a5 │ Microsoft Windows Production PCA 2011 │
│ │ ├──────────────┼───────────────────────────────────────┤
│ │ │ f6124e34125b │ Microsoft UEFI CA 2023 │
└──────┴───────────────────────┴──────────────┴───────────────────────────────────────┘
For those wanting to fully control the initial state of the NVRAM, a new set of initial.* instance configuration keys are also available, allowing for the databases to be populated at instance creation time, ideal for us with profiles.
initial.secureboot.pk,initial.secureboot.kek,initial.secureboot.db,initial.secureboot.dbx,initial.secureboot.dbtandinitial.secureboot.mokto enroll Secure Boot database entriesinitial.nvram.<GUID>.<name>andinitial.nvram-binary.<GUID>.<name>to set other arbitrary NVRAM entries
Documentation: https://linuxcontainers.org/incus/docs/main/reference/instance_options/
Near-live migration of containers¶
Live migration of containers through CRIU has always been somewhat fragile as it depends on the exact workload running inside of the container being compatible with CRIU.
Incus 7.4 introduces an alternative for containers on local storage, near-live migration.
Rather than transferring the memory state, the container's filesystem is transferred to the target server through a series of incremental snapshots while the container keeps running. Only the last incremental transfer requires the container to be stopped, after which it's started back up on the target server.
This isn't a live migration as the container does get restarted, but the downtime is limited to that final transfer, which is usually very quick and allows for very large containers to be moved with very limited downtime.
This is available through the new --refresh flag of incus move, both when moving between cluster members and when moving between remote servers:
stgraber@vorash:~$ incus move c1 --target incus02 --stateless --refresh
or
stgraber@vorash:~$ incus move c1 remote-server:c1 --stateless --refresh
A matching refresh-migrate value was added to the cluster.evacuate instance configuration key making it possible to enable this behavior during cluster evacuations.
Note that this is only supported on ZFS or btrfs and only for containers as other storage drivers don't have an efficient snapshot transfer mechanism for remote transfers.
Documentation: https://linuxcontainers.org/incus/docs/main/howto/move_instances/
One-time boot override for virtual machines¶
The incus start command gained a new --override-boot flag allowing for picking what a VM should be booting from next.
It can be given a specific boot entry, or if left empty, will show an interactive list of the boot entries present in the NVRAM to pick from.
stgraber@vorash:~$ incus start v1 --override-boot
┌────┬────────────────────────────────┬────────────────────────────────────────────────────────────────────────────────────────┐
│ ID │ DESCRIPTION │ PATH │
├────┼────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────┤
│ 0 │ BootManagerMenuApp │ Fv(64074afe-340a-4be6-94ba-91b5b4d0f71e)/FvFile(eec25bdc-67f2-4d95-b1d5-f81b2039d11d) │
├────┼────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────┤
│ 1 │ EFI Firmware Setup │ Fv(64074afe-340a-4be6-94ba-91b5b4d0f71e)/FvFile(462caa21-7614-4503-836e-8ab6f4662331) │
├────┼────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────┤
│ 2 │ UEFI QEMU QEMU HARDDISK │ PciRoot(0x0)/Pci(0x1,0x1)/Pci(0x0,0x0)/Scsi(0x0,0x1) │
├────┼────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────┤
│ 3 │ UEFI PXEv4 (MAC:10666AA0CED7) │ PciRoot(0x0)/Pci(0x1,0x4)/Pci(0x0,0x0)/MAC(10666aa0ced7,0x1)/IPv4(0.0.0.0,0x0) │
├────┼────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────┤
│ 4 │ UEFI PXEv6 (MAC:10666AA0CED7) │ PciRoot(0x0)/Pci(0x1,0x4)/Pci(0x0,0x0)/MAC(10666aa0ced7,0x1)/IPv6(::,0x0,Static) │
├────┼────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────┤
│ 5 │ UEFI HTTPv4 (MAC:10666AA0CED7) │ PciRoot(0x0)/Pci(0x1,0x4)/Pci(0x0,0x0)/MAC(10666aa0ced7,0x1)/IPv4(0.0.0.0,0x0)/Uri() │
├────┼────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────┤
│ 6 │ UEFI HTTPv6 (MAC:10666AA0CED7) │ PciRoot(0x0)/Pci(0x1,0x4)/Pci(0x0,0x0)/MAC(10666aa0ced7,0x1)/IPv6(::,0x0,Static)/Uri() │
└────┴────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────────────┘
Select next boot entry: 1
Sharing networks with restricted projects¶
Projects with features.networks enabled can now be granted access to networks from the default project through the restricted.networks.access configuration key.
The listed networks get shared into the project, appearing in incus network list and being usable by instances of the project, while the project remains free to create its own OVN networks alongside. This makes it possible to offer a common bridge or physical uplink to a restricted project without giving up on per-project networking.
Documentation: https://linuxcontainers.org/incus/docs/main/reference/projects/
DNS NOTIFY support for network zones¶
The built-in DNS server used for network zones now sends DNS NOTIFY messages to all configured peers whenever the content of a zone changes.
This lets secondary DNS servers refresh the zone immediately rather than having to wait for the refresh interval. The regular refresh interval was therefore bumped up to 15 minutes.
Documentation: https://linuxcontainers.org/incus/docs/main/howto/network_zones/
New table rendering in the CLI¶
We've tweaked the rendering of the lists in the CLI, offering a more polished and slightly more compact look.
stgraber@vorash:~$ incus list
┌─────────────┬─────────┬─────────────────────────┬──────────────────────────────────────────────────┬─────────────────┬───────────┐
│ NAME │ STATE │ IPV4 │ IPV6 │ TYPE │ SNAPSHOTS │
├─────────────┼─────────┼─────────────────────────┼──────────────────────────────────────────────────┼─────────────────┼───────────┤
│ caddy-test │ STOPPED │ │ │ CONTAINER (APP) │ 0 │
├─────────────┼─────────┼─────────────────────────┼──────────────────────────────────────────────────┼─────────────────┼───────────┤
│ dev-os │ STOPPED │ │ │ VIRTUAL-MACHINE │ 1 │
├─────────────┼─────────┼─────────────────────────┼──────────────────────────────────────────────────┼─────────────────┼───────────┤
│ isolated-oc │ STOPPED │ │ │ VIRTUAL-MACHINE │ 0 │
├─────────────┼─────────┼─────────────────────────┼──────────────────────────────────────────────────┼─────────────────┼───────────┤
│ rhel10 │ RUNNING │ 10.10.10.225 (eth0) │ 2602:fc62:ef:1010:1266:6aff:fe69:dd25 (eth0) │ CONTAINER (APP) │ 0 │
├─────────────┼─────────┼─────────────────────────┼──────────────────────────────────────────────────┼─────────────────┼───────────┤
│ rl9 │ RUNNING │ 10.10.10.60 (enp5s0) │ 2602:fc62:ef:1010:fac2:13b0:9ad7:918e (enp5s0) │ VIRTUAL-MACHINE │ 0 │
├─────────────┼─────────┼─────────────────────────┼──────────────────────────────────────────────────┼─────────────────┼───────────┤
│ test │ RUNNING │ 10.226.131.1 (incusbr0) │ fd42:10b9:5a70:b459::1 (incusbr0) │ VIRTUAL-MACHINE │ 0 │
│ │ │ 10.10.10.73 (_venp5s0) │ 2602:fc62:ef:1010:1266:6aff:fe11:9cfd (_venp5s0) │ │ │
├─────────────┼─────────┼─────────────────────────┼──────────────────────────────────────────────────┼─────────────────┼───────────┤
│ u24 │ RUNNING │ 10.10.10.66 (enp5s0) │ 2602:fc62:ef:1010:1266:6aff:fe22:9e8 (enp5s0) │ VIRTUAL-MACHINE │ 0 │
├─────────────┼─────────┼─────────────────────────┼──────────────────────────────────────────────────┼─────────────────┼───────────┤
│ v1 │ RUNNING │ 10.76.140.1 (incusbr0) │ fd42:75ef:6c01:accd::1 (incusbr0) │ VIRTUAL-MACHINE │ 0 │
│ │ │ 10.10.10.69 (enp5s0) │ 2602:fc62:ef:1010:1266:6aff:fe17:7e7f (enp5s0) │ │ │
└─────────────┴─────────┴─────────────────────────┴──────────────────────────────────────────────────┴─────────────────┴───────────┘
librbd backend for Ceph RBD¶
The ceph storage driver gained a ceph.rbd.backend configuration key.
When set to librbd, volumes are accessed through librbd rather than through the RBD kernel driver (krbd)
This allows using RBD features which aren't supported by the kernel driver and can help in environments where the krbd faces stability issues.
Documentation: https://linuxcontainers.org/incus/docs/main/reference/storage_ceph/
Recovery of shared storage pools in clusters¶
incus admin recover can now be used to recover shared storage pools on clustered servers, making disaster recovery possible for clusters that lost their database.
It's assumed that the exact same configuration is used on all servers within the cluster and the server processing the request will be the one initially owning everything that's imported.
Documentation: https://linuxcontainers.org/incus/docs/main/howto/disaster_recovery/
Remote-specific client certificates¶
incus remote add gained --tls-cert, --tls-key and --tls-p12 flags making it easy to load a remote-specific client certificate.
This is useful when working in an environment where you're not just provided with the address to a server or a trust token but instead are provided with a full set of server-generated credentials.
One such example would be a corporate environment with a centrally managed CA.
Another example would be when downloading IncusOS and opting to have our download site generate a client certificate for you.
stgraber@vorash:~$ incus remote add incus-os https://10.10.10.100 --tls-p12 ~/Downloads/client.pfx
Password for /home/stgraber/Downloads/client.pfx:
Raw API requests with custom headers and data files¶
incus query now allows for custom HTTP headers to be set through the -H flag.
It's also now possible to pass in raw binary data using incus query with the --data-file option.
This makes it possible to use the raw API for endpoints which rely on headers or binary payloads, such as the instance file API.
stgraber@vorash:~$ incus query -X POST --data-file ./f.txt -H "X-Incus-type: file" -H "X-Incus-mode: 0600" /1.0/instances/c1/files?path=/root/f.txt
NVRAM access from QEMU scriptlets¶
The QEMU scriptlet can now inspect and modify the NVRAM through a number of new functions:
get_nvram_varhas_nvram_varset_nvram_varunset_nvram_varget_raw_nvram_varset_raw_nvram_varlist_nvram_vars
Documentation: https://linuxcontainers.org/incus/docs/main/reference/instance_options/#qemu-scriptlet
OVN multicast configuration¶
OVN networks gained two new configuration keys, bridge.multicast_snooping and bridge.multicast_relay.
The former controls IGMP/MLD snooping on the virtual switch, only delivering multicast traffic to the ports which subscribed to the group, the latter allows relaying multicast traffic through the network's logical router.
Documentation: https://linuxcontainers.org/incus/docs/main/reference/network_ovn/
Control of IPv6 router advertisements¶
A new ipv6.ra configuration key is available on both bridge and ovn networks, controlling whether IPv6 router advertisements are sent on the network.
Burst I/O limits for disk devices¶
disk devices attached to VMs get new limits.read.burst, limits.write.burst and limits.max.burst keys that take the same syntax as the regular limits (byte/s and/or IOPS) and define the rate that the device may reach while bursting.
The matching limits.read.burst.length, limits.write.burst.length and limits.max.burst.length keys define how long a burst may last, defaulting to one second.
Documentation: https://linuxcontainers.org/incus/docs/main/reference/devices_disk/
Burst I/O limits for network devices¶
nic devices now get new limits.ingress.bucket, limits.egress.bucket and limits.max.bucket keys to define the amount of data (in bit) which may be sent in excess of the sustained limit, with bridged, p2p and routed NICs also taking limits.ingress.burst, limits.egress.burst and limits.max.burst to control the rate at which the bucket may be spent.
For ovn NICs, only the bucket keys are supported.
NIC queuing disciplines¶
bridged, p2p and routed NICs gained a queue.discipline configuration key, selecting the queuing discipline used on the host side of the NIC.
For virtual machines, the host side interface being a multi-queue TAP device, queue.discipline.attach controls whether the queuing discipline is attached to each transmit queue (queue) or to the interface root (root).
Documentation: https://linuxcontainers.org/incus/docs/main/reference/devices_nic/
Image property columns¶
incus image list now supports properties:KEY custom columns, showing the value of any image property directly in the listing.
stgraber@vorash:~$ incus image list images: debian/13 --columns lfpd,properties:os,properties:release,properties:variant
┌──────────────────────────────────┬──────────────┬────────┬────────────────────────────────────────────────┬────────┬─────────┬─────────┐
│ ALIAS │ FINGERPRINT │ PUBLIC │ DESCRIPTION │ OS │ RELEASE │ VARIANT │
├──────────────────────────────────┼──────────────┼────────┼────────────────────────────────────────────────┼────────┼─────────┼─────────┤
│ debian/13 (7 more) │ 065c3e644af0 │ yes │ Debian trixie amd64 (20260827_05:24) │ Debian │ trixie │ default │
│ ├──────────────┼────────┼────────────────────────────────────────────────┼────────┼─────────┼─────────┤
│ │ b8a6f9f60d67 │ yes │ Debian trixie amd64 (20260827_05:24) │ Debian │ trixie │ default │
├──────────────────────────────────┼──────────────┼────────┼────────────────────────────────────────────────┼────────┼─────────┼─────────┤
│ debian/13/arm64 (3 more) │ 4189835984b2 │ yes │ Debian trixie arm64 (20260827_05:24) │ Debian │ trixie │ default │
│ ├──────────────┼────────┼────────────────────────────────────────────────┼────────┼─────────┼─────────┤
│ │ e08e7964a29a │ yes │ Debian trixie arm64 (20260827_05:24) │ Debian │ trixie │ default │
└──────────────────────────────────┴──────────────┴────────┴────────────────────────────────────────────────┴────────┴─────────┴─────────┘
Image locations in clusters¶
Images in a cluster now report a locations field with a list of all servers in the cluster which are holding a copy of that particular image.
Instance start protection¶
A new security.protection.start instance configuration key, when set to true, prevents the instance from being started.
This is quite useful with template instances or decomissioned/backup environments.
stgraber@vorash:~$ incus config set c1 security.protection.start=true
stgraber@vorash:~$ incus start c1
Error: Instance is protected against being started
Ceph Object endpoint certificate¶
The cephobject storage driver's cephobject.radosgw.endpoint_cert_file configuration key has been replaced by cephobject.radosgw.endpoint_cert.
Incus generally tries to avoid referring to local files in configuration given the difficultly in keeping that in sync across multiple servers in a cluster.
Documentation: https://linuxcontainers.org/incus/docs/main/reference/storage_cephobject/
Updated minimal requirements¶
With the release of Go 1.27, Incus has now bumped its minimum Go version to 1.26.
Additionally, recent improvements to our OVN support has also made us bump the minimal OVS to 3.3.0 and OVN to 24.03.0.
Complete changelog¶
Here is a complete list of all changes in this release:
Full commit list
- incus/low-level: Fix naming inconsistency
- i18n: Update translation templates
- shared/api: Hide additional sensitive config keys
- incusd/instance/qmp: Bump query-migrate timeout
- incusd/db: Have NetworkNodeConfigs only consider the requested network
- incusd/network/ovn: Skip empty transactions in SetChassisGroupPriority
- generate-database: Fix GetMany generation for entities without filters
- docs: Clarify the sentence about Incus owning the ZFS pool/dataset
- incusd/daemon: Drop else branches in project expansion
- incusd/bgp: Resolve neighbor address for unnumbered peers
- incus/remote: Restrict proxy /1.0 cache to GET and invalidate on changes
- incusd/endpoints: Fix proxy protocol handling
- incusd/storage: Unmount leftover mounts in CleanupInstancePaths
- incusd/device: Check interface isn't in use by host before passthrough
- incusd/instance/lxc: Fix mount options of OCI /run tmpfs
- incusd/instance/lxc: Skip OCI /run tmpfs when image populates /run
- incusd/cluster: Stop instances in place when evacuation has no target
- api: instance_protection_start
- internal/instance: Add security.protection.start
- incusd/instance: Add support for security.protection.start
- doc: Update config
- incusd/instance: Clarify protection errors
- incusd/forknet: Fix concurrent DHCP resolv.conf handling
- incusd/instance: Update oci.dns.* descriptions
- doc: Update config
- incusd/instance/lxc: Enable edns0 in OCI resolv.conf
- incusd/forknet: Enable edns0 in resolv.conf
- incus: Add support for client-side near-live migration
- incus: Add refresh flag to move
- incusd/instance/drivers: Prevent migration of dependent disk during final sync
- i18n: Update translation templates
- shared/uefi: Various device path fixes
- api: instance_nvram_bulk_update
- client: Add NVRAM bulk update
- incusd/instances: Add NVRAM bulk update
- doc/rest-api: Refresh swagger YAML
- incus/low-level: Accept multiple arguments for nvram set and unset
- client: use a copy of ProtocolIncus for WithContext
- incus/low-level: Allow unsetting nvram with empty set value
- i18n: Update translation templates
- client: Preserve tempPath in UseProject and UseTarget
- incusd/network/ovn: Replace stale SNAT rule on external address change
- incusd/device/nic_ovn: Allow live update of ipv4/ipv6.address.external
- incusd/db: Add generated network, network_config and network_node entities
- incusd/db: Add GetCreatedNetworksInfo
- incusd/network: Add LoadAllCreated
- incusd/network: Reduce database queries in OVN network startup
- incusd/networks: Reduce database queries during network startup
- incusd: Use cached server name for warning operations
- incusd/cluster: Add ConnectIfBucketIsRemote
- incusd: Add forwardedResponseIfBucketIsRemote
- incusd: Forward storage bucket requests to the cluster member holding the bucket
- doc: Document storage bucket handling in clusters
- internal/migration: Don't double close websocket writer
- incusd/instance/qmp: Ignore timeouts during migration
- incusd/network/ovn: Don't replace DNAT rules sharing a logical IP
- incusd/network/ovn: Use tag_request on nested switch ports
- tests: Add OVN test suite
- tests: Register OVN tests
- github: Add OVN tests job
- doc/requirements: Bump minimum OVS/OVN versions
- Makefile: Bump minimum OVS/OVN versions
- internal/server/network: Update generated OVSDB schemas
- incusd/network/ovn: Add logical switch port ARP proxy helpers
- incusd/network/ovn: Use ARP proxy for l2proxy uplink ingress
- incusd/network/ovn: Add GetLogicalRouterNATs
- incusd/patches: Convert OVN l2proxy NAT rules to ARP proxy
- tests: Convert OVN l2proxy NAT checks to ARP proxy
- Translated using Weblate (German)
- Translated using Weblate (German)
- Translated using Weblate (German)
- Translated using Weblate (German)
- Translated using Weblate (German)
- Translated using Weblate (Spanish)
- Translated using Weblate (Spanish)
- Translated using Weblate (Spanish)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (Italian)
- Translated using Weblate (Italian)
- Translated using Weblate (Japanese)
- Translated using Weblate (Japanese)
- Translated using Weblate (Japanese)
- Translated using Weblate (Japanese)
- Translated using Weblate (Dutch)
- Translated using Weblate (Dutch)
- Translated using Weblate (Portuguese (Brazil))
- Translated using Weblate (Portuguese (Brazil))
- Translated using Weblate (Portuguese (Brazil))
- Translated using Weblate (Russian)
- Translated using Weblate (Russian)
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Portuguese)
- Translated using Weblate (Portuguese)
- Translated using Weblate (Portuguese)
- Translated using Weblate (Norwegian Bokmål)
- Translated using Weblate (Norwegian Bokmål)
- Translated using Weblate (Indonesian)
- Translated using Weblate (Indonesian)
- Translated using Weblate (Indonesian)
- Translated using Weblate (Chinese (Traditional Han script))
- Translated using Weblate (Chinese (Traditional Han script))
- Translated using Weblate (Tamil)
- Translated using Weblate (Swedish)
- Translated using Weblate (Swedish)
- Translated using Weblate (Swedish)
- Translated using Weblate (Greek)
- Translated using Weblate (Georgian)
- Translated using Weblate (Georgian)
- client: Handle unmanaged networks in preseed
- incusd/storage/lvm: Wipe source device rather than VG name
- incusd: Add instanceShutdownOrForceStop
- incusd: Allow cluster-internal instance changes on evacuated members
- shared/api: Add 'Refresh' to InstancePost
- incus/move: Pass Refresh to InstancePost
- incusd: Add support for near-live migration
- incusd: Add support for 'refresh-migrate' action in evacuation path
- internal/instance: Add 'refresh-migrate' option to 'cluster.evacuate'
- tests: Add tests for near-live migration
- doc: Update config
- api: instance_refresh_migration
- doc/rest-api: Refresh swagger YAML
- i18n: Update translation templates
- client: Detect dead event connections
- incusd/events: Deliver events in order
- incusd/projects: Send project-updated after the update
- client: Add EventListener.SetOrdered
- doc: Document event ordering
- client: Fix Disconnect not disconnecting
- incusd/storage/lvm: Detect block type in ListVolumes
- incusd/storage: Tolerate missing snapshot record on delete
- incusd/storage: Repair snapshot records on refresh
- incus/admin_sql: Fix integer rendering
- api: image_locations
- shared/api: Add Locations to Image
- incusd/db/images: Fill in image locations
- doc/rest-api: Refresh swagger YAML
- api: network_ovn_multicast
- incusd/network/ovn: Add multicast helpers
- incusd/network/ovn: Add bridge.multicast_snooping and bridge.multicast_relay
- doc: Update configs
- incusd/instance/qemu: Use temporary data-file when growing metadata image
- Translated using Weblate (German)
- Translated using Weblate (German)
- Translated using Weblate (German)
- Translated using Weblate (German)
- Translated using Weblate (German)
- Translated using Weblate (Spanish)
- Translated using Weblate (Spanish)
- Translated using Weblate (Spanish)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (Italian)
- Translated using Weblate (Italian)
- Translated using Weblate (Japanese)
- Translated using Weblate (Japanese)
- Translated using Weblate (Japanese)
- Translated using Weblate (Japanese)
- Translated using Weblate (Dutch)
- Translated using Weblate (Dutch)
- Translated using Weblate (Portuguese (Brazil))
- Translated using Weblate (Portuguese (Brazil))
- Translated using Weblate (Portuguese (Brazil))
- Translated using Weblate (Russian)
- Translated using Weblate (Russian)
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Portuguese)
- Translated using Weblate (Portuguese)
- Translated using Weblate (Portuguese)
- Translated using Weblate (Norwegian Bokmål)
- Translated using Weblate (Norwegian Bokmål)
- Translated using Weblate (Indonesian)
- Translated using Weblate (Indonesian)
- Translated using Weblate (Indonesian)
- Translated using Weblate (Chinese (Traditional Han script))
- Translated using Weblate (Chinese (Traditional Han script))
- Translated using Weblate (Tamil)
- Translated using Weblate (Swedish)
- Translated using Weblate (Swedish)
- Translated using Weblate (Swedish)
- Translated using Weblate (Greek)
- Translated using Weblate (Georgian)
- Translated using Weblate (Georgian)
- tests: Skip OVN tests when INCUS_OFFLINE is set
- tests: Add cgroup test suite
- github: Add cgroup tests job
- tests: Add interception test suite
- github: Add interception tests job
- tests: Add network bridge firewall test suite
- github: Add network bridge firewall tests job
- tests: Add storage buckets drivers test suite
- github: Add storage buckets drivers tests job
- Translated using Weblate (Portuguese)
- doc: Document instance-migrated lifecycle event
- incusd/storage/linstor: Fix snapshot resource definition races
- incusd/storage/cephfs: Sync filesystem before snapshot creation
- tests: Wait for nc listeners in network address set test
- tests: Use a 4GiB btrfs test pool
- incusd: Retry transient database errors in the admin SQL endpoint
- incusd/db: Make AddImageToLocalNode idempotent
- tests: Wait for monitor subscription in dev-incus test
- incusd: Retry cluster role handover while another change is in progress
- instance: Derive process start time from proc stat
- incusd/storage/linstor: Mount snapshot volumes read-only
- incus/create: Allow --environment-file to be passed multiple times
- incus: Mention repeatable flags in help strings
- i18n: Update translation templates
- shared/simplestreams: Include variant in image description
- client: Fix crash on listener disconnect without error
- incusd/network/zone: Allow underscore-prefixed names
- incusd/patches: Upgrade OpenFGA model
- incusd: Use x-example in swagger operation parameters
- incusd: Fix header definitions in swagger comments
- incusd: Fix body parameters in swagger comments
- incusd/instance_nvram: Mark var path parameter as required
- incusd: Fix response examples in swagger comments
- shared/api: Drop invalid examples from preseed structs
- shared/api: Drop swagger:model from metadata map key types
- incusd/metadata: Fix swagger definition of configuration endpoint
- incusd/storage: Fix swagger body definition for volume backup rename
- test/lint: Validate swagger spec
- doc/rest-api: Refresh swagger YAML
- incusd: Fix storage volume project expansion
- tests: Cover inherited storage volume authorization
- incusd/storage/linstor: Retry resource definition deletion
- tests: Use future expiry for volume snapshot property test
- incusd: Make cluster role handover resilient to leader changes
- shared/tls: Renew certificates at 80% of validity period
- incusd/acme: Update for CertificateNeedsUpdate change
- incusd/acme: Run renewal check hourly
- incusd: Give up on cluster database after failed role handover
- incusd/images: Propagate old image deletion errors during refresh
- incusd/storage/btrfs: Wait for quota rescan after enabling quotas
- incusd: Bound global database close during shutdown
- incusd/instance/qemu: Record maxcpus in boot state
- incusd/db/cluster: Make node_cluster_group deletion a DeleteMany
- incusd: Fix PATCH of cluster group with multiple members
- global: Fix warnings on double file close
- incusd: Simplify global database shutdown
- incusd/events: Send events outside of the lock
- gomod: Update go-cowsql
- incusd/storage/linstor: Enforce minimum DRBD volume size
- incusd/storage/linstor: Enforce exact DRBD volume sizes
- incusd/storage/lvm: Only grow snapshot CoW capacity when needed
- incusd/qemu: Make generated configuration deterministic
- github: Drop storage_buckets_drivers from extended tests
- tests: Switch to debian/13 test image
- github: Run network_bridge_firewall test on arm64
- tests: Allow overriding the CLI command timeout
- tests: Add cpu vm test suite
- tests: Add guestapi vm test suite
- tests: Add network routed test suite
- tests: Add storage disks vm test suite
- tests: Add storage vm test suite
- tests: Add storage volumes vm test suite
- github: Add VM tests job
- Translated using Weblate (German)
- Translated using Weblate (German)
- Translated using Weblate (German)
- Translated using Weblate (German)
- Translated using Weblate (German)
- Translated using Weblate (Spanish)
- Translated using Weblate (Spanish)
- Translated using Weblate (Spanish)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (Italian)
- Translated using Weblate (Italian)
- Translated using Weblate (Japanese)
- Translated using Weblate (Japanese)
- Translated using Weblate (Japanese)
- Translated using Weblate (Japanese)
- Translated using Weblate (Dutch)
- Translated using Weblate (Dutch)
- Translated using Weblate (Portuguese (Brazil))
- Translated using Weblate (Portuguese (Brazil))
- Translated using Weblate (Portuguese (Brazil))
- Translated using Weblate (Russian)
- Translated using Weblate (Russian)
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Portuguese)
- Translated using Weblate (Portuguese)
- Translated using Weblate (Portuguese)
- Translated using Weblate (Norwegian Bokmål)
- Translated using Weblate (Norwegian Bokmål)
- Translated using Weblate (Indonesian)
- Translated using Weblate (Indonesian)
- Translated using Weblate (Indonesian)
- Translated using Weblate (Chinese (Traditional Han script))
- Translated using Weblate (Chinese (Traditional Han script))
- Translated using Weblate (Tamil)
- Translated using Weblate (Swedish)
- Translated using Weblate (Swedish)
- Translated using Weblate (Swedish)
- Translated using Weblate (Greek)
- Translated using Weblate (Georgian)
- Translated using Weblate (Georgian)
- shared/uefi: Diverse fixes
- shared/uefi: Refactor dissection primitives
- shared/uefi: Add missing writers
- shared/uefi: Add formatting primitives
- shared/uefi: Add device path string representation lexer
- shared/uefi: Add device path formatting
- shared/uefi: Add device path tests
- shared/uefi: Implement Boot#### formatting
- incus/image: Add support for properties columns in image list
- i18n: Update translation templates
- doc/storage: Add TrueNAS to data storage location table
- lxc: Start live migration action operation before pre-dumps
- incusd/network/ovn: Handle dynamic addresses and removal for ipv4/ipv6.address.external
- incusd/device/nic_ovn: Remove stale SNAT rules on external address update
- incusd/firewall: Restrict wildcard proxy NAT to local addresses
- tests: Update proxy NAT wildcard listen address checks
- incusd/images: Split pruneExpiredImage into its own function
- incusd/images: Hold image lock when pruning and auto-updating images
- Revert "client: Add EventListener.SetOrdered"
- client: Add EventListener.AddChannel
- doc: Document AddChannel/RemoveChannel
- doc: Fix events table alignment
- incus/monitor: Port to EventListener.AddChannel
- incus/remote: Explain trust token prompt in verbose mode
- incus/remote: Add --tls-cert, --tls-key and --tls-p12 to remote add
- incus/remote: Move client certificates on rename
- incus/remote: Delete client certificates on removal
- i18n: Update translation templates
- incusd/cluster: Apply cluster configuration before member init
- incusd/project: Require OVN for features.networks
- doc: Update configs
- tests: Handle OVN requirement for features.networks
- incusd/instance/qmp: Use job-complete instead of block-job-complete
- incusd/instance/qemu: Use -qmp chardev instead of mon config section
- incusd/instance/qemu: Use confidential-guest-support instead of memory-encryption
- incusd/instance/qemu: Remove -mem-path and -mem-prealloc
- incusd/instance/qemu: Move sandbox configuration to qemu.conf
- incusd/instance/qemu: Move RTC configuration to qemu.conf
- incusd/instance/qemu: Move SPICE configuration to qemu.conf
- lxc: Make incremental memory migration opt-in
- storage/ceph: Ignore detached devices during RBD sysfs scan
- lxc: Normalize received CRIU state ownership
- incusd/networks: Fix panic when a network fails to start
- incusd/networks: Notify cluster members before local deletion
- incusd/cluster: Fail fast when target member is offline
- incusd/cluster: Mark offline members as unavailable for event connections
- incusd/cluster: Avoid expensive connectivity probes in NewNotifier
- incusd/cluster: Add connection timeouts to intra-cluster TLS dialer
- incusd/images: Surface write errors from compression pipeline
- incusd/instance/qemu: Cancel incoming state transfer on source failure
- client: Reconnect operation event listener on connection failure
- doc: explain how to resize virtual-machine/* volumes
- doc: storage_volumes: prefer
key=valueoverkey value - shared/subprocess: Make TryRunCommand always use C as locale
- incusd/storage/lvm: Force use of C locale everywhere isLVMNotFoundExitError is used
- incusd/storage/lvm: Check error output in isLVMNotFoundExitError
- incusd/storage/lvm: Preserve sanlock global lock on clustered pool deletion
- incusd/images: Skip offline members during image distribution
- incusd/storage: Don't query offline members in volume listing
- incusd/storage/dir: Set quota project on block volumes
- incusd/storage/dir: Set up quota when restoring custom volumes from backup
- incusd/response: Don't warn on already closed connections
- incusd/instance/qemu: Don't warn on already removed snapshot file
- incusd/instance/qemu: Return Bad Request when no NBD session is active
- shared/uefi: Implement Key#### formatting
- shared/uefi: Make formatters mandatory
- shared/uefi: Accept hexadecimal Boot#### variables
- client/oci: Move unpackOCIImage to ProtocolOCI
- gomod: Add opencontainers/image-spec
- client/oci: Strip volume mounts during unpack
- tests: Update client dependency list
- incusd/storage/drivers: Add flushBlockDeviceCache
- incusd/storage/linstor: Invalidate stale device caches on mount
- incusd/storage/linstor: Unmount volumes synchronously
- incusd/instance/qemu: Sync shared config volume during live migration
- incusd/instance/qemu: Skip config drive generation on live migration receive
- incusd/instance/qemu: Add IsLiveMigration
- incusd/device/tpm: Move swtpm control socket to the devices path
- incusd/device/tpm: Enable swtpm migration handling
- incusd/instance/qmp: Make MigrateWait event-driven
- incusd/instance/qemu: Enable migration status events
- incusd/storage: Fix source snapshot project on same-pool custom volume refresh
- incus/server/device/nic/ovn: hot-reloadable ovn nic limits
- incusd/storage/drivers/linstor: Sync filesystem instead of freezing it before snapshots
- incusd/storage: Add cleanupDependencies argument to DeleteInstanceSnapshot
- incusd/storage/drivers: Add NearLiveMigration to driver Info struct
- incusd: Add dependent disk support for in-cluster near-live migration
- incusd/instance/drivers: Add dependent disk support for in-cluster near-live migration
- tests: Add near-live migration dependent disks tests
- incusd/storage: Add skipDisks argument to GenerateDependentVolumesOffer
- incusd/instance: Add SkipDependentVolumes to MigrateSendArgs
- incusd: Add support for near-live migration for shared root storage and local dependent disks
- incusd/instances: Add non-volatileness check for NVRAM variables
- shared/uefi: Make ESL, ESLNode and ESLEntry public
- shared/uefi: Add Secure Boot vendor GUIDs
- incus/low-level: Add secureboot list subcommand
- incus/low-level: Add secureboot remove subcommand
- incus/low-level: Add secureboot add subcommand
- incus/low-level: Fix unmarshalling to nil pointer
- incus/low-level: Simplify default NVRAM list cols
- incus/low-level: Add column description for nvram list
- incus/low-level: Fix repair autocomplete
- incus/config_trust: Add full fingerprint column
- i18n: Update translation templates
- incusd/instance_post: Skip unchecked err
- golangci: Tweak static-check
- generate-database: Fix test on Go 1.27
- incusd/device: Add support for disk burst limits
- incusd/instance/drivers: Add support for disk burst limits
- tests: Add tests for disk burst limits
- doc: Add documentation for disk burst limits
- doc: Update configs
- api: device_burst_limits
- incus/query: Add --data-file flag
- i18n: Update translation templates
- incusd/device: Use network project for address set refresh on bridged NIC
- shared/uefi: Keep non-NV_VARIABLE_STORE regions
- shared/uefi: Sort GUIDs by name
- shared/uefi: Implement PlatformConfig dissector
- shared/uefi: Refactor Boot#### variable name parsing
- shared/uefi: Make Boot public
- shared/uefi: Implement BootNext dissector
- incus/start: Add --override-boot flag
- i18n: Update translation templates
- api: Add network_ipv6_ra extension
- incusd/network/bridge: Add ipv6.ra config key
- incusd/network/ovn: Add ipv6.ra config key
- doc: Update configs
- incusd/project: Add support for networks shared through restricted.networks.access
- incusd: Handle networks shared through restricted.networks.access
- incusd/device: Resolve shared networks for NIC devices
- incusd/network: Account for shared networks in usage checks
- incusd: Validate restricted.networks.access against project networks
- doc: Update configs
- tests: Add coverage for shared networks in projects
- incusd/auth: Add network shares to the authorizer interface
- incusd/auth: Add shared network support to OpenFGA
- incusd/auth: Update generated OpenFGA model
- incusd: Maintain OpenFGA network shares
- incusd: Add auth_openfga_shared_networks patch
- tests: Add OpenFGA shared network coverage
- incus/low-level: Fix unset capability of nvram set
- incusd/network/ovn: Add DeleteMACBindings
- incusd/network/ovn: Delete stale MAC bindings on instance port stop
- tests: Add NVRAM VM tests
- github: Add NVRAM VM tests job
- shared/uefi: Add getters and setters to the store
- shared/uefi: Make formatters more robust
- incusd/instances: Use new store interface
- incusd/instance/qemu: Avoid needlessly rewriting the NVRAM
- incusd/scriptlet/qemu: Add NVRAM manipulation funs
- incusd/instance/qemu: Pass NVRAM to QEMU scriptlet
- shared/scriptlet: Implement bytes (un)marshalling
- tests: Add NVRAM scriptlet test
- api: qemu_scriptlet_nvram
- doc/ref/instance_options: Update QEMU scriptlet functions
- i18n: Update translation templates
- incusd/ip: Add Addr.FlushDynamic
- incusd/device: Allow "none" NIC addresses without filtering
- incusd/forknet: Disable IPv6 autoconf on statically configured interfaces
- doc: Update configs
- incusd/ip: Add support for nic burst limits
- incusd/device: Add support for nic burst limits
- incusd/network/ovn: Add support for nic burst limits
- tests: Add tests for nic burst limits
- doc: Update configs
- api: device_burst_limits
- Translated using Weblate (German)
- Translated using Weblate (German)
- Translated using Weblate (German)
- Translated using Weblate (German)
- Translated using Weblate (German)
- Translated using Weblate (Spanish)
- Translated using Weblate (Spanish)
- Translated using Weblate (Spanish)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (French)
- Translated using Weblate (Italian)
- Translated using Weblate (Italian)
- Translated using Weblate (Japanese)
- Translated using Weblate (Japanese)
- Translated using Weblate (Japanese)
- Translated using Weblate (Japanese)
- Translated using Weblate (Dutch)
- Translated using Weblate (Dutch)
- Translated using Weblate (Portuguese (Brazil))
- Translated using Weblate (Portuguese (Brazil))
- Translated using Weblate (Portuguese (Brazil))
- Translated using Weblate (Russian)
- Translated using Weblate (Russian)
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Portuguese)
- Translated using Weblate (Portuguese)
- Translated using Weblate (Portuguese)
- Translated using Weblate (Norwegian Bokmål)
- Translated using Weblate (Norwegian Bokmål)
- Translated using Weblate (Indonesian)
- Translated using Weblate (Indonesian)
- Translated using Weblate (Indonesian)
- Translated using Weblate (Chinese (Traditional Han script))
- Translated using Weblate (Chinese (Traditional Han script))
- Translated using Weblate (Tamil)
- Translated using Weblate (Swedish)
- Translated using Weblate (Swedish)
- Translated using Weblate (Swedish)
- Translated using Weblate (Greek)
- Translated using Weblate (Georgian)
- Translated using Weblate (Georgian)
- incusd/instance/qmp: Set a write deadline on monitor commands
- api: Add storage_ceph_rbd_backend extension
- incusd/storage/ceph: Add ceph.rbd.backend config key
- doc: Update configs
- incusd/images: Consider both architecture names when filtering
- incus/image: Consider both architecture names when filtering
- incusd: Allow recovering shared storage pools when clustered
- incus/admin: Allow recovering shared storage pools when clustered
- doc: Cover shared pool recovery on clusters
- Translated using Weblate (Portuguese)
- shared/cmd: Fix progress rendering on non-terminals
- incusd/events: Don't warn when the peer closed the connection first
- incus/network: Use global --project flag in list-allocations
- incus: Add shell completion for --project flag
- incus: Add shell completion for --target-project flag
- i18n: Update translation templates
- client: Fix event connection cleanup on listener failure
- client: Make operation reconnection more resilient
- incusd/instance/lxc: Don't fail Stop when the container stopped on its own
- incusd: Block instance creation from backup while evacuated
- incusd/cluster: Wait for ongoing instance creations before evacuating
- incusd/instance/qemu: Include stderr output in restore crash errors
- incusd/instance: Factor memory into balanced NUMA node selection
- incusd: Validate project in bulk instance state update
- incusd/cluster: Collect per-instance evacuation and restore errors
- incusd/instance/qmp: Add MigrateCancel
- incusd/instance/qemu: Treat live migration hand-over as cut-off
- incusd: Keep instance database location in sync after live migration hand-over
- shared/uefi: Add Incus GUID
- incus/low-level: Use new Incus vendor
- shared/util: Add ESLGUIDVar
- cmd/low-level: Use util.ESLGUIDVar
- shared/validate: Add IsRawNVRAMVariable and IsPEM
- incusd/instance/config: Add initial.nvram., initial.nvram-binary. and initial.secureboot.*
- doc: Update configs
- incusd/instance/qemu: Add support for NVRAM config overrides
- tests: Add NVRAM config override test
- api: instance_nvram_config
- i18n: Update translation templates
- incusd/dns: Add NOTIFY support
- incusd/network/zone: Bump SOA refresh to 15min
- incusd/network/zone: Send NOTIFY on zone and record changes
- incusd/network: Add DNSNotifyZones helper
- incusd/network/zone: Add dnsmasq file watcher
- incusd: Start network zones watcher
- incusd/network/ovn: Send NOTIFY on port and uplink changes
- incusd/networks: Send NOTIFY on network create, update and delete
- doc: Document network zone DNS NOTIFY
- incusd/instance/lxc: Fix instance directory ownership with raw.idmap
- tests: Add raw.idmap host root mapping test
- api: Add storage_cephobject_endpoint_cert extension
- incusd/storage/cephobject: Replace endpoint_cert_file with endpoint_cert
- incusd/patches: Convert cephobject.radosgw.endpoint_cert_file
- doc: Update configs
- shared/validate: Make IsPEM match anchor regexes
- Makefile: Bump minimum to Go 1.26
- gomod: Bump minimum to Go 1.26
- doc/requirements: Bump minimum to Go 1.26
- Use strings.SplitSeq to iterate over split strings
- Use new(expr) instead of protobuf pointer helpers
- Use range over int in counting loops
- Use standard library iterators
- Use strings.Builder for string concatenation
- Use fmt.Appendf
- Use errors.AsType
- Use slices.Backward for reverse iteration
- Use strings.Cut
- incusd/cgroup: Fix parse error messages
- incusd/db: Return Conflict error on duplicate storage volume record
- incusd/storage: Fix error wrapping in VolumeDBCreate
- incusd/storage/linstor: Set resource definition properties at clone time
- incusd/storage/linstor: Implement IsImageCloneSourceReady
- incusd/storage: Handle concurrent image volume creation across cluster members
- Use httputil.ReverseProxy.Rewrite
- incusd/network_integrations: Validate PEM blobs
- incusd/cluster/config: Remove unused LokiServer
- incusd/cluster/config: Validate PEM blobs
- incus/server/config: Validate PEM blobs
- doc: Update configs
- incusd/network/ovn: Allow multiple CAs
- shared/tls: Add ReadCerts
- incusd: Allow multiple CAs
- incusd/storage/linstor: Allow multiple CAs
- incusd/network/acl: Fix OVN ACL matching for cross-chassis traffic
- incusd/patches: Regenerate OVN ACL rules for address set matching
- incus/low-level: Add secureboot export subcommand
- incus/low-level: Add bundle support in secureboot add
- incus/low-level: Add secureboot import subcommand
- tests: Improve low-level secureboot coverage
- i18n: Update translation templates
- incusd/firewall/nftables: Allow EUI-64 link-local address with IPv6 filtering
- tests: Check link-local handling with IPv6 filtering
- incusd/ip: Add QdiscGeneric
- incusd/instance: Add CPUUsage
- incusd/network: Add GetTXQueueCount
- api: device_queue_disc
- incusd/device: Add support for nic queuing disciplines
- doc: Document queuing disciplines
- doc: Update configs
- tests: Add tests for nic queuing disciplines
- shared/tls: Don't duplicate issuer certificates in ACME chain
- incusd/network/ovn: Don't wait forever for database reconnection
- shared/cmd: Modernize table look
- shared/cmd: Prevent merging the last column
- tests: Reduce assumptions on list format
- doc: Use new key=value syntax
- doc: Use new table layout
- shared/uefi: Correctly handle padded VARS files
- client: Add RawQueryWithHeaders
- incus/query: Add --header flag
- test: Add test for query --header
- i18n: Update translation templates
- incus/oci: Don't URL-escape credentials in skopeo authfile
- incusd/network: Switch to backoff/v7
- incus: Switch to go-viper/mapstructure/v2
- incusd/device: Switch to gopacket/gopacket
- Update gomod
- doc/rest-api: Refresh swagger YAML
- incusd/storage/zfs: Reset host-facing properties of delegated datasets
- tests: Check properties of delegated ZFS datasets
- doc/storage/zfs: Document dataset delegation
- incusd/images: Check access before reusing cross-project image
- client/images: Prevent path traversal in downloaded image name
- Release Incus 7.4
Documentation¶
The Incus documentation can be found at:
https://linuxcontainers.org/incus/docs/main/
Packages¶
There are no official Incus packages as Incus upstream only releases regular release tarballs. Below are some available options to get Incus up and running.
Installing the Incus server on Linux¶
Incus is available for most common Linux distributions. You'll find detailed installation instructions in our documentation.
https://linuxcontainers.org/incus/docs/main/installing/
Homebrew package for the Incus client¶
The client tool is available through HomeBrew for both Linux and MacOS.
https://formulae.brew.sh/formula/incus
Chocolatey package for the Incus client¶
The client tool is available through Chocolatey for Windows users.
https://community.chocolatey.org/packages/incus/7.4.0
Winget package for the Incus client¶
The client tool is also available through Winget for Windows users.
https://winstall.app/apps/LinuxContainers.Incus
Support¶
Monthly feature releases are only supported up until the next release comes out. Users needing a longer support length and less frequent changes should consider using Incus 7.0 LTS instead.
Community support is provided at: https://discuss.linuxcontainers.org
Commercial support is available through: https://zabbly.com/incus
Bugs can be reported at: https://github.com/lxc/incus/issues
Older news¶
- 31.07.2026
- 10.07.2026
- 26.06.2026
- 30.05.2026
- 05.05.2026
- 27.03.2026
- 16.03.2026
- 27.02.2026
- 23.01.2026
- 19.12.2025
- 29.11.2025
- 31.10.2025
- 26.09.2025
- 29.08.2025
- 15.08.2025
- 01.08.2025
- 28.06.2025
- 30.05.2025
- 25.04.2025
- 04.04.2025
- 28.03.2025
- 28.02.2025
- 24.01.2025
- 19.12.2024
- 13.12.2024
- 15.11.2024
- 03.10.2024
- 17.09.2024
- 06.09.2024
- 09.08.2024
- 12.07.2024
- 28.06.2024
- 31.05.2024
- 07.05.2024
- 04.04.2024
- 26.03.2024
- 23.02.2024
- 29.01.2024
- 26.01.2024
- 21.12.2023
- 27.11.2023
- 28.10.2023
- 07.10.2023


