forge3d: Rust/WebGPU core with PyO3 bindings
Project description
GPU-accelerated 3D terrain rendering for Python.
Built in Rust with WebGPU. Pre-built wheels — no Rust toolchain required.
This image was generated with 5 lines of Python. Load a DEM, launch the GPU viewer, position the camera, and capture a publication-quality snapshot. No shaders to write. No OpenGL boilerplate. Just pip install forge3d.
import forge3d
with forge3d.open_viewer_async(terrain_path="rainier.tif") as viewer:
viewer.set_orbit_camera(phi_deg=225, theta_deg=35, radius=1.2)
viewer.set_sun(azimuth_deg=315, elevation_deg=32)
viewer.snapshot("render.png", width=3840, height=2160)
Install
pip install forge3d
Need Jupyter widgets or tutorial datasets?
pip install "forge3d[jupyter]" # ViewerWidget for notebooks
pip install "forge3d[datasets]" # on-demand sample DEMs, CityJSON, COPC
pip install "forge3d[all]" # everything
Gallery
PBR terrain |
Landcover overlay |
LiDAR point cloud |
Sun & shadow control |
GeoPackage labels |
CityJSON buildings |
Vector overlays |
Camera animation |
Map plate compositor |
What You Get
Open Source (Apache-2.0 / MIT)
Everything you need to go from raw elevation data to a rendered 3D scene:
- Interactive viewer — real-time orbit, pan, zoom via a Rust/WebGPU subprocess controlled from Python over IPC
- Terrain rendering — load GeoTIFFs or numpy arrays, PBR materials, 100+ colormaps
- Vector overlays — GeoJSON/GeoPackage polygons, lines, and labels projected onto terrain
- Point clouds — COPC and LAZ files with millions of points, colored by elevation or classification
- 3D Tiles — stream OGC 3D Tiles tilesets directly into the viewer
- CRS reprojection — automatic coordinate transforms via PROJ + pyproj
- Camera animation — keyframed flyover paths with frame-by-frame export
- Jupyter integration —
ViewerWidgetembeds the viewer inline in notebooks - High-res snapshots — up to 8K PNG export from any camera angle
Pro
Professional cartography and production workflows:
- Map plate compositor — legends, scale bars, north arrows, multi-panel layouts
- SVG / PDF export — publication-ready vector output
- 3D buildings — GeoJSON, CityJSON, and 3D Tiles import with roof inference and PBR materials
- Mapbox Style Spec — load and apply Mapbox-compatible styles
- Scene bundles — save and share complete
.forge3dscene packages - Commercial licensing details → https://github.com/milos-agathon/forge3d#license
Tutorials
Two tracks depending on your background:
- GIS professionals — Visualize your first DEM →
- Python developers — Your first 3D terrain →
- Architecture overview — How forge3d works →
Jupyter
from forge3d.widgets import ViewerWidget
widget = ViewerWidget(terrain_path="dem.npy")
widget.set_camera(phi_deg=225, theta_deg=35, radius=1.2)
widget.set_sun(azimuth_deg=315, elevation_deg=32)
widget.snapshot() # renders inline
Links
Documentation · API Reference · GitHub · PyPI
License
Open-source core released under Apache-2.0 OR MIT. Pro features require a commercial license key set with forge3d.set_license_key(...). Licensing details live at https://github.com/milos-agathon/forge3d#license
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file forge3d-1.21.0.tar.gz.
File metadata
- Download URL: forge3d-1.21.0.tar.gz
- Upload date:
- Size: 2.5 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5bfbabc806f91d7d99906e5ec2c74a1e73c6388bc0cd14cdcef990ca79f9cf93
|
|
| MD5 |
0dab0f9d13839eafffdeca252eda70c1
|
|
| BLAKE2b-256 |
510562ab7281b2ba0840c60a9e34beda2871094569cafc8d5223110706bf3994
|
File details
Details for the file forge3d-1.21.0-cp310-abi3-win_amd64.whl.
File metadata
- Download URL: forge3d-1.21.0-cp310-abi3-win_amd64.whl
- Upload date:
- Size: 6.6 MB
- Tags: CPython 3.10+, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c0156de2316432fc2e9626fdb2abd19e6a4310c764270b89acadc35d5af3f779
|
|
| MD5 |
8f48314cab921845d11bd20a71622d1b
|
|
| BLAKE2b-256 |
2084193399d32c21844005503c31700b253aa8e8fcaa24729c58a8636605a157
|
File details
Details for the file forge3d-1.21.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: forge3d-1.21.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 7.4 MB
- Tags: CPython 3.10+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ee4928faf3ed843a9a81ac8e7b61a26276e77ad0ae1d346f4aeea58d605b1e60
|
|
| MD5 |
8922c59e4530338e2d030530f8bdd457
|
|
| BLAKE2b-256 |
83536d7490b2d244dea859a227f75c9192dcdfd0143100706897ff98e086d373
|
File details
Details for the file forge3d-1.21.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: forge3d-1.21.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 7.3 MB
- Tags: CPython 3.10+, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
57169e0c06fcd6eafc19032405a036b0124793835b3bca1db9809dcb19a61839
|
|
| MD5 |
aefc596d1152012fa82fb49807091008
|
|
| BLAKE2b-256 |
fd77e23619c0c70d34ef72c3fa31ef033393c03cdafdc9a6ca0122dbc9e0a45a
|
File details
Details for the file forge3d-1.21.0-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.
File metadata
- Download URL: forge3d-1.21.0-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
- Upload date:
- Size: 10.6 MB
- Tags: CPython 3.10+, macOS 10.12+ universal2 (ARM64, x86-64), macOS 10.12+ x86-64, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
69a015f1d33a2d2daf159e50f32dda2c859817ff4fdd40da7f3b59bf8da38f08
|
|
| MD5 |
0acc999876fd47e462f43f9f288c1575
|
|
| BLAKE2b-256 |
93cd2b246122ffc69f49cc7d260056647c7f0d6cff5409ceb850038f83b45095
|