Skip to content

RLBot v5 (Beta) Overview

RLBot v5 is the next major version of the RLBot framework bringing a host of reliability improvements and some new features to the table.

RLBot v5 is now in beta. In this beta period we will fix bugs, incorporate feedback, and potentially make minor breaking changes. However, RLBot v5 is now about feature-complete and people can start adopting it. Note that the various language interfaces are currently in development and may be unstable. There is also no GUI and distribution method yet. You can find the newest version of RLBotServer.exe on github.com/RLBot/core/releases. See Virx' Video on how to get started in RLBot v5 beta with Python.

Any updates to RLBot v5 beta and the language interfaces will be announced in the RLBot Discord #annoucements channel.

In the remainder of this document we will cover:

  • Our reasoning for creating v5 and an overview of its architecture ->,
  • A list of features completed/reworked/todo/removed in v5 (beta) ->,
  • A guide on breaking changes and how to transition from v4 to v5 ->,
  • Links to v5 language interfaces and more ->.

Why v5?

RLBot v4 has been incredibly userfriendly, feature rich, and stable. It was made in 2018 when RLBot was still using DLL injection. Later, in 2019, the collaboration with Psyonix and the official API were introduced. Since then, there have only been minor changes and new features, which proves how well-designed v4 was. In fact, v5 is not that different from v4. It is primarily a rewrite and an opportunity fix the flaws of v4 that have been revealed over the years. So here are the main reasons we made v5:

  • The closed-source part of v4 is doing more than just communication with the Psyonix API. This has long prevented the community from fixing certain bugs themselves. Therefore we are extracting that functionality into the open-source part of RLBot, making the closed-source part exclusively about communication with the API.
  • The closed-source part of v4 is written in C++. By rewritting the backend of RLBot in C# we hope that more people feel comfortable contributing to it.
  • No more DLLs. You may not be aware, but most bots still uses a DLL to communicate directly to the RLBot backend. In v5, the transition to web sockets is finally complete and this allows the bot inferfaces to be improved (e.g. Python type hints are not a hack anymore).
  • All languages can start matches in v4, but the logic for launching of Rocket League and bots was only implemented in Python (and partially Rust). This discouraged people from writing match starters (GUI, autoleague, etc) in other languages than Python (even CleoPetra written in Java uses a Python process to start matches). Therefore we are moving this logic to the backend for v5 such that more languages can benefit from it.
  • We are releasing ourselves from design choices made under restrictions of the DLL injection.
  • The Psyonix API made a few extra features availble to us, but we never integrated them in v4. They are integerated in v5.
  • Python is very slow. The rewrite in C# has made this clear.
  • The .cfg file format has no standard.

So while the changes to the functionality and interface are minor, the architecture and the framework's internal code is very different. We hope these changes will make it enjoyable to work with and contribute to RLBot moving forward.

Features of v5

[Legend: ✅=done, 🟨=todo, ✨=new, 🛠=reworked/changed, ⛔=removed]

  • ✅🛠 First-class Windows & Linux support
    • No current plans for MacOS, as there's no way to run Rocket League without a full VM
  • ✅🛠 All bots connect to core directly via the sockets flatbuffer spec
    • As a consequence, adding new language support is much easier - if your language can write/read a TCP socket, it's possible! Bonus points if your language is one of the 14 that are currently supported by FlatBuffers
  • ✅🛠 Any language can still start/stop/manage a match, but the logic for launching Rocket League and bots are now in RLBotServer.
  • ✅🛠 All configs files now use the standard toml format. Example: necto/bot.toml
  • ✅ Hiveminds
  • ✅ Scripts
  • ✅🛠 The bot configuration's python_file has been replaced with run_command and run_command_linux
    • 🟨 On Linux, if run_command_linux isn't specified, v5 will attempt to run run_command under Wine
  • ✅✨ Multi-ball support for when there's more/less than 1 ball in a game
  • ✅✨ New mutator options
    • A Knockout match can be started
    • Start with one, two, four, or six balls
    • Max 7 goals
    • Beach ball, anniversary ball, spooky cube, or the haunted dropshot ball
    • Curve ball or beach ball curve
    • Medium ball size
    • Reverse gravity
    • Tactical rumble (fyi we still can't read rumble items)
    • Boost strength 5x
    • Max time 11 minutes
  • ✅✨ Freeplay matches. Useful if you want to use the Rocket League's freeplay-exclusive features
  • ✅ Rendering
    • 🟨 Rendering can be toggled for individual bots
    • ⛔ Keyboard shortcuts to toggle rendering. We plan to have buttons in the GUI instead!
    • ✅✨ New RenderAnchors. Attach your rendering to the location and rotation of a car or ball plus both an absolute and local offset. No re-rendering is required and it is smooth. Example: video posted on Discord
  • ✅ Game state manipulation (aka state setting)
  • ✅ Updated ball prediction algorithm for better accuracy in all game modes that use a ball
  • ✅✨ Support for Psyonix Beginner bots
  • ✅✨ More customizable Psyonix bots
  • ✅✨ Override a bot name/loadout (without editing the bot configuration)
    • Use cases include: Spawning specific Psyonix bots or give Nexto your in-game name to troll friends
  • ✅🛠 Generated loadouts are now created by your bot instead of a separated loadout generator script
  • 🟨✨ Hot-swap your bot's loadout. Respawn your bot's car with a different loadout on command without restarting the match or interfering with the other bots
    • Only enabled when state setting is also enabled
  • ✅✨ New data in GameTickPacket for every player:
    • Last known player input
    • If the player was the last player to be spectated in the match
    • Player accolades. A list of small awards/events by the player, e.g. EpicSave, Demolition, PoolShot, LowFive, etc. See full list here)
  • ✅🛠 Match comms and quick chat have been combined into just MatchComms with an optional quick chat message such that both bots and humans can understand what is meant
    • ⛔ Quick chat messages are no longer restricted to a set of hardcoded options
    • ✅🛠 The team_only filtering finally works. No more spying on enemy chats
  • ✅🛠 RLBot waits for all processes to fully boot before letting the match start
  • ✅ Performance metrics (i.e. missed responses by bots)
    • ⛔ Keyboard shortcuts to toggle the performance graph. We plan to have buttons in the GUI instead! Currently, the performance percentages will be shown anytime either RLBot itself or a bot is running below 100%.
  • ⛔ Non-standard Tick Rates (standard is 120hz)
    • All bots are now expected to run at 120hz. If you need more time to process inputs, it's advisable to engineer your bot around this by, for example, using an extra asynchronous thread running complex algorithms.
  • ⛔ DropshotTileInfo
    • This functionality was lost with the introduction of the Psyonix API and is removed v5. But it might return.

On top of all that, the framework is also simply significantly faster.

Breaking Changes / Migration

The migration guide for the Python interface gives a good overview of the breaking changes and what to do instead so we refer to that: https://github.com/VirxEC/python-interface/wiki/Migration

Below you can find links to the implementation of RLBot v5, the language interfaces, and related documentation. This wiki will also be updated as things stabilize.

RLBot v5 framework:

Language interfaces (unstable):