Skip to main content
Version: Candidate-4.1

Develop Static Extensions

Static Extensions are StarRocks FE’s extension modules that allow you to add new features or optimize existing functionality without modifying the core code. Compared to dynamic plugins, static extensions are automatically loaded at system startup and provide more registrable extension points, covering the system’s core modules.

This feature is supported from v4.1 onwards.

Usage

The following example demonstrates how to develop a static extension.

Prerequisites

Prepare StarRocks FE development environment as follows:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.3.0</version>
<executions>
<!-- Core jar -->
<execution>
<id>default-jar</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<excludes>
<exclude>${your_extension_directory}/**</exclude>
</excludes>
</configuration>
</execution>
<!-- Extension jar -->
<execution>
<id>build-ext-jar</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<finalName>${your_extension_name}</finalName>
<includes>
<include>${your_extension_directory}/**</include>
</includes>
<!-- StarRocks will only load the ext.jar -->
<classifier>ext</classifier>
</configuration>
</execution>
</executions>
</plugin>

Extension entry point

@SRModule(name = "extension_name")
public class MultiWarehouseExtension implements StarRocksExtension {
@Override
public void onLoad(ExtensionContext ctx) {
// Register your own class or perform other initialization
ctx.register(WarehouseManager.class, new MyWarehouseManager());
...
}
}

Logs

After building the extension, place the ${your_extension_name}-ext.jar file into the Config.ext_dir directory (default is FE/lib), and then restart the FE.

Example FE logs after startup are as follows:

2025-12-26 12:47:46.047+08:00 INFO (main|1) [ExtensionManager.loadExtensionsFromDir():39] start to load extensions
2025-12-26 12:47:46.152+08:00 INFO (main|1) [ExtensionManager.loadExtensions():63] Loaded extension: extension_name
2025-12-26 12:47:46.152+08:00 INFO (main|1) [ExtensionManager.loadExtensionsFromDir():42] all extensions loaded finished
  • start to load extensions: FE has started scanning the extension directory.
  • Loaded extension: extension_name: The extension was successfully loaded.
  • all extensions loaded finished: All extensions in the directory have been loaded.
Rocky the happy otterStarRocks Assistant

AI generated answers are based on docs and other sources. Please test answers in non-production environments.