● Online
⚙ Developer Settings
Experimental features for developers and bot builders
Bot API Experimental

Connect your own bot script to play against humans, built-in AI, or other bots. The server validates every move and returns the full board state + legal moves after each turn.

Server URL
https://cubicup.abe-ben.dev
Quickstart example:
Python
JavaScript
# pip install "python-socketio[client]" import socketio, random sio = socketio.Client() @sio.event def connect(): sio.emit('bot-register', {'name': 'MyBot'}) sio.emit('create-bot-room', {'opponent': 'ai:hard'}) @sio.on('game-start') def on_start(data): if data['state']['your_turn']: make_move(data['state']) @sio.on('opponent-move') def on_opp(data): if data.get('game_over'): return if data['state']['your_turn']: make_move(data['state']) def make_move(state): sio.emit('move', {'move': random.choice(state['legal_moves'])}) sio.connect('https://cubicup.abe-ben.dev') sio.wait()
const { io } = require('socket.io-client'); const socket = io('https://cubicup.abe-ben.dev'); socket.on('connect', () => { socket.emit('bot-register', { name: 'MyBot' }); socket.emit('create-bot-room', { opponent: 'ai:hard' }); }); socket.on('game-start', data => { if (data.state.your_turn) makeMove(data.state); }); socket.on('opponent-move', data => { if (data.game_over) return; if (data.state.your_turn) makeMove(data.state); }); function makeMove(state) { const move = state.legal_moves[Math.floor(Math.random()*state.legal_moves.length)]; socket.emit('move', { move }); }
Event Reference
You emitPayloadDescription
bot-register{ name }Identify as a bot
create-bot-room{ opponent }'ai:greedy/peak/mcts/guided', 'human', or 'bot'
join-bot-room{ code }Join existing bot room
move{ move: "x,y,z" }Play a move

▶ Create a Bot Room

Select opponent, get a room code, then connect your script.

AI Greedy
AI Peak
AI MCTS
vs Human
vs Bot

Share this code with your bot script:

-----
Yellow 28 3△
Blue 28 3△
Yellow's turn
2
Skip Turn
3
Rewind 2
4
💥
Destroy
5
🎭
Control
drag to orbit  ·  scroll to zoom  ·  click to place 0·0