TERRAFORGE

TerraForge

N 30.20000 S 29.40000 E 102.40000 W 101.60000 Mount Gongga · 0.800° × 0.800°

Draw a box on the map,
turn it into data you can use.

Tiles, elevation, 3D terrain, contours — four pipelines packed into a single interface. Draw an area, watch the progress live, resume after an interruption; the outputs go straight into your GIS workflow.

MIT · Windows / macOS (Apple Silicon) / Linux · unzip and run, no Python

TerraForge interface: a rectangular download selection with corner handles laid over the 3D terrain around Mount Gongga, with a toolbar on the left for box selection, area, search, lighting, tasks and settings

Default contour hypsometric tint breaks · every step editable Mount Gongga selection · captured in v0.3.3

Four data pipelines

One selection grows four kinds of output

The same area, the same task scheduling, the same cache. Once the extent is chosen, the only difference left is which format you want.

TILES / Map tiles

Draw a box, download, mosaic into a georeferenced GeoTIFF

Fetches tiles from Google Maps and mirrors them into the output directory as they download. A tile directory, a mosaicked GeoTIFF, a single-file MBTiles — combine them yourself with the checkboxes.

Style
Standard m · Satellite s · Satellite+labels y · Roads h · Terrain t
Output
Tile directory · GeoTIFF (one file per zoom level) · MBTiles (ticked when the task is created, or exported afterwards; the original tiles are not deleted)
Cache
Keyed by "style + coordinates" and shared across tasks — re-download the same area in another task and the tiles you already have never hit the network again
Download data dialog: shows the bounds of the selection and an estimate of 8,537 tiles, with options for tile / GeoTIFF / MBTiles output and zoom levels 10–15
The tile count is worked out before the task is created

DEM / Elevation data

1°×1° elevation tiles; the default source needs no account

Works out which tiles your selection needs and fetches them one by one. It goes to the public Copernicus S3 bucket by default, so downloads work out of the box; configure Earthdata only if you need ASTER.

Default source
Copernicus GLO-30 (30 m, public S3 bucket, no authentication)
Optional source
ASTER GDEM v3 ASTGTM.003 (30 m, requires a NASA Earthdata account, entered on the settings page)
Selection
Draw a box on the map, or import GeoJSON / KML / KMZ / Shapefile; multi-part geometries and holes are supported
Antimeridian
Areas crossing 180° are automatically split into two parts
Task center: totals for tasks, completed, failures and cumulative download volume, with a task list below carrying type labels and area bounds, plus a map of past areas
Task center · past areas laid straight onto the map

TERRAIN / 3D terrain

Sliced into Cesium quantized-mesh, global base included

Slices a downloaded DEM or a locally uploaded GeoTIFF into terrain tiles. A global base terrain ships inside the package, and tiling results are implanted into its output directory — pull the camera back and you will not fall into a hole.

Format
quantized-mesh 1.0, consumed directly by CesiumJS
Base layer
A 167 MB global base terrain ships with the package (derived from the GEBCO 2024 Grid, includes bathymetry, hole-free worldwide) and is extracted automatically on first run
Cascading
Your high-resolution tiles sit on top of the base layer and fall back to the global one as you zoom out
Input
A downloaded DEM task, or a locally uploaded GeoTIFF; with no tiling it can still render a hillshade preview on demand
3D terrain rendering of a Himalayan ridge: a low-angle view in which the relief above the snow line and the distant horizon are clearly visible
Himalayan ridge · terrain lighting enabled

CONTOUR / Contours

Rendered as standard XYZ tiles that anything can load

The output is an ordinary XYZ tile directory. Leaflet, OpenLayers and CesiumJS can use it directly — TerraForge does not have to be installed to view it.

Output
Standard XYZ tiles, loaded directly by Leaflet / OpenLayers / CesiumJS
Style
Contour interval, intermediate and index contour colors, hypsometric tint breaks and terrain hillshading are each adjustable, with preview
Data source
Upload .tif files (multiple allowed), or reuse a completed DEM task — the source files are not copied, and deleting the contour task leaves the original DEM alone
Contour tiles rendered for the Tianshan area: a hypsometric elevation ramp together with brown contour lines, laid over a satellite imagery basemap
Tianshan selection · 50 m contour interval · hypsometric tint + hillshade

Why this is not yet another bulk downloader

With a big job the hard part is not the download — it is what happens after something breaks

Tens of thousands of tiles run overnight; what you need to know the next day is whether it actually succeeded, what is missing, and whether it can carry on. These four things are where TerraForge spends the most effort.

The progress is real

WebSocket pushes the download speed, the time remaining, and the per-zoom mosaicking and copying stages. The progress bar does not stop at 100% and leave you guessing what is still going on.

Missing tiles are not silent

Tile results are accounted for in five categories: success, no data at the source, retryable failure, permanent failure, and cache write failure. Only "no data at the source" completes automatically; a real failure stops in a pending-decision state and waits for your call, and a result whose gaps you accepted is permanently marked as having missing tiles.

It picks up where it stopped

Resumable downloads, a cache shared across tasks, copying while downloading, and atomic writes via .part temporary files plus rename. Pausing, resuming and retrying never re-download tiles you already have.

It does not phone home

No telemetry, tracking points or usage statistics of any kind. All third-party front-end libraries are vendored locally, and no CDN is touched at runtime. Apart from the map sources, elevation sources and proxies you configure yourself, it connects to no server.

Settings panel: grouped settings for theme and accent color, default save path, download concurrency, request timeout, proxy server and the tile server list
Settings · concurrency and timeout / proxy auto-detection / cache / GDAL parameters / Earthdata account

Current version v0.3.3

Download TerraForge

Prebuilt packages for three platforms. Unzip and run — the target machine needs neither Python nor a separate GDAL installation.

  • On Windows double-click terraforge.exe; on macOS / Linux run ./terraforge, then open http://localhost:5000 in a browser. The program also listens on 5001 to serve tiles; it still works if the firewall does not let that one through.
  • There is no installer, and no auto-update. No MSI / DMG / DEB is produced; switching version means downloading a new package.
  • Every package contains the 167 MB global base terrain volumes, so the size is on the large side. The release page carries a SHA-256 manifest, so you can verify that the copy you have is the original.
  • Intel Macs are not supported — the macOS package comes in Apple Silicon (arm64) only.
  • When moving it, move the whole terraforge/ directory together. Moving only the executable reports Corrupt bundle: missing GDAL/PROJ data directories.
  • On macOS, before the first run, execute xattr -cr . inside the extracted directory to clear the quarantine attribute.
  • The program listens on 0.0.0.0:5000 and has no login or authentication mechanism at all; its API can read and write local disk paths and delete directories. Use it only on a trusted local machine or LAN, and do not expose it directly to the public internet.

All releases ↗ Release notes for this version ↗ Changelog ↗