LXD is Dead. Long Live Incus: The Complete Migration Guide (2025)

LXD
2014–2023
Incus
2023–present

In November 2023, LXD officially became a Canonical product. Within two months, the lead maintainer who had driven LXD for years — Stéphane Graber — announced a community fork: Incus. If you're running LXD in production today, here's everything you need to know.

What Happened to LXD?

LXD was originally developed under linuxcontainers.org, an independent project umbrella. In mid-2023, Canonical (the company behind Ubuntu) announced it was taking LXD under direct ownership, moving it from the community umbrella to Canonical's own GitHub organization.

This meant:

  • The project is now fully governed by Canonical — a commercial company
  • Canonical can change licensing, feature priorities, and business model at any time
  • Community contributors no longer have equal standing
  • LXD is increasingly coupled to Ubuntu, Snap packages, and the MicroCloud product
ℹ️

LXD still works and is actively maintained by Canonical. If you're running Ubuntu and don't mind depending on a Canonical product, LXD remains a valid choice. But for everyone else — especially those running Debian, Alpine, or other distros — Incus is the better path.

What Is Incus?

Incus is a direct fork of LXD maintained by Stéphane Graber and the broader Linux Containers community. It launched in August 2023 and reached its v6.0 LTS release in April 2024.

Key facts:

  • Licensed under Apache 2.0 — fully open source
  • Hosted under linuxcontainers.org — community governed
  • Available in Debian 13 and Ubuntu 24.04 official repositories
  • No snap required — installs as a standard system package
  • API-compatible with LXD (migration is straightforward)

Key Differences: Incus vs LXD

PropertyLXD (Canonical)Incus (Community)
GovernanceCanonical (commercial)Linux Containers community
LicenseApache 2.0Apache 2.0
InstallationSnap (preferred) or packageAPT package / native
Ubuntu couplingStrong (MicroCloud, Snap)Distro-agnostic
LTS supportCanonical commercial LTSCommunity LTS (2 years)
Debian official repoNoYes (Debian 13+)
API compatibilityLXD APILXD-compatible + extensions
Command prefixlxcincus
💡

The Incus team renamed the CLI from lxc to incus to avoid confusion with the lower-level lxc userspace tools. Most commands are identical, just with a different prefix.

Why You Should Migrate Now

There are three practical reasons to switch to Incus sooner rather than later:

  1. Snap dependency — Canonical is pushing LXD to use Snap packages, which don't integrate cleanly with non-Ubuntu systems, AppArmor profiles, and custom kernel configs.
  2. Feature divergence — Incus is receiving features specifically requested by the community (improved storage backends, OIDC integration, fine-grained RBAC) that Canonical may not prioritize in LXD.
  3. Vendor risk — Running a core piece of infrastructure owned by a single company introduces business risk. Incus is a community project with multiple active contributors.

Step-by-Step Migration from LXD to Incus

Migration is straightforward thanks to the official lxd-to-incus tool. This process preserves all your instances, storage, networks, and profiles.

Prerequisites

  • LXD 5.0+ installed
  • Root access
  • A snapshot or backup of important data (strongly recommended)

1. Install Incus

# Debian/Ubuntu (APT — no Snap needed)
curl -fsSL https://pkgs.zabbly.com/key.asc | gpg --dearmor -o /etc/apt/keyrings/zabbly.gpg

cat > /etc/apt/sources.list.d/zabbly-incus-stable.sources <<EOF
Enabled: yes
Types: deb
URIs: https://pkgs.zabbly.com/incus/stable
Suites: $(. /etc/os-release && echo $VERSION_CODENAME)
Components: main
Architecture: amd64 arm64
Signed-By: /etc/apt/keyrings/zabbly.gpg
EOF

apt update
apt install incus

2. Run the Migration Tool

# Install the migration tool
apt install lxd-to-incus

# Run migration — stops LXD, migrates state, starts Incus
lxd-to-incus

The tool will:

  • Stop LXD daemon
  • Move storage pools, networks, profiles, instances, and certificates
  • Start Incus daemon
  • Verify instance states

3. Update Your Scripts

Replace lxc with incus in any scripts or automation:

# Before
lxc list
lxc launch ubuntu:22.04 my-instance
lxc exec my-instance -- bash

# After
incus list
incus launch ubuntu:22.04 my-instance
incus exec my-instance -- bash

4. Verify the Migration

# Check all instances are running
incus list

# Verify storage pools are intact
incus storage list

# Check networks
incus network list
💡

VeloxaHost runs on Incus. Every instance you deploy on our platform benefits from Incus's project isolation, OVN networking, and ZFS snapshots — maintained by the same team as the community project.

New Incus Features (Not in LXD)

Since forking, Incus has added several features that LXD does not have:

  • OIDC authentication — Integrate with any OpenID Connect provider (Keycloak, Auth0, etc.) for remote access
  • Fine-grained RBAC — Project-level role assignments beyond the LXD admin/user binary
  • OVN Interconnect — BGP peering between Incus clusters for multi-datacenter networking
  • Improved loki logging integration — Ship logs directly to Loki/Grafana
  • Cluster-aware storage — Better handling of distributed ZFS storage pools

Should You Still Use LXD?

Only in these cases:

  • You're fully committed to Ubuntu everywhere and trust Canonical's product roadmap
  • You rely on MicroCloud (Canonical's bundled stack — MicroCeph, MicroOVN, LXD)
  • You have existing Canonical support contracts covering LXD

In every other situation, migrate to Incus. It's the community's choice, it's distro-agnostic, and it has the original maintainer.


Ready to run Incus-powered cloud infrastructure? VeloxaHost runs on Incus — deploy your first instance in under 30 seconds. Start your free trial →