Skip to main content

Terminal solunar, tide, and weather forecast for the fishing / hunting day-planner crowd

Project description

fishin

Terminal solunar, tide, and weather forecast — one command, full picture, btop-dense layout.

fishin rolls a solunar app, a tide app (xtides-style), and wttr.in into a single terminal panel. Solunar major/minor periods, sun/moon ephemera, NOAA tide predictions, open-meteo weather, and a per-day "best fishing window" cross-correlation all rendered in ~12 terminal lines per day.

Install

From PyPI (once published):

pipx install fishin

From a git checkout or this repo directly:

pipx install git+https://github.com/sjwasko/fishin.git

First run downloads the JPL DE421 ephemeris (~17 MB) into ~/.cache/fishin/ephemeris/. NOAA + open-meteo + Nominatim responses are cached at ~/.cache/fishin/responses/.

Requires Python ≥ 3.11.

Quick start

fishin                          # full panel for today, default location
fishin --city "sarasota fl"     # geocode and resolve nearest tide station
fishin --city "..." --save      # write resolved location to ~/.config/fishin/config.toml
fishin 7                        # compact 7-day list view
fishin month                    # 30-day calendar grid with star ratings
fishin best 14                  # next 14 days ranked, top 5 highlighted

Modes

Command Output
fishin One full panel for today
fishin N N-day list view, one row per day
fishin month Calendar grid for the month of --date
fishin best N Next N days sorted by score, top 5 highlighted
fishin --days N Legacy: render N full panels back-to-back

Skip network fetches with --no-tides / --no-weather (e.g. offline or for quick recompute).

Configuration

~/.config/fishin/config.toml:

location = "Sarasota, FL"
lat = 27.3366
lon = -82.5313
tz = "America/New_York"
station = "8726083"

Resolution order: explicit flags > --city > config file > built-in Sarasota default.

Inland queries (>100 km from the nearest NOAA tide station) automatically drop the tide section — there are no ocean tides in Austin.

How the "Best" ranking works

Every major/minor period is scored:

Factor Weight
Major period base +4
Minor period base +2
Sunrise overlap (±1 hr) +3
Sunset overlap (±1 hr) +3
Each H/L tide overlap (±30 min) +2
Calm wind (≤6 mph) +1
Strong wind (≥18 mph) −1
Rain ≥60% −2

Top two windows are shown — first in bright amber, second dimmed.

Credits & data sources

fishin would not exist without the following free / open projects and public-data services. Please respect each provider's terms when running this tool at scale.

Runtime APIs

Source Data License / TOS
NOAA CO-OPS Tide predictions US Government public domain
open-meteo Weather forecasts CC BY 4.0
OpenStreetMap Nominatim Geocoding ODbL · usage policy
NASA JPL DE421 Planetary ephemeris Public domain

The OSM Nominatim usage policy specifically asks clients to send a meaningful User-Agent and cache responses; both are honored — geocode results are cached on disk for 30 days.

Python dependencies

Package Role License
skyfield Astronomy / ephemeris MIT
rich Terminal rendering MIT
diskcache Response cache Apache 2.0
timezonefinder Lat/lon → IANA timezone MIT

Design inspiration

The visual language and information density of fishin borrow shamelessly from:

  • wttr.in — terminal weather, the gold standard for "feels native to the shell"
  • btop — pack-every-pixel monitoring panels
  • xtides — tide curve visualization and harmonic predictions
  • F&H Solunar Time — daily forecast layout, day-rating ring, calendar grid

None of these projects are affiliated with fishin; we just learned from them.

License

MIT. Fork, improve, redistribute — just keep the copyright notice.

Architecture

See ARCHITECTURE.md for the module layout, data flow, and extension points if you'd like to contribute.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fishin-0.2.1.tar.gz (21.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fishin-0.2.1-py3-none-any.whl (25.6 kB view details)

Uploaded Python 3

File details

Details for the file fishin-0.2.1.tar.gz.

File metadata

  • Download URL: fishin-0.2.1.tar.gz
  • Upload date:
  • Size: 21.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for fishin-0.2.1.tar.gz
Algorithm Hash digest
SHA256 ad3e989e30e148c57419a751385f469faf83953727bb8f4c2cd262752ab41d41
MD5 5c77e6183d0dc01877a8649e936a876f
BLAKE2b-256 1fa6bd42366af57d0da80ee5f7a2a10b231e5fd83d8fb36e0ffc37556d002460

See more details on using hashes here.

File details

Details for the file fishin-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: fishin-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 25.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for fishin-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 6ce1f219afade621ec13d782ba54b0d9f9887286acfb65e1f828695c77895e2a
MD5 3a1ba6ef36eb997a266dd6082a145436
BLAKE2b-256 5af6d8b97bca4ee8cbd36305212810d58a353d9f588fe9920ffca272b731223a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page