plone.server provides an interface to run migrations for itself and the applications it currently has activated.

Migrations are run against applications. If applications define addons for sites, those application migration steps need to check for the installation of their addon in the migration step.

Running migrations

plone.server provides a command line utility to manage and run migrations against your entire install or against a particular site.

Here is a minimalistic example using the command:


By default, the pmigrate command will migrate all sites on all available databases.

pmigrate command options

  • dry-run: do test running the migration but not commit to the database
  • site: path to site to run the command against
  • report: report current versions site(s) are migrated to and see available migrations
  • app: run command for a particular application
  • to-version: run migrations to a provided version

Advanced command usages example:

./bin/pmigrate --site=/zodb/plone --app=pserver.elasticsearch --to-version=1.0.1 --dry-run

Defining migrations

To define migrations in your own applications, plone.server provides a simple decorator::

from plone.server.migrations import migration
@migration('my.app', to_version='1.0.1')
def migrate_stub(site):
    # my migration code...