A high-performance Minecraft client written in Rust
Pomme is a from-scratch Minecraft: Java Edition client built entirely in Rust. It connects to vanilla servers, plays singleplayer worlds on an embedded Rust server, renders the world through Vulkan, and handles physics, networking, audio, and UI without any Mojang code. The goal is a lightweight, performant alternative to the official Java client.
- Vulkan rendering: chunk meshing, GPU frustum and cave-occlusion culling, smooth lighting, water/lava, entities and mobs with skins, block entities, dropped items, particles, weather, clouds, sky, block overlays, hand animation
- Vanilla-exact physics: movement, collision, swimming, and drowning matched line by line against the decompiled source
- Multi-version protocol support: connects to vanilla servers from 1.20 through 26.3, with per-version packet-id and registry tables generated from the decompiled reference; other versions are translated to the native 26.2 wire layout
- Singleplayer: worlds run on SteelMC, a Rust server embedded in the client and joined over an in-memory pipe; create, edit, and delete worlds from the menu
- Audio: vanilla sound events, music, and subtitles through OpenAL Soft
- Resource packs: local packs plus server-sent packs, applied live with a remesh
- Microsoft authentication: sign in with your Microsoft account, tokens stored in the OS keyring
- HUD & menus: health, hunger, air, status effects, hotbar, boss bars, titles, waypoints, F3 debug, chat, pause menu, options, server list, world list
- Discord presence for the menu, servers, and worlds
- Launcher: Tauri-based launcher with frosted glass UI, multi-account management, Mojang patch notes, installation manager
pomme-client/ # Minecraft client (Rust, Vulkan)
pomme-launcher/ # Launcher app (Tauri, React, TypeScript)
pomme-protocol/ # Per-version protocol data and wire encoding
pomme-block/ # Data-free stand-in for azalea-block; block tables are Pomme's own
pomme-singleplayer/ # Runs SteelMC in-process as the integrated server
pomme-gpu-allocator/ # Vendored fork of the gpu-allocator crate
third_party/SteelMC/ # SteelMC submodule
tools/ # protogen, blockgen, stategen, and the OpenAL fetch scriptThe client is a standalone binary that receives launch arguments from the launcher. The launcher handles authentication, asset downloading, version management, and spawns the client with the appropriate flags.
Before building, you must have just installed.
The Rust toolchain is pinned in rust-toolchain.toml; rustup picks it up.
Requires the Vulkan SDK and Python (to stage OpenAL Soft next to the binary; without it the client runs with audio disabled).
Clone with submodules, since singleplayer builds SteelMC by default:
git clone --recurse-submodules https://github.com/PommeMC/Client.git
# or, on an existing clone
git submodule update --initSteelMC's first build downloads the Minecraft server jar and generates registry source, so expect it to take a while. To skip building it (the submodule must still be checked out):
just client-build --no-default-featuresOtherwise:
just client-build --releasepnpm install
just launcher-build --releasepnpm install
just launcher-devRunning the standalone client requires minecraft assets, for which you have 2 options:
-
Run the launcher and install the latest supported release. Then you can do:
just client-dev -- --username Steve
-
If you're on linux, extract the vanilla 26.3 assets from
.minecraft/toreference/:mkdir -p reference/assets/indexes mkdir -p reference/assets/objects mkdir -p reference/versions/26.3/extracted mkdir -p reference/game-dir # 34 is the asset index id for 26.3 cp ~/.minecraft/assets/indexes/34.json reference/assets/indexes/26.3.json cp -r ~/.minecraft/assets/objects/. reference/assets/objects/ cp ~/.minecraft/versions/26.3/26.3.jar reference/versions/26.3/ unzip reference/versions/26.3/26.3.jar 'assets/*' -d reference/versions/26.3/extracted/
Then you can run the client with:
just client-dev -- --version 26.3 \ --assets-dir $PWD/reference/assets \ --versions-dir $PWD/reference/versions \ --game-dir $PWD/reference/game-dir
Run just with no arguments to list every recipe. The common ones:
just client-dev/just client-build/just client-release: run, build, or benchmark the client; flags forward after--, e.g.just client-dev -- --username Stevejust launcher-dev/just launcher-build: run or bundle the launcherjust client-pre-pr/just launcher-pre-pr: the fmt, clippy, and test checks CI enforcesjust protogen/just registrygen/just knownpackgen/just blockgen/just stategen: regenerate a version's packet-id, registry, known-pack, block-state, and per-state property tables fromreference/<version>/;stategenruns vanilla's own code and needs JDK 25 (just jdk=<bin dir> stategen, Windows only)
Contributions are welcome. Please open an issue first to discuss what you'd like to change, and see CONTRIBUTING.md for the workflow.
This project is licensed under the GNU General Public License v3.0 or later (GPL-3.0-or-later).
pomme-singleplayer links SteelMC and is therefore
AGPL-3.0-or-later; see Third-Party Licenses.
It is not affiliated with or endorsed by Mojang Studios or Microsoft. Minecraft is a trademark of Mojang Studios.
The allocator crate is licensed under the MIT License and is a port of the gpu-allocator crate by Traverse Research. pomme-block is likewise MIT.
Portions of this project include third-party code under separate licenses. See THIRD_PARTY_LICENSES.md for details.