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)