
I built this tool to facilitate the work on my other 2 projects in order to eliminate the overhead of thinking real time interactions across multiple systems.

I built this tool to facilitate the work on my other 2 projects in order to eliminate the overhead of thinking real time interactions across multiple systems.
Hi all — I just open-sourced GeoMQTT, a piece of infrastructure I built and have been running for a while. It might be useful to anyone working with moving things on a map.
Turns Redis GEO sets into a tile-keyed MQTT topic tree, so a web or game client can follow a moving viewport just by subscribing to the tiles it can see — and unsubscribing from the ones it can't.
If you have a few thousand moving points and clients that only see a slice of the map at a time, the usual "websocket bridge that broadcasts everything" pattern stops scaling at the read side, not the write side. GeoMQTT uses slippy-map tiles as the routing key, so fanout costs what each client is actually looking at, not the size of the total set. A panning map literally becomes a diff against a set of tile subscriptions.
Topic shape: geo/<set>/<z>/<x>/<y>
Wildcards (geo/vehicles/12/+/+) are MQTT-native, so the broker handles them. New subscribers get a snapshot burst (current tile contents via GEOSEARCH) followed by the live stream — so the join is consistent without a warmup phase or a replay log.
Full wire spec: PROTOCOL.md
:6380, MQTT/TCP on :1883, MQTT/WebSocket on :8083, HTTP/GeoJSON on :8080/status — AtomicU64::fetch_add(Relaxed) at hot paths, no background ticker, no allocator hooks, no Redis round-trips on a scrapev0.3.0 shipped two days ago. The architecture is settled, the five clients work, the public demo has been running for a while. The repo's star count is low because this is literally the announcement post — I am not karma-farming numbers I haven't earned yet. CI runs Rust fmt + clippy + integration tests against a real Redis service, and vitest on the TypeScript clients. Releases automate Docker, npm (GitHub Packages), UPM, and binaries for Linux/macOS/Windows on x86_64 + aarch64.
Apache-2.0 / MIT dual-licensed — the standard Rust dual-license combo, deliberately permissive. No CLA.
Obvious use cases: vehicle fleets, IoT trackers, mobility dashboards, multiplayer presence, simulation visualization. I am building a world-state engine on top of it for games (GaiaWM, talk at GDC in June), but that is a separate project — GeoMQTT itself is general-purpose infrastructure and was designed to stand on its own.
It is not the right tool if you need:
move event corrects a missed one)obj:* Redis hashes are arbitrary KV — clients render whatever attributes they get)These are stated tradeoffs, not roadmap gaps.
Try the live demo, point a client at it, tell me where the abstractions break for your shape. The cleanest pull requests usually start as "this didn't fit my use case".
Happy to answer architecture questions in the comments.