A planet. In a bucket.
The entire planet in one
PMTiles file
on Hugging Face Buckets. As you explore, your browser requests just the
pieces it needs. A world of detail, a few kilobytes at a time.
Four steps from an empty bucket to a globe that streams itself.
1Bucket
Create a private bucket
Storage Buckets
are S3-like object storage on the Hub: mutable, non-versioned,
made for big files.
$ hf buckets create bucket-atlas --private
2Upload
Put the planet in it
One
PMTiles
archive holds every tile for the whole world,
. It is uploaded once and never
unpacked.
$ hf buckets cp planet-20260907.pmtiles hf://buckets/<username>/bucket-atlas/maps/
3Space
Read byte ranges with Bun S3
A Space holds read-only S3 credentials and forwards each
Range request to the bucket with
Bun S3 . Nothing is downloaded or cached on disk.
const file = s3.file ("maps/planet-20260907.pmtiles" );
return fetch (file.presign (), {
headers : { Range : req.headers.get ("Range" ) },
});
4Browser
Ask only for the tiles in view
MapLibre and the PMTiles client fetch a 16 KB header, then a
directory, then one small slice per tile. Pan, and it asks for
more.
GET /maps/planet-20260907.pmtiles
Range : bytes=41287664-41329101
Buckets S3 guide ↗
·
Bun S3 docs ↗
·
Source ↗