Open Source · AGPL-3.0

The missing plugin marketplace
for the Java/PF4J ecosystem

Self-hosted plugin management software. Discover, install, version, and update PF4J plugins — with a catalog UI, REST API, and client SDK.

terminal
$ git clone https://github.com/plugwerk/plugwerk.git
$ cd plugwerk
$ docker compose up -d
 Plugwerk running at http://localhost:8080
myplugwerk.host/catalog
Plugwerk Plugin Catalog — browse, search, and filter plugins Plugwerk Plugin Catalog — browse, search, and filter plugins

Everything you need to manage plugins

From upload to installation — Plugwerk covers the full plugin lifecycle.

Plugin Catalog

Browse, search, and filter plugins by tags and status. Grid and list view with download counts and ratings.

Upload & Versioning

SemVer versioning with SHA-256 artifact integrity. Upload via Web UI, REST API, or CI/CD pipeline.

Namespace Isolation

Multi-product, multi-org support. Each namespace has its own catalog, roles, and API keys.

RBAC & OIDC

Role-based access control per namespace. Multi-issuer OIDC for Keycloak, Auth0, Azure AD, and more.

Review Workflow

Approve or reject plugin releases before they reach your users. Configurable per namespace.

PF4J Compatible

Drop-in plugins.json endpoint. Works with pf4j-update out of the box — zero migration effort.

Rich plugin pages with metadata

Version history, compatibility info, download stats, and one-click installation.

myplugwerk.host/plugins/crm-connector
Plugwerk Plugin Detail — version history, metadata, and download Plugwerk Plugin Detail — version history, metadata, and download

Integrate in minutes

The Plugwerk Client SDK is a PF4J plugin with its own isolated classloader — no dependency conflicts with your host application.

  • Catalog queries and search
  • Transactional download and install
  • Update checking with SemVer resolution
  • Drop-in replacement for pf4j-update
SDK Documentation
var config = new PlugwerkConfig.Builder(
    "https://myplugwerk.host",
    "acme-corp"
)
    .apiKey("pwk_...")
    .build();

var marketplace = pluginManager
    .getExtensions(PlugwerkMarketplace.class)
    .getFirst();

// Browse the catalog
var plugins = marketplace.catalog().listPlugins();

// Search by keyword
var results = marketplace.catalog()
    .searchPlugins(new SearchCriteria("crm", null, null));

// Install a specific version
var result = marketplace.installer()
    .install("com.acme.crm-connector", "3.0.0");

if (result instanceof InstallResult.Success s) {
    log.info("Installed: {}", s.getPluginId());
}

Published Artifacts

All library modules are available on Maven Central under the io.plugwerk group.

plugwerk-client-plugin

PF4J plugin with isolated classloader — SDK for discovery, install, and update.

io.plugwerk:plugwerk-client-plugin:<version>:pf4j@zip
plugwerk-spi

Extension point interfaces — PlugwerkMarketplace, Catalog, Installer, UpdateChecker.

io.plugwerk:plugwerk-spi:<version>
plugwerk-descriptor

MANIFEST.MF parser and validator for plugin metadata.

io.plugwerk:plugwerk-descriptor:<version>
plugwerk-api-model

Generated DTOs and interfaces from the OpenAPI 3.1 specification.

io.plugwerk:plugwerk-api-model:<version>
dependencies {
    // Client SDK (PF4J plugin ZIP)
    implementation("io.plugwerk:plugwerk-client-plugin:<version>:pf4j@zip")

    // Or just the SPI interfaces
    implementation("io.plugwerk:plugwerk-spi:<version>")
}

Built for developers

Kotlin
Spring Boot
PostgreSQL
React
TypeScript
Material UI
PF4J
Docker
Gradle
OpenAPI

Ready to get started?

Plugwerk is open source and free to self-host. Set it up in under 5 minutes.