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.

Day view panel for Sarasota, FL

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

pipx install fishin

Or, for the bleeding-edge main branch:

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

Requires Python ≥ 3.11. Works on Linux, macOS, and Windows (see Windows note below).

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

Windows

Requires Windows 10 or later and Windows Terminal — the classic PowerShell / cmd.exe consoles don't have the right Unicode glyphs for the tide-curve sparkline and won't render the amber palette correctly.

Install Windows Terminal if you don't already have it (it ships by default on Windows 11):

winget install --id Microsoft.WindowsTerminal -e

Then set it as the default terminal for all command-line apps:

Settings → System → Advanced → Terminal → Windows Terminal

After that, any new fishin invocation opens in Windows Terminal and the panel renders correctly.

Set your location

Out of the box, fishin uses Sarasota, FL as a fallback. To make it use your own location and have it stick across runs, geocode a place name once and save it as your default:

fishin --city "your town st" --save

From then on, plain fishin (no flags) uses your saved location. The resolved coordinates, timezone, and nearest NOAA tide station are written to ~/.config/fishin/config.toml.

--city without --save is a one-shot — useful for checking conditions somewhere you don't usually fish without overwriting your default:

fishin --city "key west fl"

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

Quick start

fishin                          # full panel for today, your saved location
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
fishin --date 2026-06-15        # any specific date
fishin --no-tides --no-weather  # astro-only, no network

fishin --help lists every flag plus more examples.

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).

Views

Day panel

7-day list

Month grid

Best 14 days, ranked

Configuration

The easy path is fishin --city "..." --save (described above). If you'd rather hand-edit, the file lives at ~/.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 default.

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.

A note on the name

Because that's how Karrie says it. The g got left somewhere in the South and we never went lookin' for it.

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.3.0.tar.gz (23.1 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.3.0-py3-none-any.whl (27.9 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for fishin-0.3.0.tar.gz
Algorithm Hash digest
SHA256 8b4ddb0ba619ff9b63293e3011eede7b9219240e711a9977904c2747d4de3dd1
MD5 392629686b014362139f13a8105b63c4
BLAKE2b-256 0272abbe8a416a92bfa6aece562a105116166f97c9975117c4550ae5a6b0ed76

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for fishin-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 08810cb9e1aed91d588a5cecd33e562aa2af0a64f2ac54a9ca8c3b19e778b24a
MD5 c235c2e3f191674a8d6c9f5763c84d72
BLAKE2b-256 e775767698b499e5f1b80b4b0579e1a8d5ab8cd0318e24e3666999c5ed03db04

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