Build the best - destroy the rest!

Saturday, 31 October 2026

Robocode 1.11.2 released

Version 1.11.2 (31-Oct-2026)

Security

  • GHSA-h2ch-39mm-r68h: The robot sandbox was not enforced on Java 24 and newer, where the SecurityManager has been removed. A malicious robot could execute commands, access the network, and read and write files on the host. Reported by Hongwei Li, Junmin Zhu, Zhun Wang, Jiacheng Zhong, Han Dai, Suyue Guo, Songyang Peng, and Ziyue Pan.
    • Robot classes are now verified when they are loaded, on all Java versions. Robots using something that is not allowed (e.g. sockets, processes, reflection, or writing files outside their data directory) are rejected with a message explaining why.
    • RobocodeFileOutputStream now checks that the file is inside the robot's data directory.
    • Robots can only delete files and create directories in their own data directory.
    • Robots can only read files and get information about files (e.g. File.exists() and File.list()) in their own root package directory and data directory, like with the SecurityManager.
    • Robots can only deserialize their own classes, Robocode classes, and common Java classes like strings, collections, and geometry.
    • Robots can use reflection on their own classes, but can only use the members of other classes via reflection that they are allowed to use directly, and cannot make these accessible with setAccessible().
    • Robots can no longer read files outside their class path via getResourceAsStream().
    • Robots are punished if they create more than 5 threads, which is now checked every turn, and cannot use virtual threads, as these are not counted.
    • Robots can no longer access the libraries used by Robocode.

Bugfix

  • Robots in a jar file inside another jar file, e.g. in a team jar, could not be loaded with Java 9 and newer.
  • Battles were not deterministic with Java 9 and newer, e.g. when using the RANDOMSEED system property, if robots used Math.random(). Calls to Math.random() in robots now use the random number generator of Robocode.
  • A robot that skipped too many turns was not stopped properly since version 1.10.1. Robocode waited several seconds for the robot thread to stop itself, reported "Unable to stop thread" and punished the robot as unstoppable, and the robot then failed with "You cannot take action in this thread!".

Changes

  • Tests can be run on another Java version than the Java 8 toolchain, e.g. ./gradlew test -PtestJavaVersion=25. The CI build now runs all tests with both Java 8 and Java 25.
Download Robocode 1.11.2 from here

Monday, 13 July 2026

Robocode 1.11.1 released

Version 1.11.1 (13-Jul-2026)

Bugfix

  • #94: Avoid misleading priority warnings for system events. System events retain their fixed priority instead of being clamped to the 0–99 range used by robot-defined events.

Changes

  • Updated LiteRumble links and RoboRumble configuration URLs to https://rumble.robowiki.net/.
  • Updated to use Eclipse JDT 3.46.0.
Download Robocode 1.11.1 from here

Saturday, 6 June 2026

Robocode 1.11.0 released

Version 1.11.0 (06-Jun-2026)

Changes

  • Installer overhaul: Refactored the monolithic AutoExtract installer (844 lines) into 5 focused classes (Installer, InstallerDialog, Extractor, ShortcutManager, OsUtil).
  • Reduced confirmation dialogs from 5 user prompts down to 1 — a single "Install to" dialog with Proceed/Cancel.
  • Removed license agreement dialog, start-menu shortcut prompt, and Windows file associations prompt.
  • Removed Windows .battle/.br file association registration (rarely used, required admin privileges).
  • Removed legacy code: Win 9x/ME command.com path, obsolete .robotcache migration, fragile self-cleanup hacks.
  • Windows shortcuts are now always created without prompting.
  • Improved code quality: try-with-resources, StringBuilder, proper error handling, fixed spinner animation bug.

Bugfix

  • #89: Prevent a single fire command from spawning duplicate bullets with the same ID
    • A single setFire() call could spawn multiple bullets sharing the same bullet ID, which could cause issues with bullet tracking and battle accuracy.
    • Thanks go to Pavel Savara for fixing this ❤️. Sharp-eyed fix!
Download Robocode 1.11.0 from here

Wednesday, 4 March 2026

Battle Runner released for Robocode Tank Royale 0.37.0

I have just made a new release of Robocode Tank Royale 0.37.0, which contains the new Battle Runner 🎉 https://robocode.dev/api/battle-runner

The Battle Runner API lets you run Robocode Tank Royale battles programmatically from any JVM application — no GUI required. Use it for automated testing, benchmarking, tournament systems, or any scenario where you need headless battle execution.

Monday, 16 February 2026

Tank Royale Viewer

🖥️ Visualize Robocode battles in style!

Check out the Tank Royale Viewer by Jan Durovec – an amazing web-based viewer for watching Robocode Tank Royale matches in real-time! 🚀

Perfect for tournaments, analyzing strategies, and displaying battles on big screens! ⚡

👉 https://github.com/jandurovec/tank-royale-viewer

Saturday, 31 January 2026

📚 Introducing: The Book of Robocode 🤖

Introducing: The Book of Robocode

The Robocode community now has a comprehensive guide for mastering bot programming!

The Book of Robocode is a free, open-source resource covering everything from your first bot to advanced competitive strategies.

🎯 What's Inside

  • Step-by-step tutorials for beginners
  • Movement strategies (circular, wave surfing, and more)
  • Targeting techniques (linear, circular, pattern matching)
  • Radar and energy management
  • Real code examples for both Robocode and Robocode Tank Royale

✨ Features

  • 📖 Progressive learning path from novice to expert
  • 🔬 Math and are physics explained clearly
  • 🏆 Competition-ready strategies
  • 🤝 Built on 20+ years of RoboWiki knowledge

Whether you're writing your first bot or aiming for the top of the RoboRumble rankings, this book has something for you!

Contributions welcome — open an issue or PR if you'd like to help expand the content. 🚀

Happy robocoding! 🎮

Tuesday, 9 December 2025

Robocode 1.10.1

Version 1.10.1 (09-Dec-2025)

Bugfix

  • #71: Replaced Thread.stop() call with Thread.interrupt() in the RobotThreadManager
    • The Thread.stop() call has been removed as of Java 21, so the old call to stop() would cause the rest of the battle to be aborted; e.g., if you were running 100 rounds, but after the second a robot's thread needs to be terminated, then that would abort the rest of the rounds. By swapping in interrupt, the thread should still terminate, but gracefully.
    • Thanks go to Jeremiah Blanchard for fixing this ❤️. Nice catch!

Changes

  • Improved documentation and comments with all sample bots.
  • Updated libraries (dependencies) to the latest versions (including Eclipse Compiler for Java and Codesize).
Download Robocode 1.10.1 from here