Thanks for your interest in contributing to Pomme!
-
Fork the repository
-
Clone your fork and set up the development environment:
git clone https://github.com/<your-username>/Pomme-Client.git cd Pomme-Client
-
Build and run:
cargo build cd launcher pnpm tauri dev
All of these must pass. CI will reject your PR if they don't.
cargo fmt -- --check
cargo clippy --release --all-targets --all-features -- -D warnings
cargo build --releasecd launcher/src-tauri
cargo fmt -- --check
cargo clippy --release --all-targets --all-features -- -D warningscd launcher
pnpm install
pnpm format:check
pnpm lint
pnpm exec tsc --noEmit
pnpm exec vite build- Rust nightly is required (due to
simdnbtdependency) - No unnecessary comments. Code should be self-explanatory
- No DRY violations. Don't duplicate logic, extract shared helpers
- No
unwrap()outside of tests - Keep changes focused. One feature or fix per PR
- Use
feat/,fix/,perf/,refactor/,chore/branch prefixes
Every PR must include:
## Summary
- Brief bullet points of what changed and why
## Test plan
- [ ] Steps to verify the changes work
- [ ] Edge cases checkedFor bug fixes, also include:
- What the issue was
- What caused it
- How it was fixed
src/
├── main.rs # Entry point
├── args.rs # CLI arguments
├── entity/ # Entity storage (item drops)
├── window/ # winit event loop, input handling
├── renderer/ # Vulkan rendering, chunk meshing, texture atlas
│ ├── pipelines/ # GPU pipelines (chunk, sky, hand, overlay, etc.)
│ ├── shaders/ # GLSL shaders
│ └── chunk/ # Chunk buffer management, meshing, atlas
├── net/ # Server connection, packet handling
├── world/ # Chunk storage, block registry, models
├── physics/ # Movement, collision
├── player/ # Local player, inventory, interaction
└── ui/ # HUD, chat, menus, pause screen
launcher/
├── src/ # React frontend (TypeScript)
├── src-tauri/ # Tauri backend (Rust)
└── package.json # Node dependencies
Include reproduction steps and your system info (OS, GPU, Rust version) for bug reports.
Be respectful. We're all here to build something cool.