Live vector tiles
Vector tiles from your PostGIS, current within seconds.
Paste a connection string, pick the tables and columns, and get a TileJSON URL for MapLibre, OpenLayers, deck.gl or anything else that reads vector tiles. When a row changes, MapSocket re-renders only the tiles its old and new shapes touch, and your map hears about it over Server-Sent Events.
What you get
-
Only the changed tiles re-render
A trigger on each table sends the row id and its old bounds with NOTIFY. Bursts are batched per tile, so a thousand-row edit re-renders each affected tile once, at every zoom.
-
Live or snapshot
Live sources update in one to three seconds. Snapshot sources rebuild on a schedule, for read-only roles, pooled URLs or databases you can't add triggers to.
-
Your map refreshes itself
An update_complete event arrives over SSE with the tiles and zooms that changed. In MapLibre that's one setTiles call.
-
Shape the layers
Choose properties and zoom ranges, filter rows with SQL, add label points (point on surface, centroid or your own column) and boundary lines, and pick a tippecanoe preset: keep everything, balanced, or small tiles.
-
Keys locked to your origins
Publishable keys only work from the origins you allow. The connection string is encrypted at rest (AES-256-GCM) and never shown again.
-
Take the tiles with you
Download a consistent MBTiles copy while updates continue (Starter and up), or a PMTiles archive for static hosting (Pro and up). Every source can export its tilefeed config.
How it works
-
Paste your database URL
We check the connection, the PostGIS version and permissions, and warn if a pooler can't carry live updates.
-
Pick tables and columns
Every table with a geometry column is listed with its SRID, row estimate and columns.
-
Run the trigger once
For live sources the dashboard generates the trigger SQL with your real id and geometry columns.
-
Paste the tile URL into your map
TileJSON and a z/x/y template, with a publishable key.
const map = new maplibregl.Map({
container: "map",
style: {
version: 8,
sources: {
parcels: { type: "vector", url: "https://tiles.mapsocket.com/t/acme/maps/parcels.json?key=pk_live_…" },
},
layers: [{ id: "parcels", type: "fill", source: "parcels", "source-layer": "parcels" }],
},
}); const tiles = "https://tiles.mapsocket.com/t/acme/maps/parcels/{z}/{x}/{y}.pbf?key=pk_live_…";
const events = new EventSource("https://tiles.mapsocket.com/t/acme/maps/parcels/events?key=pk_live_…");
events.addEventListener("update_complete", () => {
map.getSource("parcels").setTiles([`${tiles}&_t=${Date.now()}`]);
}); On each plan
| Limit | Sandbox | Starter | Pro | Enterprise |
|---|---|---|---|---|
| Tile sources | 1 | 5 | 25 | Unlimited |
| Databases | 1 | 2 | 10 | Unlimited |
| Tile requests / month | 50k | 1M | 10M | Custom |
| Updates | Rebuild every 24 hours | Live | Live | Live |
| MBTiles download | No | Yes | Yes | Yes |
| PMTiles export | No | No | Yes | Yes |
Full limits and prices on the pricing page.
Good to know
- Live updates need a direct connection or a session pooler. A transaction pooler (Supabase port 6543, PgBouncer in transaction mode) can't carry LISTEN/NOTIFY; use snapshot mode there.
- Tiles are built ahead of time. If you need tiles generated per request from parameterised SQL functions, pg_tileserv or Martin fits better.
- No basemap: MapSocket serves your data. Put it on top of the basemap you already use.
Also in every MapSocket project
- Files and web services Tiles from GeoJSON, Shapefiles, GeoPackages, Esri services and WFS, rebuilt when the data changes.
- Geofencing API Send a location, get enter, exit and dwell events for circles, polygons and travel-time areas.
- Trips and ETAs Live ETAs, approaching and arrival events for deliveries, pickups and visits.
- Places, regions and fraud checks Every location named: the place, country and state, beacons, and whether to trust the fix.
- Georeferencer Put scanned maps, site plans and drone photos on the map, under your live data.
- Elevation API Ground elevation for up to 100 points per request, anywhere on Earth, in metres or feet.
- Custom tile domains Serve tiles from tiles.yourcompany.com, with certificates handled for you.
- MCP server for AI assistants Connect Claude, ChatGPT, Groq, Cursor and other assistants to your geofences, users, trips and events.