1. Create a Java development project
Use RuneLite's official example-plugin template to create your repository, then open it as a Gradle project in IntelliJ IDEA. The Plugin Hub instructions recommend the Community edition and Java 11. Keep the supplied Gradle wrapper rather than assembling a client dependency list yourself.
Run the Gradle run task from the IDE's Gradle panel. The template configures a Java entry point, assertion checks, developer mode and debug output. From a terminal in the project folder, use:
# Linux or macOS
./gradlew run
# Windows
gradlew.bat runIf you use a Jagex Account, follow RuneLite's current development login instructions. The saved credential file described there grants account access; keep it out of repositories, shared logs and support uploads.
2. Understand the files before changing them
ExamplePlugin.java: the plugin class extendsPlugin. Its descriptor names the plugin; startup and shutdown methods log its lifecycle. An event subscriber handles a change to the logged-in state.ExampleConfig.java: the configuration interface defines the greeting setting and its default value. The plugin obtains this interface through its configuration provider.ExamplePluginTest.java: the development launcher registers the example plugin and calls RuneLite's main method. It lives undersrc/test, but its role here is launching the client.build.gradle: thepluginMainClassvalue points to that launcher. The current template compiles for Java 11 and resolves RuneLite client dependencies withlatest.release.runelite-plugin.properties: thepluginsfield names the actual plugin class,com.example.ExamplePlugin. Display name, author and description describe the distributed plugin.
The distinction matters when renaming: the build launches one class, while the plugin properties identify another. Use the IDE's refactor tools for packages and class names, then update both references. A new file name alone does not update a fully qualified class name stored as text.
3. Make one visible edit: your greeting
In ExampleConfig.java, change the value returned by greeting() to a short message of your own. Run the development client, find Example in its plugin settings and enable it. Check the Welcome Greeting setting: an already saved value takes precedence over the default you changed, so enter your new text there if needed.
Read the event path in ExamplePlugin.java: a game-state event reaches the subscriber, the logged-in condition matches, and the plugin adds a game chat message using the configured greeting. A successful result is that chat message after the logged-in transition. Editing the default while already logged in does not itself trigger that event.
Keep this first change small. If the message is absent, check the plugin's enabled state, the saved greeting and whether the login event occurred. If the client never starts, use the first build or launch error to separate a Java or dependency problem from plugin behavior.
4. Research the API for your next feature
Before adding an overlay or tracker, identify the event, the data it exposes and which component owns the display. RuneLite's developer guide links the API and client Javadocs and recommends reading core plugins that do similar work. Check exact method signatures and lifecycle handling against the dependency version your project uses.
The RLPlugins Javadocs MCP connection guide provides another way to search indexed RuneLite and Kraken documentation. A useful request names the intended result: “Find the RuneLite event and API references for displaying a session counter; cite the methods and explain lifecycle ownership.” Check the returned references in your IDE before using generated code. Kraken references belong to their own API; they are not an extra dependency required by this RuneLite template.
A Java plugin and a sequence inside a script editor have different entry points and runtimes. Read the scripts and AHK comparison if your goal is configuring an existing tool rather than writing a plugin.
5. Choose the correct publishing route
For the RuneLite Plugin Hub, follow its current repository instructions. Submission identifies a public source repository and a full commit hash, so reviewers assess a specific revision. Prepare accurate plugin properties, a README and a license, then follow the review process. Review is separate from successfully launching the development client; consult the current feature and game-rule requirements.
For an RLPlugins release, start with RLPlugins publishing requirements. The official Plugin Hub template does not establish compatibility with RLPlugins' managed delivery. Documentation access, local compilation and acceptance by either platform are separate steps. For installing a released product, use the installation guide.
This walkthrough references the official template revision linked below, reviewed on 5 October 2026. If a newer template changes a file or task, follow its current source and upstream instructions.
Primary sources
- RuneLite's Plugin Hub development and submission instructions
- Official example template: Gradle configuration
- Official example template: plugin event handler
- Official example template: configuration
- Official example template: development entry point
- Official example template: Plugin Hub properties
- RuneLite developer guide and API references
- RuneLite configuration value and default handling
- RuneLite development with a Jagex Account
Reviewed 5 October 2026. Plugins, clients and game rules change; check the current source before you rely on any of this.