Ti
In development · Milestone 1 complete

A native Metal renderer
for Minecraft.

Minecraft: Java Edition draws through OpenGL 3.3 on macOS — an API Apple deprecated in 2018 and never optimised for Apple silicon.

Titanium replaces the renderer with a genuine Apple Metal backend. Not a wrapper, not a translation layer.

Why

OpenGL is a dead end on the Mac.

Apple deprecated OpenGL across its platforms in 2018. It still works, but it receives no driver investment, cannot express how Apple GPUs actually render, and leaves most of the hardware's capability unreachable.

01

Direct Metal

Titanium talks to Metal through an Objective-C++ bridge. There is no MoltenVK, no Vulkan layer, and no OpenGL shim underneath — at runtime the process speaks Metal and nothing else.

02

Built for Apple silicon

Unified memory means vertex data written by the JVM is the same memory the GPU reads. Tile-based deferred rendering means depth buffers never have to exist in main memory at all.

03

Capability-gated

Every Metal feature is checked against the live device at runtime, never inferred from the chip name or macOS version. Unsupported machines fall back cleanly instead of crashing.

How

Minecraft already has a backend seam.

Mojang's 1.21 rendering rewrite introduced an explicit, backend-agnostic graphics abstraction — and marked it @DontObfuscate, so it keeps its real names through obfuscation. Titanium implements that interface instead of patching thousands of scattered draw calls.

Minecraft render code
World, entities, particles, GUI, post-processing
GpuDevice · CommandEncoder · RenderPass
57 methods total — the whole backend contract
GlDevice
OpenGL 3.3 core
MetalDevice
Apple Metal

The OpenGL context itself is created inside GlDevice — so replacing the device removes OpenGL from the process rather than leaving a dead context behind. Verified by disassembling the 1.21.11 client, not assumed.

Status

What actually works today.

Titanium is an in-progress project published in the open. This table reflects what has been built and tested — not what is planned.

ComponentDetailState
Feasibility study Backend seam, injection point and shader model verified against the real 1.21.11 client jar and official mappings done
Native Metal core Device, capabilities, buffers, textures, samplers, pipelines, depth/stencil, render passes, frames in flight, pipeline cache done
JNI bridge 62 entry points; zero-copy vertex upload straight into GPU-visible memory done
Swapchain & presentation CAMetalLayer on Minecraft's window, resize, vsync, ProMotion frame pacing in progress
GLSL → MSL translation Minecraft ships 93 GLSL shaders; Metal cannot consume them directly next
Fabric integration Mixins replacing the device, plus the full GpuDevice implementation next
MetalFX upscaling Spatial first; temporal requires motion vectors Minecraft does not yet produce planned
Mesh shaders Gated on a workload where the win is measurable, with a conventional fallback planned

On performance

Titanium publishes no frame-rate numbers, because none have been measured against the unmodified renderer yet. Claiming a speedup before the renderer is complete would be guesswork. When benchmarks exist they will state the scene, the settings, the hardware, and the percentiles — not a single flattering average.

Requirements

What you'll need.

Shader packs such as Iris and OptiFine inject GLSL and call OpenGL directly. With no GL context in the process there is nothing for them to call, so Titanium detects them at startup and stays disabled rather than failing halfway through world load.