Skip to content

Plugin Class

Core types

The plugin API centers around two types:

  • Plugins::Host
  • Plugins::Plugin

Host is the client-side bridge. Plugin is your implementation.

Plugins::Plugin

cpp
class Plugin {
public:
	virtual ~Plugin() = default;
	virtual PluginInfo info() const = 0;
	virtual void onLoad() {}
	virtual void onUnload() {}
};

PluginInfo

PluginInfo is runtime metadata returned by info():

cpp
struct PluginInfo {
	QString id;
	QString name;
	QString version;
	QString author;
	QString description;
	QString website;
};

Entry point

Every plugin must export TgdPluginEntry through TGD_PLUGIN_ENTRY.

cpp
TGD_PLUGIN_ENTRY {
	if (apiVersion != Plugins::kApiVersion) {
		return nullptr;
	}
	return new MyPlugin(host);
}

Binary info

Astrogram also exports binary metadata through TgdPluginBinaryInfo, which is generated by TGD_PLUGIN_ENTRY.

This carries:

  • API version
  • pointer size
  • Qt version
  • compiler ID/version
  • platform ID

Cleanup rules

Anything registered in onLoad() should be unregistered in onUnload():

cpp
void onUnload() override {
	if (_commandId) _host->unregisterCommand(_commandId);
	if (_actionId) _host->unregisterAction(_actionId);
	if (_panelId) _host->unregisterPanel(_panelId);
	if (_outgoingId) _host->unregisterOutgoingTextInterceptor(_outgoingId);
	if (_observerId) _host->unregisterMessageObserver(_observerId);
	if (_settingsPageId) _host->unregisterSettingsPage(_settingsPageId);
}

Do not leave live callbacks behind after unload.

Astrogram Desktop plugin documentation and runtime notes.