If all of the tiles are coming from a single file (via PMTiles), how are they cached by the client? Do clients cache byte ranges, or do you configure things to give the appearance of serving separate files?

You typically use byte-range caching in libraries—either using an edge worker (a la Cloudflare) to create separate GET requests from the client's perspective or directly in the client.

i think you can also directly call them from the maplibre lib itself using the pmtiles adapter

https://github.com/protomaps/PMTiles

https://github.com/protomaps/PMTiles/blob/main/js/examples/m...