Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,24 @@
# Changelog

## v0.4.0 - 2026-03-20

## What's Changed

* feat: expose maxRequests on COGLayer by @maxrjones in https://github.com/developmentseed/deck.gl-raster/pull/333
* fix: Bump proj4 to fix web mercator projection by @kylebarron in https://github.com/developmentseed/deck.gl-raster/pull/346
* fix: fix setting default values for inherited props from TileLayer by @kylebarron in https://github.com/developmentseed/deck.gl-raster/pull/347
* fix: Render mesh from Web Mercator coordinates by @kylebarron in https://github.com/developmentseed/deck.gl-raster/pull/349
* fix: Clamp to Web Mercator latitude bounds by @kylebarron in https://github.com/developmentseed/deck.gl-raster/pull/182
* feat: create new `@developmentseed/proj` subpackage by @kylebarron in https://github.com/developmentseed/deck.gl-raster/pull/356
* fix: Support TileLayer refinement strategies by @kylebarron in https://github.com/developmentseed/deck.gl-raster/pull/354
* feat: add ndvi filter slider to NAIP-mosaic example by @kylebarron in https://github.com/developmentseed/deck.gl-raster/pull/357

## New Contributors
* @maxrjones made their first contribution in https://github.com/developmentseed/deck.gl-raster/pull/333
* @aboydnw made their first contribution in https://github.com/developmentseed/deck.gl-raster/pull/348

**Full Changelog**: https://github.com/developmentseed/deck.gl-raster/compare/v0.3.0...v0.4.0

## v0.3.0 - 2026-03-18

### What's Changed
Expand Down
70 changes: 70 additions & 0 deletions docs/blog/2026-03-20-v0.4-release.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
---
slug: v0-4-release
title: deck.gl-raster v0.4
authors:
- kylebarron
tags: [release]
---

deck.gl-raster is enabling GPU-accelerated [GeoTIFF][geotiff] and [Cloud-Optimized GeoTIFF][cogeo] (COG) visualization in [deck.gl].

[geotiff]: https://en.wikipedia.org/wiki/GeoTIFF
[cogeo]: https://cogeo.org/
[deck.gl]: https://deck.gl/

Here's what's new in v0.4.

<!-- truncate -->

## Updated Example: NDVI filtering on demand

Our [NAIP Mosaic example](https://developmentseed.org/deck.gl-raster/examples/naip-mosaic/) visualizes the [National Agriculture Imagery Program dataset] from [Microsoft Planetary Computer].

Since NAIP data contains a near-infrared band in addition to true-color red, green, and blue, we can render spectral indexes like [Normalized Difference Vegetation Index (NDVI)][ndvi].

[National Agriculture Imagery Program dataset]: https://planetarycomputer.microsoft.com/dataset/naip
[Microsoft Planetary Computer]: https://planetarycomputer.microsoft.com/
[ndvi]: https://www.earthdata.nasa.gov/topics/land-surface/normalized-difference-vegetation-index-ndvi

NDVI has a pretty simple formula:

$$
NDVI = \frac{NIR - Red}{NIR + Red}
$$

Since we have the raw values of the near-infrared and red bands in the browser, we can compute NDVI _on the GPU_ and then apply a colormap to convert the single value to an RGB color palette.

We've updated the example to also enable _GPU-based filtering_. Drag the slider to control what values of NDVI are displayed. This updates extremely fast because it's all on the GPU.

[![](./../static/img/naip-ndvi-filter-animation.gif)](https://developmentseed.org/deck.gl-raster/examples/naip-mosaic/)

## Render coarser image data while loading finer data

Previously, when zooming in on a map, there would be a "blank" period: _after_ a parent, coarser image tile was no longer selected for display, but _before_ the child, finer image tile had successfully loaded over the network.

_Now_, we support the deck.gl [`refinementStrategy`] prop. This gives the user control for refining which tiles are visible while waiting for all tiles to load.

In this screenshot of the [NLCD Land Cover example](https://developmentseed.org/deck.gl-raster/examples/land-cover/), you can see the lower-resolution data is still rendered while waiting for the higher resolution data to load. (The red rectangular outlines are the boundaries of the COG tiles)

[`refinementStrategy`]: https://deck.gl/docs/api-reference/geo-layers/tile-layer#refinementstrategy

![](./../static/img/tile-refinement-strategy-best-available.gif)

## Fixed projection handling at high latitudes

Previously there could be an incorrect latitude adjustment at high/low latitudes, especially for images stored in EPSG:4326 projection.

| | |
| ------ | -------------------------------------------------------- |
| Before | ![](../static/img/web-mercator-high-latitude-before.jpg) |
| After | ![](../static/img/web-mercator-high-latitude-after.jpg) |

> Image credit [Max Jones](https://github.com/maxrjones) in [#41 (comment)](https://github.com/developmentseed/deck.gl-raster/issues/41#issuecomment-4060870467).

## Avoided crash when rendering of images beyond $\pm 85.05\degree$ latitude

Previously, deck.gl-raster would crash if you tried to render images that extend past the valid Web Mercator latitude range of $\pm 85.05\degree$. It should now render correctly. (Though in the Web Mercator view, such images will be clamped to the valid latitude range.)

This is mostly useful when viewing global imagery in EPSG:4326 projection, such as this screenshot of the [RGB GeoTIFF example](https://developmentseed.org/deck.gl-raster/examples/cog-basic/), selecting the image sample from [EOxCloudless](https://cloudless.eox.at/).

![](../static/img/eox-cloudless-screenshot.jpg)
14 changes: 14 additions & 0 deletions docs/docusaurus.config.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import type * as Preset from "@docusaurus/preset-classic";
import type { Config } from "@docusaurus/types";
import { themes as prismThemes } from "prism-react-renderer";
import rehypeKatex from "rehype-katex";
import remarkMath from "remark-math";

/**
* Each package that gets TypeDoc API generation + an independent versioned
Expand Down Expand Up @@ -186,6 +188,14 @@ const config: Config = {

trailingSlash: true,

stylesheets: [
{
href: "https://cdn.jsdelivr.net/npm/katex@0.16.11/dist/katex.min.css",
type: "text/css",
crossorigin: "anonymous",
},
],

headTags: [
{
tagName: "script",
Expand Down Expand Up @@ -225,10 +235,14 @@ const config: Config = {
sidebarPath: "./sidebars.ts",
editUrl:
"https://github.com/developmentseed/deck.gl-raster/tree/main/docs/",
remarkPlugins: [remarkMath],
rehypePlugins: [rehypeKatex],
},
blog: {
showReadingTime: true,
feedOptions: { type: ["rss", "atom"] },
remarkPlugins: [remarkMath],
rehypePlugins: [rehypeKatex],
},
theme: {
customCss: "./src/css/custom.css",
Expand Down
2 changes: 2 additions & 0 deletions docs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
"prism-react-renderer": "^2.3.0",
"react": "^19.0.0",
"react-dom": "^19.0.0",
"rehype-katex": "^7.0.1",
"remark-math": "^6.0.0",
"typedoc-plugin-mdn-links": "^5.1.1"
},
"devDependencies": {
Expand Down
Binary file added docs/static/img/eox-cloudless-screenshot.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/static/img/naip-ndvi-filter-animation.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "monorepo",
"private": true,
"version": "0.3.0",
"version": "0.4.0",
"description": "GPU-accelerated COG and Zarr visualization in deck.gl",
"scripts": {
"build": "pnpm --recursive --filter=!docs build",
Expand Down
2 changes: 1 addition & 1 deletion packages/affine/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@developmentseed/affine",
"version": "0.3.0",
"version": "0.4.0",
"description": "Port of Python `affine` package for working with affine transformations in JavaScript.",
"type": "module",
"main": "./dist/index.js",
Expand Down
2 changes: 1 addition & 1 deletion packages/deck.gl-geotiff/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@developmentseed/deck.gl-geotiff",
"version": "0.3.0",
"version": "0.4.0",
"description": "GeoTIFF and Cloud-Optimized GeoTIFF visualization in deck.gl",
"type": "module",
"main": "./dist/index.js",
Expand Down
2 changes: 1 addition & 1 deletion packages/deck.gl-raster/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@developmentseed/deck.gl-raster",
"version": "0.3.0",
"version": "0.4.0",
"description": "Georeferenced image data visualization in deck.gl",
"type": "module",
"main": "./dist/index.js",
Expand Down
2 changes: 1 addition & 1 deletion packages/deck.gl-zarr/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@developmentseed/deck.gl-zarr",
"version": "0.3.0",
"version": "0.4.0",
"description": "Zarr visualization in deck.gl.",
"type": "module",
"main": "./dist/index.js",
Expand Down
2 changes: 1 addition & 1 deletion packages/epsg/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@developmentseed/epsg",
"version": "0.3.0",
"version": "0.4.0",
"description": "The full EPSG projection database, compressed to 309kb for the web.",
"type": "module",
"exports": {
Expand Down
2 changes: 1 addition & 1 deletion packages/geotiff/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@developmentseed/geotiff",
"version": "0.3.0",
"version": "0.4.0",
"description": "High-level GeoTIFF reading library.",
"type": "module",
"main": "./dist/index.js",
Expand Down
2 changes: 1 addition & 1 deletion packages/morecantile/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@developmentseed/morecantile",
"version": "0.3.0",
"version": "0.4.0",
"description": "TypeScript port of Python morecantile — TileMatrixSet utilities.",
"type": "module",
"main": "./dist/index.js",
Expand Down
2 changes: 1 addition & 1 deletion packages/proj/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@developmentseed/proj",
"version": "0.3.0",
"version": "0.4.0",
"description": "Utilities for geographic reprojections.",
"type": "module",
"main": "./dist/index.js",
Expand Down
2 changes: 1 addition & 1 deletion packages/raster-reproject/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@developmentseed/raster-reproject",
"version": "0.3.0",
"version": "0.4.0",
"description": "Mesh generation for client-side raster reprojection.",
"type": "module",
"main": "./dist/index.js",
Expand Down
Loading