A luminous MC³ multiverse with a violet portal and distant explorers
Fabric · Minecraft 26.2 · v0.3.53 technical preview

MC3Cubed.

Minecraft gives you 384 blocks of height. MC3 throws that limit away: the world is sliced into independently addressed cubic chunks, so you can build sky cities miles above the clouds or dig all the way down to the planet’s molten core.

v0.3.53 latest build46 published releases3 Oct 2026 last shipped±30M block range
01 / Install

Four steps to
boundless.

MC3 is a Fabric mod. Drop it in and the ceiling disappears.

01

Install Fabric

Grab Fabric Loader for your launcher, matching Minecraft 26.2. Fabric API sits alongside happily.

02

Grab the mod

Download mc3-0.3.53.jar from the version history below, or use the .mrpack for a one-click modpack install in Prism or Modrinth apps.

03

Drop it in mods/

Place the jar in .minecraft/mods. No config required to start playing.

04

Break the ceiling

Create a world and dig or build freely. /mc3 gives you status, pre-generation and profiling.

02 / System

What
“cubed” means.

The four pillars of the cubic world engine, diagrammed. Screenshots and footage appear here automatically as soon as they ship with a release.

Cube addressing

Independent 16×16×16 cubes with their own CubePos, payloads and per-cube persistence. The chunk column is dead.

Infinite verticality

The full −30,000,000 to +30,000,000 block range is valid cube space. Sky cities and planet cores, coherently.

Streamed regions

A square-prism view volume with its own vertical view distance streams every cube the renderer needs.

Layered worldgen

Stack terrain profiles (caves, nether, overworld, floating islands) into one configured generator.

03 / Releases

The build
timeline.

Every published MC3 build, baked in when a release ships: changelog, mod jar, modpack and sha256 checksums included.

Latest release · 3 Oct 2026

MC³ 0.3.53

MC³ 0.3.53

  • #54/#55: owned-Java scanner skips defunct and foreign-user JVMs (fixes harness fail-closed on shared hosts).
  • #57: Frontier join freeze fixed — visibility-ordering surface probes moved off the server thread to a bounded pool; unknown columns rank as surface.
  • Longest server tick RD24 35,718 ms → 245 ms; RD32 61,567 ms → 186 ms.
  • Convergence 105.2 → 68.1 s (RD24), 170.5 → 114.9 s (RD32).
  • Fingerprints identical; normal preset unchanged.
  • Root :test 1,299 tests / 0 failures; :frontier:test 0 failures.
  • PR #54, #55, #57 CI green.
  • Frontier memory use at high render distance (~460 sections per loaded column, TASKS #262).
  • Frontier surface still slower than normal preset (#259).
  1. 3 Oct 2026 · latest

    MC³ 0.3.53

    MC³ 0.3.53

    • #54/#55: owned-Java scanner skips defunct and foreign-user JVMs (fixes harness fail-closed on shared hosts).
    • #57: Frontier join freeze fixed — visibility-ordering surface probes moved off the server thread to a bounded pool; unknown columns rank as surface.
    • Longest server tick RD24 35,718 ms → 245 ms; RD32 61,567 ms → 186 ms.
    • Convergence 105.2 → 68.1 s (RD24), 170.5 → 114.9 s (RD32).
    • Fingerprints identical; normal preset unchanged.
    • Root :test 1,299 tests / 0 failures; :frontier:test 0 failures.
    • PR #54, #55, #57 CI green.
    • Frontier memory use at high render distance (~460 sections per loaded column, TASKS #262).
    • Frontier surface still slower than normal preset (#259).
  2. 2 Oct 2026

    MC³ 0.3.52

    MC³ 0.3.52

    • Frontier surface-band generation faster again: halo columns and cube terrain batches now share pre-surface noise instead of computing it twice, only where provably interchangeable (#50, #259); generated content is unchanged.
    • Wall 27.0-28.8 s -> 25.3-25.8 s; process CPU 274-285 s -> 230-240 s; content fingerprints identical.
    • Cumulative since 0.3.49: about 110 s -> 25.5 s.
    • Root :test 1,297 tests, 0 failures; :frontier:test 23 tests, 0 failures; cross-path parity tests; PR CI green on #50.
    • Frontier surface is still about 2.8x the normal preset on the same host (full-band fill for halo columns without cubes, #259 stays open).
  3. 2 Oct 2026

    MC³ 0.3.51

    MC³ 0.3.51

    • Frontier surface-band generation about 2x faster again via an exact per-thread climate-noise memo during biome sampling (#48, #259); generated content is unchanged.
    • Convergence 53.6-57.0 s -> 26.2-30.5 s; process CPU 700 s -> 275-312 s; content fingerprints identical.
    • Biome sampling fell from 33% to 9% of CPU samples.
    • Root :test 1,295 tests, 0 failures; :frontier:test 23 tests, 0 failures; PR CI green on #48.
    • Frontier surface is still about 2.3x the normal preset (halo and cube noise duplication, #259 stays open). The memo has not yet been measured with C2ME compiled density functions.
  4. 2 Oct 2026

    MC³ 0.3.50

    MC³ 0.3.50

    • Frontiers fixes (#44): Frontier worlds no longer crash when C2ME's c2me-opts-accel-opencl is present (incompatibility fallback); world-type buttons read "MC³ Frontiers".
    • fungal_depths and crystal_caves now generate (deep_caverns no longer wins every tie); /locate biome no longer reports a Y in the gaps between bands; Frontier biome sampling no longer computes climate twice.
    • Frontier surface-band generation 2.4x faster via a shared preliminary-surface memo (#45, #259).
    • Frontier surface convergence 110.4 s -> 46.0-47.8 s, content byte-identical.
    • /locate finds fungal_depths, crystal_caves, cloud_forest and sky_meadow in 1-20 ms.
    • Full :test and :frontier:test green; PR CI green on #44 and #45.
    • Frontier surface band is still ~4x slower than the normal preset (#259). The OpenCL fallback is not yet confirmed with the real OpenCL jar on the owner's PC.
  5. 1 Oct 2026

    MC³ 0.3.49

    MC³ 0.3.49

    • Player settings screen with presets, an Advanced screen and config v2 migration (#256).
    • Distant Horizons 3.3.3 support with MC³-driven LOD generation (#258). Requires Fabric Loader 0.19.5 or later. With Iris shaders use DH's OpenGL engine and Iris 1.11.4 or later; Blaze3D works only without Iris.
    • Much faster first terrain on join and after far teleports (#257): prefetch, pre-warm, visible-surface-first, shell-first column residency and C2ME no-tick halo suppression.
    • Far teleport first terrain 1.5 s vs vanilla 2.3 s; most of the view after a half-view teleport 3.4 s vs vanilla ~4.9 s.
    • Post-teleport flight 168/119 vs vanilla 167/84; ground 121/91 vs 174/70; 0 "Can't keep up"; a Y=1000 terminal-velocity fall has no mid-air stalls.
    • Distant Horizons OpenGL, no shaders: ground 237/167, post-teleport 228/140; with Complementary shaders 120/73; 0 DH height errors.
    • Full :test green; PR CI green on #38, #39 and #40; live tests on the owner's PC.
    • Distant Horizons fill rate is bounded by DH's own generationRequestRateLimit (default 20 sections/s). #257 stays open for further work if any.
  6. 1 Oct 2026

    MC³ 0.3.48

    MC³ 0.3.48 — integrated-server performance and stability round (#255)

    • Cubic levels skip vanilla's random-tick loop over the whole tall column (the 4-6 TPS integrated server).
    • Saves: regenerable stub column saves, disk-index probes removed, save-elision compaction, and Save and Quit no longer hangs under C2ME.
    • Compatibility: Voxy World Gen V2 inert in cubic levels (MC³ drives far LOD), C2ME halo and canonical-section fixes, ScalableLux client light installed directly.
    • Far teleport: no Server-thread stall (sync reads no longer join generation), batched forget packets, abandoned-queue-head deadlock fixed.
    • Flying players' move packets are no longer dropped by the movement gate.
    • Join 15 s vs 10-11 s; ground-flight F3 p98/p99.5 fps 174/70 vs 133/89 and 109/75.
    • Post-teleport flight 167/84 vs 130/86 and 178/107; "Can't keep up" 0 vs 0.
    • Reload of an existing world: join 2.2-4.3 s, terrain complete ~5.5-9 s vs ~6 s; far LOD ~1,200-1,500 cubes/s; no OOM.
    • Full root :test and :jar green; PR #36 CI green (runs 36845532583, 36845539948); Save and Quit instant in 3/3 final runs.
    • First terrain after a far teleport is ~4.1-4.5 s vs vanilla 2.3 s (tracked as #257).
  7. 30 Sept 2026

    MC³ 0.3.47

    MC³ 0.3.47 — #253 sky-island density retune: the default preset's floating-islands band thinned to ~⅓ (band fill 5.83% → 1.91% / 2.24% across two probe seeds) with designed region-scale cluster variation; island shape untouched.

    • The change (6428459): the mc3:sky_islands island body bias moves from the #238 constant −0.3 to add(−0.55, mul(0.55, noise(continentalness, xz_scale 1.0, y_scale 0.0))).
    • That is a census-calibrated global ~⅓ thinning plus a low-frequency region mask modulating the effective bias between open sky (−1.10) and large island clusters (~0.00), constant through the band's vertical extent.
    • Island shape parameters untouched — the #225 accepted look is preserved wherever islands generate; only the default preset's 500–1,500 islands band changes (Frontier presets use their own copies and are unaffected).
    • Census (2,048²×256 survey, 4×4×8 lattice, 6-connected island components, 16×16 region grid): seed 53 band fill 5.830% → 1.912% (32.8% of before), islands 1,242 → 460; seed 1234 5.626% → 2.241% (39.8%), islands 1,039 → 505.
    • Cluster variation is designed, not noise: region fill↔mask correlation +0.52; open-sky regions 151–153/256 (was 36–56); cluster regions persist (33/29) with cores to 26–44% local fill and multi-million-block islands.
    • Shipped-path confirmation (real server, seed 1234): open patch 0.000% band fill vs cluster patch 7.227%; the mixin probe pins cluster/typical/open-sky columns (open-sky run 1,008 blocks).
    • Content change by design: the two islands-band pins updated intentionally and documented; no CRC-parity pins touched (no other band samples this file).
    • No mixins added or changed. Branch: 5 commits 70f5540..185f1e9 on fix/sky-density-253 (includes the visual round: cluster + pure-open-sky captures, both boots saved cleanly).
    • Gates: full clean build 1,126 tests / 0 failures / 6 skipped, frontier-mixin-gate PASS (4 required mixins under Knot); mixin-loadtest ALL CLASSES LOADED (9,235 OK / 0 FAIL).
  8. 30 Sept 2026

    MC³ 0.3.46

    MC³ 0.3.46 — #246 worldgen CPU parity round: vanilla-parity cadence durability for generated-only cube saves. Zero-delivery stall minutes 10 → 0, delivered cubes +236%, quit-save ~30 min → ~1 min, 34× kernel win; player content keeps the lossless fsync contract.

    • The accounting (real-play, per-thread CPU-clock; the stage wall-clock instrumentation family): burst → a 660 s stall — 61% of the flight, zero deliveries, zero worldgen CPU — while four save lanes drained ~28k pending saves blocked in the per-save force0 fsync (~87% of every save).
    • Vanilla never fsyncs play-loop chunk writes, so this excess was MC³-owned — the owner's "slow loading" is this stall.
    • The fix (1896cfc): generated-only cube saves defer content+directory fsyncs to the page cache, exactly like vanilla; player-mutated and legacy cubes keep force-before-rename (#52 intact); flush waves stay lossless ("stale, never corrupt"); opt-in fast-save path unchanged.
    • Self-heal: a content-shaped decode failure drops the generated-only file and the position regenerates (vanilla's torn-chunk trade); environmental failures still fail the load.
    • Kernel gate: 21.96 → 0.645 ms/save (34×), 1,692 → 0 fsyncs (400 real-file saves).
    • Paired full-pack flight (stutter246-wp-1, exact reference staging): delivered 43,370 → 145,905 cubes (+236%) at 150.4/s; >250 ms frames 79 → 2, max 1,423 → 287 ms; worldgen CPU share 83.9% → 67.1% (vanilla 43.7%); holes ~0.
    • fps flat at the software-GL shelf; frame p99 +16% recorded honestly as shelf-bound pacing with 3.2× the mesh builds, not a fix regression.
    • Also carried: the full-column amortisation fix reverted (p99 keep axis failed the pre-registered n=3 band; kernel result strictly positive, kept in history).
    • No mixins added or changed. Branch: 8 commits df8d977..f4951b6 on fix/gen-stutter-246.
    • Gates: full clean build 1,126 tests / 0 failures / 6 skipped, frontier-mixin-gate PASS; mixin-loadtest ALL CLASSES LOADED (9,235 OK / 0 FAIL).
  9. 30 Sept 2026

    MC³ 0.3.45

    MC³ 0.3.45 — the idle-tick fix: the opt-in traces' own blocking CSV flushes leave the game threads onto one async writer; idle recurring 30-90 s stalls 19/20 min → 0, server-thread trace writes 4,272.5 ms → 0.0.

    • Attribution: the parked "organic idle server ticks of 60-163 ms recurring at ~30-90 s" were MC³'s own IdleClockTrace flush-per-line CSV writes blocking the server thread in write0 for 50-414 ms during host disk congestion — 18/19 events reconstruct 1:1 as jdk.FileWrite ms to the trace CSV.
    • The fix: new IdleClockTraceWriter — a single daemon writer owning the trace files behind a bounded drop-on-overflow queue (drop,<n> markers); IdleClockTrace and PipelineTrace both route through it, so game threads never block, never flush, never touch file I/O.
    • Measured after (three 10-minute idle windows on the #247 rig): recurring stalls 19/20 min → 0; server-thread trace writes 4,272.5 ms → 0.0; client idle ctick max 85.1 → 5.8 ms.
    • The remaining 60+ ms idle class is the natural-spawn scan through MC³'s spawn hooks only (27 vs 24 events in BASE — unchanged, parked to #246).
    • Line content, ordering, thresholds and the disabled path are unchanged; the traces stay opt-in.
    • Gates: full clean build 1,116 tests / 0 failures / 6 skipped (root 1,101 + frontier 15); mixin-loadtest ALL CLASSES LOADED; no mixins touched (CRC N/A for the trace path).
  10. 30 Sept 2026

    MC³ 0.3.44

    MC³ 0.3.44 — the settings-menu conversion: all three performance knobs leave the CLI and become ordinary config/mc3.json settings with rows in Options → MC³, defaults byte-for-byte unchanged.

    • -Dmc3.fastSaves, MC3_WORKER_AFFINITY and -Dmc3.worldgen.backgroundWorkers become keys in the same config/mc3.json store every other MC³ setting uses.
    • Defaults preserve the shipped behaviour exactly: fastSaves false, worldgenWorkerAffinity unset, worldgenBackgroundWorkers 0 = the legacy cores×2+8 sizing.
    • Each legacy CLI/env form still wins over the config while set — power users and rig harnesses keep their explicit behaviour (documented back-compat, pinned by tests).
    • Settings rows (Options → MC³): a Fast Saves toggle with the exact crash-loss tooltip; a Worker Affinity cycle (Off / reserve-2 / reserve-4 host presets / verbatim custom mask); a Worldgen Worker Count slider (0 = Auto, clamped to the host ceiling so displayed = effective).
    • Apply timing: fast saves apply per save (three latent live-toggle holes found by the new pins and fixed); affinity at worker-thread start; pool width at the next world load.
    • Gates: full clean build 1,110 tests / 0 failures / 6 skipped (root 1,095 + frontier 15); mixin-loadtest ALL CLASSES LOADED (no mixins touched); no worldgen content change (CRC pins N/A).
  11. 30 Sept 2026

    MC³ 0.3.43

    MC³ 0.3.43 — remesh budget: inert render-dirty churn halved

    • 89.4% of mesh builds were remeshes: every install/light update marked its full 3×3×3 neighbourhood render-dirty, and at the frontier most marked cubes have no mirror yet — provably inert queue churn burning the starved render budget.
    • The mark loop now filters through the same mirror check the render gate uses; mirrored neighbours keep the culling/AO heal, unmirrored neighbours re-mark on their own install. Pin-tested.
    • Real play: redirty marks/s −48/−66%, builds per delivered cube −20/−37%, deep tail (>250 ms frames) 79 → 6 (−92%), 1% low 7.9 (campaign best), delivery +26.6%. Full build 1,074 tests green.
  12. 30 Sept 2026

    MC³ 0.3.42

    MC³ 0.3.42 — resident-decay fix: no more end-of-session fps cliff

    • Long sessions decayed 26.7 → 8.6 fps (1% low ~1–2): far cubes were never evicted because eviction was gated on per-cube saves, and the disk sustains only ~27–30 fsync-bounded saves/s vs ~200 cubes/s of exploration — 118k+ residents, 122k pending saves, old-gen 88% pinned.
    • Generated-only residents (never persisted, never player-mutated) are now reclaimed without a store write; player-mutated and once-persisted content keeps full per-file durability (#52 unchanged); pregen opts back into persist-everything.
    • After (paired 32.5-min flights): residents bounded at the window, pending saves max 120, fps flat with 1% low 5.1–7.8, GC −68%, cube files 4,771 vs 71k+, quit-save seconds.
  13. 29 Sept 2026

    MC³ 0.3.41

    MC³ 0.3.41 — performance knobs (worker affinity + fast saves)

    • New setting: worldgen worker CPU affinity — reserve cores for the render thread. Flight hop p99 −17%/−20%, fps +6.7%, at a documented generation-speed cost.
    • New setting: fast saves — per-save durability via side files with barrier promotion; in-play fsync forces eliminated, worst frame 1,172.9 → 122.8 ms. Default durability unchanged.
    • Sky-stage sub-span instrumentation ships. All knobs default to previous behaviour; both are measured and documented on the board.
  14. 29 Sept 2026

    MC³ 0.3.40

    MC³ 0.3.40 — sky-light fix + idle-stutter closure

    • Sky generation now shares per-row cover bitmaps across cubes: the MC³-owned cover walk −94.7%, output byte-identical (216 CRC rows + 200k-band differential proof).
    • Idle stutter root-caused and closed: the spikes were /mc3 profile heap-inspection full GCs; MC³ now ships a flight-recorder config with heap census off.
    • Measured: idle >250 ms hitches = 0 over 10 minutes (was 258–616 ms pauses).
    • Sky-stage sub-span instrumentation ships for future rounds.
  15. 28 Sept 2026

    MC³ 0.3.39

    MC³ 0.3.39 — progressive frontier rendering: holes eliminated

    • Cubes at the exploration frontier now render their ready faces immediately and re-mesh as neighbours arrive, instead of staying hidden until every neighbour is ready.
    • Real-play flight: unrendered cube-states 1,194.9 → 0.1 (−99.99%), apply→render p99 44 s → 2.7 ms, fps 28.7 → 44.1, 1% low 2.9 → 6.8, delivery +10%.
    • The existing-world load-in protection is unchanged and re-verified: no black cubes on join.
  16. 28 Sept 2026

    MC³ 0.3.38

    MC³ 0.3.38 — overlay readability + settings sub-screen

    • Overlay fills are now genuinely translucent: each cube renders only boundary faces instead of stacking all six blended layers per ray — the world stays readable through the highlight.
    • The 11 overlay settings rows collapsed into a dedicated sub-screen (master toggle + per-state shown/colour groups), vanilla-style navigation.
    • Full build 1,056 tests green; loadtest ALL CLASSES LOADED.
  17. 28 Sept 2026

    MC³ 0.3.37

    MC³ 0.3.37 — cube load-state debug overlay

    • New debug overlay: translucent per-cube colour highlights showing each cube's load state (not started / generating / in flight / mirrored / relight) with a live F3 legend.
    • Master toggle (default OFF, zero cost when off) plus per-state on/off and colour rows, persisted across restarts.
    • Renders on the vanilla debug-gizmo pipeline, frustum-culled and bounded; 1,055 tests green, loadtest ALL CLASSES LOADED.
  18. 28 Sept 2026

    MC³ 0.3.36

    MC³ 0.3.36 — flight performance: terrain column amortisation

    • Terrain generation now amortises per full 384-block world columns instead of per cube: batch computes per walk −67%, kernel cost on the fat stage −38.3%.
    • Flight hop p99 −29%/−32% (28.12/21.43 ms), per-cube worldgen CPU −29%, idle spill eliminated.
    • Worldgen output bit-identical (24-row CRC proof); 382 focused gate tests green.
  19. 27 Sept 2026

    MC³ 0.3.35

    MC³ 0.3.35 — placement window-predicate fix

    • The decoration placement framework's per-written-block map probe is replaced with an arithmetic window-rectangle predicate: per-cube worldgen-pool CPU 23.60 → 18.34 / 14.31 → 13.72 ms, hop p99 −19/−16%, tpa throughput +34%.
    • Placement-cursor mixin targets registered in the loadtest force-load array — the in-build consistency gate now passes on this branch.
    • Measured and refuted (records on the board): the 7/24-row surface-divergence flag (surface stage bit-identical to vanilla) and placement-time climate hoisting (decoration performs zero climate sampling).
  20. 26 Sept 2026

    MC³ 0.3.34

    MC³ 0.3.34 — profiler hardening + worldgen worker knob

    • Profiler slow-event fix (#246): recording a slow worldgen event stringified the entire noise-router tree (200–260 MB strings, 27.9–38.6 GB/window). Details now lazy and capped — byte[] churn −91%, string CPU −97.8%.
    • Runtime worldgen-worker knob (#246): -Dmc3.worldgen.backgroundWorkers=N (legacy default unchanged). Documented trade: N=8 cuts hop p99 −21/−23% at −13.5% tpb throughput.
    • Measured and refuted (records on the board): noise-column batching, decoration-scope memoisation (0.037% hit rate), ≥10× sampling excess — none survived contact with the instrument.
  21. 25 Sept 2026

    MC³ 0.3.33

    MC³ 0.3.33 — join-storm fix + worldgen allocation-churn cut

    • Join-storm fix (#245): the join render-thread freeze is paced at two seams — client packet-FIFO cap + pending-mirror deferral. Worst join spike 2,049–2,699 → 320–476 ms (vanilla range: 250–590 ms); #169/#240 closure legs green.
    • Worldgen allocation-churn cut (#246): the decoration placement cursor rewritten allocation-free — stream garbage −90/−94%, worldgen output bit-identical.
    • Mesh bench instrumentation + neutral ordering fix (#248): camera-tagged mesh events; ordering measured neutral and kept.
    • Bench tooling on main (#244 train): vanilla-vs-MC³ render-lag harness, matrix runner, supervised wrapper, vanilla fixture.
  22. 22 Sept 2026

    MC³ 0.3.32

    MC³ 0.3.32: invisible-chunks-on-join fix, settings labels/tooltips, join burst pacing

    • Invisible-chunks-on-join fixed (#240, PR #34, critical): two stacked client defects — CompatHooks.dispatch swallowed InvocationTargetException, so one throw during the join flood (Sodium's section manager not yet built) permanently disabled the Sodium render hook for the session; and a promotion dispatched while the manager was absent was dropped from the retry queue forever. Payloads applied, collision worked, nothing rendered. Hook resolution failures alone disable handlers now; invocation failures log WARN once; dropped promotions requeue into the bounded retry drain. The #235 face gate and its dwell win are kept.
    • Settings screen readable (#243, PR #33): slider captions now render on 26.2 (caption+value via the vanilla label path); -1 Vertical View Distance shows as "Auto (follows horizontal)"; Generation Starts/Tick range fixed to the real domain (1..64, default 48); every input has a concise what-it-does+impact tooltip, strategy included.
    • Join burst pacing (#241, PR #35): memory-connection flow gate no longer stalls the join burst; loading overlay lifts early; 90%-window promoted at +2.0 s (−27%).
    • #242 verdict (evidence): the Voxy far feed sends 0 payloads on join by design (only resident cubes ingest); builder-threads A/B showed no pop-in benefit — the shipped key stays.
    • Full clean builds green on every PR (1,014-1,032 tests, 0 failures) and the freeze; mixin loadtest ALL CLASSES LOADED each run.
    • #240: rig joins on a staged full existing world healthy in five mod-shape combinations (11,109-cube window rendered by ~3 s); join-burst wavefront pin + five new loadtest pins; #169 and #235 legs stay green.
    • Published via the tag-push Release workflow: https://github.com/PsychoZone/mc3/actions/workflows/release.yml
    • #240's no-banner Save-and-Quit hang did not reproduce on the rig — if it recurs on your machine, grab the F3 [MC3] line and the client log's "Compat hook" warnings.
    • #237 long-session "Saving world" wedge needs an owner-observed capture (>3 h dwell shape).
    • #235 residual dwell is now the irreducible face-neighbour wait.
  23. 22 Sept 2026

    MC³ 0.3.31

    MC³ 0.3.31: spill decoration strategy, in-game MC³ settings, face-gate dwell fix

    • Spill decoration strategy (#233, PR #29): the third DecorationStrategy — each cube independently computes features anchored inside itself plus the deterministic spill of nearby anchors (same shared seeds, no communication), so a cube completes the moment its own noise+features are done: no neighbour wait, no group coupling, per-cube release. Parity proven: halo == batch == spill byte-identical on forest + structure-bearing regions. Measured (RD 8 fresh world): fill 60.5 s, 115 applies/s, gate dwell p50 3.84 s — best on every axis.
    • In-game MC³ settings (PR #31): Escape → Options → MC³… opens an MC³ settings screen — Decoration Strategy cycle (Halo/Batch/Spill) plus the MC³ perf knobs (vertical view distance, cube updates/tick, active generation jobs, generation starts/tick). Writes the same config/mc3.json key the generator reads; applies to newly generated terrain (full effect next world load); multiplayer-aware ("Managed by the server"). The menu is the UI — no commands needed.
    • Face-adjacent render readiness gate (#235, PR #30): the client gate relaxes from 26-neighbour payload to the 6 face-adjacent neighbours that face culling actually pairs (late corners heal via the existing relight rebuild). Apply→render dwell p50 −28% (halo) / −51% (batch); #169 regression scenarios clean (no black cubes, no slabs).
    • MC³ Frontiers stays 0.1.4; dependency pin moves to MC³ ~0.3.31.
    • Full clean builds green on every PR (1,005-1,025 tests, 0 failures) and on the freeze; mixin loadtest ALL CLASSES LOADED each run.
    • Three-way rig A/B (halo/batch/spill) with parity pins; #169 teleport regression legs screenshot-verified; settings screen screenshot-verified on the GPU rig incl. multiplayer disabled state.
    • #237 long-dwell board pass (150 min, evidence-only, in the same train): Save-and-Quit absorbed 6.3M stores → title in 5.3 s, exit 0; not reproduced.
    • Published via the tag-push Release workflow: https://github.com/PsychoZone/mc3/actions/workflows/release.yml
    • #237 owner-observed session: the wedge needs >3 h dwell or the owner's desktop backlog shape; send live thread dumps when "Saving world" stalls.
    • Default decoration strategy remains halo — batch/spill are one Escape-menu click away.
  24. 21 Sept 2026

    MC³ 0.3.30

    MC³ 0.3.30: decoration strategy seam + batch-group mode (measured)

    • Decoration strategy seam (#233, PR #28): config/mc3.json decorationStrategy selects halo (default, byte-identical to 0.3.29 behaviour) or batch — a 3×3×3 cube group decorates in one pass (shared neighbour halo, shared RNG setup) and all 27 cubes release together, recovering vanilla-style per-area amortisation under the no-flashing-in contract. spill is reserved (fails closed until implemented). Switching mid-world is safe: already-generated cubes are never regenerated.
    • Content parity pinned by test: halo and batch produce byte-identical payloads for the same seed (blocks, block-light bytes, block entities; 1,412 ticks compared, 2 differ only in sub-tick order ±1).
    • README: matched vanilla-vs-MC³ timing table in equivalent cubes.
    • Fill: vanilla 7.75 s (895 cube-equiv/s; 6,936 cube-equiv) · MC³ halo 69.1 s (89 cubes/s) · MC³ batch 59.4 s (103 cubes/s) — batch −14% fill vs halo.
    • Decoration share of worldgen: 25% → 16%. Apply→render dwell p50: 3.56 → 3.11 s.
    • Full clean build 1,020 tests, 0 failures; mixin load test ALL CLASSES LOADED (PR CI ×2 green + freeze Build 35599469348).
    • Parity, batch group release, retry and promotion pins green (BatchGroupReleaseTest).
    • Published via the tag-push Release workflow: https://github.com/PsychoZone/mc3/actions/workflows/release.yml
    • spill mode (deterministic per-cube mutual spill) — phase 2 behind the same switch.
    • #235 apply→render dwell (readiness mirror remains the dominant residual).
    • #237 long-session client teardown (upstream voxy#683 / sodium#3914 family).
    • Default remains halo; promote batch by owner decision.
  25. 21 Sept 2026

    MC³ 0.3.29

    MC³ 0.3.29: delivery pipeline fixes, fall-stuck fix, sparse default sky islands

    • Chunk pipeline, measured (#233/#234, PR #25): fill of the RD 8 window drops 79.3 s → 68.2 s (−14%) and throughput rises 91 → 101 cubes/s by widening generation admission; closest-first ordering fixed (the sender comparator ranked anchor-waiting nearest cubes last — first 500 sends previously contained 0 of the nearest 500). Opt-in stage tracing added. Measured baseline: vanilla RD 8 fills in 8.4 s vs MC³ 79.3 s — a 9-10× per-section pipeline gap, with decoration at 58% of worldgen cost identified as the next lever.
    • Stuck-in-air on rapid fall fixed (#236, PR #26): fall-path cubes now take the reserved urgent generation lane; the swept movement envelope routes through getOrGenerateUrgently. Zero ≥1 s wedges across four y=1500 dives over fresh terrain (was 20-520 s streaks).
    • Block-entity activation Watchdog crash fixed (#239, PR #26): DynamicGameEventListener.add blocked on the whole generation queue and 26.2's public getChunkFuture also managedBlocks — activation is now inline/chunk-free and listener binds defer to a per-tick non-blocking drain.
    • Default-preset sky islands made sparse (#238, PR #27): new mc3:sky_islands settings (the #225 treatment) replace vanilla floating_islands in the default preset. Band fill 11.5% → 0.9-3.2% across three seeds; every slab ≥ y700 is 0% — real islands, open sky. Existing worlds unaffected (layer stack serialised at creation).
    • MC³ Frontiers stays 0.1.4; its dependency pin moves to MC³ ~0.3.29.
    • CI Build green on every merge (PRs #25/#26/#27) and on the freeze: full clean build, root + Frontiers suites (981-991 tests, 0 failures), mixin load test ALL CLASSES LOADED with C2ME staged.
    • Save-wave server exonerated live for the "Saving world" family (#237): 15k-cube bands flush in ≈1 s at 554-4,478 cubes/s; bounded client Save and Quit clean. The long-session owner stall stays with the #223 upstream teardown join (instrumentation staged).
    • Published via the tag-push Release workflow: https://github.com/PsychoZone/mc3/actions/workflows/release.yml
    • #235 render-of-generated latency: the #169 readiness gate dwell (geometric 3×3×3 wait, p50 4.2 s after #25) remains the dominant apply→render cost.
    • #233 next lever: decoration (58% of worldgen) — sibling-cube group harvest.
    • #237 long-session client teardown discriminator (upstream voxy#683 / sodium#3914).
    • #234 residual: spawn-band far plane at join is a product decision.
  26. 20 Sept 2026

    MC³ 0.3.28

    MC³ 0.3.28: C2ME startup-crash fix — fastutil accessor mixin removed

    • Fix for the 0.3.27 startup crash with C2ME (#232, PR #24): C2ME's PreLaunchHandler class-loads fastutil before Mixin can prepare MC³'s Long2ObjectOpenHashMapAccess accessor, so every install with C2ME died with MixinTargetAlreadyLoadedException during preLaunch. The mixin is removed; the opt-in light-copy telemetry now reads fastutil's table fields via lazily-resolved MethodHandles on the enabled path only, failing soft (never throws; disabled path unchanged and allocation-free).
    • New regression guard: mixin configs may no longer target third-party library/JDK classes — MixinConfigConsistencyTest now pins every @Mixin target to the allowed package spaces (net.minecraft/com.mojang/dev.mc3/sodium/voxy/bluemap).
    • C2ME joins the headless mixin load-test CI scenario: pinned Modrinth c2me-fabric 0.4.2-alpha.0.43+26.2 (sha256-pinned in gradle.properties), so the exact preLaunch class-loading path boots in every CI run with optimizeAquifer = false seeded (MC3_MIXIN_LOADTEST_SKIP_C2ME=1 covers the without-C2ME run).
    • MC³ Frontiers stays 0.1.4; its hard dependency pin moves to MC³ ~0.3.28.
    • Full clean build (core + Frontiers): 991 tests, 0 failures, 6 skipped. PR Build: https://github.com/PsychoZone/mc3/actions/runs/35495185152; main Build: https://github.com/PsychoZone/mc3/actions/runs/35495950674.
    • Mixin load test green with C2ME present (C2ME containers loaded, zero MixinTargetAlreadyLoadedException), without C2ME, and telemetry-enabled (reflective path records real metrics).
    • Local pre-flights: bash -n + lifecycle selftest, release tools 31/31.
    • Published via the tag-push Release workflow: https://github.com/PsychoZone/mc3/actions/workflows/release.yml
    • C2ME_SUPPORTED enabled-aquifer boot and the broader three-way C2ME runtime matrix remain pending (COMPATIBILITY.md).
    • #203 idle allocation/frame-stall user report; #217 GC/stutter analysis; #214 long-session Save-and-Quit teardown (upstream: MCRcortex/voxy#683, CaffeineMC/sodium#3914).
  27. 19 Sept 2026

    MC³ 0.3.27

    MC³ 0.3.27: SurfaceSystem band-index crash fix at cubic depths

    • SurfaceSystem.getBand AIOOBE at cubic depths (#230, PR #23): vanilla indexes its 192-entry terracotta-band table with a truncating %, which goes negative below native y ≈ −192, while MC³'s layered bands evaluate bandlands rules down to y −14,000 (frontier hollow earth). Fixed by a floorMod re-index in SurfaceSystemBandMixin — bit-identical on vanilla's domain (unit-test pinned). Explains the historical #139 "unreproducible" halo crash.
    • Opt-in light-map copy/publication telemetry (#209, PR #22): -Dmc3.lightMapCopyTelemetry=true, default off, no behaviour change when disabled — developer tooling for the lighting investigations.
    • Harness-only: frontier-smoke floor re-pin (#227, PR #20) and opt-in MC3_FRONTIER_SEED boot-1 pin (#229, PR #21).
    • MC³ Frontiers stays 0.1.4 (its ~0.3.26 range already admits 0.3.27); its hard dependency pin moves to MC³ ~0.3.27.
    • Fix verified live on the exact crash seed (MC3_FRONTIER_SEED=-1621232838739943396 frontier-smoke): zero AIOOBEs, no crash reports; pre-fix loadtest reproduced Index -128 out of bounds for length 192.
    • Freeze Build: https://github.com/PsychoZone/mc3/actions/runs/35462422729 — full core + Frontier suites, mixin load, strict two-boot smoke, packaging and staged verification; content merge Build: https://github.com/PsychoZone/mc3/actions/runs/35461364866.
    • Local pre-flights: release tools 31/31, Frontier 15/15, lifecycle 19/19, node --check, bash -n sweep.
    • Published via the tag-push Release workflow: https://github.com/PsychoZone/mc3/actions/workflows/release.yml
    • #203 idle allocation/frame-stall user report: heap-floor guidance shipped in 0.3.26; the user correlation remains unproven at tested heaps.
    • #217 GC/stutter analysis.
    • #214 long-session Save-and-Quit teardown: third-party mechanism filed upstream (MCRcortex/voxy#683, CaffeineMC/sodium#3914); profile mitigation shipped in 0.3.25.
  28. 18 Sept 2026

    MC³ 0.3.26

    MC³ 0.3.26: block-entity restore, heap-floor guidance, structure-cache allocation, sparse Frontier islands

    • Block entities restore with their saved host states (#175/#182, PR #16): fixes silent permanent loss of chests, spawners and sculk block entities on save/reload (sweep-before-post-load ordering + group-harvest empty window scratch). Deterministic repro now logs zero dropped block-entity records in both boots (unfixed: 29 on first boot, 13–31 on reloads).
    • Heap-floor guidance (#203, PR #18): client log warning below 12 GiB heap, one-time in-game chat warning below 8 GiB; README documents the measured cost of a near-default heap. Guidance only — #203 remains open and this is not a stutter fix.
    • Structure-cache-hit lazy identity set (#205, PR #15): measured allocation improvement on the structure-start path; not claimed as a stutter fix.
    • MC³ Frontiers 0.1.4 (#225, PR #19): the floating-islands band is now sparse — real islands with open sky between them. Requires MC³ ~0.3.26.
    • Islands plateau coverage 56.5% → 15.9% (exact offline noise sampling); live seed-0 census 6.7× fewer island blocks (23.73% → 3.53% of the sampled box); largest island ~5,092 m → ~452 m; mean air gap 56 → 279 blocks.
    • Structure-cache path: targeted IdentityHashMap.init stack 11,045,594,232 → 0 weighted bytes in the matched JFR window; cached-call allocation −68.5% (2,392,064 → 753,664 bytes); startsForColumn path −75.8%. Bounded fixtures; no user-FPS claim.
    • Block-entity repro (seed 20260831, dedicated server): r3's 72 invalid records root-caused to the same two defects; both regression legs pinned by tests.
    • Freeze Build: https://github.com/PsychoZone/mc3/actions/runs/35401460955 — full core + Frontier suites, mixin load, strict two-boot smoke, packaging and staged verification.
    • Local pre-flights: release tools 31/31, Frontier 15/15, lifecycle 19/19, node --check, bash -n sweep.
    • Published via the tag-push Release workflow: https://github.com/PsychoZone/mc3/actions/workflows/release.yml
    • #203 idle allocation/frame-stall user report: heap-floor guidance ships; the user correlation remains unproven at tested heaps.
    • #217 GC/stutter analysis; #205's improvement is allocation-only.
    • #214 long-session Save-and-Quit teardown: third-party mechanism filed upstream (MCRcortex/voxy#683, CaffeineMC/sodium#3914); profile mitigation shipped in 0.3.25.
    • #227 frontier-smoke floor re-pin: scheduled post-release (the shipped generator intentionally strips bedrock floors).
  29. 18 Sept 2026

    MC³ 0.3.25

    MC³ 0.3.25

    Ships: four fixes. Frontier stays 0.1.3; profile revision 2.

    • Urgent-lane FIFO (#212): urgent generation requests are now served first-come-first-served, fixing the y=1500 teleport movement lock where fresh urgent work starved older requests
    • Black-first-delivery (#169): teleport targets no longer render black cubes for ~10 s; near-field Sodium promotion now waits for the complete local mirror neighbourhood
    • Save-drain scaling (#222): save lanes min(16, max(4, cpus/4)) plus parseable MC3-FLUSH-* progress lines; a #214-scale quit flush measured 2.4 h → ~27 min
    • Voxy teardown mitigation (#223): profile pins dont_use_sodium_builder_threads: true, keeping Voxy off Sodium's builder threads so Save and Quit cannot wedge in the third-party teardown join (upstream: voxy#683, sodium#3914)

    Validated: freeze CI green (run 35332540244) · release gates + all 4 assets checksum-verified three ways (run 35344221888)

    Still open: Save and Quit teardown root cause is upstream (mitigated, not fixed) · idle-allocation/stutter hunt (#203) · block-entity restore correctness (#175/#182)

  30. 18 Sept 2026

    MC³ 0.3.24

    MC³ 0.3.24

    Ships: sender selection CPU optimisation (#219/#220). No worldgen, save or compatibility changes. Frontier stays 0.1.3.

    Measured (bounded diagnostic + matched profiles, not universal FPS claims):

    • Sender selection scan: −77.3% CPU, −84.6% allocation, equal result checksum
    • ServerTickTime mean: 40.0 → 29.3 ms (no C2ME), 88.0 → 61.0 ms (pinned C2ME profile)

    Validated: 960 tests (956 run, 0 failures) · transformed-mixin gate · strict two-boot smoke · all 4 assets checksum-verified (CI, publish)

    Still open: long-session Save and Quit hang (#214) · ~20 GiB idle allocation/stutter (#203)

  31. 13 Sept 2026

    MC³ 0.3.23

    MC³ 0.3.23

    This release carries the 0.3.22 fixes for Save and Quit during pending generation, shutdown callback quiescence, bounded chunk-section allocation, heightmap boxing and batched directory flushing. Placement-stream work is measured in a matched 120-second JFR profile using a 6 GiB heap.

    In that profile, weighted allocation fell 6.6%, total GC phase-pause time fell 23.6%, and chunk delivery rose 7.6%. The worst pause increased from 594 ms to 621 ms, so visible stutter remains unresolved; pauses of at least 150 ms fell from 12 to 7, and pauses of at least 500 ms from 4 to 1. These are bounded sampled-profile results, not live-heap or universal memory evidence. The replay used a 6 GiB heap; the reported 20 GiB memory behaviour has not been reproduced.

    Local validation covered 955 executed tests across core and Frontier, zero failures, and three additional diagnostic tests skipped, plus the normal compatibility mixin and strict two-boot server save/reload smoke. Separately, a matched GUI Save and Quit run completed successfully in 72 seconds. The full Build gate passed, including mixin and strict two-boot server save/reload checks (run 34738289766). Release validation and package verification also passed (run 34738302071); the manually published assets passed strict checksum and profile verification. A new 0.3.22 Save and Quit crash report remains open, so this release does not claim the whole problem is resolved.

  32. 13 Sept 2026

    MC³ 0.3.22

    MC³ 0.3.22

    • Save and Quit no longer crashes while loading: pending-only cubes retain their payload, dirty residents cross the durable barrier, and shutdown callbacks quiesce before repository close.
    • Scoped chunk-section allocation, heightmap boxing and batched directory flushing reduce measured allocation and redundant synchronisation work while preserving reload correctness.
    • Bounded validation passed 934 core tests, with three existing core diagnostic skips (937 core total), plus 15 Frontier tests; compatibility mixin loading, scoped allocation guards and both true-cubic smoke boots also passed.
    • Live pending-generation acceptance passed at 7679x2106 FOV70 with Sodium/Iris/Voxy: pending 10,810, sent 299, delivered 291, terminal failures 0; fresh save, level.dat, normal quit, JVM exit and launcher exit 0 completed without MC³ shutdown, cancellation, OOM or error reports.
    • A bounded 16-cube diagnostic measured candidate mean 282.267 ms versus 376.577 ms baseline, and allocation diagnostics measured 3,176 versus 12,693,936 bytes and 141,856 versus 7,742,440 bytes. These are fixture measurements; broad heap/GC and whole-world save-speed claims remain open.
  33. 12 Sept 2026

    MC³ 0.3.21: rendering stability and generation performance

    MC³ 0.3.21: rendering stability and generation performance

    The candidate adds an epoch guard against stale graph and mesh publication,
    bounded snapshots for empty sections, and a per-terrain-batch biome cache. A
    single controlled 90-second cold diagnostic pair measured weighted allocation
    falling from 93.1 GB to 41.3 GB and GC pause from 30.0 s to 6.0 s. These results
    are diagnostic and make no universal memory or performance claim.

    It carries the published 0.3.19 cave and POI fixes and the 0.3.20 Save and Quit
    repair. The original malformed ultrawide scene was not reproduced in the cold
    comparison; #177 remains open because the original user world is unknown.

  34. 12 Sept 2026

    MC³ 0.3.20: shutdown hotfix

    MC³ 0.3.20 shutdown hotfix

    MC³ 0.3.20 fixes a Save and Quit shutdown race where execute could run a cube-load callback inline after shutdown and corrupt server executor state. The repair queues callbacks onto the server while it is running and drops shutdown refill work once shutdown starts.

    The release retains the published 0.3.19 cave-lighting and tall-empty-POI allocation fixes. Ultrawide rendering remains a separate unresolved acceptance item.

    Build-and-test 34700768588 and Release 34701661056 completed successfully. The core suite ran 911 tests with three existing skips and zero failures or errors; Frontier ran 15 tests with zero skips, failures or errors. Mixin and both-boot true-cubic smoke checks passed, packaging and verification passed, and four Save and Quit runs completed with saved-world confirmation, game JVM gone and launcher status 0.

  35. 12 Sept 2026

    MC³ 0.3.19

    MC³ 0.3.19

    This release delivers two focused fixes:

    • #178: cave lighting now follows engine-consistent near and far terrain behaviour, preventing cave sky leakage and darkness errors.
    • #180: tall POI columns with unchanged empty data remain bounded, avoiding allocation of 4,096 empty slots per column while preserving real, version-changed and normal POI data.

    Measured verification:

    • GPU lighting checks passed at noon and midnight across six client/server samples: cave skylight 0, ordinary-height control 5, and sky-lit ceiling control 15. All samples were legal and authoritative; near and far terrain was visually reviewed.
    • Bounded AFK gameplay passed for 13m47 with 25 responsive checks and 19 settled samples. POI storage held at 28 slots, loaded columns at 1,646, and delivery at 11,109/11,109 cubes. There were zero POI warnings or OOMs. The world saved cleanly and the launcher exited normally.
    • Core verification executed 904 tests with three diagnostic skips and zero failures; Frontier passed 15 tests with zero failures.

    Known limitations and follow-ups remain explicit. Save and allocation pressure, including retained heap growth as workload and loaded columns changed, remains tracked by #183 and is not a general memory or performance acceptance claim. Saved-world invalid block-entity observations remain tracked by #182; attribution is unknown. Ultrawide visual acceptance remains a separate, non-blocking follow-up under #177.

  36. 9 Sept 2026

    MC³ 0.3.18

    MC³ 0.3.18 fixes bedrock generation in new cubic terrain.

    • Removes the bedrock floor around Y=-64 in the default layered world.
    • Restores normal surface materials in the deep cave layers, where an inverted surface rule previously replaced solid terrain with bedrock.
    • Retains the other biome material rules and the default repeated cave generation.

    The generation fix applies to newly generated terrain. Existing saved blocks are preserved.

    Includes the MC³ core JAR, the matching test profile with Sodium, Iris and Voxy, and the compatible MC³ Frontiers JAR.

    Validated with 28 focused regression tests, a full build (906 passing tests and three diagnostic skips), and Knot runtime checks with Sodium, Iris and Voxy. Actual generated cubes contain real solid materials and no bedrock at the -64 join and four deep levels through Y=-32768. A fresh default-profile graphical world also verified deep stone terrain and a player block surviving save/reload. Core, test-profile and Frontiers packages passed staging verification.

    The local dedicated-server smoke passed all generation and persistence assertions across two boots, but its strict timing check reported a first-boot tick overrun. The release workflow retains its existing functional gates and documented shared-runner timing policy.

    Known issues: slow terrain delivery and save stalls remain under investigation (#168/#169 in TASKS.md). Separate shutdown callback and restored block-entity warnings remain open (#174/#175). This release addresses generated bedrock and deep materials.

  37. 31 Aug 2026

    MC³ 0.3.17

    MC3 0.3.17: performance fix release

    Fixes the 0.3.15 server-thread stalls (9-25s freezes when flying or
    breaking blocks, fps dips to 3 during chunk loads):

    • Demand-flip churn: ticket release/return no longer scans the whole
    • Light engine: the server thread no longer blocks for whole light
    • Cube sender: stale deferred-preparation retirements bounded per tick

    Rig-measured on an aggressive 8x teleport storm: worst server stall
    25s -> 3s; world loads clean. Full root JUnit suite green. The 0.3.16
    tag build failed only on a stale harness contract test (the frontier
    pregen band syntax fix); no content changes since 0.3.15 beyond the
    already-released decorate-once pipeline.

  38. 30 Aug 2026

    MC³ 0.3.15

    [!WARNING] DEPRECATED — do not install. This release has severe server-side stalls (9-25 second freezes when flying or breaking blocks, frame dips during chunk loads) caused by a generation-queue scan storm, a light-engine lock block, and unbounded cleanup bursts. Fixed in MC³ 0.3.17.

    ---

    Highlights

    • Decorate-once worldgen: trees, plants and structures are merged into a cube before its first delivery (fingerprint full-v6); a delivered cube is never re-decorated.
    • Existing worlds never regenerate: full-v5 is a full compatible prior of full-v6 (generated-only content and player mutations both preserved). Worlds saved on 0.3.6 through 0.3.14 load as priors with zero regeneration.
    • Per-cube group decoration: decoration runs once per 3x3 column tile instead of once per cube; sibling cubes harvest from the shared pass (content-identical, proven by kernel parity tests).
    • C2ME guard: standard incompatibility popup for C2ME worldgen-option builds that break MC3 (c2me-opts-worldgen-vanilla <0.4.2-alpha.0.43+26.2).
    • Vertical-fly stall from 0.3.10 not reproducible on this build: a 40k-cube vertical demand spike drains in under 60s at 118 fps on the validation rig.

    Upgrade notes

    • Install over your existing instance; your world is untouched and will not regenerate.
    • Paired frontier: mc3frontier-0.1.3.jar (requires MC3 ~0.3.15).
  39. 30 Aug 2026

    MC³ 0.3.14

    Highlights

    • Existing worlds load again: full-v5 is recognised as a compatible prior of the current full-v6 fingerprint, so worlds saved on 0.3.9-0.3.11 (and 0.3.6+) load as priors with zero regeneration. Fixes the spawn-chunk stall / black chunk reported on 0.3.12.
    • C2ME compatibility: standard incompatibility popup for the C2ME worldgen option builds that break MC³ (c2me-opts-worldgen-vanilla <0.4.2-alpha.0.43+26.2).
    • Decorate-once worldgen (fingerprint v6): trees, plants and structures merge into a cube before first delivery; never re-decorates an already-delivered cube.
    • Windows save fix (directory-handle denial) and exit-freeze fix carried from 0.3.11.

    Upgrade notes

    • Install over your existing instance; your world is untouched and will not regenerate.
    • Paired frontier: mc3frontier-0.1.3.jar (requires MC³ ~0.3.14).
  40. 30 Aug 2026

    MC³ 0.3.12

    [!WARNING] DEPRECATED — do not install. This release breaks loading of existing worlds: the worldgen fingerprint bump was not paired with a compatibility prior, so previously saved cubes were flagged for regeneration on load (frozen spawn, black chunks). The compatibility prior shipped in 0.3.14+. Upgrade to MC³ 0.3.17.

    ---

    MC³ 0.3.12 — decorate-once and full board closure

    Summary of changes since 0.3.11

    • Decorate-once for the unified pipeline (TASKS.md #140, owner-approved): one group closure over a 3×3-column bounding box instead of 9× per-column re-decoration. Each origin runs exactly once in canonical order; writes land in whichever group column contains them; per-column harvest follows. The per-cube pipeline fingerprint bumps to full-v6 to reflect the semantic change. Existing saved cubes load as priors and are never regenerated.
    • The parity test proves a small deterministic divergence (as expected: features read shared scratch state from the expanded origin set), bounded within a ±10-cell tolerance on the fixture world.
    • The ownership provenance scan is restored to its fail-closed spec after a silent-filter attempt broke the loud-rejection unit tests.
    • Frontier dependency and tool pins track core 0.3.12.

    Also in this release (carried from the 0.3.11 line)

    • Exit-path hardening: shutdown flush force-cancels in-grace abandonments; the generation pump never starts zero-ticket abandoned work.
    • Windows save fix: denied directory handles fall back to platform semantics instead of failing every cube save.
    • Ball pregen: pregen start shapes a chunk-unit sphere around the given coords, uncapped, with cube-granular progress.
    • Legacy config fix: pre-0.3.6 configs map to per-cube instead of unified.
    • Bottom-edge sky-light domain fix: client floor dwell no longer packs the sink section.
    • Spawn diagnostics surface (MC3_SPAWN_DIAGNOSTICS=1).

    Verification

    • Full aggregate + Frontiers: green (fingerprint v6, all parity and regression fixtures).
    • True-cubic smoke: boot + reload + persistence clean (local rig).
    • Clean-runner CI: prepare (aggregate + per-cube acceptance + mixin load test + packaging) and publish green; release immutable with self-consistent checksum manifest.

    Upgrade note: drop mc3-0.3.12.jar into your mods folder (requires Fabric API ~0.155.2+26.2). The matching Frontiers JAR is attached.

  41. 29 Aug 2026

    MC³ 0.3.11

    MC³ 0.3.11 — exit-path hardening and pregen shape directives

    Carries everything from 0.3.10 (legacy-config fix, Windows save fix, abandonment grace, ball pregen) plus:

    Summary of changes since 0.3.10

    • Shutdown flush can no longer hang on in-grace abandonments: a shutdown flush runs no further level ticks, so generations parked in the 40-tick abandonment grace could never be swept and the flush waited forever — the exit-hang class reported on 0.3.9/0.3.10. Shutdown flush and close() now force-cancel zero-ticket abandonments up front; normal play keeps the per-tick sweep. Regression fixture pins close() returning promptly with an in-grace abandonment pending.
    • The generation pump never starts a zero-ticket abandoned generation, and the shutdown force-cancel covers active abandonments too: demand-lost work is cancelled, not started-then-discarded, and nothing persisted is ever regenerated (owner directive).
    • Pregen ball radius is chunk-unit and uncapped (owner directive): pregen start <radiusChunks> [centre] builds a chunk-space sphere around the given coords; the 8192-block cap is gone — the world border is the only limit. Huge footprints report an analytic cube estimate in progress instead of scanning billions of columns.

    Verification

    • LevelCubeRepositoryTest 107/107 including the new shutdown fixture (close() returns promptly with an in-grace abandonment pending) and the demand-returns-within-grace fixture.
    • Pregen gates: command grammar, plan shape, resume-state and ETA fixtures all green; aggregate root + Frontiers green on the tag commit (CI prepare).
    • Clean-runner CI: prepare and publish green; release immutable with a self-consistent checksum manifest.

    Upgrade note: drop mc3-0.3.11.jar into your mods folder (requires Fabric API ~0.155.2+26.2). The matching Frontiers JAR is attached.

  42. 29 Aug 2026

    MC³ 0.3.10

    [!WARNING] DEPRECATED — do not install. Known defects in this release: heavy stalls while flying vertically (server verified instant, client-side churn), and jungle trees can render with gaps at cube boundaries (delivery/render side; worldgen itself is correct). Both are resolved in later releases. Upgrade to MC³ 0.3.17.

    ---

    MC³ 0.3.10 — legacy-config fix and abandonment grace

    Fixes the two root causes behind the 0.3.8 exit/save failures (see the pasted 0.3.8 log: AccessDeniedException from CubeDiskStore.forceDirectory on every cube save, plus the 215-second join through the unified pipeline).

    Summary of changes since 0.3.9

    • Legacy configs no longer trap you in unified mode. Configs written before generationMode existed (every pre-0.3.6 install) were silently mapped to the slow unified pipeline by the legacy migration — the unified-closure threads and multi-minute joins in 0.3.8/0.3.9 logs come from exactly this. The legacy default now maps to the shipped per-cube pipeline; explicit generationMode values (including deliberate unified) are untouched, and the derivation is logged at startup. World data is safe across the switch (cross-pipeline cubes load as compatible priors).
    • Cube-ticket abandonment now honours the 40-tick demand-loss grace (TASKS.md #152): releasing the last tracking ticket no longer instantly cancels a queued generation while the deferred-job level waits 40 ticks — the disagreement crashed the integrated server through the fail-closed save guard during demand flaps (pregen stop/start churn, view flaps). Demand returning inside the window continues the generation; only expiry cancels. Verified by the #116 halo proof: 12 flap cycles completed with content identical to the clean reference.
    • Ball pregen (TASKS.md #153): /mc3 pregen start now generates a sphere of cubes around the given coords with cube-granular progress (cubes=X/Y rate cubes/s), never full world height. The legacy full-depth column form lives on as /mc3 pregen band.
    • Bottom-edge sky-light domain fix: a client dwelling at the world floor no longer dies on Cubic light node outside supported domain.
    • Combined-only releases: the separate frontier-v* workflow is gone; the matching Frontiers JAR ships inside this release's asset set.

    Verification

    • Focused gates: Mc3ConfigTest + CubeDiskStoreTest 23/23 (including a real write-only-directory test — the Linux shape of the Windows denial).
    • Aggregate: root + Frontiers 899/902 (3 by-design diagnostics skips).
    • GPU client rig with the shipped profile (Fabric API, Sodium, Iris, Voxy) plus ScalableLux and an owner-shaped pre-0.3.6 config: legacy derivation logged; world-creation click-to-join ≈25 s (vs ~10 minutes on 0.3.8); join rendered full terrain with zero black/ghost cubes; delivery converged expected=sent=delivered=11109 pending=0; Save and Quit flushed 11,103 cubes cleanly; a fresh client rejoined the saved world with identical terrain and state.
    • Clean-runner CI: prepare (aggregate + per-cube acceptance + mixin load test + packaging) and publish green; release is immutable with a self-consistent checksum manifest.

    Upgrade note: drop mc3-0.3.10.jar into your mods folder (requires Fabric API ~0.155.2+26.2). If you hit the 0.3.8 exit/save failures, this release fixes both; the matching Frontiers JAR is attached for stack users.

  43. 28 Aug 2026

    MC³ 0.3.9

    MC³ 0.3.9 — world-creation stall and Windows save hotfix

    Fixes both #149 failures reported against the published 0.3.8 Windows test profile.

    Summary of changes since 0.3.8

    • World creation no longer stalls for minutes on upgraded installs. Configs written before the generationMode key existed were silently mapped to the slow unified pipeline by the legacy migration (the pre-0.3.6 default unifiedGeneration: true), which is what produced the ~51 s Selecting global world spawn… pause plus the ~256 s spawn preparation (about ten minutes end to end) and the broken first join. The legacy flag now maps to the shipped per-cube pipeline; explicit generationMode values (including deliberate unified) are untouched, and the derivation is logged at startup. Existing worlds are unaffected (cross-pipeline cubes load as compatible priors).
    • Cube saving, autosave and Save and Quit now work on Windows. Every cube save failed because CubeDiskStore.forceDirectory opens a read channel on the directory and Windows denies directory handles (AccessDeniedException), leaving cubes dirty and blocking Save and Quit with data-loss risk. The denial now falls back to platform directory-durability semantics (matching NTFS journalling), so saves, batch flushes and deletes complete.
    • Harness/test hygiene: the teleport-storm.sh lock pin follows the shipped bounded shared lock (--wait 7200), new regression tests for both fixes, and release/status documentation updates.

    Verification

    • Focused: Mc3ConfigTest + CubeDiskStoreTest 23/23 including a real write-only-directory test (the Linux shape of the Windows denial).
    • Aggregate: root + Frontiers 888/891 (3 by-design diagnostics skips).
    • GPU client rig, exact shipped profile (Fabric API, Sodium, Iris, Voxy) + ScalableLux, with an owner-shaped pre-0.3.6 config: legacy derivation logged; world-creation click-to-join ≈25 s (spawn preparation 16 s); join rendered full terrain, zero black/ghost cubes; /mc3 status delivery converged expected=sent=delivered=11109 pending=0 terminalFailures=0; Save and Quit flushed 11,103 cubes and returned to title; a fresh client rejoined the saved world (9.6 s) with identical terrain and state.
    • Clean-runner CI: prepare (aggregate + harness gates + packaging) and publish all green; the release is immutable with a self-consistent checksum manifest.

    Upgrade note: drop mc3-0.3.9.jar into your mods folder (requires Fabric API ~0.155.2+26.2). The companion MC³ Frontiers 0.1.3 build is attached for stack users.

  44. 28 Aug 2026

    MC³ 0.3.8

    MC³ 0.3.8 — world-creation hotfix + unified spawn-search fix

    0.3.8 fixes two world-creation problems reported against 0.3.7. Minecraft 26.2, Fabric Loader 0.19.3+, Fabric API 0.155.2+26.2, Java 25. The mc3-0.3.8-test.mrpack profile bundles MC³ with Sodium, Iris and Voxy.

    What changed
    • Fix: singleplayer world creation dies with ScalableLux installed (#138). ScalableLux (Starlight-derived lighting mod) nulls vanilla's per-chunk sky-light source list when its engine takes over. MC³'s server-side cube-write light hook dereferenced it unconditionally, so the first light-changing block write — typically a spreading fluid within the first minute — killed the integrated server thread and the window went Not Responding. The hook is now guarded; whichever light engine is active still receives its update notifications, and vanilla behaviour is unchanged (vanilla never nulls the field). Verified on a live client with the full mod profile: pre-fix the server died at tick 122; post-fix a fresh world plus a 4-minute forced fluid-spread soak ran clean.
    • Perf: unified-mode world creation 3× faster (#135). A measured bisect pinned the 0.3.5-era spawn-search slowdown (33 s → 271 s on the reference seed) to the closure-decoration rework, which re-ran the full decoration session about 9× per column. Closure span passes now compute concurrently — content-identical output, no worldgen-format change — taking the unified spawn phase from 278 s to 95 s. The shipped default per-cube mode was never affected.
    • Metadata: MC³ Frontiers now requires MC³ ~0.3.8; the test profile's embedded setup notes track 0.3.8.
    Verification

    Full test aggregate green at the tagged commit: 874 root JUnit tests (871 pass, 3 intentional diagnostic skips), 15/15 Frontier tests, 5,050-marker mixin load gauntlet (Sodium/Iris/Voxy) with zero failures, release tooling suites 25/25 + 10/10 + 19/19, and a live client soak with the shipped mod profile. SHA-256 for every asset is in sha256sums.txt.

    Full changelog: CHANGELOG.md and STATUS.md in the repository.

  45. 28 Aug 2026

    MC³ 0.3.7

    MC³ 0.3.7 — world-creation and sky-edge fixes

    MC³ 0.3.7 fixes the fresh-world creation stall reported against 0.3.6 and closes a sky-light failure at the shipped cubic world's upper edge. It targets Minecraft 26.2, Fabric Loader 0.19.3+, Fabric API 0.155.2+26.2 and Java 25. The mc3-0.3.7-test.mrpack profile bundles MC³ with Sodium, Iris and Voxy.

    What changed
    • Fresh worlds reach the server quickly. Vanilla probes up to 121 candidate chunks while choosing a spawn. MC³ previously generated every candidate at full multi-band depth; pre-ready spawn columns now latch only the primary band. In the reference live test, a fresh cubic server reached Done in 3.574 seconds instead of 36.9 seconds on the 0.3.6 JAR.
    • Sky-light updates stay inside the supported domain. Vanilla keeps sky storage one section above the logical world top. MC³ now lets those edge probes follow vanilla's harmless no-op path instead of packing an out-of-domain cubic light node and wedging boot.
    • Smoke probes match the shipped world envelope. The boundary checks now use the preset's legal −32,768 to 32,767 Y range rather than the broader sparse-coordinate contract.
    • GitHub-only immutable publication. The release pipeline verifies the exact tag commit, checks every candidate checksum, publishes through a draft, and proves the final immutable release without replacing existing assets.
    Verification

    Focused spawn-scoping tests passed 5/5; the live fixed JAR reached Done (3.574s); the mixin load gate passed; and the two-boot per-cube smoke passed writes at both Y edges, fluids, deep item survival, decoration, 9/9 pre-generation and reload fidelity. SHA-256 values for every downloadable asset are in sha256sums.txt.

    Full changelog: v0.3.6…v0.3.7

  46. 26 Aug 2026

    MC³ 0.3.6

    MC³ 0.3.6 — deterministic generation and automated releases

    MC³ 0.3.6 packages the determinism, tall-column persistence, compatibility and release-automation work completed after 0.3.5. It targets Minecraft 26.2, Fabric Loader 0.19.3+, Fabric API 0.155.2+26.2 and Java 25. The mc3-0.3.6-test.mrpack profile bundles MC³ with Sodium, Iris and Voxy.

    What changed
    • Deterministic unified decoration. Unified FULL columns now use the same canonical 3×3-origin decoration closure as per-cube generation. Contested blocks and block entities are derived from the seed, position and feature content instead of task scheduling order.
    • Exact tall-column saves. Sections whose full Y coordinate cannot fit vanilla's signed-byte field now carry an mc3:section_y marker, preventing deep sections from being truncated or reloaded into colliding slots.
    • C2ME conflict fails fast. MC³ detects the incompatible C2ME aquifer optimisation and gives a precise configuration error instead of leaving singleplayer on ‘Loading terrain’. The supported profile itself does not include C2ME.
    • Corrected test profile and CI/CD. The profile contains the genuine 0.3.6 JAR and corrected 12 GiB guidance. The new self-hosted release workflow builds, tests, packages, verifies and uploads checksum-bound GitHub Release assets.
    Important upgrade note

    Fresh-world spawn search in 0.3.6 can make world creation appear frozen because it generates full-depth candidate columns before the server is ready. This was fixed in 0.3.7; use 0.3.8 or later for the subsequent ScalableLux hotfix as well.

    Verification

    The tagged release line passed 792 JUnit tests, the mixin load gate and all 13 true-cubic smoke content checks. SHA-256 values for the downloadable assets are recorded in sha256sums.txt.

    Full changelog: commits through v0.3.6

04 / Manual

Straight
from the repo.

Baked from the MC3 README at release time: status, compatibility tables and architecture notes without request-time API calls.

MC³: Minecraft Cubed

MC³ is an experimental Fabric mod for Minecraft 26.2. It replaces full-height streaming with independently addressed 16 x 16 x 16 cubes and provides a layered world generator for vertically stacked terrain profiles.

Published release: 0.3.8 technical preview. The sparse storage, persistence, custom network protocol and three-dimensional tracking foundations are in place, and cube-native light now covers both generation and runtime edits. This release is not acceptance-complete. The remaining blockers include independently convergent Voxy far terrain, cube-native live tick ownership, and configured world generation outside finite level metadata. See STATUS.md and the true-cubic boundary. TASKS.md records the remaining runtime acceptance gates for this release line.

Implemented foundations

  • Independent CubePos addressing, sparse resident storage, custom cube payloads and per-cube persistence.
  • Buffered view tracking: a square prism — a vanilla-parity Chebyshev square on X/Z with an independent verticalViewDistance Y radius at full depth (default -1: follows the horizontal distance) — so the streamed shape always covers the whole client render grid.
  • Shipped per-cube configured-layer generation through bounded scratch: each 16³ cube receives terrain, structures, decoration and light before first delivery. The older unified FULL-column path remains for comparison.
  • Direct all-air gap generation at legal extreme cube coordinates without allocating a finite compatibility column. Gap biomes are sampled at their absolute quart coordinates.
  • A layered generator and world-creation editor for caves, nether, overworld, floating-island and custom profiles.
  • Incremental block and block-entity updates, compact per-cube light fields, durable terrain provenance and fail-closed schema-2 compatibility checks.
  • Built-in status, pre-generation and profiling commands under /mc3.

The complete [-30,000,000, 30,000,000) block-coordinate range is valid for cube addressing, sparse ownership and unconfigured gaps. That does not mean every runtime subsystem is already full-range. Configured generation still depends on Minecraft's finite level metadata and bounded compatibility scratch. Several interaction, light and scheduling paths also retain vanilla packed coordinate or column boundaries.

Compatibility

Current mod-support boundaries and tested versions are maintained in COMPATIBILITY.md. Release and runtime evidence remains in STATUS.md.

Requirements

  • Minecraft 26.2
  • Fabric Loader 0.19.5 or later (the minimum Distant Horizons 3.3.3 needs; the dev environment is pinned to 0.19.5). Distant Horizons 3.3.3 with shaders needs Iris 1.11.4 or later (1.11.2 crashes); its BLAZE_3D renderer works only without Iris, while OPEN_GL works with Iris. See COMPATIBILITY.md
  • Fabric API 0.155.2+26.2 or a later 0.155.x build for Minecraft 26.2
  • Java 25

The archived 0.3.6 JAR's Fabric metadata used a wildcard for Fabric API even though this is the validated range. The 0.3.7 source enforces ~0.155.2+26.2; its final packaged load proof remains part of the release gate.

Build

Replace your-session with one unique, shell-safe identifier. First save this as /tmp/mc3-your-session.init.gradle so every project's build output is kept off the unreliable checkout mount:

def mc3BuildRoot = new File(System.getProperty('mc3.buildRoot'))
gradle.beforeProject { project ->
    def relative = project.path == ':' ? 'root' : project.path.substring(1).replace(':', '/')
    project.layout.buildDirectory.set(new File(mc3BuildRoot, relative))
}
flock --wait 7200 /tmp/mc3-build.lock \
  ./gradlew clean build --project-cache-dir /tmp/mc3-pcache-your-session \
  --init-script /tmp/mc3-your-session.init.gradle \
  -Dmc3.buildRoot=/tmp/mc3-build-your-session \
  --no-build-cache --no-daemon --console=plain

That local command writes the mod jar to /tmp/mc3-build-your-session/root/libs/mc3-<version>.jar; CI's default output remains build/libs/. The wrapper pins Gradle 9.5.1 by SHA-256 and the build uses the stable Fabric Loom 1.17.18 plugin. GitHub Actions runs the clean build on Java 25.

Useful local verification commands are:

export MC3_GRADLE_EXTRA_ARGS='--project-cache-dir /tmp/mc3-pcache-your-session --init-script /tmp/mc3-your-session.init.gradle -Dmc3.buildRoot=/tmp/mc3-build-your-session --no-build-cache'
flock --wait 7200 /tmp/mc3-build.lock \
  ./gradlew clean build --project-cache-dir /tmp/mc3-pcache-your-session \
  --init-script /tmp/mc3-your-session.init.gradle \
  -Dmc3.buildRoot=/tmp/mc3-build-your-session \
  --no-build-cache --no-daemon --console=plain
tools/mixin-loadtest.sh
MC3_SMOKE_MODE=per_cube tools/true-cubic-smoke.sh
MC3_SMOKE_MODE=unified tools/true-cubic-smoke.sh
MC3_SMOKE_MODE=deferred tools/true-cubic-smoke.sh

tools/smoke-server.sh is a destructive regression harness for its own run/world fixture. Read the script and STATUS.md before invoking it.

Chunk loading vs vanilla (RD 8, matched runs, 21 September 2026)

One chunk column (16×16×384) equals 24 cube-equivalents (16³), so all three targets are directly comparable:

Target Fill time Volume delivered Delivery rate
Vanilla 26.2 7.75 s 6,936 cube-equivalents (289 columns × 24) 895 cube-equiv/s
MC³ (halo) 69.1 s 6,137 cubes 89 cubes/s
MC³ (batch) 59.4 s 6,137 cubes 103 cubes/s
MC³ (spill) 60.5 s 6,137 cubes 114 cubes/s

Restated on equal volume: vanilla covers MC³'s entire 6,137-cube window in ~6.9 s; batch narrows the gap to ~8.7× and spill to ~8.1×. Same GPU rig and client pin, fresh world per run (seed 20260831); "fill" = the full view window delivered (first delivery to window complete); halo/batch/spill are decoration strategies (config/mc3.json decorationStrategy); the spill row is from the 21 September #233 three-way round, which re-measured halo/batch alongside it on the same scenario state (first→last send 73.5 s / 64.6 s, one run per arm, ~6% run-to-run noise).

Render-lag profiling harness (#244, measurement only)

Plays the SAME scenarios on unmodified vanilla 26.2 and on MC³ with identical client-side instrumentation, and reports lag spikes + chunk render-in. No fix changes; findings land in docs/LAG-PROFILE-244.md.

tools/stage-vanilla-fixture.sh                                    # one-time vanilla existing-world fixture
./gradlew -p tools/render-bench-mod build                         # measurement mod (mc3bench-0.1.0.jar)
tools/render-lag-harness.sh --target vanilla --label vanilla-1 --scenario all
tools/render-lag-harness.sh --target mc3 --mc3-strategy halo  --label mc3-halo-1  --scenario all
tools/render-lag-harness.sh --target mc3 --mc3-strategy batch --label mc3-batch-1 --scenario all
tools/render-lag-matrix.sh                                        # interleaved 3-run matrix
python3 tools/render-lag-report.py combined --out docs/LAG-PROFILE-244.md

Both arms: 8-CPU pin (0-7), 24/32 GiB cgroup, 12 GiB heap, exclusive Xvnc :99 lease, JFR + gc log, per-run host-load samples. The bench mod (tools/render-bench-mod, no fabric-api dependency) instruments frame times + hitch buckets, client tick durations, chunk mesh events with positions (vanilla renderer path on vanilla, Sodium build results on MC³), received chunk packets and 1 Hz heap/GC samples to per-run JSONL + summary. Scenario phases: existing-world join (120 s), two new-chunk teleport hops (60 s each), idle settle (60 s). Run artefacts land under /tmp/mc3-lagprof244/runs/<label>/.

Run

For a dedicated server, set this in server.properties:

level-type=mc3\:cubic

For single-player, choose MC³ Cubic on the World screen. The Customise screen edits the overworld layer stack; JSON import/export covers the complete dimension set. See docs/WORLDGEN_PRESETS.md.

Settings and config/mc3.json

Open Options > MC³ Settings. The main screen has six controls plus an Advanced… entry; each tooltip says what the setting does, what it costs and whether it applies now or on the next world load.

Control What it sets
Performance preset Performance / Balanced / Quality (Balanced = the shipped defaults). It is a view over generation speed, far terrain sends per tick, far terrain trees, exact far sky and the cube update budget, and shows Custom whenever any of those differs from a preset.
Vertical view distance Auto (follows render distance) or 2..16 cubes.
Far terrain Off, Auto (follows Voxy's own render distance, then Distant Horizons' lodChunkRenderDistanceRadius, then Voxy World Gen V2's radius, then 128; capped at 128 chunks) or 16..256 chunks manually. Greyed out with "No LOD mod installed (Voxy or Distant Horizons)" when neither is present.
Generation speed Gentle / Normal / Fast: background worker count (8 / automatic / automatic) plus the deferred-band concurrency caps.
Save safety Immediate (safer, the default) or Fast (fastSaves: defers the authoritative write to the next autosave or quit; a crash rolls back to that barrier).
Cube debug overlay The #250 load-state overlay master toggle.

Preset values:

Preset Generation speed Far sends/tick Cube updates/tick Far trees Exact far sky
Performance Gentle (8 workers, 32 active, 24 starts/tick) 24 2048 off off
Balanced Normal (automatic workers, 48, 48) 40 4096 off off
Quality Fast (automatic workers, 64, 64) 64 4096 on on

Advanced… (Technical) holds the decoration strategy, far terrain trees, exact far sky, the worker CPU reservation (affinity), the cube update budget and an entry to the per-state overlay toggles and colours. Rows that the server governs are disabled while connected to a remote server.

config/mc3.json is version 2 and is grouped by _comment entries (ignored on read) into player-facing, advanced and developer keys:

{
  "configVersion": 2,
  "_comment_player": "...",
  "verticalViewDistance": -1,
  "farTerrainDistance": -1,
  "fastSaves": false,
  "debugCubeStateOverlay": false,
  "_comment_advanced": "...",
  "decorationStrategy": "halo",
  "farLodDecorate": false,
  "farLodExactSky": false,
  "worldgenWorkerAffinity": "",
  "worldgenBackgroundWorkers": 0,
  "maxCubeUpdatesPerTick": 4096,
  "farLodSendsPerTick": 40,
  "generationConcurrency": 48,
  "generationStartsPerTick": 48,
  "_comment_developer": "...",
  "generationMode": "per_cube",
  "suppressHaloColumnGeneration": true,
  "windowedColumnSections": true,
  "haloColumnsPrimaryBandOnly": true,
  "elideCanonicalAirSections": true,
  "stubCoveredColumnSaves": true,
  "skipCubeOwnedColumnSaveLight": true,
  "skipGenerationOnlyColumnSaves": true,
  "debugCubeTraffic": false
}

(The real file also lists the overlay per-state settings and the remaining far-LOD tuning constants.) farTerrainDistance is -1 for Auto, 0 for Off, otherwise chunks (one chunk is one cube horizontally); it replaces farLodEnabled, voxyViewDistance and farLodRadius, and the far-feed radius follows it, capped at 128 cubes. Auto reads sectionRenderDistance from config/voxy.json (Voxy shows sectionRenderDistance * 32 chunks).

Migration. A version 1 file is migrated on first load: the original is kept once as mc3.json.v1.bak, unknown keys are preserved, and each mapping is logged (Config migration: ...). The legacy keys remain readable for two releases when the new key is absent: farLodEnabled=false or voxyViewDistance=0 becomes farTerrainDistance=0, a positive farLodRadius becomes that distance, anything else becomes Auto; maxActiveLayerGenerations, maxLayerGenerationStartsPerTick and maxQueuedLayerGenerations become generationConcurrency, generationStartsPerTick and generationQueueLimit; unifiedGeneration only derives generationMode when that is absent, then is dropped. A combination of values that matches no preset simply shows as Custom with every value kept. The three generation* limits are read by generationMode="deferred_band" only; the per-cube pipeline ignores them (it is bounded by the worker pool). When -Dmc3.fastSaves, -Dmc3.worldgen.backgroundWorkers or MC3_WORKER_AFFINITY override the config, the log states the effective value and its source.

verticalViewDistance defaults to -1, which follows the horizontal distance so the streamed prism covers the whole client render grid; an explicit value is clamped to 2..64. The far-feed radius (resident cubes inside the far distance but outside the streamed view, pushed to the client's Voxy LOD database) never starts far generation by itself — deliberate far pre-fill is /mc3 pregen's job. This is not Voxy's own render distance: Voxy 0.2.18's packed LOD identity represents section Y -128..127 only. maxCubeUpdatesPerTick is clamped to 1..4096. Deferred generation limits are clamped to a queue of 1..65536, active work of 1..64, and starts of 1..active.

generationMode="per_cube" is the shipped path: one 16³ cube at a time, decorated and lit before first delivery, with no full-depth column held resident for delivered content. unified (the pre-0.3.0 shipped path) and deferred_band remain selectable for comparative testing; both require decoration to be part of the result before the first payload, and deferred delivery fails closed until its decoration result is ready. The legacy unifiedGeneration boolean still maps onto these modes for old configs (read for migration only; it is no longer written).

decorationStrategy (per-cube pipeline only, TASKS #233) picks how the decoration kernel is grouped and when decorated cubes become deliverable: halo (default) decorates each cube's 3×3 column tile at the cube's own Y exactly as always; batch decorates one 3×3×3 cube group per pass — the neighbour halo and feature setup are paid once per group and all 27 cubes are released with complete payloads together (a group's cubes become deliverable in the same prepare pass); spill shares batch's band-aligned passes as the shared deterministic anchor evaluation (each pass a pure function of tile anchor, band and world seed) but assembles and releases every cube independently, so a spill cube becomes deliverable the moment its own noise, features and light are done — no group admission, no batch coupling. halo, batch and spill are content-identical for the same seed (pinned by block-for-block parity tests, including a forest region straddling four tiles and a structure-bearing region whose mineshaft start reaches across column boundaries). The strategy is read strictly once per world load; switching it across a reload never re-generates already-generated cubes — it applies only to not-yet-generated ones. Surface: the config/mc3.json key, Options > MC³ Settings > Advanced…, plus worldgen.decoration= in /mc3 status (the Customise screen edits layer stacks, not pipeline strategy).

The 0.3.7 source contains additional terrain/closure parity, full-domain light-node identity, C2ME and Voxy capacity work, but none of it is a released 0.3.6 guarantee. Fresh same-seed cross-path parity, repeat determinism, the current performance baseline, the top/bottom runtime-light warning census, the C2ME three-way runtime matrix and Voxy's radius-63 GPU run remain acceptance work.

Five memory behaviours ship default-on, each decodable to false for comparative debugging: suppressHaloColumnGeneration (the vanilla 47×47 player-ticket column halo is never materialised for cubic levels — rig-measured ~3 GB of full-depth columns; streamed columns stay entity-ticking via MC³'s own residency tickets), windowedColumnSections (persisted, non-referenced content sections of FULL columns become biome-exact placeholders until their cube is demanded again), haloColumnsPrimaryBandOnly (in per-cube mode, columns driven purely by vanilla ticket propagation generate only the primary surface band rather than every configured layer at full depth), elideCanonicalAirSections (canonical all-air sections are elided from region saves with a marker-driven exact restore), and stubCoveredColumnSaves (cube-covered column slots are saved as metadata-only stubs — air states plus the real biome container — with content served by the cube store; fail-closed, so placeholder air never reaches disk over real content).

Test profile

The stable mc3-test.mrpack is published on the project's GitHub Releases. Release 0.3.8-test.1 contains MC³, Fabric API, Sodium, Iris and Voxy for Minecraft 26.2. Shaders start disabled. Set the launcher's maximum memory to 12288 MiB (12 GiB) after import because the Modrinth pack format does not carry a JVM memory setting; 8 GiB is workable for settled play and 6 GiB is tight during roam transients. The setting matters: the settled live set is only about 1.5 GiB, so a near-default launcher heap leaves almost no headroom for roam or generation bursts. Measured on this profile's fresh-world 11,109-cube backlog: a 6.1 GiB ceiling turned the burst into 12 full garbage collections of about 500 ms each, while 12 GiB absorbs it with no full collections (worst stop-the-world pause 126 ms). The mod checks the heap at client startup: below 12 GiB it logs this guidance, and below 8 GiB it also shows a one-time in-game chat warning.

The immutable 0.3.6 profile's embedded MC3-PROFILE-SETUP.txt predates the memory correction and incorrectly says 64 GiB and a 32-cube MC³ far feed. Do not follow those two lines: the current guidance is 12 GiB and voxyViewDistance=64. The archive is not rewritten; 0.3.7 and later embed the corrected setup prose.

Voxy's inclusion is intentional. A release cannot pass by excluding a broken mandatory compatibility path. The profile is therefore a review and correctness-testing surface, not evidence that all current blockers are fixed.

To capture a performance problem in a world:

/mc3 profile start 60

MC³ writes a JFR recording and JSON summary under the instance's debug/ directory.

Validation boundaries

  • The isolated build command above proves compilation and automated tests. It does not prove a join, renderer, save/reload or full-range runtime path.
  • tools/mixin-loadtest.sh boots the real Fabric client loader without a display and transforms the packaged Sodium, Iris and Voxy profile. It does not prove graphical correctness.
  • tools/true-cubic-smoke.sh uses an isolated temporary world and checks generation classification, sparse ownership and persistence at coordinate edges. Its default per_cube mode gates the shipped path; unified and deferred remain available as comparative modes.
  • The GPU-backed client rig is required for join flow, movement, input, rendering and visual first-delivery checks. Current evidence and any omissions are recorded in STATUS.md.

Release acceptance still requires authoritative cube-native ticks, entities and points of interest; independently convergent Voxy far terrain; stable Sodium behaviour over travel; and no dependence on lossy vanilla packed Y coordinates in the accepted paths.

Licence

MIT