Rediscover 2011 RuneScape with modern server emulation at your fingertips.
Features • Quick setup • Development • Blog • Documentation • Bugs • World Map
- High-performance: Capable of supporting thousands of concurrent players.
- Rich content: Offers a wide range of emulated content.
- AI player characters: Introduced intelligent player bots to enhance immersion.
- User-friendly: Scripts let you add content without touching engine internals.
- Lightweight: Memory usage under 300MB in low-memory mode.
- Customisable: Personalise your gameplay by tweaking settings in the
game.propertiesfile or modifying the code to suit your preferences.
-
Make sure you have java 21 or above installed. (
java --versionon command line) -
Extract the latest void.zip released bundle into a directory.
-
Run either the
run-server.baton Windows, orrun-server.shon Linux.On first start the server will offer to download the game cache files into
/data/cache/(configured bystorage.cache.download.urlingame.properties). Alternatively extract the latest pre-modified game files cache.zip into/data/cache/yourself.You should see
[Main] - Void loaded in ...msto show the server is up and running correctly.Ctrl + C to exit and shutdown the server when running from a command line terminal.
-
Run the latest client.jar and login with any username and password to create a new account.
- Set
web.server.enabledtotrueingame.properties. - Run the server as normal ^.
- Open
http://localhost:8080/playin the browser and login with any username or password to create a new account.
The webserver can also expose account routes so a website's backend can create and manage accounts on the running server, without a restart or account reload. They're protected by a single shared key, so they're for trusted server-side callers only, never a static site or browser.
- Set
web.server.enabled=trueandweb.api.enabled=trueingame.properties. - Set
web.api.tokento a random secret of at least 32 characters (e.g.openssl rand -hex 32). Every request must send it asAuthorization: Bearer <token>. - Block
/api/v1/accountson any public reverse proxy so only your backend can reach it.
| Method | Path | Body | Success |
|---|---|---|---|
GET |
/api/v1/names/{name} |
{"name","available"} |
|
GET |
/api/v1/accounts/{name} |
{"accountName","displayName","previousName","online"} |
|
POST |
/api/v1/accounts |
{"name","password","displayName"?} |
201 + account |
PUT |
/api/v1/accounts/{name}/password |
{"password"} |
204 |
PUT |
/api/v1/accounts/{name}/name |
{"displayName"} |
account |
When creating, name is either a 1-12 character username (which is also the display name) or an email address, in which case displayName is required.
{name} in an /accounts path is always the account name, never a display name. Display names can't match another account's name, and /names/{name} checks whether a name is free as either. Changing a password logs the player out if they're online, and staff accounts (any rights) can only be changed in-game.
Errors use the api's {"error": {"code", "message", "details"?}} envelope: 400 bad_request, 401 unauthorized (missing or wrong key), 403 forbidden (creation disabled or a staff account), 404 account_not_found, 409 name_taken, 422 validation_failed (details names the name, displayName or password field), 429 rate_limited (with Retry-After), 503 unavailable.
Send the end user's address as X-Forwarded-For when creating accounts so web.api.registration.maxPerIP limits players rather than the caller:
curl -H 'Authorization: Bearer <token>' -H 'Content-Type: application/json' -H 'X-Forwarded-For: 203.0.113.9' \
-d '{"name":"bob@example.com","password":"hunter22","displayName":"Bob"}' http://localhost:8080/api/v1/accountsFor more details see the full Installation Guide.
Note
For common problems see the Troubleshooting Guide.
Use IntelliJ (which is free to use) to develop with Void. See the installation guide for more instructions.
Once opened the IDE click the Clone Repository button or File | New | Project from version control... | if in the full application.
Select git and enter the project URL (Found under the <> Code button on the GitHub page).
git@github.com:GregHib/void.gitif you have GitHub authentication setup.https://github.com/GregHib/void.gitif you don't have SSH authentication.
Note
When git is not installed it will display an error and the option to "Download and install", click this and retry the previous step. Click "Trust Project" if also asked.
Press "clone" and after the download is complete the project will be opened for you.
Under Project Structure... | Project settings set SDK to JDK 21+ (download as needed) and let it index.
Run the following command in the terminal to set up Gradle or close and re-open the project to trigger IntelliJ's Open as Gradle Project popup.
./gradlew build -x testOn first start the server will offer to download the game cache files into /data/cache/ (configured by storage.cache.download.url in game.properties). Alternatively extract the cache files into a new directory called /cache/ inside of the /data/ directory yourself.
From here you can navigate in the left panel to /game/src/main/kotlin/ (Or Ctrl/Cmd + N for class search) where you will find Main.kt which you should be able to right-click and run.
You can also run in the command line using the gradle wrapper.
./gradlew runOnce the server is up and running; download one of the prebuilt client.jars or set up the void-client repository and run to log into the game.
Remember to check out our Contributing guidelines before submitting your first pull request!
Run spotless before commiting to ensure formatting is correct:
./gradlew spotlessApplyTip
There are instructions on how to build your own client and build your own cache!
For further guides on how to write content please refer to the Void Wiki.
The vast majority of this project was written by hand. AI-assisted contributions are welcome but held to the same bar as any other submission: keep changes small and focused, ensure they are well tested, and make sure the code follows the style of the surrounding codebase. Low-effort or bulk-generated PRs will not be accepted.
If you run into any problems or find any bugs, please open a GitHub Issue describing the problem.
- All contributors
- Kris - osrs-docs
- Ebp90
- Jarryd
- Tomm - RSMod Pathfinder
- Graham - OpenRS2
