Skip to content

[catalog] Feature checklist: stock vs. custom STAC Browser decision #1465

Description

@siligam

Context

ESM STAC Catalog has grown a rich set of features. With limited funding, the team needs to decide which features to keep and whether maintaining a custom STAC Browser fork is justified.

This issue collects all implemented and planned features as a decision-aid checklist for the upcoming team discussion. Features are grouped by:

  • Maintenance tier: 🟢 works with stock browser / 🟡 custom API only (no browser changes) / 🔴 requires custom browser fork
  • Priority: ⭐ must-have / 💡 nice-to-have / ❓ undecided
  • Status: ✅ implemented / 📋 planned
  • Iteration: 1️⃣ / 2️⃣ / 3️⃣

The full checklist lives in esm-tools-plus-simcat-features-checklist.md on branch esm-tools-plus/simcat/llm-mcp.


Central Trade-off

Everything in the API/backend layer — scanning, DuckDB, STAC API, CQL2 filtering, NML/paleo/HPC metadata, MCP/LLM tools — works with the stock STAC Browser or no browser at all.

The custom browser fork adds only:

Browser-only feature Workaround without fork?
Namelist (NML) search UI Yes – MCP search_collections tool or direct CQL2 API
Visualization panel (click-to-plot) Yes – MCP preview_item tool
Python code snippets panel Yes – MCP open_and_run / manual scripting
CQL2 NOT operator fix (upstream bug) Submit PR to upstream STAC Browser repo
Personal collections UI No UI workaround; backend API exists
Collection badges on item cards Minor UX loss only

Decision Scenarios

Option Browser maintenance effort What you get
A: Stock browser only Zero All backend/API/MCP features; NML search via API/MCP only
B: Stock browser + upstream NOT-fix PR Minimal (one-time PR) Same as A, plus CQL2 NOT queries working in browser
C: Maintain custom browser fork High (JS/Vue + tracking upstream releases) All currently implemented features
D: API + MCP only, no browser Zero Full API + LLM/MCP access; no click-to-explore browser UI

Feature Checklist (abbreviated)

Core Cataloging — all 🟢 stock browser compatible

  • ✅ ⭐ 1️⃣ Scan NetCDF / GRIB / extension-less files
  • ✅ ❓Remote filesystem scanning (SSH, ScoutFS/tape, S3)
  • ✅ ⭐ 1️⃣ Parallel + SLURM batch scanning
  • ✅ ⭐ 1️⃣ DuckDB storage (per-experiment, portable)
  • ✅ ⭐ 1️⃣ ESM-Tools live integration (add_files() from tidy phase)
  • ✅ ⭐ 1️⃣ Catalog federation (multiple experiments as one API)

Standard STAC API — all 🟢 stock browser compatible

  • ✅ ⭐ 1️⃣ Item search, CQL2 filtering, queryables
  • ✅ ⭐ 1️⃣ Collection browsing and filtering
  • ✅ ⭐ 3️⃣ Health/readiness probes -> Kubernetes -> needed for load balancing if a lot of people start accessing/modifying

Science-Specific Search

  • ✅ ⭐ 1️⃣ 🔴 Namelist (NML) parameter search — API works stock; browser UI needs fork
  • ✅ ⭐ 1️⃣ 🟡 Paleo time search (paleo:year, presets: LGM, Eemian, Mid-Holocene)
  • ✅ ⭐ 1️⃣ 🟡 HPC storage state (online/nearline/offline, tape recall time) -> Location (DKRZ, AWI, ...) and state (levante, albedo, tape...) (static)
  • ✅ ⭐ 1️⃣ 🟢 FESOM unstructured grid metadata

Visualization

  • ✅ 💡2️⃣/3️⃣ 🔴 ESM Visualization Service browser panel — needs fork; MCP path works without it -> most expensive, requires a server in location, up to the user/location admins
  • ✅ 💡2️⃣/3️⃣ 🟡 FESOM triangular mesh rendering (via MCP preview_item) -> depends on the previous item

LLM / MCP Tools — all 🟡, zero browser dependency

  • ✅ ⭐ 2️⃣/3️⃣ list_collections, get_collection_info, search_collections, search_items
  • ✅ 💡 2️⃣/3️⃣ preview_item, open_and_run, run_python, compare_collections
  • ✅ 💡2️⃣/3️⃣ Multiple transports: stdio, streamable-HTTP (Open WebUI), SSE, OpenAPI
  • Make an issue to discuss options and requirements, run locally (in the HPCs) vs run globally in the Browser GUI

Access Control

  • ✅ ⭐ 2️⃣ 🟡 JupyterHub authentication + group-based write access
  • 📋 ⭐ 2️⃣ 🟡 Read-only public metadata tier for Helmholtz (metadata only, no file paths)
  • 1️⃣ First approach with some access control general assumptions (at AWI) -> in 2️⃣ more granular access (at Helmholz level) control will be enabled and run a workshop for showing how to manage access to already submitted simulations

Browser Fork–Specific (lost if switching to stock)

  • ✅ ⭐ 1️⃣ 🔴 CQL2 NOT operator fix (upstream bug — candidate for upstream PR)
  • ✅ 💡 🔴 Visualization panel
  • ✅ 💡 1️⃣ 🔴 Python code snippets
  • ✅ ⭐ 1️⃣ 🔴 collection badges

Catalogue Server

  • ✅ ⭐ 1️⃣ Virtual machine for hosting the catalogue, browser, etc, services

Questions for the Team

  • Who are the primary users — Python scripters or non-programmers needing a browser UI?
  • Is maintaining a JS/Vue browser fork sustainable with current funding?
  • Is the CQL2 NOT fix worth submitting as a PR to the upstream STAC Browser project?
  • Is click-to-visualize in the browser a must-have, or is the MCP/LLM path sufficient?
  • Does the Helmholtz public metadata tier require any browser changes, or is it purely API-side?
  • Should personal collections / run quality annotations be prioritised enough to justify fork maintenance?

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions