A Rust CLI that provides weather data from free APIs, with JSON and plain-text output optimized for scripting and AI agents. No API key required for basic use.
- Current conditions — temperature, humidity, wind, pressure, and more
- Forecasts — hourly (up to 168h) and daily (up to 16 days)
- Weather alerts — severe weather warnings via US National Weather Service
- Historical data — hourly weather for any date back to 1940
- Multiple location inputs — city name, coordinates, ZIP code, airport IATA code
- Multiple providers — Open-Meteo (free, no key) with OpenWeatherMap fallback
- Structured output — JSON (default) and TSV for easy parsing
- Location caching — SQLite cache for resolved geocoding lookups
Requires Rust (edition 2024).
cargo build --releaseThe binary is written to ./target/release/weather.
The install script builds the binary, copies it to ~/.local/bin, and automatically installs the skill to any detected AI agents (Claude Code, Codex):
./install.shOr manually:
# Build and install the binary
cargo build --release
mkdir -p ~/.local/bin
cp ./target/release/weather ~/.local/bin/weather
# Install the skill for Claude Code and/or Codex
mkdir -p ~/.claude/skills/weather
ln -sf "$(pwd)/SKILL.md"~/.claude/skills/weather/SKILL.md
mkdir -p ~/.codex/skills/weather
ln -sf "$(pwd)/SKILL.md"~/.codex/skills/weather/SKILL.mdThen initialize the config:
weather init# Current weather
weather current "London"
weather current --lat 51.5 --lon -0.12
weather current --zip 10001
weather current --airport SFO
# Hourly forecast (next 24h by default)
weather forecast hourly "London"
weather forecast hourly "London" --hours 48
# Daily forecast (next 7 days by default)
weather forecast daily "London"
weather forecast daily "London" --days 14
# Weather alerts (US only)
weather alerts "New York"# Historical weather
weather history"London" --date 2024-06-15
weather history"London" --from 2024-06-01 --to 2024-06-07
# Providers and cache
weather providers
weather cache stats
weather cache clear| Flag | Description |
|---|---|
--json | JSON output (default) |
--plain | TSV output |
--units <metric|imperial|si> | Unit system (default: metric) |
--provider <openmeteo|openweathermap> | Force a specific provider |
-q, --quiet | Suppress non-essential stderr messages |
| Method | Example | Supported commands |
|---|---|---|
| City name | weather current "London" | all |
| Coordinates | weather current --lat 51.5 --lon -0.12 | all |
| ZIP code | weather current --zip 10001 --country US | current only |
| Airport IATA | weather current --airport SFO | current only |
Config is created by weather init at:
- macOS:
~/Library/Application Support/weather-cli/config.toml - Linux:
~/.config/weather-cli/config.toml
Override with the WEATHER_CLI_CONFIG_DIR environment variable.
[general]
default_units = "metric"default_format = "json"
[providers]
primary = "openmeteo"fallback = "openweathermap"
[providers.openweathermap]
api_key = ""
[cache]
location_ttl_days = 30To use OpenWeatherMap as a provider, add your API key to the config file.
Pull requests welcome. Please run cargo test and cargo clippy before submitting.
MIT