One-stop terminal app for amateur astronomers. Sky panel + telescope/eyepiece catalog in a single binary, sharing your location, Bortle rating, and conditions across both modes. Decides whether tonight is worth taking the telescope out for, then tells you which gear to grab.
Built on crust (TUI), with glow for inline images and orbit for ephemeris. Rust merger of astropanel (Ruby) and telescope-term (Ruby). Part of the Fe₂O₃ Rust terminal suite.
Sky mode with the Stelvision starchart for the selected hour:
Sky mode with NASA's Astronomy Picture of the Day:
Cross-mode T popup: every currently-visible body × every telescope+eyepiece combination from your gear catalog, with magnification, true field of view, and exit pupil:
Gear mode with the per-combination details pane: select a telescope and eyepiece and see magnification (with % of max-useful and a zone label), true FOV (with framing against Andromeda / Pleiades / Beehive / Orion Nebula / Moon / Jupiter / Mars), exit pupil with its eye-physiology category, the closest recommended target type, 2× Barlow yields, and notes pulled from the equipment record:
git clone https://github.com/isene/astro
cd astro
PATH="/usr/bin:$PATH" cargo build --release
ln -sf "$PWD/target/release/astro" ~/bin/astro
astroFirst launch prompts for location and migrates ~/.nova/config.yml and ~/.scope/data.json if they exist, so users coming from the predecessors carry their settings forward.
Press ? inside either mode for the full keybinding reference.
Plan your observations with weather, ephemeris, and events.
- 9-day weather forecast from met.no with hourly detail, cached 3 hours.
- Condition scoring (green / yellow / red) per your cloud, humidity, temperature, wind limits.
- Visibility bars for Sun, Moon, Mercury, Venus, Mars, Jupiter, Saturn, Uranus, Neptune. One bar per hour, one column per body.
- Moon phase rendered as the Moon-bar shade (new = dark, full = bright).
- Ephemeris table (RA, Dec, distance, rise, transit, set) for all bodies, computed against the IAU 2006 obliquity standard via orbit.
- Astronomical events from the in-the-sky.org RSS feed, in-line with the hour bracket.
- Tonight summary fallback when there are no notable events: moon phase + rise/set, planets above the horizon, constellations near the zenith for the date and hemisphere, Bortle hint.
- Starchart from Stelvision for the selected hour (cached per slot, only generated for latitudes above +23).
- Astronomy Picture of the Day (NASA APOD, cached per day).
- Inline image display via kitty / sixel / w3m / chafa.
- Julian Date in the header.
- Async fetches — background threads load events and images without blocking the UI.
Catalog telescopes, eyepieces, and miscellaneous equipment (barlows, focal reducers, filters, diagonals, finders). Astro computes focal ratio, magnitude limit, min/max magnification, separation limits, recommended eyepiece focal lengths for different targets, exit pupil, true field of view, and more. Tag combinations to build observation logs.
Press g from Sky mode to enter Gear mode; g again to flip back.
Three stacked panes plus a Scope×EP combo detail to the right of the Eyepieces pane:
- Telescopes (top, max 7 rows) — your scopes. The cursor row drives the per-EP figures shown below.
- Eyepieces (middle) — your EPs. Each row shows magnification, TFOV, exit pupil, and a target-class suitability ladder for the currently-selected scope.
- Scope × EP combo (right of Eyepieces) — narrative details of the selected scope+EP combination: magnification with a "% of max-useful" zone label, TFOV with framing comparisons, exit-pupil quality, best-target classification, 2× Barlow yields, and any notes from the equipment record.
- Misc (bottom) — barlows, focal reducers, filters, diagonals, finders, and anything else that isn't a scope or an EP.
Reading left to right:
| Token | Meaning |
|---|---|
astro vX.Y.Z |
Crate version. |
[Gear] |
Current mode (the other is Sky). |
[Telescopes] / [Eyepieces] / [Misc] |
Currently focused pane. TAB cycles. |
TS: N |
Number of tagged telescopes (not catalog count). |
EP: N |
Number of tagged eyepieces. |
Misc: N |
Number of tagged misc items. |
sort: on/off |
Whether each list is sorted (TS by aperture, EP by focal length). Toggle with o. |
<MGN @ Bortle N |
The Bortle-adjusted limiting magnitude in use, pulled from your Sky-mode site. |
The tag counts matter because Ctrl-O (observation log), x (CSV export), and the combo table all operate on tagged items. Tagging answers "what gear am I taking out tonight"; press SPACE on a row to flip its tag (a green ▐ marker appears next to the cursor).
| Col | Meaning |
|---|---|
| APP | Aperture (mm) |
| TFL | Focal length (mm) |
| F/? | Focal ratio (FL / APP) |
| <MGN | Magnitude limit (dimmest visible) — Bortle-adjusted from the Sky-mode setting |
| xEYE | Light gathering vs. the naked eye |
| MINx | Minimum usable magnification |
| MAXx | Maximum usable magnification |
| SEP-R / SEP-D | Rayleigh / Dawes separation limits (arcsec) |
| *FLD | Recommended eyepiece for star fields |
| GLXY | Recommended eyepiece for galaxies and nebulae |
| PLNT | Recommended eyepiece for planets and globular clusters |
| DBL* | Recommended eyepiece for planet details and double stars |
| >2*< | Recommended eyepiece for tight double stars |
| MOON | Smallest feature resolved on the Moon (m) |
| SUN | Smallest feature resolved on the Sun (km) |
| Col | Meaning |
|---|---|
| FL | Focal length (mm) |
| AFOV | Apparent field of view (degrees) |
| MAGX | Magnification |
| TFOV | True field of view (degrees) |
| PPL | Exit pupil (mm) |
| 2BLW | Magnification with a 2× Barlow lens |
| *FLD | ✓ if exit pupil > 6 mm (rich star fields) |
| GLXY | ✓ if exit pupil 3–6 mm (galaxies, nebulae) |
| PLNT | ✓ if exit pupil 1.5–3 mm (planets, globular clusters) |
| DBL* | ✓ if exit pupil 1–1.5 mm (doubles, planet detail) |
| >2*< | ✓ if exit pupil < 1 mm (tight doubles, splitting) |
The five suitability columns are mutually exclusive — exactly one ✓ per row, in the bucket the EP×scope combination falls into. With no scope selected, all five stay dim.
| Col | Meaning |
|---|---|
| Equipment | Free-text name |
| Kind | Free-text category (barlow, reducer, filter, diagonal, finder, Ha filter, …) |
| Factor | Magnification multiplier for barlows / reducers (e.g. 2.0 for a 2× barlow, 0.5 for a 0.5× reducer); - when not applicable |
| Notes | Free-text notes |
The merge unlocks features neither standalone app could:
Tin Sky mode opens a popup listing each currently-visible body × every telescope+eyepiece combo from the Gear catalog, showing magnification, TFOV, and exit pupil. Combos that exceed the scope's useful max magnification get a⚠.- Bortle-aware magnitude limit: the
<MGNcolumn in Gear mode subtracts(Bortle - 3) × 0.4mag from the textbook dark-sky figure, so the displayed mag limit matches what you can actually see from your site. The applied Bortle is shown in the Gear mode header. - Observation log auto-fill (
Ctrl-Oin Gear): the generated log file is prepopulated with:- date, location, time, weather, moon phase, visible planets, and Bortle from the Sky-mode snapshot taken when you pressed
g; - tagged telescopes, eyepieces, and misc gear with their notes;
- a combination table (MAGX / TFOV / pupil) for every tagged scope × tagged EP pair;
- tonight's deep-sky targets — month-appropriate Messier / NGC suggestions, filtered by your largest tagged aperture so a 60 mm refractor isn't pointed at a 13-mag galaxy;
- solar / H-α viewing tips — appended automatically when any tagged misc item is recognised as a solar filter (
solar,h-alpha,daystar,quark,coronado,lunt, …).
- date, location, time, weather, moon phase, visible planets, and Bortle from the Sky-mode snapshot taken when you pressed
| Key | Action |
|---|---|
? |
Help (centered popup) |
g |
Switch to Gear mode |
T |
Tonight's gear suggestions popup |
UP / DOWN, k / j |
Move row |
PgUP / PgDOWN, K / J |
Page |
HOME / END |
First / last hour |
e |
Show all upcoming astronomical events |
s |
Get starchart for the selected hour |
S |
Open starchart in external image viewer |
A |
Astronomy Picture of the Day |
ENTER |
Refresh current image |
r |
Redraw all panes |
R |
Refetch weather + events |
l |
Location name |
a / o |
Latitude / Longitude |
c |
Cloud limit (%) |
h |
Humidity limit (%) |
t |
Temperature lower limit (°C) |
w |
Wind limit (m/s) |
b |
Bortle scale (1–9) |
W |
Save config to ~/.astro/config.yml |
ESC |
Reset status line |
q / Q |
Quit |
| Key | Action |
|---|---|
? |
Help (centered popup) |
g |
Back to Sky mode |
t |
Add telescope (name, aperture mm, focal length mm[, notes]) |
e |
Add eyepiece (name, focal length mm, AFOV°[, notes]) |
m |
Add misc gear (name, kind[, factor][, notes]) |
ENTER |
Edit selected |
TAB |
Cycle focus (Telescopes → Eyepieces → Misc) |
UP / DOWN, k / j |
Move cursor |
Shift-UP / Shift-DOWN |
Reorder |
HOME / END |
Jump to start / end |
SPACE |
Tag / untag |
A |
Tag all |
u |
Untag all |
o |
Toggle sort (APP / FL) |
Ctrl-O |
Create observation log from tagged equipment (auto-filled with Sky-mode context) |
x |
Export tagged items to CSV |
X |
Export all items to JSON |
D |
Delete selected |
r |
Redraw |
v |
Show version |
ESC |
Reset status line |
q / Q |
Quit (save / no save) |
Each forecast hour gets "negative points" based on your limits:
- 2 points if cloud cover > cloud_limit
- +1 point if cloud cover > (100 - cloud_limit) / 2
- +1 point if cloud cover > 90 %
- +1 point if humidity > humidity_limit
- +1 point if temperature < temp_limit
- +1 point if temperature < temp_limit - 7 °C
- +1 point if wind > wind_limit
- +1 point if wind > 2 × wind_limit
0–1 = GOOD (green), 2–3 = FAIR (yellow), 4+ = BAD (red).
~/.astro/config.yml (auto-created on first run; first launch also prompts for location):
location: Oslo
tz_name: Europe/Oslo
lat: 59.91
lon: 10.75
tz: 1.0
cloud_limit: 40
humidity_limit: 80.0
temp_limit: -10.0
wind_limit: 8.0
bortle: 4.0
show_planets: true
show_events: truelocation: display name shown in the headertz_name: IANA timezone for the in-the-sky.org events feed (Cont/City format)lat/lon: observer position in degreestz: UTC offset in hours (e.g.1.0for CET,-5.0for EST)cloud_limit,humidity_limit,temp_limit,wind_limit: thresholds for condition coloringbortle: light-pollution class for your site (1 = darkest, 9 = inner-city)
Other paths:
~/.astro/gear.json— telescope and eyepiece catalog (JSON).~/.astro/gear_config.json— Gear-mode visual settings (colors, auto-backup count).~/.astro/gear_backups/— rotated catalog backups.~/.astro/weather_cache.json— weather cache (TTL 3 hours).~/.astro/images/— APOD per day, starchart per slot (cleaned to ~50 entries).
On first launch astro looks for ~/.nova/config.yml and ~/.scope/data.json and copies them to the matching ~/.astro/ paths. The originals are left in place; you can delete them at your leisure.
The standalone nova and scope repos are archived in favour of this app.
- Linux or macOS, x86_64 or aarch64.
imagemagick(convert) onPATHfor inline image display.- A terminal that speaks the kitty graphics protocol, sixel, w3m img, or chafa for inline images. Without any of those astro still runs but starcharts and APOD are unavailable inline (you can press
Sto open the starchart in your system image viewer instead).
- Weather: api.met.no (Norwegian Meteorological Institute)
- Events: in-the-sky.org RSS feed
- Starchart: stelvision.com
- APOD: apod.nasa.gov
- Ephemeris: orbit, IAU 2006 obliquity standard, ported from ruby-ephemeris
See the Fe₂O₃ suite overview and the landing page for the full list of projects.
| Tool | Role |
|---|---|
| rush | Shell |
| pointer | File manager |
| kastrup | Messaging hub |
| scroll | Web browser |
| tock | Calendar |
| hyper | HyperList outline viewer |
| watchit | Movie / series browser |
| astro | Astronomy panel + gear catalog |
Public domain (Unlicense).