Skip to content

PommeMC/Client

Repository files navigation

Pomme

A high-performance Minecraft client written in Rust

Discord · Issues · Releases


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.

pomme-launcher

Features

  • Vulkan rendering -chunk meshing, frustum culling, water/lava, sky, block overlays, hand animation

  • Vanilla-exact physics -sprinting, swimming, drowning, collision, all matched against decompiled source

  • Full protocol support -connects to 26.1.1 servers via azalea-protocol, 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

Architecture

pomme-client/    # Minecraft client (Rust, Vulkan)
pomme-launcher/  # Launcher app (Tauri, React, TypeScript)

The 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.

Building

Client

Requires the Vulkan SDK and a Rust toolchain.

Can be built with pnpm (recommended):

pnpm client:build-release

or with cargo:

cargo build -p pomme-client --release

Launcher

Requires Node.js and pnpm.

pnpm install
pnpm launcher:build-release

Running

Via the launcher (recommended)

pnpm launcher:dev

Standalone client

Running the standalone client requires minecraft assets, for which you have 2 options:

  1. Run the launcher and install the latest supported release. Then you can do:

    pnpm client:dev -- --username Steve --quick-access-server localhost
  2. If you're on linux, extract the vanilla 26.1.1 assets from .minecraft/ to reference/:

    mkdir -p reference/assets/indexes 
    mkdir -p reference/assets/objects
    mkdir -p reference/versions/26.1.1/extracted
    mkdir -p reference/game-dir
    
    # 30 is the asset index id for 26.1.1
    cp ~/.minecraft/assets/indexes/30.json reference/assets/indexes/26.1.1.json
    cp -r ~/.minecraft/assets/objects/. reference/assets/objects/
    cp ~/.minecraft/versions/26.1.1/26.1.1.jar reference/versions/26.1.1/
    unzip reference/versions/26.1.1/26.1.1.jar 'assets/*' -d reference/versions/26.1.1/extracted/
    
    pnpm client:dev -- --username Steve --quick-access-server localhost \
      --version 26.1.1 \
      --assets-dir $PWD/reference/assets \
      --versions-dir $PWD/reference/versions \
      --game-dir $PWD/reference/game-dir

Contributing

Contributions are welcome. Please open an issue first to discuss what you'd like to change.

License

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.

Community

Discord Sponsor

Star History Chart

About

A Minecraft client written in Rust from scratch

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors