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 new features compared to v4.

RLBot v5 is now in pre-release and nearly feature-complete, meaning people can start adopting it. Note that the various language interfaces are still in development and may see breaking changes.

Windows Installer: DOWNLOAD

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

In the remainder of this document we will cover:

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

Why v5?

RLBot v4 has been incredibly user-friendly, 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 was introduced. Since then, there have only been minor changes and new features, which prove how well-designed v4 was. In fact, v5 is not that different from v4. It is primarily a rewrite and an opportunity to 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 rewriting 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 use a DLL to communicate directly to the RLBot backend. In v5, the transition to web sockets is finally complete and this allows the bot interfaces 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 Rocket League and bots was only implemented in Python (and partially Rust). This discouraged people from writing match starters (GUI, autoleague, etc) in languages other 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 freeing ourselves from design choices made under the restrictions of the DLL injection.
  • The Psyonix API made a few extra features available to us, but we never integrated them in v4. They are integrated in v5.
  • Python is very slow. The rewrite in C# has made this clear.
  • The .cfg file format has no standard. We are changing to the similar .toml format.

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, ✨=new, 🛠=reworked/changed, ⛔=removed]

  • ✅🛠 First-class Windows & Linux support
    • No 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
    • 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 many supported by FlatBuffers
  • ✅🛠 Any language can start/stop/manage a match; the logic for launching Rocket League and bots is now in RLBotServer.
  • ✅🛠 All config 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
    • Knockout, Dropshot, Hoops, Snow Day, Heatseeker, and more game modes
    • Start with one, two, four, or six balls
    • Max 1 through 100+ goals (any number supported)
    • Many ball types: Beach ball, anniversary ball, spooky cube, haunted dropshot ball, Ekin, egg, player-seeking, score-absorb, and more
    • Curve ball, beach ball curve, or magnus futbol ball physics
    • Small, default, or medium ball size
    • Lowish or default ball bounciness
    • Reverse gravity; low, high, or super high gravity
    • Ball gravity independent of car gravity
    • Tactical rumble, haunted ball beam, batman rumble, grappling only, haymaker only (note: reading rumble items is still unavailable)
    • Boost strength 1x, 1.5x, 2x, 3x, 5x, or 10x
    • Max time 5, 10, 11, or 20 minutes
    • Territory mutator
    • Stale ball timer (unlimited or 30 seconds)
    • Jump mutators (grounded, 2/3/4 jumps, unlimited, or no jump)
    • Dodge timer adjustments (1.25s, 2s, 3s, or unlimited)
    • Input restriction (backwards only)
    • Demolish on ball contact
  • ✅✨ Freeplay matches. Useful for using Rocket League's freeplay-exclusive features
  • ✅ Rendering
    • ✅✨ Rendering can be toggled for individual bots
    • ✅✨ Bots and scripts can request rendering to be enabled/disabled via RenderingStatus messages
    • ✅✨ New RenderAnchors. Attach rendering to the location and rotation of a car or ball plus both an absolute and local offset. No re-rendering required and it is smooth.
    • ✅✨ Rect2D and Rect3D render types for drawing rectangles
    • ✅✨ PolyLine3D is now properly efficient (not implemented as multiple Line3Ds)
    • ✅✨ Text alignment options (TextHAlign / TextVAlign)
    • 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 separate 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 available per player:
    • Last known player input
    • has_double_jumped and has_dodged are now separately tracked fields
    • air_state — tracks OnGround, Jumping, DoubleJumping, Dodging, or InAir
    • dodge_timeout, dodge_elapsed, dodge_dir — detailed dodge information
    • latest_touch — the last time and which ball the player touched
    • accolades — a list of awards earned in the previous tick (e.g. EpicSave, Demolition, PoolShot, LowFive, HighFive)
    • See the flatbuffer schema for the full list
  • ✅🛠 Match comms and quick chat have been combined into MatchComms with an optional display string so both bots and humans can understand the message
    • ⛔ Quick chat messages are no longer restricted to hardcoded options
    • ✅🛠 The team_only filtering finally works. No more spying on enemy chats
  • ✅🛠 RLBot waits for all processes to fully boot before starting the match; this can be toggled per-bot
  • ✅🛠 RLBot can be instructed to not launch certain bots (they must be started manually)
  • ✅✨ IPv6 support for connecting to RLBotServer across networks
  • ✅✨ Ping mechanism for connection health checking
  • ✅🛠 Performance metrics (missed responses by bots). Displayed automatically only when there are problems. Percentages appear when RLBot or a bot runs below 100%.
  • ✅✨ NoLaunch launcher option — start Rocket League yourself and have RLBot connect to it
  • ⛔ Non-standard tick rates (standard is 120hz)
    • All bots are expected to run at 120hz. If you need more time, engineer your bot around this (e.g. an extra asynchronous thread for 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 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/RLBot/python-interface/wiki/Migration

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

RLBot v5 framework:

Language interfaces: