Plugins : Triggering a QField Plugin on the Project Loading Screen

Hello,

I am exploring the possibility of developing a QField plugin that would allow users to connect to a PostgreSQL/PostGIS database in order to download and provision a QGIS project directly from a remote server.

From what I understand so far, QField plugins are only loaded once a project is already opened, since the plugin system is initialized as part of the project context. As a result, plugin functionality is not available on the initial loading screen (the screen showing options such as “Create a new project” or “Open project”).

I would like to know whether QField currently exposes any hook, API entry point, or early-stage lifecycle event that would allow a plugin to be triggered before a project is loaded.
My objective would be to integrate a custom action or button on the startup UI—next to “Create a new project”—that:

  • launches a plugin workflow at app startup,

  • authenticates the user (e.g., via PostgreSQL credentials, OAuth, or a custom API endpoint),

  • fetches project metadata from a remote server,

  • downloads the .qgz or unpacked project structure to local storage, and

  • optionally places the project into the default QField directory so it appears immediately in the project list.

The main goal is to avoid manual packaging of projects and enable a scenario where users can pull any updated project directly from their device at any time, without requiring desktop-side preparation.

I’m planning to explore this further next year, once I gather more information.
I’d also appreciate your thoughts on whether this approach makes sense within QField’s intended architecture.

Thank you !

@Artemisia , there are two types of plugins in QField: project plugins (that are loaded upon successfully loading a project) and app-wide plugins that are activated by the user and will load when QField launches.

I think you are looking for app-wide plugins? See QField API Documentation

1 Like

Thank you very much for your answer, I think I will try this way indeed !