// the find
tidwall/tile38
Real-time Geospatial and Geofencing
Tile38 is an in-memory geospatial database and geofencing server built in Go. It handles lat/lon points, GeoJSON, bounding boxes, and geohashes, and supports real-time geofence monitoring over persistent connections. The target audience is anyone building location-aware features—fleet tracking, delivery apps, proximity alerts—who wants Redis-like simplicity without pulling PostGIS into their stack.
1. Real-time geofencing via persistent connections is the standout feature: a single FENCE query keeps the connection open and pushes events as objects move, which is much cleaner than polling. 2. It speaks the Redis RESP protocol natively, so you can use any Redis client library and most Redis tooling without modification. 3. The spatial index supports multiple search primitives (NEARBY, WITHIN, INTERSECTS) plus field-level WHERE filtering in a single query, which covers most real-world fleet/proximity use cases without joins. 4. Webhook and pub/sub delivery options for geofence events mean you're not forced to hold a long-lived connection—event fan-out to multiple systems is built in.
1. Entirely in-memory with AOF persistence: if your dataset doesn't fit in RAM you're done, and AOF replay on restart can be slow for large datasets with no obvious tuning knobs exposed in the docs. 2. No clustering or horizontal sharding—there's leader/follower replication for reads, but write throughput is bounded by a single node, which becomes a problem at scale. 3. Field values are strictly doubles; you can't store arbitrary string metadata on objects beyond the object ID, which forces awkward workarounds (store string fields in a separate system, encode in the ID, etc.). 4. The client library ecosystem is thin—most of the 'featured' clients haven't seen commits in years, and the Tile38-native ones have sparse documentation and unclear production usage.