This is a self-serve, GA feature — no support ticket required. It’s supported on the v2 operator (1.10.8+) and Vintner (2.0.8+).
Prerequisites
Setting up a custom plugin
1
Upload your plugin JAR to S3
Place your plugin JAR(s) in your workspace’s deep store bucket, under a top-level For example:
custom-plugins directory:<your-deep-store-bucket> is specific to your workspace — check your workspace’s Pinot deep store configuration if you don’t already know the bucket name.2
Name your JAR with a semantic version
JAR filenames must follow If you place more than one version of the same plugin in S3, StarTree Cloud loads only the latest semantic version — older versions are left in place but ignored, so you can keep them around for rollback.
<plugin-name>-<semver>.jar, for example:How it works
- At startup, each Pinot component checks the
custom-pluginsS3 path and downloads any JARs it finds onto its local classpath. - If the path is empty or doesn’t exist, this is a no-op — Pinot starts up exactly as it would without the feature enabled.
- Custom plugin JARs are given classloading priority over StarTree Cloud’s built-in Pinot libraries. If one of your classes shares a name with a built-in Pinot class, your version takes precedence — useful if you need to override built-in behavior, but worth knowing if you see unexpected behavior after adding a plugin.
- All Pinot components load the same set of plugins. There is currently no way to target a plugin at only specific component types (for example, servers only).
Failure handling
A problem downloading or loading a custom plugin does not prevent a Pinot component from starting. The component comes up normally; functionality that specifically depends on the missing or broken plugin may be degraded (for example, a table configured to use a custom decoder may fail to ingest), but the rest of the deployment is unaffected.Updating and rolling back plugins
- Updating a plugin: Pinot does not pick up new or changed JARs at runtime. After uploading a new version to S3, restart the affected Pinot components to load it.
- Rolling back: Remove or revert the JAR in S3, then restart the affected Pinot components.
Responsibility and support
- You are responsible for building, testing, and certifying your own plugin JARs. StarTree does not validate, sign, or certify custom plugins through its own CI or certification process — test thoroughly in a non-production environment first.
- StarTree Cloud only enforces the semantic-versioning file naming convention described above; it does not perform checksum verification or JAR signing.
Security
Only JARs placed at your workspace’s designatedcustom-plugins path in your deep store bucket are ever loaded. Plugins cannot be loaded from any other location.
Current limitations
- No per-component targeting. Plugins load on every Pinot component type; you can’t restrict a plugin to, say, servers only.
- No hot reload. Picking up a new or updated plugin requires restarting the affected Pinot components — there’s no dynamic reload mechanism.
- No StarTree-side validation. StarTree does not check, sign, or certify plugin JARs before they’re loaded.

