Every release, in order.
Conduit follows SemVer with a +mcXX.X.X suffix marking the Minecraft build each release compiled against. While in 0.x, the minor number is the breaking-change signal.
- 0.10.2 +mc26.1.2 2026-06
Operator console + leaderboards — see and rank what the server is doing.
- Added
/conduit leaderboard <stat> [count]— prints the top players by anyProfileStorecounter (wins,games_played,points_total, …) in chat, with online-name resolution and stat-name suggestions. - Added
/conduit admin instances(op-gated) — lists every live game instance with its dimension, template, player count, and callback-fault count, so a stuck instance is one command away instead of a log dig. - Added
/conduit admin metrics(op-gated) — dumps the newMetricsregistry, a process-lifetime counter set the engine bumps at known hotspots (player.leaves,phase.stuck,callback.faults).
- Added
- 0.10.1 +mc26.1.2 2026-06
Quality & reliability pass — persistent player stats, achievements, stuck-phase recovery, and crash isolation.
- Added
ProfileStore(core) — durable, cross-game player profiles: schema-free counters (wins,games_played,points_total…) + attributes, persisted on the overworld via SavedData.increment/set/counter/setAttr/attr/top. The keystone for leaderboards, achievements, and match history. - Added
Achievements(core) +AchievementToast(fx) — declarative unlock triggers on profile counters ("First Win!" whenwins ≥ 1), persisted asach.<id>attributes so they never re-fire, with a gold title-card + chime presentation wired through a callback handoff. - Added
MatchResult+MatchHistorySavedData(arena) — snapshot a finishedMatch(winner / standings / points);commitTo()folds the outcome intoProfileStore, and a capped 50-entry ring buffer keeps recent results queryable. - Added
PhaseFlowtimeouts +PhaseWatchdog+TimedPhaseFlow(arena) — per-phase deadlines that auto-advance a stuck phase (an AFK host in the lobby, a missed transition) and log/alert on every recovery, so one wedged instance can't hang forever on a live stream. - Added
GuardedDispatch+FaultPolicy(arena) — an exception-isolation barrier around game-supplied callbacks. One throwingonTickor phase callback can no longer kill the server tick or leave a half-applied phase;Game.faultPolicy()can escalate to a clean teardown. - Added Effect choreography (fx) —
Particles(burst / ring / elimination / safe macros),FxTimeline(a self-ticking at / after / repeat sequencer),EffectThrottle(per-key cooldown gate), andScoreBoardBinding+ arenaMatchScoreboardfor a live standings HUD. - Added
PlayerLifecycle(core) — one engine-wide disconnect fan-out that auto-prunes transient per-player state (game state, inventory stash, sidebar, bossbars, spectator) so long-running servers stop leaking as players churn.SpectatorManagergained aSpectatorListenerobserver seam. - Fixed Thread-safety on the player-state, inventory-stash, sidebar, bossbar, and spectator maps (now
ConcurrentHashMap), plus aSidebar.showsub-list aliasing bug — issues surfaced by a full-engine code survey.
- Added
- 0.10.0 +mc26.1.2 2026-06
Vanilla GUI kit grows up — interactive, Minecraft-looking config menus.
- Added
VanillaConfigMenu— declarative config screens: declare a title + ordered list ofConfigEntryand anonChangecallback, and the framework compiles a vanilla-themed screen, routes every control click + text submit, applies the standard mutation, fires the callback, and re-renders. Tab strips, automatic pagination, and a per-(player, screen) open registry. - Added
ConfigEntrysealed types —Toggle/Cycle/Stepper/Slider/Action/Text, each immutable with typedwith*helpers the framework calls for you. - Added Real
Sliders — a recessed track with a raised handle. Click routing goes through the new positionalServerScreenManager.onButtonAt, which carries the click's screen-UV (ButtonClickPayloadgainedclickU/clickV) so the server resolves the track fraction. Click-to-position (an in-world screen emits a click, not mouse-move), snapped tostep. - Changed Stateless button chrome is now textured —
Cycle, theStepper[−]/[+],Action,Done,Prev/Nextrender the 9-slice pixel-art vanilla button. Controls whose chrome encodes state stay procedural: the toggle (bevel direction = on/off), tabs (pressed-in = selected), and the slider. The textured border is sized to vanilla's 3px/20px ratio so it reads thin and elegant, not chunky. - Changed Pressed / ON buttons darken the whole face uniformly (~18%) on top of the inverted bevel, so an active toggle reads as genuinely pushed into shadow rather than just re-lit.
- Fixed Button z-fighting on rect-heavy screens (e.g. a scroll list's row backgrounds vs the arrow buttons). Buttons now composite above the per-index rect z band and below the text plane, with their internal layers a tight
0.0005apart so the black outline no longer parallax-leaks past the fill on an off-axis screen.
- Added
- 0.9.0 +mc26.1.2 2026-05
Developer-velocity pass — five reusable primitives so new games stop re-implementing scaffolding.
- Added
SafeTeleportnow preloads the destination chunks (toFULL) before the deferred teleport, fixing the land-in-darkness / fall-through-terrain stutter every cross-area teleport hit. NewpreloadRadiusoverload + publicpreloadChunks; default radius 1,NO_PRELOADto skip. - Added
GatherRoom(core) — the assemble-everyone-then-send-home lifecycle (meetings, voting rooms, finales): force-loads the room while open, snapshots each player's prior position, stashes inventory, and reverses it all ondisperse. Built onSafeTeleport+PlayerInventoryStash. - Added
ConduitTest(core) — a solo-testing harness: an op-gatedtest list/test run <scenario>command subtree, a named-scenario registry, and a deterministic fake roster so a whole match can be driven from one client without a lobby. - Added
Titles(fx) — fullscreen title / subtitle / action-bar cards for one player or a group, with correct packet ordering and tick-based timing. - Added
Regions(world) — axis-aligned box fills:fill/fillHollow/fillWalls/replace. The geometry every prefab-built arena re-wrote.
- Added
- 0.8.0 +mc26.1.2 2026-05
Arena instances go on-demand + handle-based; data-driven dimension specs.
- Changed
conduit-arena'sInstanceManageris now on-demand + handle-based, built onRuntimeDimensions— no fixed 8-slot pool. Eachacquirespins up a freshconduit:rt-<n>world; instances are keyed by dimension, not slot. - Changed Session routing is String-keyed:
SessionRecord.instanceSlot(int) →instanceKey;holdSlot→holdInstance,setHoldExpiryHandlernow takes the dimension key. - Added
RuntimeDimensionSpec.fromStem / fromStemJson / fromDatapackStem— define a dimension from a LevelStem, raw JSON, or a datapack-registered stem. - Removed
ServerLevelSeedMixin+ the 8instance-*.jsondatapack dimensions — runtime creation sets the seed at construction, so neither is needed. - Migration The common consumer path —
acquire(server, WorldTemplate.VOID)→level()→release()— is unchanged.GameInstance.slot()→handle()/dimension().
- Changed
- 0.7.0 +mc26.1.2 2026-05
Persistent runtime worlds — restart recovery.
- Added A
persist=trueruntime dimension is recorded to a manifest and recreated on the next server start, loading its existing region data. - Changed
persistnow means restart-survival, not release-survival —releasealways fully destroys. The boot orphan sweep is manifest-aware (keeps restored worlds).
- Added A
- 0.6.0 +mc26.1.2 2026-05
On-demand runtime dimensions.
- Added New
conduit-instancemodule — create a fresh world per match and tear it down when it ends, instead of claiming from a fixed pool. - Added
RuntimeDimensions.create / release,RuntimeDimensionSpec(voidWorld/copyOfbuilders,persistflag),RuntimeDimensionHandle. - Added Crash-orphan sweep on server start; force-release of all runtime dimensions on shutdown.
- Added New
- 0.5.0 +mc26.1.2 2026-05
Spectator mode simplified to vanilla SPECTATOR.
- Changed
SpectatorManagernow uses vanillaGameType.SPECTATORinstead of the ADVENTURE + flight + invisibility + scoreboard-team model. Vanilla SPECTATOR natively blocks pickup / drop / use / attack and cancels damage. - Removed
TEAM_NAMEconstant + the internal ability / team helpers. - Migration Consumers that relied on dead players being ADVENTURE must adapt — that policy moved out of the engine and into the mod.
- Changed
- 0.4.0 +mc26.1.2 2026-05
Modular split + player session manager.
- Added The monolithic engine became seven separately-published modules + a
conduitaggregator BOM. - Added Per-module initializers.
- Added
PlayerSessionManager— disconnect snapshots + reconnect routing with a configurable hold window, persisted across restart.
- Added The monolithic engine became seven separately-published modules + a
- 0.3.0 +mc26.1.2 2026-05
Initial stable Minecraft 26.1.2 port.
- Added First stable MC 26.1.2 port of the pre-modular engine.