Glossary

A reference for the domain concepts and project-specific terms used throughout dwd-cli. The data comes from the Deutscher Wetterdienst (DWD) Warnwetter app backend (warnwetter.de); the domain is German, so this glossary gives the English term used in the CLI/API alongside the original German where one exists.

Translation table. The CLI follows these:

German English / API term
Warnung warning
Gemeinde municipality
Küste / Binnensee coast / inland lake
Vorhersage forecast
Meldung (crowd-sourced) report
Wetterstation weather station

The DWD Warnwetter source

DWD — Deutscher Wetterdienst. Germany’s national meteorological service. It operates the public weather-warning system and the Warnwetter app, whose backend this tool wraps.

Warnwetter app. DWD’s official weather-warning app for the public. Its backend serves both live station forecasts and the periodically-published warning feeds; both are open (no authentication) and read-only.

warnwetter.de. The host domain of the Warnwetter backend. The data is split across two hosts (see Live web service and Static S3 bucket).

Open / no-auth endpoints. The endpoints this client uses require no API key. They are all GET and read-only; dwd-cli never writes.


The two hosts

Live web service. https://app-prod-ws.warnwetter.de/v30 — the live backend that answers station-overview requests, queried with parameters. CLI override: --base-url; the path version segment is /v30.

Static S3 bucket. https://s3.eu-central-1.amazonaws.com/app-prod-static.warnwetter.de/v16 — an Amazon S3 bucket holding the periodically-published warning and crowd feeds as static JSON files. CLI override: --static-base-url; the path version segment is /v16.

gzip-encoded feeds. The static warning files are stored on S3 with Content-Encoding: gzip and are served compressed regardless of the request’s Accept-Encoding. The client’s transport transparently decompresses gzip/deflate/brotli bodies.


Resources & endpoints

Station overview (stationOverviewExtended). Forecasts/observations for one or more DWD weather stations, returned by the live web service. The response is an object keyed by station id; each value carries forecast1, forecast2, days, warnings and threeHourSummaries. Client: client.weather.stationOverview(ids). CLI: station-overview --id <stationId>.

Nowcast warnings (warnings_nowcast.json). Short-term (“nowcast”) weather warnings — imminent severe weather. Static-bucket feed. Client: client.warnings.nowcast(lang). CLI: warnings nowcast.

Gemeinde warnings (gemeinde_warnings_v2.json). Municipality-level weather warnings, i.e. warnings resolved to the German Gemeinde (municipality). Static feed. Client: client.warnings.gemeinde(lang). CLI: warnings gemeinde.

Coast warnings (warnings_coast.json). Coastal weather warnings, with warnings keyed by coastal zone (and inland-lake / Binnensee areas). Unlike the nowcast and Gemeinde items, coast items carry no regions geometry and no start/end. Static feed. Client: client.warnings.coast(lang). CLI: warnings coast.

Crowd overview (crowd_meldungen_overview_v2.json). An overview of crowd-sourced weather reports (Meldungen) submitted by app users. Static feed. Client: client.crowd(). CLI: crowd.


Identifiers, units & response fields

Station id. The identifier of a DWD weather station, used by the Warnwetter app — typically a 5-digit numeric id (e.g. München-Stadt = 10865). Repeatable on the CLI (--id 10865 --id 01766); a single value may also be a comma-separated list (--id 10865,01766), and the two forms are equivalent — both are sent to the web service joined by commas as stationIds=10865,01766.

forecast1 / forecast2. Two forecast series carried per station in a station overview. forecast1 is hourly (timeStep 3600000) from midnight of the current day: temperature runs ten days from start, while the shorter arrays (precipitationTotal, sunshine, humidity, …) are end-aligned at start + 72 h rather than anchored at start. forecast2 continues from there in three-hour steps (timeStep 10800000); it is not an hourly copy of forecast1.

days. The multi-day forecast summary block of a station overview.

threeHourSummaries. Three-hour aggregated forecast summaries within a station overview.

warnings (station). The warnings block embedded in a station overview, i.e. warnings relevant to that station’s location.

time. The Unix-epoch timestamp (a number) stamped on every warning feed envelope, marking when that feed was generated.

binnenSee. Inland lake. An optional block on the nowcast/gemeinde warning envelopes carrying inland-lake (large-lake) warnings. With none active it has come back as null (nowcast) and {} (gemeinde).

meldungen. The array of crowd-sourced reports in the crowd overview. May be accompanied by start, end and highestSeverities. start/end bound the window the reports cover (12 hours when checked); the feed’s windowsSizeHours field did not match that window, so each report’s timestamp is the reliable time.

Coastal zone. The key by which coastal warnings are grouped in the coast feed (each zone maps to its own warnings object).


Enums & codes the client surfaces

Lang (de | en). The language of a warning feed. German (de, the default) feeds have no filename suffix; English (en) feeds use the _en filename suffix (e.g. warnings_nowcast_en.json). Exposed as LangValues (runtime array) and the Lang union type, and validated as the CLI --lang choice on every warnings subcommand.


Feed envelopes (typed response shapes)

StationOverview. { [stationId: string]: JsonObject } — the station-overview response keyed by station id. The DWD-specific per-station payload is exposed as a faithful raw JsonObject rather than a guessed type.

WarningsFeed. The common envelope of the nowcast and gemeinde feeds: { time: number; warnings: JsonObject[]; binnenSee?: JsonValue }.

CoastWarningsFeed. The coast feed envelope: { time: number; warnings: JsonObject }warnings is keyed by coastal zone (an object, not an array).

CrowdOverview. The crowd feed envelope: { start?, end?, highestSeverities?, meldungen: JsonObject[] }.

JsonObject / JsonValue. The general JSON value types used where a payload is large and DWD-specific enough that a hand-written interface would be a guess.


API & client behaviour

Rate limiting / transient errors. The backend may answer with 429 (too many requests) or 503 (service unavailable). The client retries these automatically with linear backoff — the number of retries is tunable with --max-retries (default 2); the base inter-attempt delay grows linearly and is an internal default, not a CLI flag.

Redirects. The engine follows up to maxRedirects (default 5) HTTP redirects (301/302/303/307/308). On a cross-origin redirect, sensitive headers (Authorization/X-API-Key/Cookie) are stripped so credentials issued for one host are never forwarded to another.

Decompression bomb cap. maxResponseBytes (default 100 MiB; 0 = unlimited) bounds both the wire bytes and the decompressed output, so a small compressed feed cannot expand into an out-of-memory condition. Exceeding it raises a DwdNetworkError.

Content-Type guard. A 200 response whose Content-Type is clearly not JSON (e.g. a captive-portal HTML page) is reported as a DwdParseError naming the type actually returned, rather than being fed to JSON.parse.


Library & internals. Terms for the TypeScript client and its internals — DwdClient, the request engine, transport, retry/backoff, error types, query builder, feed envelope types — now live in DEVELOPING.md.

View the source on GitHub →