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, renders the world through Vulkan, and handles physics, networking, 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, block entities, weather, clouds, sky, block overlays, hand animation
- Vanilla-exact physics: sprinting, swimming, drowning, collision, all matched against decompiled source
- Multi-version protocol support: connects to vanilla servers from 1.21.9 through 26.2, with per-version packet-id and registry tables generated from the decompiled reference; handles chunk streaming, block updates, chat
- Microsoft authentication: sign in with your Microsoft account, tokens stored in the OS keyring
- HUD & menus: health, hunger, air bubbles, hotbar, F3 debug, chat, pause menu, options, server list
- 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-gpu-allocator/ # Vendored fork of the gpu-allocator crateThe 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.
Requires the Vulkan SDK and a Rust toolchain.
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.2 assets from
.minecraft/toreference/:mkdir -p reference/assets/indexes mkdir -p reference/assets/objects mkdir -p reference/versions/26.2/extracted mkdir -p reference/game-dir # 32 is the asset index id for 26.2 cp ~/.minecraft/assets/indexes/32.json reference/assets/indexes/26.2.json cp -r ~/.minecraft/assets/objects/. reference/assets/objects/ cp ~/.minecraft/versions/26.2/26.2.jar reference/versions/26.2/ unzip reference/versions/26.2/26.2.jar 'assets/*' -d reference/versions/26.2/extracted/
Then you can run the client with:
just client-dev -- --version 26.2 \ --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 blockgen/just lightgen: regenerate a version's packet-id, registry, block-state, and light tables fromreference/<version>/
Contributions are welcome. Please open an issue first to discuss what you'd like to change.
This project is licensed under the GNU General Public License v3.0 or later (GPL-3.0-or-later).
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.
Portions of this project include third-party code under separate licenses. See THIRD_PARTY_LICENSES.md for details.
