VoxelBench - Server Benchmark & Performance Testing icon

VoxelBench - Server Benchmark & Performance Testing -----

Measure and compare your server's real performance with 20+ standardized tests, stress limit mode, a




What's new


Stress-limit, rebuilt — adaptive ramp, custom profiles, a 7th vector
The stress-limit mode now ramps its tiers adaptively and measures lag faithfully, so a run keeps climbing until the server genuinely buckles instead of plateauing early or breaking on a false reading.
  • Adaptive tier ramp with faithful TPS/MSPT sampling — the standard load clamp is bypassed so each tier actually scales up until something gives.
  • Per-type starting loads calibrated from in-game testing, bounded measurement windows, and an inter-tier safety sweep of shared zones between tiers.
  • New villager-brain vector — piles on villager AI and pathfinding until the brain ticks drown the server (7 stress vectors total).
  • Custom stress profiles in YAML — drop a file in plugins/VoxelBench/custom_benchmarks/ to compose your own stress recipe (which vector, starting load, ramp), then run it from chat or the menu.


CPU compute kernels — choose what you stress
The single-core and multi-core tests can now run one of four compute kernels, so you can target the part of the CPU you care about instead of a single fixed workload.
  • int — integer ALU throughput
  • float — floating-point throughput
  • memory — memory-bound access pattern
  • branch — branch-prediction stress
Selectable per test — via the command parameter, tab-completion, or the in-game configurator below.


Interactive menu — rebuilt and catalogue-driven
The /bench GUI got a large overhaul. Test menus now build themselves from the live test catalogue, so the menu never drifts out of sync with what the plugin can actually run.
  • New built-in tests — and third-party tests added through the extension API — appear in the menu automatically, no menu edits required.
  • Custom-profile browser — launch your YAML profiles straight from the menu.
  • New Mods and server config-profile screens, plus a dynamic stress menu.
  • Clearer tab bar, and a duplicate "Tests" entry removed from the main menu.
  • Full EN/FR localization of the new screens and of the test parameter labels.


Configure tests in-game — a real form, with fallback everywhere
On Paper 1.21.6+, opening a test brings up a proper configuration window instead of forcing you to remember the parameters.
  • One form per test — dropdowns for choice parameters, readable and translated labels, and free-text entry via shift-click.
  • On any other platform it falls back automatically to an anvil / chat / inventory configurator, so every server can still set parameters cleanly.


Tab-completion — value suggestions
Built-in tests now suggest sensible values for each parameter as you type, not just the parameter names. Tests added through the extension API get the same value completion.


Environment flagging
Benchmark reports now inventory the server's mods, plugins and configuration profile. This lets leaderboards spot and flag setups that inflate scores (tweaked view-distance, spawn limits, performance mods, …) so honest runs aren't drowned out by doctored ones. The plugin only reports the data — the flagging happens server-side.


Smaller fixes
Menus no longer blank out on a refresh or page change · stress-limit false ruptures and endless "hopper" tiers fixed, and tiers that never reached the breaking point now do · the explosion test's proportional load is gated to stress mode only, so the standard benchmark is unaffected · the pre-flight memory budget now anticipates a test's peak allocation · extension API bumped to 1.1.0 (suggested values; backward compatible, still preview).


Coming soon
  • Extension API (preview) — third-party plugins can register their own benchmark tests against VoxelBench: typed parameters, declared output metrics, full lifecycle hooks, and mock helpers for unit tests. The surface is functionally complete and exercised by the bundled sample plugins, but isn't officially announced for public use yet. Expect changes until the public release.


Upgrade
Drop the new jar in plugins/, restart. No config or database migration — new options ship with sensible defaults. On Paper 1.21.6+ the in-game configuration windows light up automatically; every other platform keeps the anvil / chat / inventory flow. Custom stress profiles live next to the benchmark profiles in plugins/VoxelBench/custom_benchmarks/ — delete the samples you don't need.


Java + compatibility
Java 16+ for MC 1.17 → 1.21.x. Java 21 recommended for MC 1.20.5+. Java 25 LTS for MC 26.1.x.
Tested on Paper / Purpur / Pufferfish / Folia / Spigot. The in-game configuration windows require Paper 1.21.6+; everything else degrades gracefully on older or non-Paper platforms.
----------, Jun 17, 2026

What's new

Memory hardening — three-layer protection against OOM
Low-RAM hosts (≤ 4 GB heap) used to accumulate residual garbage between tests and eventually crash with OutOfMemoryError. Three layered guards now make that virtually impossible:
  • Post-cleanup GC — every test triggers an aggressive 3-cycle GC at the end of cleanup. Recovers the 10-15 % of peak heap each test would otherwise leak.
  • Pre-flight memory budget — before starting a test, heap usage is checked: under 75 % proceeds; 75-85 % warns and runs a pre-emptive GC; 85 %+ refuses the test as Skipped with reason memoryPressure.
  • Runtime OOM watchdog — async poller aborts the active test if heap stays at 92 % for 3+ consecutive seconds, before the JVM crashes hard.
All three are togglable via config.yml under benchmark.post-cleanup-gc, benchmark.memory-budget.*, benchmark.memory-watchdog.*.


Hosting environment detection — know what host you're on
Five probes (filesystem, plugins, env vars, JVM resources, cgroups) classify the host into one of five tiers: DEDICATED_OR_VPSLIKELY_PAID_HOSTEDSUSPECTED_FREELIKELY_FREECONFIRMED_FREE. Vendor-specific markers identify Aternos, Minehut, FalixNodes, Server.pro and the MSH hibernation wrapper. Surfaces as a chat warning at /bench start when free-tier is detected, and as a new hostingEnvironment block in benchmark reports so the leaderboards can filter unreliable runs out automatically.


Hardware introspection — disk type + DDR modules
Reports now carry primary-disk classification ( NVMe / SSD / HDD / RAMDISK, plus model, size and mount point) and per-module memory detail (DDR3/4/5 type, MHz, capacity, manufacturer). Both visible in the disk and memory info GUIs as dedicated tiles. When the underlying platform doesn't expose this (e.g. memory modules on a Linux container without SMBIOS access), fields land as stable UNKNOWN / -1 sentinels rather than being silently dropped.


Preflight confirmation GUI — replaces the double-/bench start text confirm
A new inventory GUI opens when /bench start detects risks. Each risk is a coloured tile ( critical, warning, info) with full details on click. Detected risks include: non- voxelbench_* world targeted (critical), world not flat, other players online, server already laggy, hosting tier free, plugin interference (WorldGuard / GriefPrevention / Spark / etc.). Critical findings disable the green Start button — only an orange Force button (visible with voxelbench.start.force) can launch through them. Clean reports skip the GUI entirely and start directly.


/bench info — full rewrite with 15 sub-sections
  • Existing sections enriched (cpu, ram, disk, network, spigot, java, system) — previously most showed just a title and one line.
  • Brand new: performance (live TPS/MSPT/CPU), plugins (list with enabled state), worlds (per-world chunks/entities/players/seed), sensors (CPU temp/voltage/fans), auth (mode/server ID/rate limit), bench (last run summary), build (version/profile/JVM args), hosting (tier/signals).
  • Pixel-perfect column alignment via a new chat-font width calculator (mixes regular and bold spaces for 1-pixel padding precision).
  • Tab completion suggests all 15 sections.
  • /bench info auth masks the server ID by default (shows abcd…wxyz (64 chars)); /bench info auth hash reveals it.


Tri-state outcomes now actually visible in chat
Until this release every test ended with ✓ Test complete regardless of whether the watchdog killed it or the memory budget refused to start it. The chat now branches on the real status: ✓ Test complete (green) / ⊘ Test skipped — reason (yellow) / ✗ Test failed — reason (red).


Backend errors surfaced in chat
A HTTP 400 from the backend now reads as Invalid report data: HTTP 400 — missing required field 'X' at /tests[2]/status instead of just HTTP 400.


New bundled custom profiles
  • free-host.yml — divided by ~10 vs standard, designed to stay under Aternos / MSH / similar free-tier killers (TPS killer, RAM cap, CPU throttle). Documented as non-comparable with /bench start.
  • low-memory.yml — divided by ~3, for paid VPS / small dedicated hosts with 2-4 GB heap. Comparable across runs of itself.
The three preset profiles from v1.2.0 ( standard, showcase, example) are still there.


Standard chunkLoading reduced
The standard benchmark's chunkLoading test went from 5000 chunks/zone × 8 zones = 40 000 chunks down to 2000 × 8 = 16 000. The previous value routinely tripped the new OOM watchdog at ~92 % heap on 6 GB hosts; 16 000 stays comfortably under the budget.


Critical fixes
  • /bench stop was lying — three coupled bugs meant the test kept running for minutes after stop, the scoreboard stayed visible, and a fake ✓ Test complete could appear long after. All three fixed: the active test is force-cancelled synchronously, the scoreboard is removed immediately, late callbacks are suppressed.
  • Successful tests reported as failed — an internal status field wasn't being synced with the success boolean, so every test that succeeded was internally flagged FAILURE. Silent until the new chat outcome logic started reading it, then every success appeared as ✗ Test failed. Fixed.
  • /bench info tab-completion stale — was suggesting 4 obsolete categories. Now lists every actual sub-section.


Smaller fixes

Anonymisation extended to cover the new hardware blocks (mount-point masked in PARTIAL, disk model generalised in FULL, RAM part numbers hashed in PARTIAL / redacted in FULL) · Server ID masked by default in /bench info auth · Preflight GUI treats Esc as cancel · Every new behaviour has a config.yml toggle with sensible defaults.


Coming soon
  • Extension API (preview) — still on track. Same surface as v1.2.x with new typed parameter / metric / completion / structured-version-comparison primitives. Not officially announced for third-party use yet — expect changes until the public release.


Upgrade

Drop the new jar in plugins/, restart. No config or database migration required — new options are added with sensible defaults. The first run after upgrading may show one or two Skipped outcomes on a low-RAM host: that's the new memory budget check refusing tests that would have crashed the JVM — inspect heap with /bench info ram or raise -Xmx. The two new preset profiles ( free-host.yml, low-memory.yml) will appear in plugins/VoxelBench/custom_benchmarks/ alongside the existing ones — delete the ones you don't need.


Java + compatibility

Java 16+ for MC 1.17 → 1.21.x. Java 21 recommended for MC 1.20.5+. Java 25 LTS for MC 26.1.x.
Tested on Paper / Purpur / Pufferfish / Folia / Spigot / Mohist 1.20.1 + 1.20.2 / Arclight 1.20.1 + 1.20.4.
----------, May 31, 2026

What's new
  • Custom benchmark profiles — /bench custom
    A new way to compose your own benchmark recipes from YAML, without writing code. Drop a file in plugins/VoxelBench/custom_benchmarks/ and pick which tests run, in what order, with what
    parameters.

    • /bench custom run — execute a profile
    • /bench custom list — see what's loaded
    • /bench custom info — view the steps and params
    • /bench custom reload — re-scan the folder without restart
    Ships with three preset profiles: standard.yml (mirrors the built-in benchmark), showcase.yml (every test and every parameter, fully commented — use as a reference),
    example.yml (minimal starter). Profiles carry their own name, description, author, version and tags; the backend uses
    a normalized profile hash to recognize the same recipe across servers.

  • AutoBench — backend-driven benchmark scheduling
    /bench autobot [args] — entry point for a backend-driven agent (typically a mineflayer bot connecting as a real player) that orchestrates benchmark runs server-side. Supports single-run,
    multi-run with abort detection, and live progress events. The agent is force-gamemode'd to SPECTATOR on entry so it never falls to its death in a fresh world.

  • Hybrid server support — Mohist & Arclight
    Benchmark worlds on hybrid Forge/Bukkit servers used to come out with hills, trees and caves instead of flat terrain. They now generate genuinely flat. Tested on Mohist 1.20.1 and Arclight 1.20.1 / 1.20.4.
    Detection covers the full hybrid family (Mohist, Arclight, Banner, NeoTenet, Magma, CatServer, Cardboard).

  • Persistent benchmark worlds
    Worlds created with /bench world create now auto-reload on every server start, even without Multiverse-Core. The command also refuses to overlay a stale folder, preventing mixed-terrain chunks
    if you recreate over an existing one. Temp benchmark worlds from crashed previous sessions get auto-cleaned at startup.

  • Sharper /bench commands

    • /bench tests — alias of /bench test, fully tab-completable
    • /bench help — explicit help command, no longer hidden behind unknown subcommands
    • /bench tests list — dynamic listing built from the live test registry, grouped by category
    • Console-aware listing — /bench test from console shows two groups: scriptable hardware tests and those requiring a real player
    • Unknown subcommands now print Unknown subcommand 'X' instead of silently dumping the help

  • Test parameters via key=value
    /bench test foo count=50 timeoutMs=2000 now actually passes the values to the test. Tab completion suggests the available keys for each test.

  • Tri-state outcomes
    Tests can now report Skipped (test inapplicable, e.g. an optional mod isn't installed) distinct from Failed (server lost). Skipped tests render in yellow with the reason and
    stay out of failure stats — backends should exclude them from leaderboards rather than count them as losses.

  • /bench custom run respects your pinned world
    Custom profiles used to ignore /bench world set and silently spawn a temp world. The pinned world now wins; the profile's auto-temp-world setting only kicks in as fallback.

  • Sharper failure messages
    When a test fails, the reason now displays in chat instead of a bare ✗ Test failed line.

  • MC 26.1.x readiness
    WorldTimeStabilizer resolves daylight-cycle gamerules by name across MC 1.17 → 26.1.x; defensive world.setTime handles dimensions without a world clock (custom Forge
    dimensions). Compile path verified against Spigot 26.1.2 API.

Smaller fixes

Boolean metrics display "Yes/No" properly · Entity-spawn tests pre-load chunks on hybrid servers (no more silent 0-spawn runs) · Parameter clamp warnings reach the operator in chat · Built-in tests
(chunkLoading, chunkTicking, lightingUpdate, explosion) promoted to rich-metric format · Startup logs quieter (spurious scoreboard warnings demoted)

Coming soon

  • Extension API (preview) — a new public API will let third-party plugins register their own benchmark tests against VoxelBench: typed parameters, declared output metrics, full lifecycle hooks, JUnit
    mock helpers. The surface is functionally complete and exercised by the bundled samples in the project repo, but isn't officially announced for public use yet. Expect changes until the public release.
    Stay tuned.
Upgrade

Drop the new jar in plugins/, restart. No config or database migration. If you have an existing voxelbench_ world from a previous version, delete it before restart — terrain
generated before this release isn't consistent with the new flat generator. The first time the plugin starts, three preset custom profiles will appear in plugins/VoxelBench/custom_benchmarks/
— feel free to delete the ones you don't need.

Java + compatibility

Java 16+ for MC 1.17 → 1.21.x. Java 25 LTS for MC 26.1.x.
Tested on Paper / Purpur / Pufferfish / Folia / Spigot / Mohist 1.20.1 / Arclight 1.20.1 + 1.20.4.
----------, May 22, 2026

What's new


  • /bench world — choose any loaded world as your benchmark world, or create a flat one in
    one command:

    /bench world create <name> — flat normal world, auto-prefixed
    voxelbench_, fixed seed for repeatable results
    /bench world set <name> — pin it for every future benchmark
    /bench world unset — back to the default behaviour
    /bench world list / show — see what's pinned, what MV manages
    /bench world delete <name> — only voxelbench_* worlds, never your
    survival map​
    The pinned world is honoured by /bench start, /bench stresslimit,
    /bench test, multi-run warmups and post-run cleanup.

  • Multiverse-Core integration — drop-in support for Multiverse 4.x and 5.x. Created worlds
    appear in /mv list, deleted worlds are un-registered cleanly. Falls back to Bukkit's
    native API when MV is not installed, so the feature works on every server.

  • Crash-proof player rescue — disconnecting (or restarting the server) mid-benchmark used to
    leave you stuck inside the bench world. Your pre-test position and gamemode are now persisted to
    disk and restored automatically the next time you log in.

  • Console safety — gameplay benchmarks can no longer be run from the console (they always
    silently misbehaved without a real player). Hardware tests stay scriptable: memory,
    disk, multicore, singlecore.

  • A SPECTATOR fix you'll feel — players teleported into a fresh benchmark world managed by
    Multiverse used to land in SURVIVAL and immediately fall to their death. They now correctly arrive
    in spectator mode regardless of per-world gamemode plugins.

  • Hook visibility — at startup the plugin prints a clear summary of which third-party
    plugins it has hooked into.

Upgrade

Drop the new jar in plugins/, restart. No config or database migration. If you don't
use /bench world, the plugin behaves exactly like v1.0.2.

Java requirement

Java 16+ for MC 1.17 to 1.21.x. Java 25 LTS required if you run MC 26.1.x (Mojang's requirement, not
ours).
----------, May 1, 2026

What's new
  • Minecraft 26.1.x supported — drop-in compatible with Mojang's new year-based versioning (26.1, 26.1.1, 26.1.2).
  • Tested across the full 1.17 to 26.1.2 range — every release is now boot-tested daily on real Paper servers. Compatibility regressions get caught before you do.
  • Six new entity types recognized — armadillo, breeze, bogged, wind charge, creaking, happy ghast.
  • Adventure formatting library updated to 4.26.1 (used for MiniMessage rendering in chat
    output).
Upgrade

Drop the new jar in plugins/, restart. No config or database migration.

Java requirement

Java 16+ for MC 1.17 to 1.21.x. Java 25 LTS required if you run MC 26.1.x (Mojang's requirement, not ours).
----------, Apr 27, 2026

- Added DashboardI18n — .properties-based translation loader. English (en_US) is now the default,
French (fr_FR) is optional, and new languages can be added by dropping a single .properties file
under resources/dashboard/lang/.
- Replaced all hardcoded French strings on the three dashboard pages (login, dashboard, API-only)
with i18n lookups.
- Added a language selector dropdown on all three pages, with choice persisted through the
voxelbench_locale cookie (1 year, SameSite=Lax).
- Locale resolution priority: cookie → Accept-Language header → en_US fallback.
- Translated monitor server logs to English for international consistency.
----------, Apr 23, 2026

Resource Information
Author:
----------
Total Downloads: 120
First Release: Apr 13, 2026
Last Update: Jun 17, 2026
Category: ---------------
All-Time Rating:
2 ratings
Find more info at voxelbench.com...
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings