Skip to content

Plugin Lifecycle

A plugin goes through several stages from development to runtime use. This page describes the full end-to-end lifecycle.

A plugin developer writes a PF4J plugin and builds a JAR or ZIP artifact containing the compiled code and a MANIFEST.MF with the plugin descriptor. See Packaging for supported formats and build tool configuration.

The developer uploads the artifact to the Plugwerk Server (via Web UI or REST API). The server extracts and validates the descriptor, computes a SHA-256 checksum, and creates a draft release.

A namespace admin reviews the draft in the Web UI or approves it via the API. The release status changes from Draft to Published, making it visible in the catalog.

The host application — through the client plugin — queries the server's catalog API. Users can browse, search, and filter available plugins.

When a user selects a plugin, the client plugin downloads the artifact, verifies its SHA-256 checksum against the server-provided hash, and atomically moves it into the host application's plugin directory. PF4J picks it up on the next reload — no restart needed.

The client plugin can check for available updates by comparing installed versions against the server. Compatible updates (respecting Plugin-Requires version ranges) can be applied at runtime.

Each plugin release transitions through these states:

| State | Visible in Catalog | Description | | ------------- | ------------------ | ---------------------------------------------------- | | Draft | No | Uploaded and validated, pending admin review | | Published | Yes | Approved and available for installation | | Archived | No | Deprecated or removed; existing installations remain |

This separation between upload and publication prevents accidental exposure of incomplete or untested releases.