#geo-tiff #raster #gdal #tile #server

bin+lib tileyolo

A simple raster-based XYZ tile server for serving GeoTIFFs

6 releases

Uses new Rust 2024

new 0.2.3 May 14, 2025
0.2.2 May 8, 2025
0.2.0 Apr 28, 2025
0.1.1 Apr 25, 2025

#51 in Geospatial

Download history 156/week @ 2025-04-20 244/week @ 2025-04-27 141/week @ 2025-05-04 144/week @ 2025-05-11

685 downloads per month

MIT license

64KB
1.5K SLoC

TileYolo

Serve GeoTIFFs as an XYZ tile API with zero configuration.

Drop your TIFFs into subfolders by style and run tileyolo — it handles everything else.

Usage

Docker

Get up and running immediately! Organise a folder data with a subfolder according to the style, such as ./data/viridis, to colour them against the viridis colour palette (Read styling and folder structure for customisation options):

./data
└── viridis
    ├── world-dem.tif
    └── treescape.tif

then run:

docker run -v ./data:/app/data -p 8000:8000 ghcr.io/evanjt/evanjt/tileyolo:latest

You can then browse all of the loaded rasters by going to http://localhost:8000/map

Install

cargo install tileyolo

Or use as a library:

cargo add tileyolo

Dependencies

  • GDAL
  • Proj

Cargo

  1. cd into your data directory (parent of style subfolders).
  2. Run:
    tileyolo
    
  3. Point your XYZ-capable client (browser, QGIS, Leaflet, etc.) at:
    http://localhost:8000/tiles/{layer}/{z}/{x}/{y}
    
    • {layer} is the TIFF filename (without extension).

TileYolo will auto-detect styles (style.txt or built-in palettes), handle no-data values, and serve tiles on port 8000.

Styles & Folder Structure

Organize your GeoTIFFs into style-specific subfolders:

./data/
├── default/
│   ├── layer1.tif
│   ├── layer2.tif
│   └── style.txt    # QGIS-exported colour stops
├── viridis/
│   ├── layer3.tif
│   └── layer4.tif   # uses built-in viridis palette
└── grayscale/
    └── layer5.tif   # no style.txt → linear grayscale
  • Custom styles: Folders with a style.txt (QGIS export) use those exact colour stops.
  • Built-in palettes: Folders named viridis, magma, plasma, inferno, turbo, cubehelix_default, rainbow, spectral, or sinebow apply the corresponding gradient.
  • Grayscale fallback: Other folders without any style file render in linear grayscale.

QGIS style.txt Example

# QGIS Generated Colour Map Export File
INTERPOLATION:INTERPOLATED
0,215,25,28,255,0
100,253,174,97,255,100
200,255,255,191,255,200
300,171,221,164,255,300
400,43,131,186,255,400

See QGIS Raster Properties → Symbology → Colour Ramp for export instructions.

Sample Output

Startup example with file tree

Configuration

TileYolo has minimal options:

$ tileyolo --help
Usage: tileyolo [OPTIONS]

Options:
  --data-folder <DIR>  Path to data folder [default: /home/.../data]
  -h, --help           Print help
  -V, --version        Print version

Why TileYolo?

I needed a zero‑config, lightweight XYZ tile server for GeoTIFFs. TileYolo does just that: drag, drop, and go.

Roadmap

  • Speed up startup with caching
  • Tile caching for performance
  • S3 and COG support
  • Additional built-in palettes
  • Contributions welcome

Caveats

  • Only band 1 is served
  • Output CRS is EPSG:3857 (Web Mercator)
  • Input TIFFs must define a CRS
  • Tested on small to medium rasters; large rasters may require more resources
  • Reprojection using nearest neighbour

Dependencies

~64MB
~1M SLoC