// the find
PrismarineJS/mineflayer
Create Minecraft bots with a powerful, stable, and high level JavaScript API.
Mineflayer is a Node.js library for programmatically controlling Minecraft bots, handling everything from packet parsing to inventory management and physics simulation. It supports Minecraft versions 1.8 through 1.21.11 and has a large ecosystem of third-party plugins. Primary audience is developers building automation, AI agents, or Minecraft tooling.
- Version coverage is genuinely impressive — supporting 13+ years of Minecraft releases through the underlying minecraft-protocol and minecraft-data packages, with what appears to be active maintenance (last push July 2026).
- Well-decomposed architecture: core functionality is split into focused plugin files (digging.js, inventory.js, chest.js, etc.) and most primitives live in separate npm packages, making it easy to understand and extend individual subsystems.
- Test suite actually spins up a real Minecraft server via minecraft-wrap and runs integration tests against specific game versions and features — this is significantly more meaningful than unit tests with mocked packets.
- TypeScript definitions (index.d.ts) and typed-emitter dependency mean you get reasonable autocomplete and type safety without the codebase being TypeScript itself.
- The README says Node >= 18 but package.json requires >= 22 — that's a documentation inconsistency that will waste someone's time.
- No built-in pathfinding; navigation requires the separate mineflayer-pathfinder plugin maintained by a different author (Karang), so a core use case for bots has a split maintenance story and can fall behind on version support independently.
- The plugin ecosystem listed as 'most updated and useful' includes several repos that appear abandoned or infrequently maintained — adopters will need to audit each plugin's last commit date before depending on it.
- Being JavaScript with StandardJS style means no compile-time safety for the core codebase itself; subtle bugs in packet handling or state management won't surface until runtime, and the lack of TypeScript source means contributing typed code is awkward.