Welcome to the Microbot Hub.
The hub is the dedicated place for community created plugins and scripts. It exists to keep the main Microbot client focused on core features while giving contributors a simple way to build, test, and share new ideas. This separation keeps the client lean, fast, and stable. The hub can evolve quickly without risking the reliability of the core application.
- Community plugins that extend Microbot
- A light process to build and test plugins
- A simple structure that is easy to maintain
- Java Development Kit that matches the Microbot client version you use
- Gradle installed or the Gradle wrapper from the repository
- Git for version control
By default the build calls https://microbot.cloud/api/version/client to fetch the latest client version, falling back to 2.0.61 if the lookup fails. Override with -PmicrobotClientVersion=<version> or -PmicrobotClientVersion=latest. If you need to work offline, point to a downloaded client JAR with -PmicrobotClientPath=/absolute/path/to/microbot-<version>.jar.
Plugin download URLs in plugins.json now point at the stable GitHub release tag latest-release (e.g., .../releases/download/latest-release/<plugin>-<version>.jar). Override with -PpluginsReleaseTag=<tag> if you need a different tag.
Each plugin lives in its own Java package. A typical plugin package can contain the following files and folders:
PestControlPlugin.java- the primary class for your plugin, extendingPluginPestControlScript.java- the script class that contains the main logic, extendingScript- Other supporting classes as needed for your plugin
Along side of the plugin's package, comes with a resources folder that contains the following:
docs/README.mdfor a short description, setup notes, and known limitationsdocs/assetsfolder for screenshots or icons that you want to display in the hubdependencies.txtfor extra Maven coordinates that your plugin needs- Any additional resources such as json files, images, or other assets that your plugin needs
Only the files you really use are required. If your plugin has no extra libraries you can omit dependencies.txt. If you have no assets/images you can omit the folder.
If your plugin needs extra libraries, add them to dependencies.txt, one line per coordinate in standard Maven format. Example:
com.google.guava:guava:33.2.0-jre
org.apache.commons:commons-lang3:3.14.0
The build reads this file and adds the coordinates at compile time and packaging time.
The plugin descriptor is the most important portion of your plugin class. This annotation tells the Microbot client the general metadata about your plugin, such as its name, description, and version.
@PluginDescriptor(
name = PluginConstants.DEFAULT_PREFIX + "YourPluginName", // Field to define the plugin name (required)
description = "Brief description of what your plugin does", // A brief description of the plugin (optional, default is '')
tags = {"tag1", "tag2", "microbot"}, // Tags to categorize the plugin (optional, default is '')
authors = { "Your Name" }, // Author(s) of the plugin (optional, default is "Unknown Author")
version = YourPlugin.version, // Version of the plugin (required)
minClientVersion = "1.9.8", // Minimum client version required to run the plugin (required)
iconUrl = "https://example.com/icon.png", // URL to plugin icon shown in client (optional)
cardUrl = "https://example.com/card.png", // URL to plugin card image for website (optional)
enabledByDefault = PluginConstants.DEFAULT_ENABLED, // Whether the plugin is enabled by default
isExternal = PluginConstants.IS_EXTERNAL // Whether the plugin is external
)
@Slf4j
public class YourPlugin extends Plugin {
static final String version = "1.0.0";
// ... plugin implementation
}| Field | Type | Required | Description |
|---|---|---|---|
name |
String | Yes | The display name of your plugin. Use PluginConstants.DEFAULT_PREFIX if you do not want to create one. |
description |
String | No | Brief description shown in the plugin panel |
tags |
String[] | No | Tags for categorizing and searching plugins |
author |
String | No | Plugin author name (defaults to "Unknown Author") |
version |
String | Yes | Plugin version, typically referenced from a static field |
minClientVersion |
String | Yes | Minimum Microbot client version required |
iconUrl |
String | No | URL to plugin icon image shown next to the plugin in the Microbot client hub |
cardUrl |
String | No | URL to plugin card image used for the plugin card on the website |
enabledByDefault |
boolean | No | Whether plugin is enabled by default on first install (use PluginConstants.DEFAULT_ENABLED) |
isExternal |
boolean | No | Marks plugin as external (use PluginConstants.IS_EXTERNAL) |
- Naming: Use or create tags inside of the
PluginConstantsto keep tags consistent across plugins - Versioning: Follow semantic versioning (e.g., "1.0.0", "1.2.3") and store in a static field for easy reference
- Description: Keep descriptions concise but informative - they appear in the plugin panel
- Tags: Include relevant tags like the game activity, skill, or functionality your plugin provides
- Version Management: Always increment the version when making changes, even for small fixes
The build produces plugin jars in the usual Gradle output folders. If the project applies a shading step, the final jars will be placed in the shadow or libs folder depending on the build script.
Release downloads expect plugin assets at: https://github.com/chsami/Microbot-Hub/releases/download/<version>/<pluginname>-<version>.jar.
Use this minimal driver to start a focused debug session. Replace PestControlPlugin with your plugin class if needed.
package net.runelite.client;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import net.runelite.client.plugins.microbot.pestcontrol.PestControlPlugin;
public class Microbot
{
private static final Class<?>[] debugPlugins = {
PestControlPlugin.class
};
public static void main(String[] args) throws Exception
{
List<Class<?>> _debugPlugins = Arrays.stream(debugPlugins).collect(Collectors.toList());
RuneLiteDebug.pluginsToDebug.addAll(_debugPlugins);
RuneLiteDebug.main(args);
}
}Tips for a smooth session
- Make sure the Java version you use here matches the version used to build the client (Java 11)
- Confirm that your plugin class is on the classpath of the debug runner
- If you see a class version error, rebuild the plugin with the same Java release as the client
- Create
README.mdin the plugin's docs folder under resources with a short description, setup notes, and known limitations - Place screenshots in an
assetsfolder within the docs folder, e.g.,docs/assets/overview.png - Use relative links in
README.mdto display screenshots in the hub or on the site that reads these files
Example snippet in README.md:
# Pest Control
Automates the Pest Control minigame. Supports portals and spinners, smart prayer swaps, and activity checks.

- Create a branch with a clear name
- Keep changes focused on a single plugin or a single feature
- Run the build and make sure it passes
- Open a pull request with a short summary and testing steps
Class was compiled by a newer or older release Rebuild the plugin with the same Java release used by the client. Example, if the client uses release 17, set your Gradle Java toolchain to 17 and rebuild.
Client does not see the plugin Confirm the jar is in the plugins folder the client reads. If you use side loading, confirm the folder path in your launcher settings. Make sure the plugin class name matches the expected pattern.
Missing dependency at runtime
Place the required coordinate in dependencies.txt and rebuild. If the plugin is shaded, ensure the build includes the library inside the final jar.
- Keep the main client small and focused
- Allow rapid iteration in the hub without risk to stability
- Make plugin setup and testing as simple as possible




