{
  "schema": "datoviz.public-examples.v1",
  "source": "examples/c/MANIFEST.yaml",
  "generated_by": "tools/build_examples_manifest.py",
  "count": 114,
  "categories": {
    "advanced": 4,
    "composite": 2,
    "feature": 68,
    "runtime": 5,
    "showcase": 18,
    "start": 1,
    "visual": 16
  },
  "statuses": {
    "diagnostic": 1,
    "experimental": 16,
    "prototype": 1,
    "supported": 96
  },
  "examples": [
    {
      "id": "features_basic_scene",
      "title": "Basic Scene",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/basic_scene.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/basic_scene.c",
      "page": "gallery/features/features_basic_scene.md",
      "summary": "This example shows the smallest scene with a point visual.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/basic_scene",
      "smoke_command": "./build/examples/c/features/basic_scene --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_basic_scene.png",
          "site_asset": "/assets/gallery/v0.4/features/features_basic_scene.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "point"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_basic_scene",
        "requirements": [
          "point"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_basic_scene",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_basic_scene",
      "primary_feature": "scene",
      "python_source": "examples/python/gallery/features/basic_scene.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/basic_scene.py",
      "python_status": "manual"
    },
    {
      "id": "features_panel_single",
      "title": "Single Panel",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/panel_single.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/panel_single.c",
      "page": "gallery/features/features_panel_single.md",
      "summary": "This example creates one explicit panel rectangle inside a figure.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/panel_single",
      "smoke_command": "./build/examples/c/features/panel_single --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_panel_single.png",
          "site_asset": "/assets/gallery/v0.4/features/features_panel_single.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "panel",
        "point"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_panel_single",
        "requirements": [
          "panel",
          "point"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_panel_single",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_panel_single",
      "primary_feature": "panel-single",
      "python_source": "examples/python/gallery/features/panel_single.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/panel_single.py",
      "python_status": "manual"
    },
    {
      "id": "features_panel_grid",
      "title": "Panel Grid",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/panel_grid.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/panel_grid.c",
      "page": "gallery/features/features_panel_grid.md",
      "summary": "This example arranges four independent panels in a 2x2 figure grid.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/panel_grid",
      "smoke_command": "./build/examples/c/features/panel_grid --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_panel_grid.png",
          "site_asset": "/assets/gallery/v0.4/features/features_panel_grid.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "panel-grid",
        "point"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_panel_grid",
        "requirements": [
          "panel-grid",
          "point"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_panel_grid",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_panel_grid",
      "primary_feature": "panel-grid",
      "python_source": "examples/python/gallery/features/panel_grid.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/panel_grid.py",
      "python_status": "manual"
    },
    {
      "id": "features_panel_multi",
      "title": "Multiple Panels",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/panel_multi.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/panel_multi.c",
      "page": "gallery/features/features_panel_multi.md",
      "summary": "This example shows two panels with independent data, domains, and panzoom state.",
      "validation": "smoke+interaction+screenshot",
      "build_command": "just example-c features/panel_multi",
      "smoke_command": "./build/examples/c/features/panel_multi --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_panel_multi.png",
          "site_asset": "/assets/gallery/v0.4/features/features_panel_multi.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "panel-grid",
        "multi-panel",
        "panzoom",
        "point"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_panel_multi",
        "requirements": [
          "panel-grid",
          "multi-panel",
          "panzoom",
          "point"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_panel_multi",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_panel_multi",
      "primary_feature": "multi-panel",
      "python_source": "examples/python/gallery/features/panel_multi.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/panel_multi.py",
      "python_status": "manual"
    },
    {
      "id": "features_panel_linked",
      "title": "Linked Panels",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/panel_linked.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/panel_linked.c",
      "page": "gallery/features/features_panel_linked.md",
      "summary": "This example links the X panzoom extent of two stacked signal panels.",
      "validation": "smoke+interaction+screenshot",
      "build_command": "just example-c features/panel_linked",
      "smoke_command": "./build/examples/c/features/panel_linked --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_panel_linked.png",
          "site_asset": "/assets/gallery/v0.4/features/features_panel_linked.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "panel-grid",
        "linked-panels",
        "panzoom",
        "point"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_panel_linked",
        "requirements": [
          "panel-grid",
          "linked-panels",
          "panzoom",
          "point"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_panel_linked",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_panel_linked",
      "primary_feature": "linked-panels",
      "python_source": "examples/python/gallery/features/panel_linked.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/panel_linked.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_axes_2d",
      "title": "Path With 2D Axes",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/axes_2d.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/axes_2d.c",
      "page": "gallery/features/features_axes_2d.md",
      "summary": "This example shows a 2D data path with axes, ticks, and grid lines.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/axes_2d",
      "smoke_command": "./build/examples/c/features/axes_2d --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_axes_2d.png",
          "site_asset": "/assets/gallery/v0.4/features/features_axes_2d.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "path",
        "axes",
        "text",
        "panzoom"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_axes_2d",
        "requirements": [
          "path",
          "axes",
          "text",
          "panzoom"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_axes_2d",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_axes_2d",
      "primary_feature": "axes-2d",
      "python_source": "examples/python/gallery/features/axes_2d.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/axes_2d.py",
      "python_status": "manual"
    },
    {
      "id": "features_coordinate_system",
      "title": "Coordinate System",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/coordinate_system.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/coordinate_system.c",
      "page": "gallery/features/features_coordinate_system.md",
      "summary": "This example shows the Datoviz 3D coordinate convention.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/coordinate_system",
      "smoke_command": "./build/examples/c/features/coordinate_system --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_coordinate_system.png",
          "site_asset": "/assets/gallery/v0.4/features/features_coordinate_system.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "mesh",
        "reference-grid",
        "text",
        "controller"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_coordinate_system",
        "requirements": [
          "mesh",
          "reference-grid",
          "text",
          "controller"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_coordinate_system",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_coordinate_system",
      "primary_feature": "coordinate-system",
      "python_source": "examples/python/gallery/features/coordinate_system.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/coordinate_system.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_axis_labels",
      "title": "Axis Labels",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/axis_labels.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/axis_labels.c",
      "page": "gallery/features/features_axis_labels.md",
      "summary": "This example shows axis titles and tick-label layout around a plotting panel.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/axis_labels",
      "smoke_command": "./build/examples/c/features/axis_labels --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_axis_labels.png",
          "site_asset": "/assets/gallery/v0.4/features/features_axis_labels.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "axes",
        "text",
        "labels"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_axis_labels",
        "requirements": [
          "axes",
          "text",
          "labels"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_axis_labels",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_axis_labels",
      "primary_feature": "axis-labels",
      "python_source": "examples/python/gallery/features/axis_labels.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/axis_labels.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_sampled_field_update",
      "title": "Sampled Field Update",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/sampled_field_update.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/sampled_field_update.c",
      "page": "gallery/features/features_sampled_field_update.md",
      "summary": "This example reuses one sampled scalar field in two image visuals while updating patches.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/sampled_field_update",
      "smoke_command": "./build/examples/c/features/sampled_field_update --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_sampled_field_update.png",
          "site_asset": "/assets/gallery/v0.4/features/features_sampled_field_update.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "sampled-field",
        "image",
        "frame-callbacks",
        "colormap"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_sampled_field_update",
        "requirements": [
          "sampled-field",
          "image",
          "frame-callbacks",
          "colormap"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_sampled_field_update",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_sampled_field_update",
      "primary_feature": "sampled-field-update",
      "python_source": "examples/python/gallery/features/sampled_field_update.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/sampled_field_update.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_text_block",
      "title": "Text Block",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/text_block.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/text_block.c",
      "page": "gallery/features/features_text_block.md",
      "summary": "This example renders a multiline text object at a stable screen position.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/text_block",
      "smoke_command": "./build/examples/c/features/text_block --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_text_block.png",
          "site_asset": "/assets/gallery/v0.4/features/features_text_block.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "text",
        "glyph-atlas"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_text_block",
        "requirements": [
          "text",
          "glyph-atlas"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_text_block",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_text_block",
      "primary_feature": "text-block",
      "python_source": "examples/python/gallery/features/text_block.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/text_block.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_overlay_card",
      "title": "Overlay Card",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/overlay_card.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/overlay_card.c",
      "page": "gallery/features/features_overlay_card.md",
      "summary": "This example places a screen-space readout card above a simple data trace.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/overlay_card",
      "smoke_command": "./build/examples/c/features/overlay_card --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_overlay_card.png",
          "site_asset": "/assets/gallery/v0.4/features/features_overlay_card.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "overlay",
        "text",
        "primitive"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_overlay_card",
        "requirements": [
          "overlay",
          "text",
          "primitive"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_overlay_card",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_overlay_card",
      "primary_feature": "overlay-card",
      "python_source": "examples/python/gallery/features/overlay_card.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/overlay_card.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_controller_arcball",
      "title": "Arcball Controller",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/controller_arcball.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/controller_arcball.c",
      "page": "gallery/features/features_controller_arcball.md",
      "summary": "This example shows an arcball controller rotating a 3D view.",
      "validation": "smoke+interaction+screenshot",
      "build_command": "just example-c features/controller_arcball",
      "smoke_command": "./build/examples/c/features/controller_arcball --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_controller_arcball.png",
          "site_asset": "/assets/gallery/v0.4/features/features_controller_arcball.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "controller",
        "arcball",
        "mesh"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_controller_arcball",
        "requirements": [
          "controller",
          "arcball",
          "mesh"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_controller_arcball",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_controller_arcball",
      "primary_feature": "controller-arcball",
      "python_source": "examples/python/gallery/features/controller_arcball.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/controller_arcball.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_camera_manual",
      "title": "Manual Camera",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/camera_manual.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/camera_manual.c",
      "page": "gallery/features/features_camera_manual.md",
      "summary": "This example shows explicit perspective-camera setup for a 3D scene.",
      "validation": "smoke+interaction+screenshot",
      "build_command": "just example-c features/camera_manual",
      "smoke_command": "./build/examples/c/features/camera_manual --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_camera_manual.png",
          "site_asset": "/assets/gallery/v0.4/features/features_camera_manual.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "camera",
        "mesh",
        "controller",
        "arcball"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_camera_manual",
        "requirements": [
          "camera",
          "mesh",
          "controller",
          "arcball"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_camera_manual",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_camera_manual",
      "primary_feature": "camera-manual",
      "python_source": "examples/python/gallery/features/camera_manual.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/camera_manual.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_orientation_gizmo",
      "title": "Orientation Gizmo",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/orientation_gizmo.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/orientation_gizmo.c",
      "page": "gallery/features/features_orientation_gizmo.md",
      "summary": "This example adds a small orientation widget to a 3D panel.",
      "validation": "smoke+interaction+screenshot",
      "build_command": "just example-c features/orientation_gizmo",
      "smoke_command": "./build/examples/c/features/orientation_gizmo --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_orientation_gizmo.png",
          "site_asset": "/assets/gallery/v0.4/features/features_orientation_gizmo.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "orientation-gizmo",
        "overlay",
        "mesh",
        "controller"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_orientation_gizmo",
        "requirements": [
          "orientation-gizmo",
          "overlay",
          "mesh",
          "controller"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_orientation_gizmo",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_orientation_gizmo",
      "primary_feature": "orientation-gizmo",
      "python_source": "examples/python/gallery/features/orientation_gizmo.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/orientation_gizmo.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_reference_grid",
      "title": "Reference Grid",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/reference_grid.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/reference_grid.c",
      "page": "gallery/features/features_reference_grid.md",
      "summary": "This example adds a ground-plane reference grid to a 3D scene.",
      "validation": "smoke+interaction+screenshot",
      "build_command": "just example-c features/reference_grid",
      "smoke_command": "./build/examples/c/features/reference_grid --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_reference_grid.png",
          "site_asset": "/assets/gallery/v0.4/features/features_reference_grid.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "reference-grid",
        "segment",
        "controller"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_reference_grid",
        "requirements": [
          "reference-grid",
          "segment",
          "controller"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_reference_grid",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_reference_grid",
      "primary_feature": "reference-grid",
      "python_source": "examples/python/gallery/features/reference_grid.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/reference_grid.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_bounds_overlay",
      "title": "Bounds Overlay",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "diagnostic",
      "source": "examples/c/features/bounds_overlay.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/bounds_overlay.c",
      "page": "gallery/features/features_bounds_overlay.md",
      "summary": "This example shows diagnostic bounds overlays for 2D and 3D visuals.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/bounds_overlay",
      "smoke_command": "./build/examples/c/features/bounds_overlay --png",
      "tags": [
        "diagnostic",
        "bounds",
        "overlay",
        "point",
        "sphere"
      ],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_bounds_overlay.png",
          "site_asset": "/assets/gallery/v0.4/features/features_bounds_overlay.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "bounds-overlay",
        "point",
        "sphere",
        "overlay"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_bounds_overlay",
        "requirements": [
          "bounds-overlay",
          "point",
          "sphere",
          "overlay"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_bounds_overlay",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_bounds_overlay",
      "primary_feature": "bounds-overlay",
      "python_source": "examples/python/gallery/features/bounds_overlay.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/bounds_overlay.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_controller_fly",
      "title": "Fly Controller",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/controller_fly.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/controller_fly.c",
      "page": "gallery/features/features_controller_fly.md",
      "summary": "This example shows fly-style camera navigation through a 3D scene.",
      "validation": "smoke+interaction+screenshot",
      "build_command": "just example-c features/controller_fly",
      "smoke_command": "./build/examples/c/features/controller_fly --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_controller_fly.png",
          "site_asset": "/assets/gallery/v0.4/features/features_controller_fly.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "controller",
        "fly",
        "mesh"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_controller_fly",
        "requirements": [
          "controller",
          "fly",
          "mesh"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_controller_fly",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_controller_fly",
      "primary_feature": "controller-fly",
      "python_source": "examples/python/gallery/features/controller_fly.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/controller_fly.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_controller_turntable",
      "title": "Turntable Controller",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/controller_turntable.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/controller_turntable.c",
      "page": "gallery/features/features_controller_turntable.md",
      "summary": "This example shows world-up orbiting with a turntable controller.",
      "validation": "smoke+interaction+screenshot",
      "build_command": "just example-c features/controller_turntable",
      "smoke_command": "./build/examples/c/features/controller_turntable --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_controller_turntable.png",
          "site_asset": "/assets/gallery/v0.4/features/features_controller_turntable.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "controller",
        "turntable",
        "mesh"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_controller_turntable",
        "requirements": [
          "controller",
          "turntable",
          "mesh"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_controller_turntable",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_controller_turntable",
      "primary_feature": "controller-turntable",
      "python_source": "examples/python/gallery/features/controller_turntable.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/controller_turntable.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_mesh_texture",
      "title": "Textured Mesh",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/mesh_texture.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/mesh_texture.c",
      "page": "gallery/features/features_mesh_texture.md",
      "summary": "This example maps an RGBA8 sampled field onto a UV sphere mesh.",
      "validation": "smoke+interaction+screenshot",
      "build_command": "just example-c features/mesh_texture",
      "smoke_command": "./build/examples/c/features/mesh_texture --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_mesh_texture.png",
          "site_asset": "/assets/gallery/v0.4/features/features_mesh_texture.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "mesh",
        "sampled-field",
        "texture",
        "arcball",
        "material"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_mesh_texture",
        "requirements": [
          "mesh",
          "sampled-field",
          "texture",
          "arcball",
          "material"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_mesh_texture",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_mesh_texture",
      "primary_feature": "mesh-texture",
      "python_source": "examples/python/gallery/features/mesh_texture.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/mesh_texture.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_material_mesh",
      "title": "Mesh Materials",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/material_mesh.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/material_mesh.c",
      "page": "gallery/features/features_material_mesh.md",
      "summary": "This example compares cube meshes rendered with different material models and parameters.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/material_mesh",
      "smoke_command": "./build/examples/c/features/material_mesh --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_material_mesh.png",
          "site_asset": "/assets/gallery/v0.4/features/features_material_mesh.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "mesh",
        "material",
        "lighting",
        "arcball"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_material_mesh",
        "requirements": [
          "mesh",
          "material",
          "lighting",
          "arcball"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_material_mesh",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_material_mesh",
      "primary_feature": "material-mesh",
      "python_source": "examples/python/gallery/features/material_mesh.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/material_mesh.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_lighting",
      "title": "Lighting",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/lighting.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/lighting.c",
      "page": "gallery/features/features_lighting.md",
      "summary": "This example compares the same sphere cluster under three material and light configurations.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/lighting",
      "smoke_command": "./build/examples/c/features/lighting --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_lighting.png",
          "site_asset": "/assets/gallery/v0.4/features/features_lighting.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "sphere",
        "material",
        "lighting",
        "arcball"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_lighting",
        "requirements": [
          "sphere",
          "material",
          "lighting",
          "arcball"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_lighting",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_lighting",
      "primary_feature": "lighting",
      "python_source": "examples/python/gallery/features/lighting.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/lighting.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_user_scale",
      "title": "User Scale",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/user_scale.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/user_scale.c",
      "page": "gallery/features/features_user_scale.md",
      "summary": "This example shows how one user-scale value affects screen-space visual sizes and axes.",
      "validation": "smoke+interaction+screenshot",
      "build_command": "just example-c features/user_scale",
      "smoke_command": "./build/examples/c/features/user_scale --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_user_scale.png",
          "site_asset": "/assets/gallery/v0.4/features/features_user_scale.webp"
        }
      },
      "webgpu_status": "native-only",
      "webgpu_status_label": "Native only",
      "webgpu_requirements": [
        "marker",
        "panzoom",
        "path",
        "gui"
      ],
      "webgpu_reason": "the user-scale control is a native ImGui slider on a Datoviz app view",
      "webgpu": {
        "status": "native-only",
        "requirements": [
          "marker",
          "panzoom",
          "path",
          "gui"
        ],
        "reason": "the user-scale control is a native ImGui slider on a Datoviz app view"
      },
      "primary_feature": "user-scale",
      "python_source": "examples/python/gallery/features/user_scale.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/user_scale.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_gui_controls",
      "title": "GUI Controls",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/gui_controls.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/gui_controls.c",
      "page": "gallery/features/features_gui_controls.md",
      "summary": "This example shows Datoviz GUI controls updating a point visual.",
      "validation": "smoke+interaction+screenshot",
      "build_command": "just example-c features/gui_controls",
      "smoke_command": "./build/examples/c/features/gui_controls --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_gui_controls.png",
          "site_asset": "/assets/gallery/v0.4/features/features_gui_controls.webp"
        }
      },
      "webgpu_status": "native-only",
      "webgpu_status_label": "Native only",
      "webgpu_requirements": [
        "gui"
      ],
      "webgpu_reason": "Datoviz GUI controls require the native ImGui/GLFW app path",
      "webgpu": {
        "status": "native-only",
        "requirements": [
          "gui"
        ],
        "reason": "Datoviz GUI controls require the native ImGui/GLFW app path"
      },
      "primary_feature": "gui-controls",
      "python_source": "examples/python/gallery/features/gui_controls.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/gui_controls.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_gui_viewport",
      "title": "GUI Viewport",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/gui_viewport.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/gui_viewport.c",
      "page": "gallery/features/features_gui_viewport.md",
      "summary": "This example shows a Datoviz render viewport embedded inside a GUI window.",
      "validation": "smoke+interaction+screenshot",
      "build_command": "just example-c features/gui_viewport",
      "smoke_command": "./build/examples/c/features/gui_viewport --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_gui_viewport.png",
          "site_asset": "/assets/gallery/v0.4/features/features_gui_viewport.webp"
        }
      },
      "webgpu_status": "native-only",
      "webgpu_status_label": "Native only",
      "webgpu_requirements": [
        "gui",
        "native-view"
      ],
      "webgpu_reason": "dockable GUI viewports require native ImGui and an offscreen native source view",
      "webgpu": {
        "status": "native-only",
        "requirements": [
          "gui",
          "native-view"
        ],
        "reason": "dockable GUI viewports require native ImGui and an offscreen native source view"
      },
      "primary_feature": "gui-viewport",
      "python_source": "examples/python/gallery/features/gui_viewport.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/gui_viewport.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_gui_cimgui",
      "title": "Raw cimgui GUI",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/gui_cimgui.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/gui_cimgui.c",
      "page": "gallery/features/features_gui_cimgui.md",
      "summary": "This example shows raw cimgui widgets controlling a Datoviz visual.",
      "validation": "smoke+interaction+screenshot",
      "build_command": "just example-c features/gui_cimgui",
      "smoke_command": "./build/examples/c/features/gui_cimgui --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_gui_cimgui.png",
          "site_asset": "/assets/gallery/v0.4/features/features_gui_cimgui.webp"
        }
      },
      "webgpu_status": "native-only",
      "webgpu_status_label": "Native only",
      "webgpu_requirements": [
        "gui"
      ],
      "webgpu_reason": "raw cimgui access requires the native ImGui app path",
      "webgpu": {
        "status": "native-only",
        "requirements": [
          "gui"
        ],
        "reason": "raw cimgui access requires the native ImGui app path"
      },
      "primary_feature": "gui-cimgui",
      "python_source": "examples/python/gallery/features/gui_cimgui.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/gui_cimgui.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_animation_tracks",
      "title": "Animation Tracks",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/animation_tracks.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/animation_tracks.c",
      "page": "gallery/features/features_animation_tracks.md",
      "summary": "This example shows scene animation tracks driving a cube and camera.",
      "validation": "smoke+interaction+screenshot",
      "build_command": "just example-c features/animation_tracks",
      "smoke_command": "./build/examples/c/features/animation_tracks --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_animation_tracks.png",
          "site_asset": "/assets/gallery/v0.4/features/features_animation_tracks.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "mesh",
        "frame-callbacks",
        "controller",
        "arcball"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_animation_tracks",
        "requirements": [
          "mesh",
          "frame-callbacks",
          "controller",
          "arcball"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_animation_tracks",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_animation_tracks",
      "primary_feature": "animation-tracks",
      "python_source": "examples/python/gallery/features/animation_tracks.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/animation_tracks.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_compute_buffer_animation",
      "title": "Compute Buffer Animation",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_experimental",
      "status": "experimental",
      "source": "examples/c/features/compute_buffer_animation.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/compute_buffer_animation.c",
      "page": "gallery/features/features_compute_buffer_animation.md",
      "summary": "This example shows a compute pass updating point positions.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/compute_buffer_animation",
      "smoke_command": "./build/examples/c/features/compute_buffer_animation --png",
      "tags": [
        "scene-compute",
        "storage-buffer",
        "point"
      ],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_compute_buffer_animation.png",
          "site_asset": "/assets/gallery/v0.4/features/features_compute_buffer_animation.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "scene-buffers",
        "storage-buffers",
        "scene-compute",
        "continuous-frames",
        "point"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_compute_buffer_animation",
        "requirements": [
          "scene-buffers",
          "storage-buffers",
          "scene-compute",
          "continuous-frames",
          "point"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_compute_buffer_animation",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_compute_buffer_animation",
      "primary_feature": "scene-compute-buffer"
    },
    {
      "id": "features_technique_edl",
      "title": "Eye-Dome Lighting",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_experimental",
      "status": "experimental",
      "source": "examples/c/features/technique_edl.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/technique_edl.c",
      "page": "gallery/features/features_technique_edl.md",
      "summary": "This example compares a dense 3D point cloud with and without Eye-Dome Lighting.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/technique_edl",
      "smoke_command": "./build/examples/c/features/technique_edl --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_technique_edl.png",
          "site_asset": "/assets/gallery/v0.4/features/features_technique_edl.webp"
        }
      },
      "webgpu_status": "webgpu-deferred",
      "webgpu_status_label": "Deferred",
      "webgpu_requirements": [
        "depth-postprocess"
      ],
      "webgpu": {
        "status": "webgpu-deferred",
        "requirements": [
          "depth-postprocess"
        ]
      },
      "primary_feature": "edl"
    },
    {
      "id": "features_technique_ssao",
      "title": "Screen-Space Ambient Occlusion",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/technique_ssao.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/technique_ssao.c",
      "page": "gallery/features/features_technique_ssao.md",
      "summary": "This example compares a synthetic molecular aggregate with and without ambient occlusion.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/technique_ssao",
      "smoke_command": "./build/examples/c/features/technique_ssao --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_technique_ssao.png",
          "site_asset": "/assets/gallery/v0.4/features/features_technique_ssao.webp"
        }
      },
      "webgpu_status": "webgpu-deferred",
      "webgpu_status_label": "Deferred",
      "webgpu_requirements": [
        "gbuffer",
        "depth-postprocess"
      ],
      "webgpu": {
        "status": "webgpu-deferred",
        "requirements": [
          "gbuffer",
          "depth-postprocess"
        ]
      },
      "primary_feature": "ssao",
      "python_source": "examples/python/gallery/features/technique_ssao.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/technique_ssao.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_technique_msaa",
      "title": "Multisample Antialiasing",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/technique_msaa.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/technique_msaa.c",
      "page": "gallery/features/features_technique_msaa.md",
      "summary": "This example compares single-sample rendering with 8x multisample antialiasing.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/technique_msaa",
      "smoke_command": "./build/examples/c/features/technique_msaa --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_technique_msaa.png",
          "site_asset": "/assets/gallery/v0.4/features/features_technique_msaa.webp"
        }
      },
      "webgpu_status": "webgpu-deferred",
      "webgpu_status_label": "Deferred",
      "webgpu_requirements": [
        "multisample"
      ],
      "webgpu": {
        "status": "webgpu-deferred",
        "requirements": [
          "multisample"
        ]
      },
      "primary_feature": "msaa",
      "python_source": "examples/python/gallery/features/technique_msaa.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/technique_msaa.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_technique_depth_cue",
      "title": "Depth Cue",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/technique_depth_cue.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/technique_depth_cue.c",
      "page": "gallery/features/features_technique_depth_cue.md",
      "summary": "This example compares a plain 3D sphere lattice with depth-dependent fading.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/technique_depth_cue",
      "smoke_command": "./build/examples/c/features/technique_depth_cue --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_technique_depth_cue.png",
          "site_asset": "/assets/gallery/v0.4/features/features_technique_depth_cue.webp"
        }
      },
      "webgpu_status": "webgpu-deferred",
      "webgpu_status_label": "Deferred",
      "webgpu_requirements": [
        "depth-cue"
      ],
      "webgpu": {
        "status": "webgpu-deferred",
        "requirements": [
          "depth-cue"
        ]
      },
      "primary_feature": "depth-cue",
      "python_source": "examples/python/gallery/features/technique_depth_cue.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/technique_depth_cue.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_technique_transparency",
      "title": "Transparency Order",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/technique_transparency.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/technique_transparency.c",
      "page": "gallery/features/features_technique_transparency.md",
      "summary": "This example compares three transparency techniques on the same overlapping cubes.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/technique_transparency",
      "smoke_command": "./build/examples/c/features/technique_transparency --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_technique_transparency.png",
          "site_asset": "/assets/gallery/v0.4/features/features_technique_transparency.webp"
        }
      },
      "webgpu_status": "webgpu-deferred",
      "webgpu_status_label": "Deferred",
      "webgpu_requirements": [
        "wboit",
        "depth-peeling"
      ],
      "webgpu": {
        "status": "webgpu-deferred",
        "requirements": [
          "wboit",
          "depth-peeling"
        ]
      },
      "primary_feature": "transparency-order",
      "python_source": "examples/python/gallery/features/technique_transparency.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/technique_transparency.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_guide_lines",
      "title": "Guide Lines",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/guide_lines.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/guide_lines.c",
      "page": "gallery/features/features_guide_lines.md",
      "summary": "This example shows movable horizontal and vertical guide lines.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/guide_lines",
      "smoke_command": "./build/examples/c/features/guide_lines --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_guide_lines.png",
          "site_asset": "/assets/gallery/v0.4/features/features_guide_lines.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "segment",
        "overlay",
        "panzoom"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_guide_lines",
        "requirements": [
          "segment",
          "overlay",
          "panzoom"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_guide_lines",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_guide_lines",
      "primary_feature": "guide-lines",
      "python_source": "examples/python/gallery/features/guide_lines.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/guide_lines.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_guide_spans",
      "title": "Guide Spans",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/guide_spans.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/guide_spans.c",
      "page": "gallery/features/features_guide_spans.md",
      "summary": "This example shows movable guide spans for highlighting data ranges.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/guide_spans",
      "smoke_command": "./build/examples/c/features/guide_spans --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_guide_spans.png",
          "site_asset": "/assets/gallery/v0.4/features/features_guide_spans.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "primitive",
        "overlay",
        "panzoom"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_guide_spans",
        "requirements": [
          "primitive",
          "overlay",
          "panzoom"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_guide_spans",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_guide_spans",
      "primary_feature": "guide-spans",
      "python_source": "examples/python/gallery/features/guide_spans.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/guide_spans.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_bars_bands",
      "title": "Bars And Bands",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/bars_bands.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/bars_bands.c",
      "page": "gallery/features/features_bars_bands.md",
      "summary": "This example shows bars and an uncertainty band in one 2D panel.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/bars_bands",
      "smoke_command": "./build/examples/c/features/bars_bands --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_bars_bands.png",
          "site_asset": "/assets/gallery/v0.4/features/features_bars_bands.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "primitive",
        "segment",
        "axes",
        "panzoom"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_bars_bands",
        "requirements": [
          "primitive",
          "segment",
          "axes",
          "panzoom"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_bars_bands",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_bars_bands",
      "primary_feature": "bars-bands",
      "python_source": "examples/python/gallery/features/bars_bands.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/bars_bands.py",
      "python_status": "direct-engine"
    },
    {
      "id": "runtime_app_glfw",
      "title": "GLFW App",
      "category": "runtime",
      "lane": "runtime",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/runtime/app_glfw.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/runtime/app_glfw.c",
      "page": "gallery/runtime/runtime_app_glfw.md",
      "summary": "This example opens a native GLFW window for a small point scene.",
      "validation": "smoke+interaction",
      "build_command": "just example-c runtime/app_glfw",
      "smoke_command": "./build/examples/c/runtime/app_glfw --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": false,
          "status": "not-required",
          "source": "data/gallery/v0.4/runtime/runtime_app_glfw.png",
          "site_asset": "/assets/gallery/v0.4/runtime/runtime_app_glfw.webp"
        }
      },
      "webgpu_status": "native-only",
      "webgpu_status_label": "Native only",
      "webgpu_requirements": [
        "native-view"
      ],
      "webgpu_reason": "direct GLFW app lifecycle is native-only",
      "webgpu": {
        "status": "native-only",
        "requirements": [
          "native-view"
        ],
        "reason": "direct GLFW app lifecycle is native-only"
      },
      "primary_runtime": "app-glfw",
      "python_source": "examples/python/gallery/runtime/app_glfw.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/runtime/app_glfw.py",
      "python_status": "direct-engine"
    },
    {
      "id": "runtime_multi_window",
      "title": "Multi Window",
      "category": "runtime",
      "lane": "runtime",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/runtime/multi_window.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/runtime/multi_window.c",
      "page": "gallery/runtime/runtime_multi_window.md",
      "summary": "This example drives two independent native GLFW windows from one Datoviz app.",
      "validation": "smoke+interaction",
      "build_command": "just example-c runtime/multi_window",
      "smoke_command": "./build/examples/c/runtime/multi_window --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": false,
          "status": "not-required",
          "source": "data/gallery/v0.4/runtime/runtime_multi_window.png",
          "site_asset": "/assets/gallery/v0.4/runtime/runtime_multi_window.webp"
        }
      },
      "webgpu_status": "native-only",
      "webgpu_status_label": "Native only",
      "webgpu_requirements": [
        "native-view",
        "multi-window"
      ],
      "webgpu_reason": "multiple native GLFW windows are native-only",
      "webgpu": {
        "status": "native-only",
        "requirements": [
          "native-view",
          "multi-window"
        ],
        "reason": "multiple native GLFW windows are native-only"
      },
      "primary_runtime": "multi-window",
      "python_source": "examples/python/gallery/runtime/multi_window.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/runtime/multi_window.py",
      "python_status": "direct-engine"
    },
    {
      "id": "runtime_offscreen_capture",
      "title": "Offscreen Capture",
      "category": "runtime",
      "lane": "runtime",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/runtime/offscreen_capture.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/runtime/offscreen_capture.c",
      "page": "gallery/runtime/runtime_offscreen_capture.md",
      "summary": "This example renders a point scene offscreen and writes one PNG.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c runtime/offscreen_capture",
      "smoke_command": "./build/examples/c/runtime/offscreen_capture --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/runtime/runtime_offscreen_capture.png",
          "site_asset": "/assets/gallery/v0.4/runtime/runtime_offscreen_capture.webp"
        }
      },
      "webgpu_status": "native-only",
      "webgpu_status_label": "Native only",
      "webgpu_requirements": [
        "native-capture"
      ],
      "webgpu_reason": "writes a native offscreen PNG through the app capture path",
      "webgpu": {
        "status": "native-only",
        "requirements": [
          "native-capture"
        ],
        "reason": "writes a native offscreen PNG through the app capture path"
      },
      "primary_runtime": "offscreen-capture",
      "python_source": "examples/python/gallery/runtime/offscreen_capture.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/runtime/offscreen_capture.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_input_events",
      "title": "Input Events",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/input_events.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/input_events.c",
      "page": "gallery/features/features_input_events.md",
      "summary": "This example shows native keyboard, pointer, wheel, and resize events.",
      "validation": "smoke+interaction",
      "build_command": "just example-c features/input_events",
      "smoke_command": "./build/examples/c/features/input_events --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": false,
          "status": "not-required",
          "source": "data/gallery/v0.4/features/features_input_events.png",
          "site_asset": "/assets/gallery/v0.4/features/features_input_events.webp"
        }
      },
      "webgpu_status": "native-only",
      "webgpu_status_label": "Native only",
      "webgpu_requirements": [
        "native-view",
        "input-events"
      ],
      "webgpu_reason": "demonstrates native hosted event injection APIs",
      "webgpu": {
        "status": "native-only",
        "requirements": [
          "native-view",
          "input-events"
        ],
        "reason": "demonstrates native hosted event injection APIs"
      },
      "primary_feature": "input-events",
      "python_source": "examples/python/gallery/features/input_events.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/input_events.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_view_size_policies",
      "title": "View Size Policies",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/view_size_policies.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/view_size_policies.c",
      "page": "gallery/features/features_view_size_policies.md",
      "summary": "This example demonstrates how requested view size policies resolve to real view sizes.",
      "validation": "smoke+interaction",
      "build_command": "just example-c features/view_size_policies",
      "smoke_command": "./build/examples/c/features/view_size_policies --png",
      "tags": [
        "view-size",
        "framebuffer",
        "window"
      ],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": false,
          "status": "not-required",
          "source": "data/gallery/v0.4/features/features_view_size_policies.png",
          "site_asset": "/assets/gallery/v0.4/features/features_view_size_policies.webp"
        }
      },
      "webgpu_status": "native-only",
      "webgpu_status_label": "Native only",
      "webgpu_requirements": [
        "native-view",
        "view-size-policy"
      ],
      "webgpu_reason": "demonstrates native window, framebuffer, and physical-size policies",
      "webgpu": {
        "status": "native-only",
        "requirements": [
          "native-view",
          "view-size-policy"
        ],
        "reason": "demonstrates native window, framebuffer, and physical-size policies"
      },
      "primary_feature": "view-size-policy",
      "python_source": "examples/python/gallery/features/view_size_policies.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/view_size_policies.py",
      "python_status": "direct-engine"
    },
    {
      "id": "runtime_record_replay",
      "title": "Record Replay",
      "category": "runtime",
      "lane": "runtime",
      "stage": "v0.4_experimental",
      "status": "experimental",
      "source": "examples/c/runtime/record_replay.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/runtime/record_replay.c",
      "page": "gallery/runtime/runtime_record_replay.md",
      "summary": "This example records the DRP2 frame stream from an offscreen view and replays it",
      "validation": "smoke+capture",
      "build_command": "just example-c runtime/record_replay",
      "smoke_command": "./build/examples/c/runtime/record_replay --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": false,
          "status": "not-required",
          "source": "data/gallery/v0.4/runtime/runtime_record_replay.png",
          "site_asset": "/assets/gallery/v0.4/runtime/runtime_record_replay.webp"
        }
      },
      "webgpu_status": "native-only",
      "webgpu_status_label": "Native only",
      "webgpu_requirements": [
        "native-capture"
      ],
      "webgpu_reason": "DVZR app recording and replay use native runtime capture plumbing",
      "webgpu": {
        "status": "native-only",
        "requirements": [
          "native-capture"
        ],
        "reason": "DVZR app recording and replay use native runtime capture plumbing"
      },
      "primary_runtime": "record-replay"
    },
    {
      "id": "features_visual_transform",
      "title": "Visual Transform",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/visual_transform.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/visual_transform.c",
      "page": "gallery/features/features_visual_transform.md",
      "summary": "This example compares raw point data with a visual-local affine transform.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/visual_transform",
      "smoke_command": "./build/examples/c/features/visual_transform --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_visual_transform.png",
          "site_asset": "/assets/gallery/v0.4/features/features_visual_transform.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "visual-transform",
        "point",
        "panzoom"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_visual_transform",
        "requirements": [
          "visual-transform",
          "point",
          "panzoom"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_visual_transform",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_visual_transform",
      "primary_feature": "visual-transform",
      "python_source": "examples/python/gallery/features/visual_transform.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/visual_transform.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_panel_view2d",
      "title": "Panel View 2D",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/panel_view2d.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/panel_view2d.c",
      "page": "gallery/features/features_panel_view2d.md",
      "summary": "This example animates the widths of free and equal-aspect 2D panels.",
      "validation": "smoke+animation+screenshot",
      "build_command": "just example-c features/panel_view2d",
      "smoke_command": "./build/examples/c/features/panel_view2d --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_panel_view2d.png",
          "site_asset": "/assets/gallery/v0.4/features/features_panel_view2d.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "panel-view",
        "panzoom",
        "point"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_panel_view2d",
        "requirements": [
          "panel-view",
          "panzoom",
          "point"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_panel_view2d",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_panel_view2d",
      "primary_feature": "panel-view2d",
      "python_source": "examples/python/gallery/features/panel_view2d.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/panel_view2d.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_json_export",
      "title": "JSON Export",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_experimental",
      "status": "experimental",
      "source": "examples/c/features/json_export.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/json_export.c",
      "page": "gallery/features/features_json_export.md",
      "summary": "This example writes a scene to a compact JSON diagnostic file.",
      "validation": "smoke+stdout",
      "build_command": "just example-c features/json_export",
      "smoke_command": "./build/examples/c/features/json_export --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": false,
          "status": "not-required",
          "source": "data/gallery/v0.4/features/features_json_export.png",
          "site_asset": "/assets/gallery/v0.4/features/features_json_export.webp"
        }
      },
      "webgpu_status": "native-only",
      "webgpu_status_label": "Native only",
      "webgpu_requirements": [
        "diagnostics"
      ],
      "webgpu_reason": "scene JSON is a native diagnostic/fixture surface, not a live browser route",
      "webgpu": {
        "status": "native-only",
        "requirements": [
          "diagnostics"
        ],
        "reason": "scene JSON is a native diagnostic/fixture surface, not a live browser route"
      },
      "primary_feature": "json-export"
    },
    {
      "id": "features_bezier_curve_path",
      "title": "Bezier Curve Path",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/bezier_curve_path.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/bezier_curve_path.c",
      "page": "gallery/features/features_bezier_curve_path.md",
      "summary": "This example shows a cubic Bezier curve tessellated into a path.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/bezier_curve_path",
      "smoke_command": "./build/examples/c/features/bezier_curve_path --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_bezier_curve_path.png",
          "site_asset": "/assets/gallery/v0.4/features/features_bezier_curve_path.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "path",
        "segment",
        "marker"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_bezier_curve_path",
        "requirements": [
          "path",
          "segment",
          "marker"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_bezier_curve_path",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_bezier_curve_path",
      "primary_feature": "bezier-curve-path",
      "python_source": "examples/python/gallery/features/bezier_curve_path.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/bezier_curve_path.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_path_join",
      "title": "Path Join",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/path_join.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/path_join.c",
      "page": "gallery/features/features_path_join.md",
      "summary": "This example compares miter, round, and bevel joins on difficult stroked paths.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/path_join",
      "smoke_command": "./build/examples/c/features/path_join --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_path_join.png",
          "site_asset": "/assets/gallery/v0.4/features/features_path_join.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "path"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_path_join",
        "requirements": [
          "path"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_path_join",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_path_join",
      "primary_feature": "path-join",
      "python_source": "examples/python/gallery/features/path_join.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/path_join.py",
      "python_status": "direct-engine"
    },
    {
      "id": "showcases_panel_linked_axes",
      "title": "Linked Panels With Axes",
      "category": "showcase",
      "lane": "showcases",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/showcases/panel_linked_axes.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/showcases/panel_linked_axes.c",
      "page": "gallery/showcases/showcases_panel_linked_axes.md",
      "summary": "This example builds linked time-series panels with shared axes behavior.",
      "validation": "smoke+interaction+screenshot",
      "build_command": "just example-c showcases/panel_linked_axes",
      "smoke_command": "./build/examples/c/showcases/panel_linked_axes --png",
      "tags": [
        "workflow",
        "linked-panels",
        "axes",
        "panzoom",
        "synthetic"
      ],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/showcases/showcases_panel_linked_axes.png",
          "site_asset": "/assets/gallery/v0.4/showcases/showcases_panel_linked_axes.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "panel-grid",
        "linked-panels",
        "axes",
        "panzoom",
        "path"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=showcases_panel_linked_axes",
        "requirements": [
          "panel-grid",
          "linked-panels",
          "axes",
          "panzoom",
          "path"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=showcases_panel_linked_axes",
      "webgpu_site_route": "/examples/webgpu/live.html?id=showcases_panel_linked_axes",
      "python_source": "examples/python/gallery/showcases/panel_linked_axes.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/showcases/panel_linked_axes.py",
      "python_status": "direct-engine"
    },
    {
      "id": "showcases_linked_probe_colorbar",
      "title": "Linked Probe With Colorbar",
      "category": "showcase",
      "lane": "showcases",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/showcases/linked_probe_colorbar.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/showcases/linked_probe_colorbar.c",
      "page": "gallery/showcases/showcases_linked_probe_colorbar.md",
      "summary": "This example links two image panels with a probe readout and colorbar.",
      "validation": "smoke+readback+interaction+screenshot",
      "build_command": "just example-c showcases/linked_probe_colorbar",
      "smoke_command": "./build/examples/c/showcases/linked_probe_colorbar --png",
      "tags": [
        "workflow",
        "image",
        "sampled-field",
        "pixel-query",
        "linked-panzoom",
        "colorbar",
        "readout"
      ],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/showcases/showcases_linked_probe_colorbar.png",
          "site_asset": "/assets/gallery/v0.4/showcases/showcases_linked_probe_colorbar.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "panel-grid",
        "linked-panels",
        "image",
        "colorbar",
        "query-readback",
        "readout"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=showcases_linked_probe_colorbar",
        "requirements": [
          "panel-grid",
          "linked-panels",
          "image",
          "colorbar",
          "query-readback",
          "readout"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=showcases_linked_probe_colorbar",
      "webgpu_site_route": "/examples/webgpu/live.html?id=showcases_linked_probe_colorbar",
      "python_source": "examples/python/gallery/showcases/linked_probe_colorbar.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/showcases/linked_probe_colorbar.py",
      "python_status": "direct-engine"
    },
    {
      "id": "showcases_scientific_plotting",
      "title": "Scientific Plotting Workflow",
      "category": "showcase",
      "lane": "showcases",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/showcases/scientific_plotting.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/showcases/scientific_plotting.c",
      "page": "gallery/showcases/showcases_scientific_plotting.md",
      "summary": "This example composes common scientific plot elements in one figure.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c showcases/scientific_plotting",
      "smoke_command": "./build/examples/c/showcases/scientific_plotting --png",
      "tags": [
        "workflow",
        "scientific",
        "histogram",
        "guide-lines",
        "guide-spans",
        "stacked-traces",
        "uncertainty-band"
      ],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/showcases/showcases_scientific_plotting.png",
          "site_asset": "/assets/gallery/v0.4/showcases/showcases_scientific_plotting.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "axes",
        "primitive",
        "segment",
        "path",
        "text",
        "panzoom"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=showcases_scientific_plotting",
        "requirements": [
          "axes",
          "primitive",
          "segment",
          "path",
          "text",
          "panzoom"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=showcases_scientific_plotting",
      "webgpu_site_route": "/examples/webgpu/live.html?id=showcases_scientific_plotting",
      "python_source": "examples/python/gallery/showcases/scientific_plotting.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/showcases/scientific_plotting.py"
    },
    {
      "id": "showcases_streaming_daq",
      "title": "Streaming DAQ \u00b7 64 channels",
      "category": "showcase",
      "lane": "showcases",
      "stage": "v0.4_experimental",
      "status": "experimental",
      "source": "examples/c/showcases/streaming_daq.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/showcases/streaming_daq.c",
      "page": "gallery/showcases/showcases_streaming_daq.md",
      "summary": "This example renders a simulated real-time data acquisition system.",
      "validation": "smoke+interaction+screenshot+video+performance",
      "build_command": "just example-c showcases/streaming_daq",
      "smoke_command": "./build/examples/c/showcases/streaming_daq --png",
      "tags": [
        "workflow",
        "simulated",
        "daq",
        "streaming",
        "time-series",
        "ring-buffer",
        "partial-updates",
        "gui",
        "panzoom",
        "performance"
      ],
      "data": {
        "kind": "simulated"
      },
      "data_kind": "simulated",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/showcases/showcases_streaming_daq.png",
          "site_asset": "/assets/gallery/v0.4/showcases/showcases_streaming_daq.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "primitive",
        "axes",
        "panzoom",
        "buffer-update",
        "frame-callbacks",
        "continuous-frames"
      ],
      "webgpu_reason": "the browser scenario uses the shared deterministic acquisition model while the native live route additionally enables its producer thread and ImGui controls",
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=showcases_streaming_daq",
        "requirements": [
          "primitive",
          "axes",
          "panzoom",
          "buffer-update",
          "frame-callbacks",
          "continuous-frames"
        ],
        "reason": "the browser scenario uses the shared deterministic acquisition model while the native live route additionally enables its producer thread and ImGui controls"
      },
      "webgpu_route": "examples/webgpu/live.html?id=showcases_streaming_daq",
      "webgpu_site_route": "/examples/webgpu/live.html?id=showcases_streaming_daq",
      "python_source": "examples/python/gallery/showcases/streaming_daq.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/showcases/streaming_daq.py"
    },
    {
      "id": "features_scalebar",
      "title": "Scale Bar",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/scalebar.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/scalebar.c",
      "page": "gallery/features/features_scalebar.md",
      "summary": "This example attaches a metric length scale bar to a 2D panel.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/scalebar",
      "smoke_command": "./build/examples/c/features/scalebar --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_scalebar.png",
          "site_asset": "/assets/gallery/v0.4/features/features_scalebar.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "scale-bar",
        "text",
        "panzoom"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_scalebar",
        "requirements": [
          "scale-bar",
          "text",
          "panzoom"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_scalebar",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_scalebar",
      "primary_feature": "scale-bar",
      "python_source": "examples/python/gallery/features/scalebar.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/scalebar.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_scalebar_units",
      "title": "Scale Bar Units",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/scalebar_units.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/scalebar_units.c",
      "page": "gallery/features/features_scalebar_units.md",
      "summary": "This example uses duration units for a scale bar on a time-series panel.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/scalebar_units",
      "smoke_command": "./build/examples/c/features/scalebar_units --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_scalebar_units.png",
          "site_asset": "/assets/gallery/v0.4/features/features_scalebar_units.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "scale-bar",
        "text",
        "panzoom"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_scalebar_units",
        "requirements": [
          "scale-bar",
          "text",
          "panzoom"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_scalebar_units",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_scalebar_units",
      "primary_feature": "scalebar-units",
      "python_source": "examples/python/gallery/features/scalebar_units.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/scalebar_units.py",
      "python_status": "direct-engine"
    },
    {
      "id": "showcases_scalebar_measurement",
      "title": "Scale Bar Measurement Workflow",
      "category": "showcase",
      "lane": "showcases",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/showcases/scalebar_measurement.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/showcases/scalebar_measurement.c",
      "page": "gallery/showcases/showcases_scalebar_measurement.md",
      "summary": "This example compares scale bars across overview, detail, and 3D views.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c showcases/scalebar_measurement",
      "smoke_command": "./build/examples/c/showcases/scalebar_measurement --png",
      "tags": [
        "workflow",
        "scale-bar",
        "measurement",
        "synthetic"
      ],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/showcases/showcases_scalebar_measurement.png",
          "site_asset": "/assets/gallery/v0.4/showcases/showcases_scalebar_measurement.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "scale-bar",
        "text",
        "panel-grid",
        "mesh",
        "panzoom"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=showcases_scalebar_measurement",
        "requirements": [
          "scale-bar",
          "text",
          "panel-grid",
          "mesh",
          "panzoom"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=showcases_scalebar_measurement",
      "webgpu_site_route": "/examples/webgpu/live.html?id=showcases_scalebar_measurement",
      "python_source": "examples/python/gallery/showcases/scalebar_measurement.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/showcases/scalebar_measurement.py"
    },
    {
      "id": "features_colorbar",
      "title": "Colorbar",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/colorbar.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/colorbar.c",
      "page": "gallery/features/features_colorbar.md",
      "summary": "This example shows a scalar image and a continuous colorbar.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/colorbar",
      "smoke_command": "./build/examples/c/features/colorbar --png",
      "tags": [
        "colorbar",
        "scalar-field",
        "image",
        "capture"
      ],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_colorbar.png",
          "site_asset": "/assets/gallery/v0.4/features/features_colorbar.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "colorbar",
        "image",
        "sampled-field",
        "text"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_colorbar",
        "requirements": [
          "colorbar",
          "image",
          "sampled-field",
          "text"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_colorbar",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_colorbar",
      "primary_feature": "colorbar",
      "python_source": "examples/python/gallery/features/colorbar.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/colorbar.py",
      "python_status": "manual"
    },
    {
      "id": "features_colormap_scale",
      "title": "Scalar Color Scale",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/colormap_scale.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/colormap_scale.c",
      "page": "gallery/features/features_colormap_scale.md",
      "summary": "This example shows scalar point values mapped through a custom colormap.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/colormap_scale",
      "smoke_command": "./build/examples/c/features/colormap_scale --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_colormap_scale.png",
          "site_asset": "/assets/gallery/v0.4/features/features_colormap_scale.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "colormap",
        "point"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_colormap_scale",
        "requirements": [
          "colormap",
          "point"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_colormap_scale",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_colormap_scale",
      "primary_feature": "colormap-scale",
      "python_source": "examples/python/gallery/features/colormap_scale.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/colormap_scale.py",
      "python_status": "manual"
    },
    {
      "id": "features_annotation_readout",
      "title": "Annotation Readout",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/annotation_readout.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/annotation_readout.c",
      "page": "gallery/features/features_annotation_readout.md",
      "summary": "This example shows a text annotation anchored to one data point.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/annotation_readout",
      "smoke_command": "./build/examples/c/features/annotation_readout --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_annotation_readout.png",
          "site_asset": "/assets/gallery/v0.4/features/features_annotation_readout.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "annotation",
        "readout",
        "text",
        "point"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_annotation_readout",
        "requirements": [
          "annotation",
          "readout",
          "text",
          "point"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_annotation_readout",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_annotation_readout",
      "primary_feature": "annotation-readout",
      "python_source": "examples/python/gallery/features/annotation_readout.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/annotation_readout.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_update_partial",
      "title": "Partial Data Update",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/update_partial.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/update_partial.c",
      "page": "gallery/features/features_update_partial.md",
      "summary": "This example moves only part of a point visual's position array.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/update_partial",
      "smoke_command": "./build/examples/c/features/update_partial --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_update_partial.png",
          "site_asset": "/assets/gallery/v0.4/features/features_update_partial.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "buffer-update",
        "point",
        "frame-callbacks"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_update_partial",
        "requirements": [
          "buffer-update",
          "point",
          "frame-callbacks"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_update_partial",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_update_partial",
      "primary_feature": "update-partial",
      "python_source": "examples/python/gallery/features/update_partial.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/update_partial.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_update_visual_data",
      "title": "Visual Data Update",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/update_visual_data.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/update_visual_data.c",
      "page": "gallery/features/features_update_visual_data.md",
      "summary": "This example replaces all arrays on one point visual.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/update_visual_data",
      "smoke_command": "./build/examples/c/features/update_visual_data --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_update_visual_data.png",
          "site_asset": "/assets/gallery/v0.4/features/features_update_visual_data.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "buffer-update",
        "visual-update",
        "point",
        "frame-callbacks"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_update_visual_data",
        "requirements": [
          "buffer-update",
          "visual-update",
          "point",
          "frame-callbacks"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_update_visual_data",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_update_visual_data",
      "primary_feature": "update-visual-data",
      "python_source": "examples/python/gallery/features/update_visual_data.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/update_visual_data.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_visibility",
      "title": "Visual Visibility",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/visibility.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/visibility.c",
      "page": "gallery/features/features_visibility.md",
      "summary": "This example toggles one visual on and off without changing its data arrays.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/visibility",
      "smoke_command": "./build/examples/c/features/visibility --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_visibility.png",
          "site_asset": "/assets/gallery/v0.4/features/features_visibility.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "visual-visibility",
        "point",
        "frame-callbacks"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_visibility",
        "requirements": [
          "visual-visibility",
          "point",
          "frame-callbacks"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_visibility",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_visibility",
      "primary_feature": "visibility",
      "python_source": "examples/python/gallery/features/visibility.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/visibility.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_technique_depth_test",
      "title": "Depth Test Toggle",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/technique_depth_test.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/technique_depth_test.c",
      "page": "gallery/features/features_technique_depth_test.md",
      "summary": "This example compares overlapping 3D points with depth testing enabled and disabled.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/technique_depth_test",
      "smoke_command": "./build/examples/c/features/technique_depth_test --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_technique_depth_test.png",
          "site_asset": "/assets/gallery/v0.4/features/features_technique_depth_test.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "depth-test",
        "point",
        "controller"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_technique_depth_test",
        "requirements": [
          "depth-test",
          "point",
          "controller"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_technique_depth_test",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_technique_depth_test",
      "primary_feature": "depth-test",
      "python_source": "examples/python/gallery/features/technique_depth_test.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/technique_depth_test.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_alpha_blending",
      "title": "Alpha Blending",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/alpha_blending.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/alpha_blending.c",
      "page": "gallery/features/features_alpha_blending.md",
      "summary": "This example shows translucent triangles composited in draw order.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/alpha_blending",
      "smoke_command": "./build/examples/c/features/alpha_blending --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_alpha_blending.png",
          "site_asset": "/assets/gallery/v0.4/features/features_alpha_blending.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "alpha-blending",
        "primitive"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_alpha_blending",
        "requirements": [
          "alpha-blending",
          "primitive"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_alpha_blending",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_alpha_blending",
      "primary_feature": "alpha-blending",
      "python_source": "examples/python/gallery/features/alpha_blending.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/alpha_blending.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_panel_background",
      "title": "Panel Background",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/panel_background.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/panel_background.c",
      "page": "gallery/features/features_panel_background.md",
      "summary": "This example shows a custom panel background behind a foreground primitive.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/panel_background",
      "smoke_command": "./build/examples/c/features/panel_background --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_panel_background.png",
          "site_asset": "/assets/gallery/v0.4/features/features_panel_background.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "panel-background",
        "primitive"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_panel_background",
        "requirements": [
          "panel-background",
          "primitive"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_panel_background",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_panel_background",
      "primary_feature": "panel-background",
      "python_source": "examples/python/gallery/features/panel_background.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/panel_background.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_panzoom",
      "title": "Panzoom",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/panzoom.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/panzoom.c",
      "page": "gallery/features/features_panzoom.md",
      "summary": "This example binds a 2D panzoom controller to a point visual in data coordinates.",
      "validation": "smoke+interaction+screenshot",
      "build_command": "just example-c features/panzoom",
      "smoke_command": "./build/examples/c/features/panzoom --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_panzoom.png",
          "site_asset": "/assets/gallery/v0.4/features/features_panzoom.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "controller",
        "panzoom",
        "point"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_panzoom",
        "requirements": [
          "controller",
          "panzoom",
          "point"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_panzoom",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_panzoom",
      "primary_feature": "controller-panzoom",
      "python_source": "examples/python/gallery/features/panzoom.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/panzoom.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_image_probe",
      "title": "Image Probe",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/image_probe.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/image_probe.c",
      "page": "gallery/features/features_image_probe.md",
      "summary": "This example shows probing a scalar image at a marked data position.",
      "validation": "smoke+readback+screenshot",
      "build_command": "just example-c features/image_probe",
      "smoke_command": "./build/examples/c/features/image_probe --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_image_probe.png",
          "site_asset": "/assets/gallery/v0.4/features/features_image_probe.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "image",
        "query-readback",
        "frame-callbacks",
        "overlay",
        "text"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_image_probe",
        "requirements": [
          "image",
          "query-readback",
          "frame-callbacks",
          "overlay",
          "text"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_image_probe",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_image_probe",
      "primary_feature": "image-probe",
      "python_source": "examples/python/gallery/features/image_probe.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/image_probe.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_picking",
      "title": "Picking",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/picking.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/picking.c",
      "page": "gallery/features/features_picking.md",
      "summary": "This example demonstrates item-level marker hover and click selection.",
      "validation": "smoke+interaction+screenshot",
      "build_command": "just example-c features/picking",
      "smoke_command": "./build/examples/c/features/picking --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_picking.png",
          "site_asset": "/assets/gallery/v0.4/features/features_picking.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "marker",
        "panzoom",
        "query-readback",
        "frame-callbacks"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_picking",
        "requirements": [
          "marker",
          "panzoom",
          "query-readback",
          "frame-callbacks"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_picking",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_picking",
      "primary_feature": "picking",
      "python_source": "examples/python/gallery/features/picking.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/picking.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_selection_pixel",
      "title": "Pixel Selection",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/selection_pixel.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/selection_pixel.c",
      "page": "gallery/features/features_selection_pixel.md",
      "summary": "This example queries and selects individual cells in a pixel grid.",
      "validation": "smoke+interaction+screenshot",
      "build_command": "just example-c features/selection_pixel",
      "smoke_command": "./build/examples/c/features/selection_pixel --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_selection_pixel.png",
          "site_asset": "/assets/gallery/v0.4/features/features_selection_pixel.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "pixel",
        "controller",
        "panzoom",
        "query-readback",
        "frame-callbacks"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_selection_pixel",
        "requirements": [
          "pixel",
          "controller",
          "panzoom",
          "query-readback",
          "frame-callbacks"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_selection_pixel",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_selection_pixel",
      "primary_feature": "selection-pixel",
      "python_source": "examples/python/gallery/features/selection_pixel.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/selection_pixel.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_selection_sphere",
      "title": "Sphere Selection",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/selection_sphere.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/selection_sphere.c",
      "page": "gallery/features/features_selection_sphere.md",
      "summary": "This example queries and selects individual raycast spheres in a 3D cluster.",
      "validation": "smoke+interaction+screenshot",
      "build_command": "just example-c features/selection_sphere",
      "smoke_command": "./build/examples/c/features/selection_sphere --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_selection_sphere.png",
          "site_asset": "/assets/gallery/v0.4/features/features_selection_sphere.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "sphere",
        "arcball",
        "query-readback",
        "frame-callbacks"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_selection_sphere",
        "requirements": [
          "sphere",
          "arcball",
          "query-readback",
          "frame-callbacks"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_selection_sphere",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_selection_sphere",
      "primary_feature": "selection-sphere",
      "python_source": "examples/python/gallery/features/selection_sphere.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/selection_sphere.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_selection_mesh_instances",
      "title": "Mesh Instance Selection",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/selection_mesh_instances.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/selection_mesh_instances.c",
      "page": "gallery/features/features_selection_mesh_instances.md",
      "summary": "This example queries and selects individual instances of one mesh visual.",
      "validation": "smoke+interaction+screenshot",
      "build_command": "just example-c features/selection_mesh_instances",
      "smoke_command": "./build/examples/c/features/selection_mesh_instances --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_selection_mesh_instances.png",
          "site_asset": "/assets/gallery/v0.4/features/features_selection_mesh_instances.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "mesh",
        "arcball",
        "query-readback",
        "frame-callbacks"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_selection_mesh_instances",
        "requirements": [
          "mesh",
          "arcball",
          "query-readback",
          "frame-callbacks"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_selection_mesh_instances",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_selection_mesh_instances",
      "primary_feature": "selection-mesh-instances",
      "python_source": "examples/python/gallery/features/selection_mesh_instances.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/selection_mesh_instances.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_isolines",
      "title": "Isolines",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/isolines.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/isolines.c",
      "page": "gallery/features/features_isolines.md",
      "summary": "This example shows contour isolines over a scalar field.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/isolines",
      "smoke_command": "./build/examples/c/features/isolines --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_isolines.png",
          "site_asset": "/assets/gallery/v0.4/features/features_isolines.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "mesh",
        "segment",
        "controller",
        "arcball"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_isolines",
        "requirements": [
          "mesh",
          "segment",
          "controller",
          "arcball"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_isolines",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_isolines",
      "primary_feature": "isolines",
      "python_source": "examples/python/gallery/features/isolines.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/isolines.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_builtin_shapes_2d",
      "title": "Builtin Shapes 2D",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/builtin_shapes_2d.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/builtin_shapes_2d.c",
      "page": "gallery/features/features_builtin_shapes_2d.md",
      "summary": "This example shows built-in 2D geometry rendered as meshes.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/builtin_shapes_2d",
      "smoke_command": "./build/examples/c/features/builtin_shapes_2d --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_builtin_shapes_2d.png",
          "site_asset": "/assets/gallery/v0.4/features/features_builtin_shapes_2d.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "mesh",
        "controller"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_builtin_shapes_2d",
        "requirements": [
          "mesh",
          "controller"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_builtin_shapes_2d",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_builtin_shapes_2d",
      "primary_feature": "builtin-shapes-2d",
      "python_source": "examples/python/gallery/features/builtin_shapes_2d.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/builtin_shapes_2d.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_builtin_shapes_3d",
      "title": "Builtin Shapes 3D",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/builtin_shapes_3d.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/builtin_shapes_3d.c",
      "page": "gallery/features/features_builtin_shapes_3d.md",
      "summary": "This example shows built-in 3D geometry rendered as lit meshes.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/builtin_shapes_3d",
      "smoke_command": "./build/examples/c/features/builtin_shapes_3d --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_builtin_shapes_3d.png",
          "site_asset": "/assets/gallery/v0.4/features/features_builtin_shapes_3d.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "mesh",
        "controller",
        "arcball"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_builtin_shapes_3d",
        "requirements": [
          "mesh",
          "controller",
          "arcball"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_builtin_shapes_3d",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_builtin_shapes_3d",
      "primary_feature": "builtin-shapes-3d",
      "python_source": "examples/python/gallery/features/builtin_shapes_3d.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/builtin_shapes_3d.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_obj_loading",
      "title": "OBJ Loading",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/obj_loading.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/obj_loading.c",
      "page": "gallery/features/features_obj_loading.md",
      "summary": "This example loads a Wavefront OBJ fixture and displays it as a mesh.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/obj_loading",
      "smoke_command": "./build/examples/c/features/obj_loading --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_obj_loading.png",
          "site_asset": "/assets/gallery/v0.4/features/features_obj_loading.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "mesh",
        "controller",
        "arcball"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_obj_loading",
        "requirements": [
          "mesh",
          "controller",
          "arcball"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_obj_loading",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_obj_loading",
      "primary_feature": "obj-loading",
      "python_source": "examples/python/gallery/features/obj_loading.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/obj_loading.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_probe_labels",
      "title": "Label Probe",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/probe_labels.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/probe_labels.c",
      "page": "gallery/features/features_probe_labels.md",
      "summary": "This example queries categorical label IDs from a generated label image.",
      "validation": "smoke+readback+screenshot",
      "build_command": "just example-c features/probe_labels",
      "smoke_command": "./build/examples/c/features/probe_labels --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_probe_labels.png",
          "site_asset": "/assets/gallery/v0.4/features/features_probe_labels.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "labels",
        "query-readback",
        "panzoom",
        "overlay",
        "text"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_probe_labels",
        "requirements": [
          "labels",
          "query-readback",
          "panzoom",
          "overlay",
          "text"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_probe_labels",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_probe_labels",
      "primary_feature": "probe-labels",
      "python_source": "examples/python/gallery/features/probe_labels.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/probe_labels.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_datetime_axis",
      "title": "Datetime Axis",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/datetime_axis.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/datetime_axis.c",
      "page": "gallery/features/features_datetime_axis.md",
      "summary": "This example shows UTC datetime labels on a numeric data axis.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/datetime_axis",
      "smoke_command": "./build/examples/c/features/datetime_axis --png",
      "tags": [
        "axes",
        "datetime",
        "time-series"
      ],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_datetime_axis.png",
          "site_asset": "/assets/gallery/v0.4/features/features_datetime_axis.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "axes",
        "text",
        "datetime",
        "controller",
        "panzoom"
      ],
      "webgpu_reason": "datetime formatting is outside the RC browser subset",
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_datetime_axis",
        "requirements": [
          "axes",
          "text",
          "datetime",
          "controller",
          "panzoom"
        ],
        "reason": "datetime formatting is outside the RC browser subset"
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_datetime_axis",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_datetime_axis",
      "primary_feature": "datetime-axis",
      "python_source": "examples/python/gallery/features/datetime_axis.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/datetime_axis.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_timer_animation",
      "title": "Timer Animation",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/timer_animation.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/timer_animation.c",
      "page": "gallery/features/features_timer_animation.md",
      "summary": "This example updates point attributes every frame from scenario time.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/timer_animation",
      "smoke_command": "./build/examples/c/features/timer_animation --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_timer_animation.png",
          "site_asset": "/assets/gallery/v0.4/features/features_timer_animation.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "point",
        "frame-callbacks"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_timer_animation",
        "requirements": [
          "point",
          "frame-callbacks"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_timer_animation",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_timer_animation",
      "primary_feature": "timer-animation",
      "python_source": "examples/python/gallery/features/timer_animation.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/timer_animation.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_marker_symbols",
      "title": "Marker Symbols",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/features/marker_symbols.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/marker_symbols.c",
      "page": "gallery/features/features_marker_symbols.md",
      "summary": "This example compares several ways to define marker glyphs in one symbol set.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/marker_symbols",
      "smoke_command": "./build/examples/c/features/marker_symbols --png",
      "tags": [
        "marker",
        "symbol-set",
        "bitmap-symbol",
        "distance-field-symbol",
        "svg-path-symbol"
      ],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_marker_symbols.png",
          "site_asset": "/assets/gallery/v0.4/features/features_marker_symbols.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "marker",
        "symbol-set",
        "glyph-atlas",
        "text",
        "controller",
        "panzoom"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_marker_symbols",
        "requirements": [
          "marker",
          "symbol-set",
          "glyph-atlas",
          "text",
          "controller",
          "panzoom"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_marker_symbols",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_marker_symbols",
      "primary_feature": "marker-symbols",
      "python_source": "examples/python/gallery/features/marker_symbols.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/features/marker_symbols.py",
      "python_status": "direct-engine"
    },
    {
      "id": "features_legend_categorical",
      "title": "Categorical Legend",
      "category": "feature",
      "lane": "features",
      "stage": "v0.4_experimental",
      "status": "experimental",
      "source": "examples/c/features/legend_categorical.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/features/legend_categorical.c",
      "page": "gallery/features/features_legend_categorical.md",
      "summary": "This example shows how one categorical scale drives both marker colors and a legend.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c features/legend_categorical",
      "smoke_command": "./build/examples/c/features/legend_categorical --png",
      "tags": [
        "categorical-scale",
        "legend",
        "marker",
        "capture"
      ],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/features/features_legend_categorical.png",
          "site_asset": "/assets/gallery/v0.4/features/features_legend_categorical.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "legend",
        "categorical-scale",
        "marker",
        "text"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=features_legend_categorical",
        "requirements": [
          "legend",
          "categorical-scale",
          "marker",
          "text"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=features_legend_categorical",
      "webgpu_site_route": "/examples/webgpu/live.html?id=features_legend_categorical",
      "primary_feature": "legend-categorical"
    },
    {
      "id": "runtime_video_export",
      "title": "Video Export",
      "category": "runtime",
      "lane": "runtime",
      "stage": "v0.4_experimental",
      "status": "experimental",
      "source": "examples/c/runtime/video_export.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/runtime/video_export.c",
      "page": "gallery/runtime/runtime_video_export.md",
      "summary": "This example records a deterministic offscreen point animation to video.",
      "validation": "smoke+optional-video",
      "build_command": "just example-c runtime/video_export",
      "smoke_command": "./build/examples/c/runtime/video_export --png",
      "tags": [
        "app-capture",
        "video",
        "animation",
        "offscreen"
      ],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": false,
          "status": "not-required",
          "source": "data/gallery/v0.4/runtime/runtime_video_export.png",
          "site_asset": "/assets/gallery/v0.4/runtime/runtime_video_export.webp"
        }
      },
      "webgpu_status": "native-only",
      "webgpu_status_label": "Native only",
      "webgpu_requirements": [
        "native-capture"
      ],
      "webgpu_reason": "video export uses native app/canvas capture backends, including CPU readback and optional external/NVENC paths",
      "webgpu": {
        "status": "native-only",
        "requirements": [
          "native-capture"
        ],
        "reason": "video export uses native app/canvas capture backends, including CPU readback and optional external/NVENC paths"
      },
      "primary_runtime": "video-export"
    },
    {
      "id": "visuals_point",
      "title": "Point",
      "category": "visual",
      "lane": "visuals",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/visuals/point.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/visuals/point.c",
      "page": "gallery/visuals/visuals_point.md",
      "summary": "This example renders a 2D scatter plot with per-point color and diameter.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c visuals/point",
      "smoke_command": "./build/examples/c/visuals/point --png",
      "tags": [
        "point",
        "panzoom",
        "capture"
      ],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/visuals/visuals_point.png",
          "site_asset": "/assets/gallery/v0.4/visuals/visuals_point.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "point",
        "panzoom"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=visuals_point",
        "requirements": [
          "point",
          "panzoom"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=visuals_point",
      "webgpu_site_route": "/examples/webgpu/live.html?id=visuals_point",
      "primary_visual": "point",
      "python_source": "examples/python/gallery/visuals/point.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/visuals/point.py",
      "python_status": "manual"
    },
    {
      "id": "visuals_pixel",
      "title": "Pixel",
      "category": "visual",
      "lane": "visuals",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/visuals/pixel.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/visuals/pixel.c",
      "page": "gallery/visuals/visuals_pixel.md",
      "summary": "This example renders a regular grid of independent screen-aligned pixels.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c visuals/pixel",
      "smoke_command": "./build/examples/c/visuals/pixel --png",
      "tags": [
        "pixel",
        "panzoom",
        "capture"
      ],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/visuals/visuals_pixel.png",
          "site_asset": "/assets/gallery/v0.4/visuals/visuals_pixel.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "pixel",
        "panzoom"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=visuals_pixel",
        "requirements": [
          "pixel",
          "panzoom"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=visuals_pixel",
      "webgpu_site_route": "/examples/webgpu/live.html?id=visuals_pixel",
      "primary_visual": "pixel",
      "python_source": "examples/python/gallery/visuals/pixel.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/visuals/pixel.py",
      "python_status": "manual"
    },
    {
      "id": "visuals_marker",
      "title": "Marker",
      "category": "visual",
      "lane": "visuals",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/visuals/marker.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/visuals/marker.c",
      "page": "gallery/visuals/visuals_marker.md",
      "summary": "This example compares marker symbols, sizes, strokes, fills, and rotations.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c visuals/marker",
      "smoke_command": "./build/examples/c/visuals/marker --png",
      "tags": [
        "marker",
        "panzoom",
        "capture"
      ],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/visuals/visuals_marker.png",
          "site_asset": "/assets/gallery/v0.4/visuals/visuals_marker.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "marker",
        "panzoom"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=visuals_marker",
        "requirements": [
          "marker",
          "panzoom"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=visuals_marker",
      "webgpu_site_route": "/examples/webgpu/live.html?id=visuals_marker",
      "primary_visual": "marker",
      "python_source": "examples/python/gallery/visuals/marker.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/visuals/marker.py",
      "python_status": "manual"
    },
    {
      "id": "visuals_primitive",
      "title": "Primitive",
      "category": "visual",
      "lane": "visuals",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/visuals/primitive.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/visuals/primitive.c",
      "page": "gallery/visuals/visuals_primitive.md",
      "summary": "This example compares basic primitive topologies.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c visuals/primitive",
      "smoke_command": "./build/examples/c/visuals/primitive --png",
      "tags": [
        "primitive",
        "panzoom",
        "capture"
      ],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/visuals/visuals_primitive.png",
          "site_asset": "/assets/gallery/v0.4/visuals/visuals_primitive.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "primitive",
        "panzoom"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=visuals_primitive",
        "requirements": [
          "primitive",
          "panzoom"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=visuals_primitive",
      "webgpu_site_route": "/examples/webgpu/live.html?id=visuals_primitive",
      "primary_visual": "primitive",
      "python_source": "examples/python/gallery/visuals/primitive.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/visuals/primitive.py",
      "python_status": "manual"
    },
    {
      "id": "visuals_segment",
      "title": "Segment",
      "category": "visual",
      "lane": "visuals",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/visuals/segment.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/visuals/segment.c",
      "page": "gallery/visuals/visuals_segment.md",
      "summary": "This example draws independent line segments with different cap styles.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c visuals/segment",
      "smoke_command": "./build/examples/c/visuals/segment --png",
      "tags": [
        "segment",
        "panzoom",
        "capture"
      ],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/visuals/visuals_segment.png",
          "site_asset": "/assets/gallery/v0.4/visuals/visuals_segment.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "segment",
        "panzoom"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=visuals_segment",
        "requirements": [
          "segment",
          "panzoom"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=visuals_segment",
      "webgpu_site_route": "/examples/webgpu/live.html?id=visuals_segment",
      "primary_visual": "segment",
      "python_source": "examples/python/gallery/visuals/segment.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/visuals/segment.py",
      "python_status": "manual"
    },
    {
      "id": "visuals_vector",
      "title": "Vector",
      "category": "visual",
      "lane": "visuals",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/visuals/vector.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/visuals/vector.c",
      "page": "gallery/visuals/visuals_vector.md",
      "summary": "This example compares straight vector arrows with curved vector paths.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c visuals/vector",
      "smoke_command": "./build/examples/c/visuals/vector --png",
      "tags": [
        "vector",
        "path",
        "panzoom",
        "capture"
      ],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/visuals/visuals_vector.png",
          "site_asset": "/assets/gallery/v0.4/visuals/visuals_vector.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "vector",
        "path",
        "panzoom"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=visuals_vector",
        "requirements": [
          "vector",
          "path",
          "panzoom"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=visuals_vector",
      "webgpu_site_route": "/examples/webgpu/live.html?id=visuals_vector",
      "primary_visual": "vector",
      "python_source": "examples/python/gallery/visuals/vector.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/visuals/vector.py",
      "python_status": "manual"
    },
    {
      "id": "visuals_path",
      "title": "Path",
      "category": "visual",
      "lane": "visuals",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/visuals/path.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/visuals/path.c",
      "page": "gallery/visuals/visuals_path.md",
      "summary": "This example draws several continuous signals with one path visual.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c visuals/path",
      "smoke_command": "./build/examples/c/visuals/path --png",
      "tags": [
        "path",
        "panzoom",
        "capture"
      ],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/visuals/visuals_path.png",
          "site_asset": "/assets/gallery/v0.4/visuals/visuals_path.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "path",
        "panzoom"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=visuals_path",
        "requirements": [
          "path",
          "panzoom"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=visuals_path",
      "webgpu_site_route": "/examples/webgpu/live.html?id=visuals_path",
      "primary_visual": "path",
      "python_source": "examples/python/gallery/visuals/path.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/visuals/path.py",
      "python_status": "manual"
    },
    {
      "id": "visuals_image",
      "title": "Image",
      "category": "visual",
      "lane": "visuals",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/visuals/image.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/visuals/image.c",
      "page": "gallery/visuals/visuals_image.md",
      "summary": "This example displays a generated scalar field as a 2D image.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c visuals/image",
      "smoke_command": "./build/examples/c/visuals/image --png",
      "tags": [
        "image",
        "sampled-field",
        "panzoom",
        "capture"
      ],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/visuals/visuals_image.png",
          "site_asset": "/assets/gallery/v0.4/visuals/visuals_image.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "image",
        "sampled-field",
        "panzoom"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=visuals_image",
        "requirements": [
          "image",
          "sampled-field",
          "panzoom"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=visuals_image",
      "webgpu_site_route": "/examples/webgpu/live.html?id=visuals_image",
      "primary_visual": "image",
      "python_source": "examples/python/gallery/visuals/image.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/visuals/image.py",
      "python_status": "manual"
    },
    {
      "id": "visuals_image_rgba",
      "title": "RGBA Image",
      "category": "visual",
      "lane": "visuals",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/visuals/image_rgba.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/visuals/image_rgba.c",
      "page": "gallery/visuals/visuals_image_rgba.md",
      "summary": "This example displays a generated RGBA image as a 2D sampled field.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c visuals/image_rgba",
      "smoke_command": "./build/examples/c/visuals/image_rgba --png",
      "tags": [
        "image",
        "sampled-field",
        "rgba8",
        "alpha-blending",
        "panzoom",
        "capture"
      ],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/visuals/visuals_image_rgba.png",
          "site_asset": "/assets/gallery/v0.4/visuals/visuals_image_rgba.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "image",
        "sampled-field",
        "alpha-blending",
        "panzoom"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=visuals_image_rgba",
        "requirements": [
          "image",
          "sampled-field",
          "alpha-blending",
          "panzoom"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=visuals_image_rgba",
      "webgpu_site_route": "/examples/webgpu/live.html?id=visuals_image_rgba",
      "primary_visual": "image",
      "python_source": "examples/python/gallery/visuals/image_rgba.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/visuals/image_rgba.py",
      "python_status": "manual"
    },
    {
      "id": "visuals_mesh",
      "title": "Mesh",
      "category": "visual",
      "lane": "visuals",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/visuals/mesh.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/visuals/mesh.c",
      "page": "gallery/visuals/visuals_mesh.md",
      "summary": "This example renders a lit indexed cube mesh in a 3D scene.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c visuals/mesh",
      "smoke_command": "./build/examples/c/visuals/mesh --png",
      "tags": [
        "mesh",
        "indexed-geometry",
        "arcball",
        "capture"
      ],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/visuals/visuals_mesh.png",
          "site_asset": "/assets/gallery/v0.4/visuals/visuals_mesh.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "mesh",
        "indexed-geometry",
        "arcball"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=visuals_mesh",
        "requirements": [
          "mesh",
          "indexed-geometry",
          "arcball"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=visuals_mesh",
      "webgpu_site_route": "/examples/webgpu/live.html?id=visuals_mesh",
      "primary_visual": "mesh",
      "python_source": "examples/python/gallery/visuals/mesh.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/visuals/mesh.py",
      "python_status": "manual"
    },
    {
      "id": "visuals_sphere",
      "title": "Sphere",
      "category": "visual",
      "lane": "visuals",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/visuals/sphere.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/visuals/sphere.c",
      "page": "gallery/visuals/visuals_sphere.md",
      "summary": "This example displays a 3D cluster of raycast impostor spheres.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c visuals/sphere",
      "smoke_command": "./build/examples/c/visuals/sphere --png",
      "tags": [
        "sphere",
        "arcball",
        "capture"
      ],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/visuals/visuals_sphere.png",
          "site_asset": "/assets/gallery/v0.4/visuals/visuals_sphere.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "sphere",
        "arcball"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=visuals_sphere",
        "requirements": [
          "sphere",
          "arcball"
        ],
        "rendering_effects": [
          {
            "effect": "msaa",
            "status": "unavailable",
            "warning": "The desktop example enables 8x MSAA with alpha-to-coverage; the WebGPU route is currently single-sampled."
          }
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=visuals_sphere",
      "webgpu_site_route": "/examples/webgpu/live.html?id=visuals_sphere",
      "primary_visual": "sphere",
      "python_source": "examples/python/gallery/visuals/sphere.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/visuals/sphere.py",
      "python_status": "manual"
    },
    {
      "id": "visuals_splat",
      "title": "Splat",
      "category": "visual",
      "lane": "visuals",
      "stage": "v0.4_experimental",
      "status": "experimental",
      "source": "examples/c/visuals/splat.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/visuals/splat.c",
      "page": "gallery/visuals/visuals_splat.md",
      "summary": "This example renders Gaussian splats as translucent ellipses.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c visuals/splat",
      "smoke_command": "./build/examples/c/visuals/splat --png",
      "tags": [
        "splat",
        "panzoom",
        "capture"
      ],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/visuals/visuals_splat.png",
          "site_asset": "/assets/gallery/v0.4/visuals/visuals_splat.webp"
        }
      },
      "webgpu_status": "webgpu-deferred",
      "webgpu_status_label": "Deferred",
      "webgpu_requirements": [
        "splat",
        "alpha-blending",
        "panzoom"
      ],
      "webgpu_reason": "splat rendering is experimental and outside the RC browser subset",
      "webgpu": {
        "status": "webgpu-deferred",
        "requirements": [
          "splat",
          "alpha-blending",
          "panzoom"
        ],
        "reason": "splat rendering is experimental and outside the RC browser subset"
      },
      "primary_visual": "splat"
    },
    {
      "id": "visuals_text",
      "title": "Text",
      "category": "visual",
      "lane": "visuals",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/visuals/text.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/visuals/text.c",
      "page": "gallery/visuals/visuals_text.md",
      "summary": "This example places semantic text items in data coordinates.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c visuals/text",
      "smoke_command": "./build/examples/c/visuals/text --png",
      "tags": [
        "text",
        "panzoom",
        "capture"
      ],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/visuals/visuals_text.png",
          "site_asset": "/assets/gallery/v0.4/visuals/visuals_text.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "text",
        "glyph-atlas",
        "panzoom"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=visuals_text",
        "requirements": [
          "text",
          "glyph-atlas",
          "panzoom"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=visuals_text",
      "webgpu_site_route": "/examples/webgpu/live.html?id=visuals_text",
      "primary_visual": "text",
      "python_source": "examples/python/gallery/visuals/text.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/visuals/text.py",
      "python_status": "manual"
    },
    {
      "id": "visuals_glyph",
      "title": "Font Atlas Glyphs",
      "category": "visual",
      "lane": "visuals",
      "stage": "v0.4_experimental",
      "status": "experimental",
      "source": "examples/c/visuals/glyph.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/visuals/glyph.c",
      "page": "gallery/visuals/visuals_glyph.md",
      "summary": "This example renders text by submitting low-level glyph atlas quads directly.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c visuals/glyph",
      "smoke_command": "./build/examples/c/visuals/glyph --png",
      "tags": [
        "glyph",
        "font-atlas",
        "texture-atlas",
        "sdf",
        "panzoom",
        "capture"
      ],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/visuals/visuals_glyph.png",
          "site_asset": "/assets/gallery/v0.4/visuals/visuals_glyph.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "glyph",
        "glyph-atlas",
        "sdf",
        "panzoom"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=visuals_glyph",
        "requirements": [
          "glyph",
          "glyph-atlas",
          "sdf",
          "panzoom"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=visuals_glyph",
      "webgpu_site_route": "/examples/webgpu/live.html?id=visuals_glyph",
      "primary_visual": "glyph"
    },
    {
      "id": "visuals_labels",
      "title": "Labels",
      "category": "visual",
      "lane": "visuals",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/visuals/labels.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/visuals/labels.c",
      "page": "gallery/visuals/visuals_labels.md",
      "summary": "This example turns an integer sampled field into categorical image labels.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c visuals/labels",
      "smoke_command": "./build/examples/c/visuals/labels --png",
      "tags": [
        "labels",
        "categorical-scale",
        "panzoom",
        "capture"
      ],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/visuals/visuals_labels.png",
          "site_asset": "/assets/gallery/v0.4/visuals/visuals_labels.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "labels",
        "categorical-scale",
        "panzoom"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=visuals_labels",
        "requirements": [
          "labels",
          "categorical-scale",
          "panzoom"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=visuals_labels",
      "webgpu_site_route": "/examples/webgpu/live.html?id=visuals_labels",
      "primary_visual": "labels",
      "python_source": "examples/python/gallery/visuals/labels.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/visuals/labels.py"
    },
    {
      "id": "visuals_volume",
      "title": "Volume",
      "category": "visual",
      "lane": "visuals",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/visuals/volume.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/visuals/volume.c",
      "page": "gallery/visuals/visuals_volume.md",
      "summary": "This example volume-renders a generated 3D gyroid scalar field.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c visuals/volume",
      "smoke_command": "./build/examples/c/visuals/volume --png",
      "tags": [
        "sampled-field",
        "volume",
        "transfer-function",
        "boundary-box",
        "arcball",
        "capture"
      ],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/visuals/visuals_volume.png",
          "site_asset": "/assets/gallery/v0.4/visuals/visuals_volume.webp"
        }
      },
      "webgpu_status": "webgpu-planned",
      "webgpu_status_label": "Planned",
      "webgpu_requirements": [
        "volume",
        "sampled-field",
        "texture-3d",
        "arcball"
      ],
      "webgpu": {
        "status": "webgpu-planned",
        "requirements": [
          "volume",
          "sampled-field",
          "texture-3d",
          "arcball"
        ]
      },
      "primary_visual": "volume",
      "python_source": "examples/python/gallery/visuals/volume.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/visuals/volume.py"
    },
    {
      "id": "composites_polygon",
      "title": "Polygon Composite",
      "category": "composite",
      "lane": "composites",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/composites/polygon.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/composites/polygon.c",
      "page": "gallery/composites/composites_polygon.md",
      "summary": "This example compares one holed polygon with a multi-region polygon set.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c composites/polygon",
      "smoke_command": "./build/examples/c/composites/polygon --png",
      "tags": [
        "composite",
        "polygon",
        "polygon-set",
        "holes",
        "panzoom"
      ],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/composites/composites_polygon.png",
          "site_asset": "/assets/gallery/v0.4/composites/composites_polygon.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "composite",
        "polygon-set",
        "primitive",
        "segment",
        "panzoom"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=composites_polygon",
        "requirements": [
          "composite",
          "polygon-set",
          "primitive",
          "segment",
          "panzoom"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=composites_polygon",
      "webgpu_site_route": "/examples/webgpu/live.html?id=composites_polygon",
      "primary_composite": "polygon",
      "python_source": "examples/python/gallery/composites/polygon.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/composites/polygon.py"
    },
    {
      "id": "composites_graph",
      "title": "Graph Composite",
      "category": "composite",
      "lane": "composites",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/composites/graph.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/composites/graph.c",
      "page": "gallery/composites/composites_graph.md",
      "summary": "This example builds a small graph composite.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c composites/graph",
      "smoke_command": "./build/examples/c/composites/graph --png",
      "tags": [
        "composite",
        "graph",
        "marker-nodes",
        "bezier-edges",
        "panzoom"
      ],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/composites/composites_graph.png",
          "site_asset": "/assets/gallery/v0.4/composites/composites_graph.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "composite",
        "marker",
        "bezier-edges",
        "path",
        "panzoom"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=composites_graph",
        "requirements": [
          "composite",
          "marker",
          "bezier-edges",
          "path",
          "panzoom"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=composites_graph",
      "webgpu_site_route": "/examples/webgpu/live.html?id=composites_graph",
      "primary_composite": "graph",
      "python_source": "examples/python/gallery/composites/graph.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/composites/graph.py"
    },
    {
      "id": "showcases_choropleth",
      "title": "U.S. State Choropleth",
      "category": "showcase",
      "lane": "showcases",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/showcases/choropleth.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/showcases/choropleth.c",
      "page": "gallery/showcases/showcases_choropleth.md",
      "summary": "This example renders contiguous U.S. population density as polygon-set data.",
      "validation": "smoke+screenshot+manual",
      "build_command": "just example-c showcases/choropleth",
      "smoke_command": "./build/examples/c/showcases/choropleth --png",
      "tags": [
        "scientific",
        "real-data",
        "geo",
        "composite",
        "polygon-set",
        "choropleth",
        "colorbar",
        "panzoom",
        "capture"
      ],
      "data": {
        "kind": "prepared"
      },
      "data_kind": "prepared",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/showcases/showcases_choropleth.png",
          "site_asset": "/assets/gallery/v0.4/showcases/showcases_choropleth.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "composite",
        "polygon-set",
        "colorbar",
        "panzoom"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=showcases_choropleth",
        "requirements": [
          "composite",
          "polygon-set",
          "colorbar",
          "panzoom"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=showcases_choropleth",
      "webgpu_site_route": "/examples/webgpu/live.html?id=showcases_choropleth",
      "dataset": {
        "name": "Contiguous U.S. state population density",
        "source": "U.S. Census Bureau 2024 cartographic state boundaries and Vintage 2025 state population estimates",
        "source_url": "https://www2.census.gov/geo/tiger/GENZ2024/shp/cb_2024_us_state_20m.zip; https://www2.census.gov/programs-surveys/popest/tables/2020-2025/state/totals/NST-EST2025-POP.xlsx",
        "boundary_source": "https://www2.census.gov/geo/tiger/GENZ2024/shp/cb_2024_us_state_20m.zip",
        "population_source": "https://www2.census.gov/programs-surveys/popest/tables/2020-2025/state/totals/NST-EST2025-POP.xlsx",
        "license": "U.S. Census Bureau public data; cite the Census Bureau as source.",
        "citation": "U.S. Census Bureau, 2024 Cartographic Boundary File, States, 1:20m; U.S. Census Bureau, Vintage 2025 state resident population estimates.",
        "fallback_prepared_path": ".cache/datoviz/examples/us_state_choropleth/prepared",
        "promoted_prepared_path": "data/examples/us_state_choropleth/prepared",
        "preprocessing": "python tools/data/prepare_us_state_choropleth.py",
        "prepared_layout": "flat typed arrays plus metadata.tsv",
        "provenance": "Prepared from Census boundary and population files by filtering to the 48 contiguous states, projecting rings with a spherical Albers equal-area transform, and encoding log10 resident population density from 2025 population estimates and Census ALAND values."
      },
      "encoding": {
        "position": "Census boundary rings projected with a spherical Albers equal-area transform and normalized into scene space",
        "color": "log10 of Vintage 2025 resident population per Census ALAND square kilometer",
        "topology": "each shapefile ring is rendered as one polygon-set region; interior holes are not preserved"
      },
      "python_source": "examples/python/gallery/showcases/choropleth.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/showcases/choropleth.py"
    },
    {
      "id": "showcases_protein",
      "title": "Protein",
      "category": "showcase",
      "lane": "showcases",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/showcases/protein.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/showcases/protein.c",
      "page": "gallery/showcases/showcases_protein.md",
      "summary": "This example renders a prepared PDB structure as colored sphere impostors.",
      "validation": "smoke+screenshot+manual",
      "build_command": "just example-c showcases/protein",
      "smoke_command": "./build/examples/c/showcases/protein --png",
      "tags": [
        "scientific",
        "real-data",
        "molecular",
        "sphere",
        "arcball"
      ],
      "data": {
        "kind": "real"
      },
      "data_kind": "real",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/showcases/showcases_protein.png",
          "site_asset": "/assets/gallery/v0.4/showcases/showcases_protein.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "sphere",
        "arcball",
        "material",
        "real-data"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=showcases_protein",
        "requirements": [
          "sphere",
          "arcball",
          "material",
          "real-data"
        ],
        "rendering_effects": [
          {
            "effect": "ssao",
            "status": "unavailable",
            "warning": "The desktop example enables SSAO; the WebGPU route currently omits this post-processing effect, so molecular creases and contacts have less ambient-occlusion shading."
          }
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=showcases_protein",
      "webgpu_site_route": "/examples/webgpu/live.html?id=showcases_protein",
      "dataset": {
        "name": "RCSB PDB protein structure",
        "source": "https://files.rcsb.org/download/{pdb_id}.pdb",
        "source_url": "https://www.wwpdb.org/about/usage-policies",
        "license": "PDB archive coordinate files are available under CC0 1.0; attribute original structure authors where possible.",
        "citation": "Cite the original PDB structure entry and the wwPDB/RCSB PDB resource where appropriate.",
        "default_pdb_id": "6M0J",
        "prepared_path": "data/examples/proteins/6m0j/prepared",
        "packaged_arrays": "atom_position.f32, atom_radius_vdw.f32, atom_color_element.rgba8",
        "temporary_fallback_pdb_id": "1UBQ",
        "temporary_fallback_prepared_path": "data/examples/proteins/1ubq/prepared",
        "preprocessing": "python tools/preprocess_protein.py 6M0J",
        "provenance": "The showcase loads a PDB coordinate file, normalizes atom positions into scene space, and renders atoms as sphere impostors with element-style colors and radii from the preparation bundle."
      },
      "encoding": {
        "position": "atom coordinates normalized into scene space",
        "color": "element-style atom colors from the preparation bundle",
        "size": "atom radii scaled for sphere impostors"
      },
      "python_source": "examples/python/gallery/showcases/protein.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/showcases/protein.py"
    },
    {
      "id": "showcases_wind_field",
      "title": "Wind Field",
      "category": "showcase",
      "lane": "showcases",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/showcases/wind_field.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/showcases/wind_field.c",
      "page": "gallery/showcases/showcases_wind_field.md",
      "summary": "This example combines a synthetic wind-speed field with vectors and streamlines.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c showcases/wind_field",
      "smoke_command": "./build/examples/c/showcases/wind_field --png",
      "tags": [
        "scientific",
        "synthetic",
        "scalar-field",
        "vector-field",
        "wind-field",
        "colorbar",
        "capture"
      ],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/showcases/showcases_wind_field.png",
          "site_asset": "/assets/gallery/v0.4/showcases/showcases_wind_field.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "image",
        "vector",
        "path",
        "colorbar",
        "panzoom"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "requirements": [
          "image",
          "vector",
          "path",
          "colorbar",
          "panzoom"
        ],
        "route": "examples/webgpu/live.html?id=showcases_wind_field"
      },
      "webgpu_route": "examples/webgpu/live.html?id=showcases_wind_field",
      "webgpu_site_route": "/examples/webgpu/live.html?id=showcases_wind_field",
      "python_source": "examples/python/gallery/showcases/wind_field.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/showcases/wind_field.py"
    },
    {
      "id": "showcases_galaxy",
      "title": "Density-Wave Galaxy",
      "category": "showcase",
      "lane": "showcases",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/showcases/galaxy.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/showcases/galaxy.c",
      "page": "gallery/showcases/showcases_galaxy.md",
      "summary": "This example renders an animated density-wave spiral galaxy.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c showcases/galaxy",
      "smoke_command": "./build/examples/c/showcases/galaxy --png",
      "tags": [
        "scientific",
        "simulation",
        "astronomy",
        "particles",
        "point",
        "marker",
        "bitmap-symbol",
        "additive-blending",
        "3d",
        "interactive",
        "arcball",
        "gui",
        "starfield",
        "animation",
        "capture"
      ],
      "data": {
        "kind": "simulated"
      },
      "data_kind": "simulated",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/showcases/showcases_galaxy.png",
          "site_asset": "/assets/gallery/v0.4/showcases/showcases_galaxy.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "point",
        "marker",
        "symbol-set",
        "glyph-atlas",
        "alpha-blending",
        "frame-callbacks",
        "arcball"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=showcases_galaxy",
        "requirements": [
          "point",
          "marker",
          "symbol-set",
          "glyph-atlas",
          "alpha-blending",
          "frame-callbacks",
          "arcball"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=showcases_galaxy",
      "webgpu_site_route": "/examples/webgpu/live.html?id=showcases_galaxy",
      "dataset": {
        "name": "Density-wave spiral galaxy simulation",
        "source": "https://github.com/glumpy/glumpy/tree/master/examples",
        "source_url": "https://glumpy.github.io/gallery.html",
        "license": "BSD-3-Clause for the adapted Glumpy simulation; specrend color reference is public domain",
        "citation": "Nicolas P. Rougier, Glumpy galaxy example; Ingo Berg, Simulating a Galaxy with the density wave theory",
        "preprocessing": "deterministic runtime simulation; no external data payload",
        "provenance": "The orbital model is adapted from Glumpy's galaxy_simulation.py and preserves its BSD notice in galaxy_model.c. Stellar colors use the public-domain specrend reference values."
      },
      "python_source": "examples/python/gallery/showcases/galaxy.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/showcases/galaxy.py"
    },
    {
      "id": "showcases_svg_tiger",
      "title": "SVG Tiger",
      "category": "showcase",
      "lane": "showcases",
      "stage": "v0.4_experimental",
      "status": "experimental",
      "source": "examples/c/showcases/svg_tiger.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/showcases/svg_tiger.c",
      "page": "gallery/showcases/showcases_svg_tiger.md",
      "summary": "This example renders the classic colored tiger from prepared SVG paths.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c showcases/svg_tiger",
      "smoke_command": "./build/examples/c/showcases/svg_tiger --png",
      "tags": [
        "vector-art",
        "svg",
        "bezier",
        "polygon-triangulation",
        "mesh",
        "path",
        "panzoom",
        "prepared-data",
        "capture"
      ],
      "data": {
        "kind": "prepared"
      },
      "data_kind": "prepared",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/showcases/showcases_svg_tiger.png",
          "site_asset": "/assets/gallery/v0.4/showcases/showcases_svg_tiger.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "mesh",
        "path",
        "polygon-triangulation",
        "panzoom"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=showcases_svg_tiger",
        "data_bundles": [
          {
            "id": "svg_tiger",
            "source": "data/examples/svg_tiger/manifest.json",
            "url": "../../webgpu-data/examples/svg_tiger/sha256-640a536d848ff2eb/manifest.json",
            "virtual_root": "data/examples/svg_tiger"
          }
        ],
        "requirements": [
          "mesh",
          "path",
          "polygon-triangulation",
          "panzoom"
        ],
        "rendering_effects": [
          {
            "effect": "msaa",
            "status": "unavailable",
            "warning": "The desktop example enables MSAA for smoother fill and outline edges; the WebGPU route is currently single-sampled."
          }
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=showcases_svg_tiger",
      "webgpu_site_route": "/examples/webgpu/live.html?id=showcases_svg_tiger",
      "dataset": {
        "name": "Classic SVG Tiger from Nicolas P. Rougier's Glumpy example gallery",
        "source": "Nicolas P. Rougier's Glumpy example gallery",
        "source_url": "https://github.com/glumpy/glumpy/blob/aedb9212a1e00a68b7c4669405a6a8f754daf283/glumpy/data/tiger.svg",
        "license": "Redistribution of this pinned artwork and its prepared Datoviz derivative was confirmed by the Datoviz maintainer for this release.",
        "citation": "Nicolas P. Rougier, Glumpy example gallery, classic SVG Tiger example.",
        "preprocessing": "python3 tools/data/prepare_svg_tiger.py --download",
        "cache_prepared_path": ".cache/datoviz/examples/svg_tiger/prepared",
        "provenance": "The artwork comes from Nicolas P. Rougier's Glumpy example gallery. The preparation tool verifies the pinned Glumpy source hash, resolves Glumpy-compatible inherited paint, flattens M/L/C/Z paths with adaptive De Casteljau subdivision, and writes prepared path records. Datoviz triangulates fills with Earcut and renders outlines as retained paths."
      },
      "python_source": "examples/python/gallery/showcases/svg_tiger.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/showcases/svg_tiger.py"
    },
    {
      "id": "showcases_gpu_particle_smoke",
      "title": "GPU Particle Smoke",
      "category": "showcase",
      "lane": "showcases",
      "stage": "v0.4_required",
      "status": "experimental",
      "source": "examples/c/showcases/gpu_particle_smoke.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/showcases/gpu_particle_smoke.c",
      "page": "gallery/showcases/showcases_gpu_particle_smoke.md",
      "summary": "This example uses scene compute buffers to animate particle smoke.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c showcases/gpu_particle_smoke",
      "smoke_command": "./build/examples/c/showcases/gpu_particle_smoke --png",
      "tags": [
        "compute",
        "simulation",
        "particles",
        "point",
        "alpha-blending",
        "capture"
      ],
      "data": {
        "kind": "simulated"
      },
      "data_kind": "simulated",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/showcases/showcases_gpu_particle_smoke.png",
          "site_asset": "/assets/gallery/v0.4/showcases/showcases_gpu_particle_smoke.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "scene-buffers",
        "storage-buffers",
        "scene-compute",
        "point",
        "alpha-blending"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=showcases_gpu_particle_smoke",
        "requirements": [
          "scene-buffers",
          "storage-buffers",
          "scene-compute",
          "point",
          "alpha-blending"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=showcases_gpu_particle_smoke",
      "webgpu_site_route": "/examples/webgpu/live.html?id=showcases_gpu_particle_smoke",
      "python_source": "examples/python/gallery/showcases/gpu_particle_smoke.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/showcases/gpu_particle_smoke.py"
    },
    {
      "id": "showcases_spherical_harmonics",
      "title": "Spherical Harmonics",
      "category": "showcase",
      "lane": "showcases",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/showcases/spherical_harmonics.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/showcases/spherical_harmonics.c",
      "page": "gallery/showcases/showcases_spherical_harmonics.md",
      "summary": "This example turns a real spherical-harmonic blend into a lit mesh.",
      "validation": "smoke+interaction+screenshot",
      "build_command": "just example-c showcases/spherical_harmonics",
      "smoke_command": "./build/examples/c/showcases/spherical_harmonics --png",
      "tags": [
        "scientific",
        "generated",
        "spherical-harmonics",
        "icosphere",
        "mesh",
        "material",
        "arcball",
        "animation"
      ],
      "data": {
        "kind": "generated"
      },
      "data_kind": "generated",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/showcases/showcases_spherical_harmonics.png",
          "site_asset": "/assets/gallery/v0.4/showcases/showcases_spherical_harmonics.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "mesh",
        "material",
        "arcball",
        "frame-callbacks",
        "continuous-frames"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=showcases_spherical_harmonics",
        "requirements": [
          "mesh",
          "material",
          "arcball",
          "frame-callbacks",
          "continuous-frames"
        ],
        "rendering_effects": [
          {
            "effect": "msaa",
            "status": "unavailable",
            "warning": "The desktop example enables 8x MSAA for smoother mesh silhouettes; the WebGPU route is currently single-sampled."
          }
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=showcases_spherical_harmonics",
      "webgpu_site_route": "/examples/webgpu/live.html?id=showcases_spherical_harmonics",
      "python_source": "examples/python/gallery/showcases/spherical_harmonics.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/showcases/spherical_harmonics.py"
    },
    {
      "id": "showcases_surface_grid",
      "title": "Surface Grid",
      "category": "showcase",
      "lane": "showcases",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/showcases/surface_grid.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/showcases/surface_grid.c",
      "page": "gallery/showcases/showcases_surface_grid.md",
      "summary": "This example turns a generated height field into a lit mesh and wireframe.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c showcases/surface_grid",
      "smoke_command": "./build/examples/c/showcases/surface_grid --png",
      "tags": [
        "scientific",
        "synthetic",
        "surface-grid",
        "mesh",
        "wireframe",
        "arcball"
      ],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/showcases/showcases_surface_grid.png",
          "site_asset": "/assets/gallery/v0.4/showcases/showcases_surface_grid.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "mesh",
        "segment",
        "arcball"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=showcases_surface_grid",
        "requirements": [
          "mesh",
          "segment",
          "arcball"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=showcases_surface_grid",
      "webgpu_site_route": "/examples/webgpu/live.html?id=showcases_surface_grid",
      "python_source": "examples/python/gallery/showcases/surface_grid.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/showcases/surface_grid.py"
    },
    {
      "id": "showcases_terrain_relief",
      "title": "McHenrys Peak Terrain Relief",
      "category": "showcase",
      "lane": "showcases",
      "stage": "v0.4_experimental",
      "status": "experimental",
      "source": "examples/c/showcases/terrain_relief.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/showcases/terrain_relief.c",
      "page": "gallery/showcases/showcases_terrain_relief.md",
      "summary": "This example drapes aligned NAIP orthoimagery over USGS 3DEP elevation.",
      "validation": "smoke+interaction+screenshot+video",
      "build_command": "just example-c showcases/terrain_relief",
      "smoke_command": "./build/examples/c/showcases/terrain_relief --png",
      "tags": [
        "scientific",
        "real-data",
        "terrain",
        "dem",
        "orthoimagery",
        "surface-grid",
        "mesh",
        "sampled-field",
        "texture",
        "material",
        "arcball",
        "camera",
        "msaa"
      ],
      "data": {
        "kind": "prepared"
      },
      "data_kind": "prepared",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/showcases/showcases_terrain_relief.png",
          "site_asset": "/assets/gallery/v0.4/showcases/showcases_terrain_relief.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "mesh",
        "sampled-field",
        "texture",
        "arcball",
        "camera",
        "material",
        "msaa",
        "prepared-data"
      ],
      "webgpu_reason": "the portable scenario fetches the versioned USGS/USDA terrain bundle before creation",
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=showcases_terrain_relief",
        "data_bundles": [
          {
            "id": "terrain_relief",
            "source": "data/examples/terrain_relief/manifest.json",
            "url": "webgpu-data/examples/terrain_relief/sha256-0539b707993348c0/manifest.json",
            "virtual_root": "data/examples/terrain_relief",
            "required": true
          }
        ],
        "requirements": [
          "mesh",
          "sampled-field",
          "texture",
          "arcball",
          "camera",
          "material",
          "msaa",
          "prepared-data"
        ],
        "rendering_effects": [
          {
            "effect": "msaa",
            "status": "limited",
            "warning": "The desktop example requests 8x MSAA; the WebGPU route lowers this to the supported 4x sample count."
          }
        ],
        "reason": "the portable scenario fetches the versioned USGS/USDA terrain bundle before creation"
      },
      "webgpu_route": "examples/webgpu/live.html?id=showcases_terrain_relief",
      "webgpu_site_route": "/examples/webgpu/live.html?id=showcases_terrain_relief",
      "dataset": {
        "name": "McHenrys Peak USGS 3DEP terrain and NAIP orthoimagery",
        "source": "USGS 3D Elevation Program and USDA National Agriculture Imagery Program",
        "source_url": "https://elevation.nationalmap.gov/arcgis/rest/services/3DEPElevation/ImageServer; https://imagery.nationalmap.gov/arcgis/rest/services/USGSNAIPPlus/ImageServer",
        "license": "USGS 3DEP products and USDA NAIP imagery are public domain; credit the U.S. Geological Survey and USDA National Agriculture Imagery Program as the data sources.",
        "citation": "U.S. Geological Survey 3D Elevation Program; USDA National Agriculture Imagery Program.",
        "preprocessing": "uv run tools/data/prepare_terrain_relief.py",
        "prepared_source": "data/examples/terrain_relief/prepared/terrain.bin; data/examples/terrain_relief/prepared/terrain.jpg",
        "cache_prepared_path": ".cache/datoviz/examples/terrain_relief/prepared",
        "provenance": "An aligned 6.95 by 7.27 km crop around McHenrys Peak and Glacier Gorge is exported from the public USGS image services into NAD83 / UTM zone 13N. The bare-earth DEM drives the mesh and the natural-color orthoimage supplies its sampled texture. Exact export requests, service descriptions, extents, and artifact checksums are retained in the cache manifest."
      },
      "encoding": {
        "elevation": "490 by 512 little-endian float32 meters, row-major north to south",
        "texture": "1960 by 2048 RGB JPEG over the identical projected extent",
        "geometry": "physical UTM aspect ratio with 1.35x vertical exaggeration"
      },
      "python_source": "examples/python/gallery/showcases/terrain_relief.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/showcases/terrain_relief.py"
    },
    {
      "id": "showcases_cortical_activity",
      "title": "Human Auditory Cortical Activity",
      "category": "showcase",
      "lane": "showcases",
      "stage": "v0.4_experimental",
      "status": "experimental",
      "source": "examples/c/showcases/cortical_activity.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/showcases/cortical_activity.c",
      "page": "gallery/showcases/showcases_cortical_activity.md",
      "summary": "This example animates a human auditory dSPM estimate on cortex.",
      "validation": "smoke+interaction+screenshot+video+performance",
      "build_command": "just example-c showcases/cortical_activity",
      "smoke_command": "./build/examples/c/showcases/cortical_activity --png",
      "tags": [
        "scientific",
        "real-data",
        "human-brain",
        "cortical-surface",
        "meg",
        "dspm",
        "mesh",
        "full-resolution",
        "spherical-interpolation",
        "gui",
        "material",
        "colorbar",
        "arcball",
        "animation"
      ],
      "data": {
        "kind": "prepared"
      },
      "data_kind": "prepared",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/showcases/showcases_cortical_activity.png",
          "site_asset": "/assets/gallery/v0.4/showcases/showcases_cortical_activity.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "mesh",
        "material",
        "colorbar",
        "arcball",
        "buffer-update",
        "frame-callbacks",
        "continuous-frames"
      ],
      "webgpu_reason": "the portable scenario fetches the versioned CC0 cortical activity bundle before creation",
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=showcases_cortical_activity",
        "data_bundles": [
          {
            "id": "cortical_activity",
            "source": "data/examples/cortical_activity/manifest.json",
            "url": "webgpu-data/examples/cortical_activity/sha256-4b8e4d31566009f3/manifest.json",
            "virtual_root": "data/examples/cortical_activity",
            "required": true
          }
        ],
        "requirements": [
          "mesh",
          "material",
          "colorbar",
          "arcball",
          "buffer-update",
          "frame-callbacks",
          "continuous-frames"
        ],
        "rendering_effects": [
          {
            "effect": "msaa",
            "status": "unavailable",
            "warning": "The desktop example enables MSAA for smoother cortical mesh edges; the WebGPU route is currently single-sampled."
          }
        ],
        "reason": "the portable scenario fetches the versioned CC0 cortical activity bundle before creation"
      },
      "webgpu_route": "examples/webgpu/live.html?id=showcases_cortical_activity",
      "webgpu_site_route": "/examples/webgpu/live.html?id=showcases_cortical_activity",
      "dataset": {
        "name": "MNE audiovisual sample auditory MEG dSPM",
        "source": "OpenNeuro ds000248 snapshot 1.2.4",
        "source_url": "https://openneuro.org/datasets/ds000248/versions/1.2.4",
        "license": "CC0",
        "citation": "OpenNeuro ds000248 v1.2.4, DOI 10.18112/openneuro.ds000248.v1.2.4",
        "preprocessing": "uv run --isolated --with mne==1.12.1 --with mne-bids==0.19.0 --with nibabel==5.4.2 --with numpy==2.3.4 --with scipy==1.18.0 --with requests python tools/data/prepare_cortical_activity.py",
        "cache_prepared_path": ".cache/datoviz/examples/cortical_activity/prepared",
        "provenance": "Measured left-ear auditory MEG trials are averaged and mapped to an 8,196-vertex oct6 source grid with a baseline-noise-normalized minimum-norm inverse (dSPM). The complete 319,834-vertex FreeSurfer cortex is a separate render domain. Each render vertex receives activity from one hemisphere-local spherical oct6 triangle with three validated barycentric weights. dSPM is a model-derived dimensionless source estimate, not a direct measurement of neuronal firing or absolute current amplitude."
      },
      "encoding": {
        "position": "complete 319,834-vertex bilateral participant-native FreeSurfer pial surface with one shared uniform scale; whole-brain and split-lateral layouts preserve anatomical aspect ratio",
        "color": "oct6 dSPM values interpolated through hemisphere-local spherical triangles onto the render mesh, then mapped with sequential magma over neutral graphite anatomy; tuned 5.668/10.387/15.783 dSPM limits remain editable in explicit live mode",
        "time": "0 to 240 ms after the left-ear tone, linearly interpolated between source-estimate frames; the initial frame is paused at a tuned 106 ms near the strongest response"
      },
      "python_source": "examples/python/gallery/showcases/cortical_activity.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/showcases/cortical_activity.py"
    },
    {
      "id": "showcases_brain_volume",
      "title": "Allen Mouse Brain",
      "category": "showcase",
      "lane": "showcases",
      "stage": "v0.4_required",
      "status": "prototype",
      "source": "examples/c/showcases/brain_volume.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/showcases/brain_volume.c",
      "page": "gallery/showcases/showcases_brain_volume.md",
      "summary": "This example renders a prepared Allen mouse brain volume with a visible slice.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c showcases/brain_volume",
      "smoke_command": "./build/examples/c/showcases/brain_volume --png",
      "tags": [
        "scientific",
        "real-data",
        "volume",
        "volume-slice",
        "volume-occlusion",
        "arcball",
        "capture"
      ],
      "data": {
        "kind": "prepared"
      },
      "data_kind": "prepared",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/showcases/showcases_brain_volume.png",
          "site_asset": "/assets/gallery/v0.4/showcases/showcases_brain_volume.webp"
        }
      },
      "webgpu_status": "webgpu-planned",
      "webgpu_status_label": "Planned",
      "webgpu_requirements": [
        "volume",
        "texture-3d",
        "arcball"
      ],
      "webgpu": {
        "status": "webgpu-planned",
        "requirements": [
          "volume",
          "texture-3d",
          "arcball"
        ]
      },
      "dataset": {
        "name": "Allen mouse brain RGBA volume",
        "source": "Allen Mouse Brain Common Coordinate Framework average template, annotation volume, structure graph, and selected structure meshes",
        "source_url": "http://download.alleninstitute.org/informatics-archive/current-release/mouse_ccf/; https://alleninstitute.org/legal/terms-of-use",
        "license": "Allen Institute Terms of Use apply; public use must follow Allen Institute citation requirements.",
        "citation": "Allen Mouse Brain Common Coordinate Framework / Allen Brain Atlas; cite Allen Institute source material and CCF references.",
        "prepared_source": "data/examples/allen_ibl/prepared/allen_mouse_brain_rgba.npy.gz",
        "preprocessing": "python tools/data/prepare_brain_volume.py",
        "provenance": "Prepared from Allen CCF anatomical and annotation volumes plus selected structure meshes into a compact RGBA volume consumed by the C showcase. The committed file is a prepared data-submodule artifact; upstream Allen terms remain the source license boundary."
      },
      "python_source": "examples/python/gallery/showcases/brain_volume.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/showcases/brain_volume.py"
    },
    {
      "id": "showcases_point_cloud",
      "title": "Point Cloud",
      "category": "showcase",
      "lane": "showcases",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/showcases/point_cloud.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/showcases/point_cloud.c",
      "page": "gallery/showcases/showcases_point_cloud.md",
      "summary": "This example renders a prepared RGB LiDAR point cloud with direct colors.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c showcases/point_cloud",
      "smoke_command": "./build/examples/c/showcases/point_cloud --png",
      "tags": [
        "real-data",
        "pixel",
        "dense-point-cloud",
        "direct-color",
        "eye-dome-lighting",
        "gui",
        "fly",
        "capture"
      ],
      "data": {
        "kind": "prepared"
      },
      "data_kind": "prepared",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/showcases/showcases_point_cloud.png",
          "site_asset": "/assets/gallery/v0.4/showcases/showcases_point_cloud.webp"
        }
      },
      "webgpu_status": "webgpu-deferred",
      "webgpu_status_label": "Deferred",
      "webgpu_requirements": [
        "pixel",
        "dense-point-cloud",
        "fly",
        "prepared-data"
      ],
      "webgpu_reason": "the browser route renders a prepared 500k-point subset locally, but the source LiDAR dataset is third-party (Inertial Labs RESEPI sample data, all rights reserved) and cannot be redistributed as a public web data bundle",
      "webgpu": {
        "status": "webgpu-deferred",
        "requirements": [
          "pixel",
          "dense-point-cloud",
          "fly",
          "prepared-data"
        ],
        "rendering_effects": [
          {
            "effect": "edl",
            "status": "unavailable",
            "warning": "The desktop example enables eye-dome lighting; the WebGPU route uses direct point rendering."
          }
        ],
        "reason": "the browser route renders a prepared 500k-point subset locally, but the source LiDAR dataset is third-party (Inertial Labs RESEPI sample data, all rights reserved) and cannot be redistributed as a public web data bundle"
      },
      "dataset": {
        "name": "RESEPI GENM2X colorized benchmark point cloud",
        "source": "https://lidarpayload.com/sample-data/",
        "license": "Public RESEPI sample data; usage follows the source site's terms",
        "preprocessing": "python tools/data/prepare_point_cloud.py --force",
        "cache_prepared_path": ".cache/datoviz/examples/point_cloud/prepared"
      },
      "python_source": "examples/python/gallery/showcases/point_cloud.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/showcases/point_cloud.py"
    },
    {
      "id": "showcases_textured_planet",
      "title": "Textured Planets and Orbital Debris",
      "category": "showcase",
      "lane": "showcases",
      "stage": "v0.4_required",
      "status": "supported",
      "source": "examples/c/showcases/textured_planet.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/showcases/textured_planet.c",
      "page": "gallery/showcases/showcases_textured_planet.md",
      "summary": "This example combines a textured Earth with real catalogued orbital debris.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c showcases/textured_planet",
      "smoke_command": "./build/examples/c/showcases/textured_planet --png",
      "tags": [
        "real-data",
        "mesh",
        "sampled-field",
        "texture",
        "arcball",
        "point",
        "path",
        "animation",
        "orbital-debris",
        "celestrak",
        "sgp4",
        "gaia",
        "2mass",
        "gui",
        "capture"
      ],
      "data": {
        "kind": "prepared"
      },
      "data_kind": "prepared",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/showcases/showcases_textured_planet.png",
          "site_asset": "/assets/gallery/v0.4/showcases/showcases_textured_planet.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "mesh",
        "sampled-field",
        "texture",
        "arcball",
        "point",
        "path",
        "buffer-update",
        "frame-callbacks"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=showcases_textured_planet",
        "data_bundles": [
          {
            "id": "orbital_debris",
            "source": "data/examples/orbital_debris/manifest.json",
            "url": "webgpu-data/examples/orbital_debris/sha256-5ae33a50aeb8fa81/manifest.json",
            "virtual_root": "data/examples/orbital_debris",
            "required": true
          },
          {
            "id": "planet_sky",
            "source": "data/examples/planet_sky/manifest.json",
            "url": "webgpu-data/examples/planet_sky/sha256-ca8592458acb5ae2/manifest.json",
            "virtual_root": "data/examples/planet_sky",
            "required": true
          }
        ],
        "requirements": [
          "mesh",
          "sampled-field",
          "texture",
          "arcball",
          "point",
          "path",
          "buffer-update",
          "frame-callbacks"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=showcases_textured_planet",
      "webgpu_site_route": "/examples/webgpu/live.html?id=showcases_textured_planet",
      "dataset": {
        "name": "NASA/USGS planet textures, CelesTrak debris, and Gaia/2MASS celestial sky",
        "source": "data/assets/textures/world.200412.3x5400x2700.jpg; data/assets/textures/earth.jpg; data/assets/textures/mars_viking_mdim21.jpg; CelesTrak GP element sets for FENGYUN 1C, IRIDIUM 33, and COSMOS 2251 debris; Gaia DR3 bright-star astrometry/photometry; NASA Photojournal PIA04250 2MASS all-sky map",
        "source_url": "https://science.nasa.gov/earth/earth-observatory/blue-marble-next-generation/; https://astrogeology.usgs.gov/search/map/mars_viking_colorized_global_mosaic_232m; https://celestrak.org/NORAD/documentation/gp-data-formats.php; https://gea.esac.esa.int/archive/; https://science.nasa.gov/photojournal/point-source-all-sky/",
        "license": "NASA media usage guidelines and USGS/NASA public-domain source-data terms apply; acknowledge NASA, NASA Ames, JPL, and USGS as source where relevant. CelesTrak data use must follow https://celestrak.org/usage-policy.php and retain source attribution. Gaia ESA/DPAC acknowledgement and 2MASS/IPAC-Caltech/UMass attribution requirements apply.",
        "citation": "NASA Blue Marble Next Generation; USGS Astrogeology Mars Viking Colorized Global Mosaic 232m / Mars Digital Image Model 2.1; CelesTrak; Vallado, Crawford, Hujsak, and Kelso, Revisiting Spacetrack Report #3, AIAA 2006-6753; Gaia DR3 ESA/Gaia/DPAC; 2MASS Point Source Catalog/Stars All Sky View, IPAC-Caltech/University of Massachusetts.",
        "preprocessing": "uv run tools/data/prepare_orbital_debris.py --force && uv run tools/data/prepare_planet_sky.py --force",
        "cache_prepared_path": ".cache/datoviz/examples/orbital_debris/prepared; .cache/datoviz/examples/planet_sky/prepared",
        "provenance": "Earth uses NASA Blue Marble Next Generation texture assets; Mars uses the USGS Astrogeology/NASA Ames/JPL/USGS Viking MDIM 2.1 colorized global mosaic. Debris points are tracked catalog objects from three selected fragmentation events, propagated from a dated CelesTrak GP snapshot with SGP4 into a two-hour Earth-fixed point ephemeris and one closed full-period display trajectory per object. This is not the full debris environment; point sizes are exaggerated and do not encode physical object size. Bright stars use Gaia DR3 celestial positions, G magnitude, and BP-RP color, with a restrained halo for the brightest stars. The Milky Way layer continuously reprojects the 2MASS infrared false-color Hammer map onto a celestial sphere. Both sky layers are oriented to the debris snapshot using GMST; their shell radius is display-only."
      },
      "encoding": {
        "position": "SGP4 TEME position rotated to approximate Earth-fixed coordinates and normalized by Earth radius",
        "color": "cyan FENGYUN 1C, amber IRIDIUM 33, coral COSMOS 2251",
        "time": "120-minute prepared point ephemeris shown at 60x real time; shared globe rotation enabled by default",
        "path": "closed full-period SGP4 trajectory in the snapshot planet frame",
        "stars": "antialiased Gaia DR3 discs with G-magnitude prominence, BP-RP color, and bright-star halos",
        "galaxy": "continuous equirectangular reprojection of the 2MASS Hammer infrared map in galactic coordinates"
      },
      "python_source": "examples/python/gallery/showcases/textured_planet.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/showcases/textured_planet.py"
    },
    {
      "id": "advanced_raw_triangle_vklite",
      "title": "Raw Triangle Vklite",
      "category": "advanced",
      "lane": "advanced",
      "stage": "v0.4_experimental",
      "status": "experimental",
      "source": "examples/c/advanced/raw_triangle_vklite.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/advanced/raw_triangle_vklite.c",
      "page": "gallery/advanced/advanced_raw_triangle_vklite.md",
      "summary": "This example draws one RGB triangle with manual vklite commands.",
      "validation": "smoke+png",
      "build_command": "just example-c advanced/raw_triangle_vklite",
      "smoke_command": "./build/examples/c/advanced/raw_triangle_vklite --png",
      "tags": [
        "advanced",
        "vklite",
        "canvas",
        "low-level"
      ],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": false,
          "status": "not-required",
          "source": "data/gallery/v0.4/advanced/advanced_raw_triangle_vklite.png",
          "site_asset": "/assets/gallery/v0.4/advanced/advanced_raw_triangle_vklite.webp"
        }
      },
      "webgpu_status": "native-only",
      "webgpu_status_label": "Native only",
      "webgpu_requirements": [
        "vklite",
        "canvas"
      ],
      "webgpu_reason": "raw vklite command recording is a native runtime example",
      "webgpu": {
        "status": "native-only",
        "requirements": [
          "vklite",
          "canvas"
        ],
        "reason": "raw vklite command recording is a native runtime example"
      }
    },
    {
      "id": "advanced_raw_triangle_drp2",
      "title": "Raw Triangle DRP2",
      "category": "advanced",
      "lane": "advanced",
      "stage": "v0.4_experimental",
      "status": "experimental",
      "source": "examples/c/advanced/raw_triangle_drp2.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/advanced/raw_triangle_drp2.c",
      "page": "gallery/advanced/advanced_raw_triangle_drp2.md",
      "summary": "This example renders one triangle from a hand-written DRP2 command stream.",
      "validation": "smoke+png",
      "build_command": "just example-c advanced/raw_triangle_drp2",
      "smoke_command": "./build/examples/c/advanced/raw_triangle_drp2 --png",
      "tags": [
        "advanced",
        "drp2",
        "vklite",
        "low-level"
      ],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": false,
          "status": "not-required",
          "source": "data/gallery/v0.4/advanced/advanced_raw_triangle_drp2.png",
          "site_asset": "/assets/gallery/v0.4/advanced/advanced_raw_triangle_drp2.webp"
        }
      },
      "webgpu_status": "native-only",
      "webgpu_status_label": "Native only",
      "webgpu_requirements": [
        "drp2",
        "vklite"
      ],
      "webgpu_reason": "hand-written DRP2 native execution is a low-level runtime example",
      "webgpu": {
        "status": "native-only",
        "requirements": [
          "drp2",
          "vklite"
        ],
        "reason": "hand-written DRP2 native execution is a low-level runtime example"
      }
    },
    {
      "id": "advanced_external_surface_glfw",
      "title": "External Surface GLFW",
      "category": "advanced",
      "lane": "advanced",
      "stage": "v0.4_experimental",
      "status": "experimental",
      "source": "examples/c/advanced/external_surface_glfw.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/advanced/external_surface_glfw.c",
      "page": "gallery/advanced/advanced_external_surface_glfw.md",
      "summary": "This example embeds a Datoviz view inside a host-owned GLFW surface.",
      "validation": "native-smoke",
      "build_command": "just example-c advanced/external_surface_glfw",
      "smoke_command": "./build/examples/c/advanced/external_surface_glfw --png",
      "tags": [
        "advanced",
        "external-surface",
        "glfw",
        "host-integration"
      ],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": false,
          "status": "not-required",
          "source": "data/gallery/v0.4/advanced/advanced_external_surface_glfw.png",
          "site_asset": "/assets/gallery/v0.4/advanced/advanced_external_surface_glfw.webp"
        }
      },
      "webgpu_status": "native-only",
      "webgpu_status_label": "Native only",
      "webgpu_requirements": [
        "native-view",
        "external-surface",
        "glfw"
      ],
      "webgpu_reason": "external Vulkan surfaces are native host-integration objects",
      "webgpu": {
        "status": "native-only",
        "requirements": [
          "native-view",
          "external-surface",
          "glfw"
        ],
        "reason": "external Vulkan surfaces are native host-integration objects"
      }
    },
    {
      "id": "advanced_qt_hosting",
      "title": "Qt Hosting",
      "category": "advanced",
      "lane": "advanced",
      "stage": "v0.4_optional_provider",
      "status": "supported",
      "source": "examples/qt/qt_hosting.cpp",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/qt/qt_hosting.cpp",
      "page": "gallery/advanced/advanced_qt_hosting.md",
      "summary": "This example hosts a Datoviz Vulkan scene in live Qt Widgets.",
      "validation": "optional-native-smoke+screenshot",
      "build_command": "DVZ_CMAKE_ARGS=\"-DDVZ_ENABLE_QT_BRIDGE=ON\" just build",
      "smoke_command": "./build/examples/qt/qt_hosting --smoke-ms 1000",
      "tags": [
        "advanced",
        "qt",
        "pyqt",
        "optional-provider",
        "external-surface",
        "host-integration"
      ],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/advanced/advanced_qt_hosting.png",
          "site_asset": "/assets/gallery/v0.4/advanced/advanced_qt_hosting.webp"
        }
      },
      "webgpu_status": "native-only",
      "webgpu_status_label": "Native only",
      "webgpu_requirements": [
        "native-view",
        "external-surface",
        "qt",
        "optional-provider"
      ],
      "webgpu_reason": "Qt and PyQt hosting use native toolkit windows and an optional bridge provider",
      "webgpu": {
        "status": "native-only",
        "requirements": [
          "native-view",
          "external-surface",
          "qt",
          "optional-provider"
        ],
        "reason": "Qt and PyQt hosting use native toolkit windows and an optional bridge provider"
      }
    },
    {
      "id": "start_scatter",
      "title": "Scatter Plot",
      "category": "start",
      "lane": "start",
      "stage": "",
      "status": "supported",
      "source": "examples/c/start/scatter.c",
      "source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/c/start/scatter.c",
      "page": "../start/quickstart.md",
      "summary": "This example renders a quickstart scatter plot with 10 000 random colored points.",
      "validation": "smoke+screenshot",
      "build_command": "just example-c start/scatter",
      "smoke_command": "./build/examples/c/start/scatter --png",
      "tags": [],
      "data": {
        "kind": "synthetic"
      },
      "data_kind": "synthetic",
      "media": {
        "screenshot": {
          "expected": true,
          "status": "available",
          "source": "data/gallery/v0.4/start/start_scatter.png",
          "site_asset": "/assets/gallery/v0.4/start/start_scatter.webp"
        }
      },
      "webgpu_status": "webgpu-live",
      "webgpu_status_label": "Live in browser",
      "webgpu_requirements": [
        "point",
        "controller",
        "panzoom"
      ],
      "webgpu": {
        "status": "webgpu-live",
        "route": "examples/webgpu/live.html?id=start_scatter",
        "requirements": [
          "point",
          "controller",
          "panzoom"
        ]
      },
      "webgpu_route": "examples/webgpu/live.html?id=start_scatter",
      "webgpu_site_route": "/examples/webgpu/live.html?id=start_scatter",
      "python_source": "examples/python/gallery/start/scatter.py",
      "python_source_url": "https://github.com/datoviz/datoviz/blob/v0.4-dev/examples/python/gallery/start/scatter.py",
      "python_status": "manual"
    }
  ]
}
