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
| Property | LXD (Canonical) | Incus (Community) |
|---|---|---|
| Governance | Canonical (commercial) | Linux Containers community |
| License | Apache 2.0 | Apache 2.0 |
| Installation | Snap (preferred) or package | APT package / native |
| Ubuntu coupling | Strong (MicroCloud, Snap) | Distro-agnostic |
| LTS support | Canonical commercial LTS | Community LTS (2 years) |
| Debian official repo | No | Yes (Debian 13+) |
| API compatibility | LXD API | LXD-compatible + extensions |
| Command prefix | lxc | incus |
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:
- 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.
- 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.
- 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
lokilogging 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 →