Overview

Zeemist is a single-binary CLI written in Rust that aggregates coastal and marine condition data from public APIs into a readable terminal output.

What Zeemist does

At its core, Zeemist answers three questions you might ask on any coastal morning:

  • Tide: When are the highs and lows today, and how extreme are they?
  • Fog: Is there fog right now, and when will it clear?
  • Surf: What's the swell window like for the next 24 hours?

It pulls data from NOAA CO-OPS for tide predictions and from the Open-Meteo Marine API for wave and weather data. Neither requires an API key for basic queries under the rate limit.

zeemist tides

Fetch harmonic tide predictions for a NOAA gauge station.

zeemist tides [OPTIONS]

OPTIONS:
  --station <ID>       NOAA CO-OPS station ID (e.g. 9414290)
  --profile <name>     Use a saved location profile
  --days <N>           Days to display (default: 1, max: 30)
  --format <fmt>       table | chart | json (default: table)
  --json               Shorthand for --format json

To find your nearest station, run zeemist stations --near 37.8,-122.5 or visit the NOAA tide gauge map.

Note: Predictions are harmonic (model-based), not observed readings. Actual water levels can vary by ±0.5 ft due to weather. Add --observed to fetch real-time levels when the station supports it.

zeemist fog

Estimate fog density for a coastal location over the next 24 hours.

zeemist fog [OPTIONS]

OPTIONS:
  --lat <f>            Latitude (decimal degrees)
  --lon <f>            Longitude (decimal degrees)
  --profile <name>     Use a saved location profile
  --hours <N>          Hours to forecast (default: 12, max: 48)
  --json               Structured output

The fog score (0–10) combines dew-point spread, marine boundary layer height, coastal upwelling index, and 10m wind speed. See How Zeemist estimates coastal fog density for the full model description.

zeemist surf

Show wave height, swell period, and wind windows for any coastal coordinate.

zeemist surf [OPTIONS]

OPTIONS:
  --lat <f>            Latitude
  --lon <f>            Longitude
  --profile <name>     Use a saved location profile
  --days <N>           Days ahead (default: 2, max: 7)
  --activity <type>    surf | kite | swim | kayak
  --json               Structured output

Passing --activity surf highlights 3–8 ft, 10–16 s swell windows with low local wind. --activity kite inverts the preference — it highlights 15–25 kn windows.

Configuration

Zeemist reads ~/.config/zeemist/config.toml on startup. A minimal example:

[defaults]
format = "table"
cache_ttl_minutes = 30

[[profiles]]
name = "rodeo"
lat = 37.834
lon = -122.552
station = "9414290"

[[profiles]]
name = "pacifica"
lat = 37.614
lon = -122.489
station = "9414131"

With a profile defined, zeemist tides --profile rodeo is equivalent to passing --lat 37.834 --lon -122.552 --station 9414290.

The full configuration reference is available in Installation & setup.

Installation guide →