What are Plugin Repositories?
Each plugin has its own Plugin Repository, unique ENS name, and on-chain repository contract, the
PluginRepo, in which different versions of the plugin are stored for reference using verstion tags constituted by a release and build number.
Different versions might contain:
- bug fixes
- new features
- breaking changes
PluginRepo contracts themselves, each associated with a different plugin, are registered in the Aragon OSx
PluginRepoRegistry and carry their own ENS name that the creator chooses. The
PluginRepoRegistry contract is described in the upcoming subsection.
PluginRepo contract versions the releases of a
Plugin. The first version of a plugin is always published as release 1 and build 1 (version tag
When you publish the first plugin version, a new plugin repository is automatically created for you by the Aragon OSx protocol in which you are the maintainer. The creation process is described in the plugin repo creation process section.
/// @notice Creates a new plugin version as the latest build for an existing release number or the first build for a new release number for the provided `PluginSetup` contract address and metadata.
/// @param _release The release number.
/// @param _pluginSetupAddress The address of the plugin setup contract.
/// @param _buildMetadata The build metadata URI.
/// @param _releaseMetadata The release metadata URI.
bytes calldata _buildMetadata,
bytes calldata _releaseMetadata
) external auth(address(this), MAINTAINER_PERMISSION_ID);
The function receives four input arguments:
_releasenumber to create the build for. If the release number exists already (e.g., release
1), it is registered as the latest build (e.g.,
1.3if the previous build was
1.2). If it is a new release number, the build number is
- The address of
PluginSetupcontract internally referencing the implementation contract (to copy, proxy, or clone from it) and taking care of installing, updating to, and uninstalling this specific version.
_buildMetadataURI pointing to a JSON file containing the UI data, setup data, and change description for this specific version.
_releaseMetadataURI pointing to a JSON file containing the plugin name, description, as well as optional data such as images to be shown in the aragonApp frontend.
Other functions present in the contract allow you to query previous versions and to update the release metadata. For more details visit the
PluginRepo reference guide entry.
PluginRepo is created for you when you publish the
PluginSetup contract of your first version to the Aragon OSx protocol, which is explained in the next section: The Plugin Repo Creation Process.