Auto-bench on the Website

Auto-bench benchmarks your server without you: on a schedule or on demand, VoxelBench sends a bot that joins as a player and has the plugin run the benchmark. This page covers the website side: targets, Microsoft accounts, schedules, launches, quotas, runs and errors.

How a Run Goes

  1. A run is due on its schedule, or you click Run now: VoxelBench queues a job.
  2. A bench agent picks the job up, and its bot connects to your server's verified address, as a Minecraft: Java Edition player.
  3. The bot types /vbautobot followed by a one-time code and the mode: it is the only command the bot uses to start a run. The plugin asks voxelbench.com whether that code is valid for this server, and receives what to run: mode, test or profile, warm-up, number of runs.
  4. The plugin runs the benchmark and reports its progress to the bot. Each measured run sends its report to voxelbench.com, attached to the job.
  5. The bot disconnects.

What happens on the server, and what the server needs, is described in Auto-bench in the plugin documentation.

Before You Start

  • A plan that includes auto-bench: Pro, Enterprise, or a hosting provider account verified by VoxelBench. On the Free plan, the Auto-bench page only offers to upgrade.
  • A linked and verified server. Only verified servers can receive a target, and the bot connects to the address you verified (see Linking and Verifying a Server). Linking the server again removes its verification: verify it again afterwards.
  • On the server: the official, up-to-date VoxelBench jar, outgoing HTTPS to voxelbench.com, and a way in for the bot through whitelist, online mode, anti-bot plugins and proxies (see Letting the Bot In). A pinned benchmark world is strongly recommended (see Where Runs Take Place).

An auto-bench run loads the server like any benchmark: players online will feel it. Schedule it for quiet hours.

Microsoft Accounts

How the bot signs in depends on your server:

  • Offline mode (online-mode=false): no account is needed. The bot joins under a generated name starting with vb_. Choose Offline (cracked server) as the target's auth mode.
  • Online mode: the bot must sign in with a genuine Minecraft: Java Edition account. You lend one in the Microsoft accounts card of the Auto-bench page, then choose BYO Microsoft account as the target's auth mode.

To add an account, click Add Microsoft account. A window gives you a Microsoft address and a short code: open the address, type the code and sign in with the Microsoft account that owns Minecraft: Java Edition. The page notices the sign-in by itself. An account without Java Edition is refused.

VoxelBench never sees your password: you sign in on Microsoft's own page. It keeps the sign-in token Microsoft returns, stored encrypted, and lends it to the bench agent only for the runs that use this account. The page's own warning applies: Mojang may suspend accounts used by automated clients, so only add an account you are willing to lose.

Each account shows its state: available, leased (in use by a run), banned or invalid. After a failed sign-in (auth_failed), the account is marked banned and is no longer used until you remove it and add it again. Removing an account deletes its stored credentials; it is refused while a target still uses the account.

Creating a Target

A target is one server, one way of benchmarking it and one schedule. On the Auto-bench page, click New target:

FieldWhat to put
Synced serverOne of your verified servers. The bot connects to its verified address and port
Display nameUp to 100 characters
ScheduleA preset; any other schedule can be set afterwards by editing the target (see Scheduling)
Minecraft versionLeave on auto-detect, or force a version when the bot does not know the one your server announces. Use the Minecraft version, not your server software's build number. The page shows the latest version auto-bench supports, and the full list
Bench modeStandard benchmark, Stress limit, Unit test or Custom profile
Bench argsFor Unit test, required: the test ID, then its parameters in the order /bench test takes them, for example chunkLoading 500 or disk 4 8 512M 3 (see Test Parameters). Up to 256 characters
Custom profile nameFor Custom profile, required: the profile's file name without .yml (letters, digits, - and _, up to 64 characters). The profile must be on the server, in plugins/VoxelBench/custom_benchmarks/
Warmup passA full benchmark first, whose results are discarded, to warm the server up; the job takes that much longer. Ignored in Unit test mode
RunsHow many measured runs per job, each sent as its own report. Standard benchmark only; up to 10 on Pro, 20 on Enterprise and hosting provider accounts. The whole job, warm-up included, must finish within two hours
Auth modeOffline (cracked server) or BYO Microsoft account (see Microsoft Accounts)
Microsoft accountWith BYO Microsoft account: one of your available accounts
NotesOptional, up to 1,024 characters

Creating a target is only possible from the dashboard: the API and agents cannot do it, because a target engages a Microsoft account you lend.

Editing and Deleting

Edit (in the target's row) changes the name, the schedule (a preset or any cron expression), the Minecraft version, the mode, the arguments, the warm-up and the number of runs. The server and the auth mode cannot be edited: create a new target to change them. The Enabled switch pauses and resumes a target. Delete removes it for good, from the dashboard only.

Scheduling

The presets are Daily at 02:00 UTC (the default), Every 6 hours, Twice daily (02h/14h UTC), Weekly (Sunday 02:00 UTC) and Monthly (1st 02:00 UTC). When editing a target, you can also type any five-field cron expression — minute, hour, day of month, month, day of week — always in UTC, with *, */N, lists (2,14) and ranges (1-5).

  • At most once an hour. A schedule that fires more often is refused when you save it.
  • Around the time, not on the minute. Each run is moved by a random offset of up to 20% of the interval, 30 minutes at most, earlier or later, so that nobody can tune a server just for a known time. The scheduler checks every 5 minutes for runs that are due.
  • One run at a time. If the previous run of the target is still going when the next one is due, the new one waits until the target is free.
  • Within the quota. When your daily run quota is used up, a scheduled run is skipped and the target moves on to its next time.

An API token or a connected agent with the auto-bench:write scope can change a target's schedule, name and notes, and switch it on or off (see API and Tokens).

Launching and Cancelling

Run now, in the target's row, queues a run at once; a bench agent picks it up shortly after.

  • One run in flight per target. While a run is queued or in progress, launching again is refused (through the API: already_running, with the id of the run in progress).
  • 60 seconds at least between two launches of the same target.
  • The run quota must cover the target's number of runs.

Cancel, in the Live runs panel, asks the bot to stop: it tells the plugin to stop the run, which the plugin does at once, and disconnects. The run first shows cancelling, then cancelled. If the agent does not confirm within 5 minutes, the run is closed anyway (cancel_timeout). A cancelled run is never counted as a failure of the target, but it stays counted in the run quota.

On the server, /bench stop also stops an auto-bench run; VoxelBench records it as stopped on the server (aborted_in_game), not as a failure. A run of a multi-run job that ends without its report is different: the plugin abandons the remaining runs, and VoxelBench records a failure of the target (agent_crash, see Other Errors).

Quotas

ProHosting providerEnterprise
Targets3510
Runs per 24 hours1030100
Runs per job102020
Microsoft accounts2105

The Free plan has no auto-bench.

The run quota counts every job created in the last 24 hours with its number of runs (the warm-up does not count), whether it succeeded, failed or was cancelled, and scheduled runs included. It is a rolling window: runs come back as earlier ones age past 24 hours. The Auto-bench page shows how many runs you used in the last 24 hours.

Following Runs

The Auto-bench page shows:

  • Live runs, updated every 5 seconds: each run in progress, with its run number (Run 2/5), a warmup badge during the warm-up, the current test and the Cancel button;
  • Recent runs: completed, failed and timed-out runs, with their status, target, mode, score, duration and start, and a link to the report or the test result. Click a failed run to see what went wrong, what to do, and the agent's raw message;
  • in the targets table: the Next run, the Last success, and the Failures in a row, with the last error.

The same runs can be read through the API (GET /api/v1/auto-bench/jobs), each failure with the same explanation as the English dashboard.

Run Statuses

StatusMeaning
queuedWaiting for a bench agent to pick it up
claimedAn agent took it and is connecting to your server
connecting, onlineThe bot is connecting, then connected and waiting for the plugin to confirm its code
benchingThe benchmark is running
cancellingA stop was asked; waiting for the agent to confirm
completedThe results arrived
failedThe run ended with an error (see below)
timeoutThe run reached its deadline without finishing (expired)
cancelledStopped from the dashboard or the API

Failures and Automatic Pause

A failed run (status failed) sends you a notification with the number of failures in a row. After 5 failures in a row, the target is switched off automatically, and you are notified. Switching it back on resets the count, and so does a successful run.

Some endings are not the server's fault and are not counted: a run interrupted by a VoxelBench update (agent_shutdown), a run stopped on the server with /bench stop (aborted_in_game), and cancellations, including a certification run that VoxelBench's moderation rescheduled or cancelled (rescheduled, user_cancelled). Every other failure counts, including one caused by the target's settings, such as a wrong test ID, and a multi-run job abandoned because one of its runs failed.

Errors and What to Do

A failed run shows a label, its code, an explanation and what to do. The codes below are the ones you will see. Codes that come from the plugin are also listed, with their fixes, in Auto-bench in the plugin documentation.

Before the Plugin Answers

CodeWhat happenedWhat to do
connection_refusedThe bot could not connect, did not reach the world within 2 minutes, or lost the connection during the runCheck that the server is running and reachable from the internet at its verified address and port; let the bot through firewalls and geographic filters
kicked_on_joinThe server kicked the bot; the reason is in the raw messageWhitelist, anti-bot plugin, full server, or an online-mode server with a bot in offline mode
server_startingThe server was asleep and booting when the bot arrived; the agent waited and retried, but it did not finish starting in timeLaunch again once the server is fully up, or keep it awake at the scheduled time
auth_failedThe bot could not sign in with the Microsoft accountCheck that the account still owns Java Edition and is not suspended, then remove it and add it again: until then it stays marked banned
byo_lease_failedBefore connecting, the agent could not obtain a sign-in for the target's Microsoft account: the account is marked invalid or banned, Microsoft refused to renew its sign-in, it no longer owns Java Edition, or its stored credentials could not be read. The raw message gives voxelbench.com's answer. The bot never connectedIf the raw message says account_unusable, auth_chain_failed or no_java_edition, sign in to the account, check that it still owns Java Edition, then remove it and add it again. Any other answer is on VoxelBench's side: report it
version_mismatchThe bot does not know the Minecraft version your server announcesSet Minecraft version on the target to a version from the supported list
no_plugin_responseThe bot joined the world and typed /vbautobot, but no answer from VoxelBench came back within 10 minutes. VoxelBench answers that command at once, before anything else, so this silence means the command never reached VoxelBench, or its answer never reached the botCheck that VoxelBench is installed and enabled on the server the bot actually lands on (not a proxy lobby), that no plugin blocks or rewrites /vbautobot (command filters, login or captcha plugins), and that no chat plugin hides VoxelBench's messages to the bot. The bot needs no permission to run /vbautobot

On the Server

CodeWhat happenedWhat to do
bench_timeoutThe plugin started, then said nothing for 10 minutes (it reports the start and end of every test), or the job reached its maximum duration of two hours, warm-up and all runs includedLook for an error in the server console at that time, and make sure no plugin hides VoxelBench's messages to the bot. If the job is simply too long, lower its number of runs or drop the warm-up
plugin_test_already_runningA benchmark, stress run or test was already running when the bot arrivedAvoid running your own benchmarks at the scheduled time; the next run follows the schedule
plugin_benchmark_world_unavailableA Unit test job on a test that writes to the world, with no pinned world and no temporary world possible (always the case on Folia without a pinned world). Nothing ranPin a world loaded at startup with /bench world set <world>; elsewhere than on Folia, you can also allow benchmark.auto-temp-world in the plugin's configuration
plugin_missing_test_argsA Unit test job reached the plugin with no arguments, so it did not know which test to run. Nothing ran. The website refuses to save a test target without arguments, so this is rareEdit the target and put the test ID in Bench args, followed by its parameters in the order /bench test takes them, for example chunkLoading 500
plugin_unknown_testThe test named first in Bench args cannot start on this server: no test has that ID (unknown_test), or an extension registers it but could not build it (test_build_failed). Nothing ranRun /bench test list on the server and put one of its IDs first in Bench args. A test from an extension needs that extension installed and enabled; for test_build_failed, update the extension
plugin_invalid_test_argsThe plugin knows the test but refused one of the parameters that follow its ID in Bench args (invalid_test_args): out of range or not a number, for example. Nothing ranFix the parameters. To read the plugin's own reason, type the same command in game: /bench test followed by the target's Bench args
plugin_unknown_profileA Custom profile job could not start: no profile name was sent (missing_profile_name), no benchmark profile of that name is loaded on the server (unknown_profile; a stress profile does not count, and the raw message lists the loaded names), or a test of the profile is no longer registered (test_no_longer_known). Nothing ranPut the profile's file name without .yml in Custom profile name (its name: key is only a display name). /bench custom list shows the loaded profiles, and /bench custom reload picks up a file added since startup. For test_no_longer_known, reinstall the extension that provides the test, or remove the test from the profile
plugin_unknown_modeThe installed VoxelBench does not know this modeUpdate VoxelBench
plugin_exceptionVoxelBench hit an error while preparing the runLook for the error in the server console and report it
plugin_protocol_errorVoxelBench and voxelbench.com did not understand each other: an answer VoxelBench could not read, a request voxelbench.com refused as malformed, or voxelbench.com answering with a server error at every attempt. The raw message gives the code. Nothing ranA server error (http_5xx, internal_error) is on VoxelBench's side: launch again later, and report it if it persists. Otherwise, update VoxelBench to the latest release, then launch again
plugin_network_errorVoxelBench could not reach voxelbench.com to validate the run, even after retrying. Nothing ranRun /bench ping and allow outgoing HTTPS to voxelbench.com
plugin_rate_limitedvoxelbench.com refused VoxelBench's challenge request: it hands out at most 150 challenges per hour to one IP address, and every signed request of the plugin (validating a run, sending a report or a unit test) starts with one. Servers that share the same outgoing address share this budget. Nothing ranLaunch again later: the budget frees up within the hour. If it keeps happening, look for what else sends to VoxelBench from that address, such as other servers on the same machine or repeated manual benchmarks (see Rate Limits)
unauthorized_pluginvoxelbench.com does not recognise this VoxelBench jarInstall the latest official release, unmodified, and restart the server

Codes and Server Identity

CodeWhat happenedWhat to do
invalid_nonce, nonce_expired, nonce_consumed, target_missingThe run's one-time code was unknown, past the run's deadline or already used, or the target was deleted meanwhileNothing to fix on the server: launch a new run. If invalid_nonce keeps coming back, check that no plugin rewrites the bot's commands
server_mismatchThe server the bot reached is not the one the target was created forMake sure the bot lands on the server you verified, behind a proxy too. If the server's identity changed (a reinstall without plugins/VoxelBench/identity.yml), link and verify it again, then create a new target

Runs Ended on Purpose

CodeWhat happened
cancelled_by_userCancelled from the dashboard or the API
cancel_timeoutCancelled, but the agent did not confirm within 5 minutes; the run was closed anyway
aborted_in_gameSomeone ran /bench stop on the server, or the console did
agent_shutdownThe bench agent was restarted during the run, by an update on VoxelBench's side: launch it again
rescheduledA certification run moved to another time by VoxelBench's moderation; the replacement run appears at its new time
user_cancelledA certification run cancelled by VoxelBench's moderation

None of these counts as a failure of the target.

Other Errors

CodeWhat happenedWhat to do
expiredThe run reached its deadline without finishing: no agent picked it up in time, or the agent running it stopped reporting (crash, restart, lost network) before the end. Nothing was measuredLaunch it again; report it if it happens to runs that had already started
agent_crashThe bench agent hit an unexpected error, or a run ended without its report: the plugin finished the benchmark, but its report was refused or could not be sent. The raw message then starts with report-fail for a single run, or with run-fail when one run of a multi-run job failed (the plugin then abandons the remaining runs), followed by the reason. For a Unit test job, the server must be linkedFor report-fail or run-fail, update VoxelBench to the latest release and check that the server reaches voxelbench.com (/bench ping). Otherwise, read the raw message and report it if it keeps happening
unknownAn error the agent does not classifyRead the raw message, and look the plugin's code up in Auto-bench; report it if the message says nothing useful