// the find
StarArawn/bevy_ecs_tilemap
A tilemap rendering crate for bevy which is more ECS friendly.
A Bevy plugin that makes each tile a first-class ECS entity rather than a blob of data in a single mesh. This means you can query, tag, and react to tiles the same way you would any other game object. Aimed at Bevy game developers who need 2D tile-based worlds with square, isometric, or hexagonal layouts.
Tiles as entities is the right call for Bevy — it means Changed<T> queries, component tagging, and observer patterns work on tiles without any special API. The chunked rendering approach avoids the naive 'one draw call per tile' trap, batching tiles into chunk meshes that go to the GPU efficiently. GPU-driven tile animation is a nice touch that keeps CPU out of the animation loop entirely. The example library is genuinely broad — game of life, hex neighbor queries, LDTK/Tiled integration, frustum cull testing — so you can usually find a working starting point close to your use case.
The tile-per-entity model has a real cost: spawning large maps hammers the ECS archetype system and world allocation. The bench example exists for a reason, and you will hit performance walls on very large maps that you wouldn't hit with a data-oriented tilemap that foregoes entity-per-tile. Bevy's rapid release cadence means this crate has historically lagged or skipped versions (notably no 0.13 support), so if you're on the wrong Bevy version you're blocked. There's no built-in pathfinding or collision layer — you get rendering and coordinate math only, which is fine but means you're wiring in bevy_rapier or similar yourself. Documentation beyond the examples is thin; the API surface for hex grid math especially expects you to read the source.