Your deliverable opens in a browser, on your own infrastructure.
@mapmap/points draws lidar and photogrammetry clouds inside the map's own WebGL context, so the cloud composites with the basemap, the terrain and every other layer instead of floating in a canvas over them. It reads your class table as written, so a 40 stays a 40, and it runs against a deployment you host, so looking at a cloud is not a metered event.
Point cloud: Stadt Wien - data.wien.gv.at, CC BY 4.0
A cloud on a real map, in a stack you run.
Everything below is shipped today: the renderer, the wire format, the class model and the self-hosted platform underneath them.
One draw call, composited with the basemap
The cloud is a MapLibre custom layer drawn in the map's own WebGL context: one buffer, one draw call, depth-correct against terrain, 3D buildings and every layer you already render. There is no second canvas over the map, and no second camera to keep in step with the first. Set terrainRelative when your heights are measured from a terrain surface and the layer reconstructs the camera from that surface rather than the z = 0 plane, which is the difference between correct point sizes in hilly country and an eye a hundred metres underground. Above: 3,602,663 points of the Pool of London, Tower Bridge and the City behind it, from the Environment Agency's National LIDAR Programme, on real terrain, at 60 frames a second. Contains Environment Agency data. © Environment Agency and database right. Open Government Licence v3.0.
A wire format sized for the network
Three Uint16 positions and four Uint8 bytes of colour, with the class riding in the alpha byte: 10 bytes a point against roughly 48 for the naive float encoding, which is the difference between a 10 MB and a 48 MB million-point corridor before compression. Both blocks reach the GPU untouched, as two typed-array views over the downloaded buffer, with no copy and no per-point loop.

Your class bytes stay your class bytes
A survey vendor, a national mapping agency and an ASPRS LAS file number their classes differently, and a renderer with an opinion silently mislabels two of the three. The class table is an input here: pass values, labels and colours, and 40 stays 40 rather than being reindexed to 2. The shader is generated per table. Duplicate bytes, values outside 0 to 255 and tables over 16 classes throw at load rather than rendering points that quietly take a neighbour's colour. Above, the survey's own ASPRS classification drawn as itself: ground, buildings, vegetation and objects, with the key naming the four and the Layers control able to switch any of them off in any colour view.

Next to routing, geocoding and isochrones
The cloud lands georeferenced on the same map as the road network, so the platform underneath it can answer questions about that network: route to the site, reverse-geocode a location, draw the reachable area. One deployment, one key, one basemap, rather than a viewer in one tab and a mapping stack in another. Above is the same scene straight down with the basemap at full strength: quaysides, dock edges and the bridge deck land on the ones the map draws.
The client opens your URL, not a vendor's
Docker distribution inside your own network: tiles, geocoding and routing on your infrastructure, and the cloud payload served from your own storage. Nothing meters per view, no client data crosses someone else's platform just to be looked at, and there is an SBOM and a security questionnaire ready for the review.

Check the CRS before you trust the position
A cloud in the wrong place is the most common way a first trial fails. The sidecar's anchor is trusted as lng/lat by design and never silently corrected, so validate_geodata and POST /geodata/validate are shipped endpoints you can call to check a dataset's declared CRS against its coordinates before you place it. Above: the viewer's own readout, which says where the pointer lands on the ground and how far away that is. It measures the ground plane rather than the point under the cursor, and the wording says so.
Known limits: this is a renderer, not a platform. There is no level-of-detail or streaming system, so the payload is fetched whole and everything stays resident, which suits corridors and sites rather than a whole county in one layer; past a few million points, split the area into several clouds and swap layers by viewport. There is no COPC or LAZ ingest yet, so clouds are baked to the 10-byte format offline before they are served. There is no reprojection, no measurement, no annotation and no access-controlled share link in the SDK today.
We will put your cloud on the map.
Send us a baked corridor or a site, or tell us what you capture, and our AI agents will stand up a working viewer on MapMap with your class table, your colours and your basemap, running on infrastructure you can point a client at. The same way we build MapMap itself. Bakes are a bespoke engagement rather than a subscription: a few days of professional services covering ingest, classification, georeferencing and the viewer, then the payload is yours to serve.
Automotive
MapMap in the vehicle: a full navigation stack you host and control.
Trucking & Logistics
The router that refuses the bridge before your driver ever sees it, with dispatch-grade optimisation built in.
Bus & Fleet Operations
Every vehicle, on one live map, running on infrastructure you host and control.
