{"id":44358849,"url":"https://github.com/kraken-plugins/kraken-api","last_synced_at":"2026-04-25T20:01:04.896Z","repository":{"id":310519923,"uuid":"1039719249","full_name":"Kraken-Plugins/kraken-api","owner":"Kraken-Plugins","description":"API for creating RuneLite plugins supporting client interactions!","archived":false,"fork":false,"pushed_at":"2026-04-24T11:47:30.000Z","size":16292,"stargazers_count":6,"open_issues_count":1,"forks_count":5,"subscribers_count":2,"default_branch":"master","last_synced_at":"2026-04-24T13:34:21.027Z","etag":null,"topics":["client","interaction","kraken","plugin","runelite"],"latest_commit_sha":null,"homepage":"https://kraken-plugins.com","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Kraken-Plugins.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-08-17T20:55:10.000Z","updated_at":"2026-04-24T11:45:33.000Z","dependencies_parsed_at":"2026-02-03T04:02:25.469Z","dependency_job_id":null,"html_url":"https://github.com/Kraken-Plugins/kraken-api","commit_stats":null,"previous_names":["cbartram/kraken-api","kraken-plugins/kraken-api"],"tags_count":387,"template":false,"template_full_name":null,"purl":"pkg:github/Kraken-Plugins/kraken-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kraken-Plugins%2Fkraken-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kraken-Plugins%2Fkraken-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kraken-Plugins%2Fkraken-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kraken-Plugins%2Fkraken-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Kraken-Plugins","download_url":"https://codeload.github.com/Kraken-Plugins/kraken-api/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kraken-Plugins%2Fkraken-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32274982,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-25T18:29:39.964Z","status":"ssl_error","status_checked_at":"2026-04-25T18:29:32.149Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["client","interaction","kraken","plugin","runelite"],"created_at":"2026-02-11T17:08:00.634Z","updated_at":"2026-04-25T20:01:04.872Z","avatar_url":"https://github.com/Kraken-Plugins.png","language":"Java","readme":"\u003c!-- PROJECT LOGO --\u003e\n\u003cbr /\u003e\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://kraken-plugins.com\"\u003e\n    \u003cimg src=\"src/main/resources/kraken.png\" alt=\"Logo\" width=\"128\" height=\"128\"\u003e\n  \u003c/a\u003e\n\n\u003ch3 align=\"center\"\u003eKraken API\u003c/h3\u003e\n\n  \u003cp align=\"center\"\u003e\n   An extended RuneLite API for creating plugins that support client interactions.\n    \u003cbr /\u003e\n\u003c/div\u003e\n\n[![Release Kraken API](https://github.com/cbartram/kraken-api/actions/workflows/release.yml/badge.svg?branch=master)](https://github.com/cbartram/kraken-api/actions/workflows/release.yml)\n[![Contributors][contributors-shield]][contributors-url]\n[![Forks][forks-shield]][forks-url]\n[![Stargazers][stars-shield]][stars-url]\n[![Issues][issues-shield]][issues-url]\n\n---\n\n# Getting Started\n\nKraken API is designed to extend the RuneLite API with additional client interaction utilities for writing automation-based plugins that are fully compatible with RuneLite.\nThis API uses network packets to perform \"click\" interactions within the game client and is based on mappings defined by the [EthanVann API](https://github.com/Septharoth/EthanVannPlugins/tree/master). It's also worth shouting\nout the [Vitalite](https://github.com/Tonic-Box/VitaLite/) client and project as their open source expertise of the game client helped make some of the Kraken API possible!\n\nSpecifically credit to Vitalite's Dialogue, G.E., and World Map API's and inspiration on Kraken's `TaskChain` and `ReplayStrategy` for mouse movement!\n\n\n## Quick Start\n\nTo get started with the API instantly:\n\n```shell\ngit clone https://github.com/Kraken-Plugins/kraken-api\ncd ./kraken-api\n./gradlew build publishToMavenLocal\n```\n\nIn the repository containing all your plugins `build.gradle` file: \n\n```groovy\n\nrepositories {\n    // Attempts local first for testing API jar\n    mavenLocal {\n        content {\n            includeGroup \"com.github.kraken\"\n        }\n    }\n  \n  // .. other repositories like RuneLite.net, etc...\n}\n\ndependencies {\n  compileOnly group: 'com.github.kraken', name:'kraken-api', version: '1.0.0'\n}\n```\n\n## API Usage\n\nThe following RuneLite \"plugin\" is purely for an example of the API's capabilities and isn't a full-fledged automation script.\n\n```java\n@PluginDescriptor(\n        name = \"Example\",\n        description = \"Example plugin\"\n)\npublic class ExamplePlugin extends Plugin {\n    \n    @Inject\n    private Context ctx;\n    \n    @Inject\n    private BankService bank;\n    \n    @Inject\n    private MovementService movement;\n    \n    @Inject\n    private PrayerService prayer;\n    \n    @Subscribe\n    private void onGameTick(GameTick e) {\n      Player local = ctx.players().local().raw();\n      \n      if(local.isInteracting()) {\n          return;\n      }\n      \n      if(!bank.isOpen()) {\n          // Open a bank\n          ctx.gameObjects().withName(\"Bank booth\").nearest().interact(\"Open\");\n      } else {\n          // Withdraw a Rune Scimitar\n          ctx.bank().nameContains(\"Rune scimitar\").first().withdraw();\n      }\n      \n      // Wield a Rune Scimitar\n      ctx.equipment().withId(1333).first().wield();\n      \n      // Move to a new position\n      movement.moveTo(new WorldPoint(1234, 5678));\n      \n      // Activate a protection prayer\n      prayer.activatePrayer(Prayer.PROTECT_FROM_MELEE);\n      \n      // \"Click\" on a Goblin and attack it.\n      ctx.npcs().withName(\"Goblin\")\n            .except(n -\u003e n.raw().isInteracting())\n            .nearest()\n            .interact(\"Attack\");\n      \n      \n      // Take the goblin bones\n      ctx.groundItems().reachable()\n              .within(5)\n              .filter(item -\u003e item.name().equalIgnoreCase(\"bones\"))\n              .first()\n              .take();\n      \n      // Bury the bones\n      ctx.inventory().withName(\"Bones\").first().interact(\"Bury\");\n    }\n}\n```\n\nTo use the API in an actual RuneLite plugin, you should check out the [Kraken Example Plugins](https://github.com/cbartram/kraken-example-plugin)\nwhich shows the best practice usage of the API within an actual plugin.\nTo set up your development environment for running plugins, we recommend following [this guide on RuneLite's Wiki](https://github.com/runelite/runelite/wiki/Building-with-IntelliJ-IDEA).\n\nOnce you have the example plugin cloned and setup within Intellij, you can run the main class in `src/test/java/PluginRunnerTest.java plugins.api.ApiTestPlugin` to run RuneLite with\nthe example plugin loaded in the plugin panel within RuneLite's sidebar. See a recommended [Gradle example](#gradle-example-recommended) for more information on\nintegrating the API into your plugins and build process.\n\n![example-plugin](./images/example-plugin.png)\n\n\u003e If you are just looking to use pre-existing plugins, you can skip this repository and head over to our website: [kraken-plugins.com](https://kraken-plugins.com). \n\u003e For more documentation on the API and Kraken plugins, please see our [official documentation here](https://kraken-plugins.com/docs/).\n\n### Prerequisites\n- [Java 11+](https://adoptium.net/) (JDK required)\n- [Gradle](https://gradle.org/) (wrapper included, no need to install globally)\n- [Git](https://git-scm.com/)\n- [RuneLite](https://runelite.net) (for testing and running plugins)\n\n### Building\n\nYou can build the project with Gradle:\n\n```bash\n./gradlew clean build publishToMavenLocal shadowJar\n\n# Optionally you can set a specific version to build\nexport VERSION=3.0.0-SNAPSHOT-LOCAL\n./gradlew clean build publishToMavenLocal shadowJar\n\n# Will be found here:\n# ~/.m2/repository/com/github/kraken/kraken-api/1.0.0-SNAPSHOT-LOCAL/kraken-api-1.0.0-SNAPSHOT-LOCAL.jar\n```\n\nThe output API `.jar` can be found in your `~/.m2/repository/com/github/kraken/kraken-api` directory and the default version is `1.0.0`.\nInclude the JAR file in your local plugins project with:\n\n```groovy\nrepositories {\n  mavenLocal() // Ensure this is included to pull from the locally built API JAR\n  mavenCentral()\n  maven {\n    url = 'https://repo.runelite.net'\n  }\n}\n\ndependencies {\n    implementation group: 'com.github.kraken', name: 'kraken-api', version: '1.0.0' // or whichever version you built with when export VERSION=...\n}\n```\n\nThis will also build a fat jar that includes additional dependencies such as `org.benf.cfr` and the Byte Buddy Agent located in:\n\n```shell\nbuild/libs/kraken-api-1.0.0-all.jar\n```\n\n\u003e :warning: Note: The fat jar does NOT include the `net.bytebuddy.byte-buddy` dependency as it doubles the size of the output jar \n\u003e and space is limited on GitHub packages. Your plugin side-loading process MUST provide the bytebuddy dependency at runtime for\n\u003e functionality in the `com.kraken.api.core.interceptor` package to work. i.e. Patching the Mouse Hook DLL \u0026 Packet interception logic\n\n## Gradle Example\n\nTo use the published API jar file in your plugin project you will need to either:\n- `export GITHUB_ACTOR=\u003cYOUR_GITHUB_USERNAME\u003e; export GITHUB_TOKEN=\u003cGITHUB_PAT`\n- or add the following to your `gradle.properties` file: `gpr.user=your-github-username gpr.key=your-personal-access-token`\n\nMore information on generating a GitHub Personal Access token can [be found below](#authentication).\n\n###  Authentication\n\nSince the API packages are hosted on [GitHub Packages](https://docs.github.com/en/packages/learn-github-packages/introduction-to-github-packages) you will\nneed to generate a [Personal Access Token (PAT)](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens?versionId=free-pro-team%40latest\u0026productId=packages\u0026restPage=learn-github-packages%2Cintroduction-to-github-packages) on GitHub\nto authenticate and pull down the API.\n\nYou can generate a GitHub PAT by navigating to your [GitHub Settings](https://github.com/settings/personal-access-tokens)\nand clicking \"Generate new Token.\" Give the token a unique name and optional description with read-only access to public repositories. Store the token\nin a safe place as it won't be viewable again. It can be used to authenticate to GitHub and pull Kraken API packages.\n\n\u003e :warning: Do **NOT** share this token with anyone.\n\n```groovy\nplugins {\n    id 'java'\n    id 'application'\n}\n\n\n// Replace with the package version of the API you need\ndef krakenApiVersion = 'X.Y.Z'\n\n// Alternatively, you can use: `+` or `2.2.+` (for example) as the krakenApiVersion to float on the latest version within a safe boundary\n// so you don't have to constantly bump the version when new API changes are released!\n\nallprojects {\n    apply plugin: 'java'\n    repositories {\n        // You must declare this maven repository to be able to search and pull Kraken API packages\n        maven {\n            name = \"GitHubPackages\"\n            url = uri(\"https://maven.pkg.github.com/Kraken-Plugins/kraken-api\")\n            credentials {\n                username = project.findProperty(\"gpr.user\") ?: System.getenv(\"GITHUB_ACTOR\")\n                password = project.findProperty(\"gpr.key\") ?: System.getenv(\"GITHUB_TOKEN\")\n            }\n        }\n\n        // Jitpack is an alternative means of accessing the API Jar file\n        maven { url 'https://jitpack.io' }\n    }\n}\n\n\ndependencies {\n    compileOnly group: 'com.github.kraken', name:'kraken-api', version: krakenApiVersion\n    // ... other dependencies\n}\n```\n\n\u003e :warning: Note: The fat jar does NOT include the `net.bytebuddy.byte-buddy` dependency as it doubles the size of the output jar\n\u003e and space is limited on GitHub packages. Your plugin side-loading process MUST provide the bytebuddy dependency at runtime for\n\u003e functionality in the `com.kraken.api.core.interceptor` package to work. i.e. Patching the Mouse Hook DLL \u0026 Packet interception logic\n\n## API Design \u0026 Methodology\n\nFor more information around how the API is designed, please see [API docs](docs/API.md)\n\n## Scripting\n\nFor more information on writing scripts using the Kraken API,  \ncheck out the detailed [scripting guide](docs/SCRIPTING.md).\n\n## Mouse Movement\n\nFor more information on mouse movement in the API check out the\ndetailed [mouse movement guide](docs/MOUSE.md)\n\n## Utilities\n\nThe Kraken API also ships with a variety of useful utilities for plugins from logging, mouse, and table overlays to\ncustom RuneLite events, randomization, math and string methods! To learn more about\nKraken's extra utilities, check out [this doc](docs/UTILITIES.md).\n\n## Simulation\n\nFor information on how to use Kraken's API to simulate game outcomes,  \nsee the [simulation docs](docs/SIMULATION.md).\n\nTo see an example plugin using the simulation API, you can run the main class in:\n\n```\nsrc/test/java/PluginRunnerTest.java plugins.simulation.SimulationPlugin\n```\n\nto load an example simulation plugin alongside RuneLite.\n\n![sim-example-image](images/sim.png)\n\n\n### Colosseum Simulator \n\nThere is a separate port of the [Coloseum Line of Sight Simulation](https://los.colosim.com/) to Java contained within the Kraken API for reference\nthat can be run in its own GUI in the `com.kraken.api.simulation.colosim` package.\n\n![colosseum-sim](./images/colosim.png)\n\n## Game Updates\n\nPlease see the game updates and [how to update the API guide](docs/UPDATING.md) for more detailed information.\n\n## Running Tests\n\nPlease see the [testing guide](docs/TESTS.md) for more information on running tests.\n\n## Development Workflow\n\nClone this repository with: `git clone --recurse-submodules https://github.com/Kraken-Plugins/kraken-api.git` to ensure\nthat all submodules (shortest-path plugin) are cloned as well.\n\n1. Create a new branch from `master`\n2. Implement or update your plugin/feature for the API\n3. Add tests for new functionality\n4. Run `./gradlew clean build publishToMavenLocal shadowJar` to verify that the API builds and tests pass\n5. Commit your changes with a clear message `git commit -m \"feat(api): Add feature X to Kraken API\"`\n6. Open a Pull Request\n\n---\n\n## Deployment\n\nThe Kraken API is automatically built and deployed via GitHub actions on every push to the `master` branch.\nThe latest version can be found in the [releases](https://github.com/cbartram/kraken-api/releases) section of the repository.\n\nThe deployment is fully automated and consists of:\n\n-  Building the API JAR\n- Publishing a new version to the GitHub Releases section\n  - This will be picked up by Github Packages for easy integration into other gradle projects.\n- Uploading the JAR file to the Minio storage server used by the Kraken Client at runtime.\n\n---\n\n## 🛠 Built With\n\n* [Java](https://www.java.org/) — Core language\n* [Gradle](https://gradle.org/) — Build tool\n* [RuneLite](https://runelite.net) — Used for as the backbone for the API\n\n---\n\n## 🤝 Contributing\n\nPlease read [CONTRIBUTING.md](CONTRIBUTING.md) for details on our code of conduct and the process for submitting pull requests.\n\nIf you'd like to see the work in our backlog, check out this [project board](https://github.com/orgs/Kraken-Plugins/projects/1/views/1).\n\n---\n\n## 🔖 Versioning\n\nWe use [Semantic Versioning](http://semver.org/).\nSee the [tags on this repository](https://github.com/cbartram/kraken-api/tags) for available releases.\n\nCI will automatically bump the patch version on each merge to master i.e. `1.1.4` -\u003e `1.1.5`. If you want to bump \na minor or major version then update the `version.txt` file in the root of the repository with the new version you\nwant to use as a base.\n\nFor example, moving from: `1.3.5` -\u003e `1.4.0` the `version.txt` should be `1.4.0`.\n\n---\n\n## 📜 License\n\nThis project is licensed under the [GNU General Public License 3.0](LICENSE).\n\n---\n\n## 🙏 Acknowledgments\n\n* **RuneLite** — For API's to work with and view in game data for Old School RuneScape\n* **Packet Utils** - [Plugin](https://github.com/Ethan-Vann/PacketUtils) from Ethan Vann providing access to complex packet sending functionality which was used to develop the `core.packet` package of the API\n* **Vitalite** - Vitalite for showing some incredible open source examples of dialogue, GE interactions, packets, mouse movement, and just working with the client in general\n* **VitaLite Mappings** - Huge shoutout for the VitaLite devs to maintain and publish these mappings for obfuscated classes and methods\n* **Microbot** — For clever ideas on client and plugin interaction using reflection.\n* **[Lucid](https://github.com/lucid-plugins/SideloadPlugins) \u0026 [Kotori](https://github.com/OreoCupcakes/kotori-plugins/blob/master/kotoriutils/src/main/java/com/theplug/kotori/kotoriutils/rlapi/table/TableComponent.java) plugins** — For their open source implementation on the Table UI element. \n\n[contributors-shield]: https://img.shields.io/github/contributors/cbartram/kraken-api.svg?style=for-the-badge\n[contributors-url]: https://github.com/cbartram/kraken-api/graphs/contributors\n[forks-shield]: https://img.shields.io/github/forks/cbartram/kraken-api.svg?style=for-the-badge\n[forks-url]: https://github.com/cbartram/kraken-api/network/members\n[stars-shield]: https://img.shields.io/github/stars/cbartram/kraken-api.svg?style=for-the-badge\n[stars-url]: https://github.com/cbartram/kraken-api/stargazers\n[issues-shield]: https://img.shields.io/github/issues/cbartram/kraken-api.svg?style=for-the-badge\n[issues-url]: https://github.com/cbartram/kraken-api/issues\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkraken-plugins%2Fkraken-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkraken-plugins%2Fkraken-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkraken-plugins%2Fkraken-api/lists"}