Skip to content

General Information

Plugwerk builds on top of PF4J (Plugin Framework for Java), a lightweight and extensible plugin framework for Java applications. Before publishing plugins on Plugwerk, it helps to understand the PF4J fundamentals.

PF4J is an open-source plugin framework that allows Java applications to be extended at runtime without modifying the host application. It provides:

  • Dynamic plugin loading — load, start, stop, and unload plugins at runtime
  • Extension points — define interfaces that plugins implement
  • Classloader isolation — each plugin runs in its own classloader to avoid dependency conflicts
  • Multiple packaging formats — plugins can be distributed as JAR files or ZIP bundles

For a complete introduction, see the PF4J documentation.

PF4J handles plugin loading and lifecycle management on the local machine, but it does not provide a way to distribute, discover, or manage plugins remotely. Plugwerk adds this layer:

Capability PF4J PF4J + Plugwerk
Load plugins Yes Yes
Extension points Yes Yes
Plugin discovery Local only Remote catalog with search and filters
Plugin distribution Manual copying Upload, review, and download via API
Version management Not built-in SemVer enforcement and update checks
Access control None Namespaces, roles, and API keys

A PF4J plugin consists of:

  1. A plugin class — extends Plugin (optional in PF4J 3.x+)
  2. One or more extensions — classes annotated with @Extension that implement an extension point defined by the host application
  3. A plugin descriptor — metadata in MANIFEST.MF that identifies the plugin (see Plugin Descriptor)
  4. A package — either a JAR file or a ZIP bundle containing the JAR and its dependencies (see Packaging)