Terminal weather, solar arc, and tide visualizations
Project description
linecast
Terminal weather, solar arc, and tide visualizations. Pure Python, zero dependencies.
All data comes from free public APIs with no keys required.
Commands
weather — Current conditions, hourly braille temperature curve, 7-day forecast with color range bars, precipitation sparkline, natural language comparisons, and weather alerts for 36 countries. Available in 16 languages.
sunshine — Solar arc inspired by the Apple Watch Solar Graph face. Shows the sun's position on its daily arc with sky color gradients, day length with daily delta, and moon phase.
tides — NOAA tide predictions rendered as a sunlight-shaded braille chart with scrollable multi-day window, current water level, high/low extremes with timestamps, and mouse hover tooltips.
All three launch in full-screen live mode by default when run in a terminal (auto-refreshing, with keyboard navigation). Use --print for a single static snapshot printed to stdout. When piped, --print behavior is automatic.
Install
pip install linecast
Or with a Homebrew tap:
brew tap ashuttl/linecast
brew install linecast
Usage
weather # current location via IP geolocation
weather --location "new york" # search by place name (uses top result)
weather --location 44.54,-68.42 # specific coordinates
weather --search québec # find coordinates by city name
weather --metric # metric units (°C, km/h, mm)
weather --celsius # celsius only (wind/precip stay imperial)
weather --metric --fahrenheit # °F with km/h and mm
weather --lang fr # UI in French (also covers alert text when available)
# other language codes: es, de, it, pt, nl, pl, no, sv, is, da, fi, ja, ko, zh
weather --print # single static snapshot (no live mode)
sunshine # solar arc (live by default)
sunshine --print # static snapshot
sunshine --classic-colors # use fixed-color (theme agnostic) sunshine gradient/palette
tides # nearest NOAA station (live by default)
tides --station "Bar Harbor" # search by station name (uses first match)
tides --station 8413320 # specific station ID
tides --search "Bar Harbor" # find stations by name
tides --metric # heights in meters instead of feet
tides --lang fr # UI in French
tides --print # static snapshot
Language support
Use --lang or set LINECAST_LANG to switch the full UI into another language. This covers weather descriptions, day names, natural language comparisons, precipitation forecasts, and alert timing. Non-English languages also use 24-hour time.
Supported: English, French, Spanish, German, Italian, Portuguese, Dutch, Polish, Norwegian, Swedish, Icelandic, Danish, Finnish, Japanese, Korean, Chinese
All commands are also available under the linecast namespace if the short names conflict with other tools on your system:
linecast weather
linecast sunshine --print
linecast tides --station 8413320
Shell completion
Generate shell completion from the CLI:
# Bash
source <(linecast completion bash)
# Zsh
source <(linecast completion zsh)
# Fish
linecast completion fish | source
This installs completions for both linecast <command> and standalone weather, tides, and sunshine.
Weather alerts
Alerts are sourced automatically based on location from eight providers covering 36 countries:
- US — National Weather Service
- Canada — Environment and Climate Change Canada
- China — China Meteorological Administration
- Germany — Deutscher Wetterdienst (via BrightSky)
- Ireland — Met Éireann
- Japan — Japan Meteorological Agency
- Norway — MET Norway
- 29 European countries — MeteoAlarm (Austria, Belgium, Bulgaria, Croatia, Cyprus, Czechia, Denmark, Estonia, Finland, France, Greece, Hungary, Iceland, Italy, Latvia, Lithuania, Luxembourg, Malta, Netherlands, Poland, Portugal, Romania, Serbia, Slovakia, Slovenia, Spain, Sweden, Switzerland, UK)
Alert text comes from each national weather service in its native language. When available, alerts are served in your --lang preference.
Environment variables
| Variable | Description |
|---|---|
WEATHER_LOCATION |
Default lat,lng for weather (e.g., 44.54,-68.42) |
TIDE_STATION |
Default NOAA station ID for tides (e.g., 8413320) |
TIDES_UNITS |
Set to metric for tide heights in meters (same as --metric) |
LINECAST_LANG |
UI language, including alerts when available: en, fr, es, de, it, pt, nl, pl, no, sv, is, da, fi, ja, ko, zh |
WEATHER_UNITS |
Set to metric for Celsius, km/h, and mm (same as --metric) |
LINECAST_ICONS |
Set to emoji to use standard emoji instead of Nerd Font icons |
LINECAST_COLOR |
Color mode: auto (default), truecolor, 256, 16, or none |
LINECAST_THEME |
Theme input mode: auto (default) to query terminal colors, or classic / legacy / off for pre-theme palette behavior |
LINECAST_THEME_TIMEOUT_MS |
OSC theme query timeout in milliseconds (default 100) |
NO_COLOR |
Any non-empty value disables ANSI colors (standard convention) |
Requirements
- Python 3.10+
- A terminal with ANSI color support (
truecolorlooks best; weather remains usable in low/no color) - A Nerd Font for best icon rendering (optional — use
--emojifor standard emoji fallback) - macOS or Linux (uses
termiosfor live mode)
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file linecast-1.2.6.tar.gz.
File metadata
- Download URL: linecast-1.2.6.tar.gz
- Upload date:
- Size: 3.3 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bf6dde73d4bca1129f779c4b79e1c64c94fa4b855023323bad07c91f9794240e
|
|
| MD5 |
8dc1743029b42b41b5ab4f46187c3885
|
|
| BLAKE2b-256 |
0e8fcbd8e5a0c9719b7e9c6bad2bac6a05fb641a2053855242a8eb70b1af9671
|
Provenance
The following attestation bundles were made for linecast-1.2.6.tar.gz:
Publisher:
publish.yml on ashuttl/linecast
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
linecast-1.2.6.tar.gz -
Subject digest:
bf6dde73d4bca1129f779c4b79e1c64c94fa4b855023323bad07c91f9794240e - Sigstore transparency entry: 1201891095
- Sigstore integration time:
-
Permalink:
ashuttl/linecast@3bb8b4a054b3815c70483f0b77b5716a7a828cd8 -
Branch / Tag:
refs/tags/v1.2.6 - Owner: https://github.com/ashuttl
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@3bb8b4a054b3815c70483f0b77b5716a7a828cd8 -
Trigger Event:
push
-
Statement type:
File details
Details for the file linecast-1.2.6-py3-none-any.whl.
File metadata
- Download URL: linecast-1.2.6-py3-none-any.whl
- Upload date:
- Size: 129.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0de576a68c746aeafe96df7b773ca280697c57acf512046153487ef2f7feb40e
|
|
| MD5 |
05fc071d406faeefa3172f54e8e089f9
|
|
| BLAKE2b-256 |
245aede00ac6af18ae6af04aff08bd7afe37db6d597fd95c8bc7119d89673ade
|
Provenance
The following attestation bundles were made for linecast-1.2.6-py3-none-any.whl:
Publisher:
publish.yml on ashuttl/linecast
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
linecast-1.2.6-py3-none-any.whl -
Subject digest:
0de576a68c746aeafe96df7b773ca280697c57acf512046153487ef2f7feb40e - Sigstore transparency entry: 1201891106
- Sigstore integration time:
-
Permalink:
ashuttl/linecast@3bb8b4a054b3815c70483f0b77b5716a7a828cd8 -
Branch / Tag:
refs/tags/v1.2.6 - Owner: https://github.com/ashuttl
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@3bb8b4a054b3815c70483f0b77b5716a7a828cd8 -
Trigger Event:
push
-
Statement type: