HF / BUCKET ATLAS

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.

How it works

Four steps from an empty bucket to a globe that streams itself.

  1. 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
  2. 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/
  3. 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") },
    });
  4. 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 ↗