How to Migrate from GLPI 10 to GLPI 11: Step-by-Step Guide

The GLPI 10 to 11 migration playbook we use in production support: checklist, plugin compatibility table, real backup and update commands, what actually breaks and how to roll back.

Migrating from GLPI 10 to GLPI 11 almost never fails at the database update command - it fails at what comes before and after it. This guide consolidates the playbook we apply supporting client environments: where things really break, how to armor each step and how to roll back if something goes wrong.

First things first: why migration needs method

Migrating from 10 to 11 changes the database schema irreversibly and replaces the entire presentation layer (now on Symfony and Twig). It is not a "swap the files and go". The two things that cause the most unplanned downtime are incompatible plugins left active during the update and the PHP version on the server. Treat the migration as a small project, with a window and a rollback plan, not as a hotfix. Also plan to tell users the 11 interface looks different from 10 - a good share of post-migration tickets are people lost in the new layout, not actual bugs.

Pre-migration checklist

  • Full backup of the database (mysqldump) and of the configuration and data directories.
  • Be on the latest GLPI 10 minor (most recent 10.0.x) before jumping to 11.
  • PHP 8.1+ installed and active in the correct CLI and FPM version.
  • A plugin inventory with each one's GLPI 11 compatibility status.
  • A staging environment with a real copy of the database to rehearse the migration.

Plugins: what changes in GLPI 11

PluginStatus in GLPI 11Action before migrating
FormCreatorAbsorbed into the core (native forms)Disable and remove
GenericObjectAbsorbed into the core (custom objects)Disable and remove
FusionInventoryDiscontinuedMigrate to the GLPI Agent
Fields, Escalade, DataInjection, PDF, TagHave a version for 11Update after the migration
NexToolCompatible with 10 and 11Update to the 11 version
Plugins with no update since 2023Likely incompatibleAssess replacement

1. Full backup (and tested)

A backup you have never restored is not a backup, it is a hope. Generate it and at least validate the file size:

# Database
mysqldump -u root -p --single-transaction glpi > /backup/glpi_pre_migration.sql

# Files (config, data and plugins)
tar -czf /backup/glpi_files_pre_migration.tar.gz /var/www/glpi /etc/glpi /var/lib/glpi

2. Disable incompatible plugins

In GLPI 10, go to Setup > Plugins and disable every one without a version for 11. Remove the directories of the incompatible ones. This step is not optional: it is the number 1 cause of failure at the update command.

3. Update the GLPI files

cd /tmp
wget https://github.com/glpi-project/glpi/releases/download/11.0.0/glpi-11.0.0.tgz
tar -xzf glpi-11.0.0.tgz

# Replace files while preserving config, data and plugins
rsync -av --delete /tmp/glpi/ /var/www/glpi/ --exclude plugins/ --exclude marketplace/
chown -R www-data:www-data /var/www/glpi

Always download the latest stable release of the 11.x line, not necessarily 11.0.0.

4. Run the database migration

php /var/www/glpi/bin/console db:update --no-interaction

This command applies all schema migrations. Watch the entire output - any error must be resolved before moving on, never ignored.

5. Clear cache and sessions

php /var/www/glpi/bin/console cache:clear
rm -rf /var/lib/glpi/_sessions/*

6. Post-migration verification

  • Login works and the version under Setup > General shows 11.x.
  • Tickets, assets and users are present with the expected totals.
  • Opening a new ticket works end to end.
  • Logs with no recurring errors after a few minutes of use.
  • Re-enable and update the compatible plugins one by one, testing between each.

What we learned in production support

In practice, the migration rarely fails at db:update itself. It fails afterwards: an incompatible plugin left active that brings the interface down with a 500 error, the FPM PHP pointing to a version GLPI 11 does not accept (while the CLI is already on 8.1), or the client who skipped a 10 minor and reaches the update command with a schema that does not match. That is why our playbook always updates to the latest 10.0.x first, validates, and only then jumps to 11 - re-enabling plugins one by one, never all at once, because when something breaks you need to know exactly which plugin was responsible.

The most common pitfall

The classic mistake is assuming FormCreator forms migrate on their own to GLPI 11's native forms. They do not: the plugin goes away, but the forms it created must be rebuilt manually in the new core. Inventory the FormCreator forms before removing the plugin, or you will discover the loss in production, with a user complaining that the form vanished. The second most common error is running db:update with an incompatible plugin still active: the console tries to load the plugin, hits an API that no longer exists and aborts mid-migration.

Rollback: when something goes wrong

Because the schema change is irreversible, rollback is not "undo" - it is restoring the previous state. That is why the tested backup from step 1 is non-negotiable:

# Restore files
tar -xzf /backup/glpi_files_pre_migration.tar.gz -C /

# Restore database
mysql -u root -p glpi < /backup/glpi_pre_migration.sql

Rehearsing this restore in staging before the real window is what separates a scare from an incident.

Next step

After the migration, explore the native forms and the rest of GLPI 11's new features, and reintroduce the essential plugins. To expand the core without piling up plugins that break at the next major, NexTool concentrates dozens of modules into a single plugin, with versions for 10 and 11. Need support with the migration? Talk to the team.


Reviewed by the NexTool Solutions team.

Frequently Asked Questions

Yes, as long as you make a full, tested backup first, are on the latest 10.0.x, verify each plugin's compatibility and rehearse in staging. The migration changes the database schema irreversibly, so the backup is not optional.

It depends. FormCreator and GenericObject were absorbed into the core and must be removed before migrating. FusionInventory was discontinued (use the GLPI Agent). Fields, Escalade and others have a version for 11. NexTool is compatible with 10 and 11. Map each plugin's status before you start.

The database update itself takes 5 to 30 minutes depending on data volume. What takes time is the planning, the staging rehearsal and re-enabling plugins one by one - that can take 1 to 5 days in larger environments.

Not by undoing: the migration changes the schema irreversibly. Going back means restoring the database and file backup taken before the migration. That is why testing the restore in staging is part of the process, not an extra.

Almost always because of an incompatible plugin still active: the console tries to load the plugin, hits an API that no longer exists in GLPI 11 and aborts. Disable and remove every plugin without a version for 11 before running db:update.

Need help?