US weather forecasts, alerts, and severe weather outlooks — right in your terminal.
$ curl t.wxs.us # weather for your location $ curl t.wxs.us/48201 # by zipcode $ curl t.wxs.us/42.33,-83.05 # by coordinates $ curl t.wxs.us/48201?hourly # 24-hour hourly forecast $ curl t.wxs.us/48201?table # compact table view $ curl "t.wxs.us/48201?format=json" # JSON output $ curl t.wxs.us/rock # the weather rock
$ ssh t.wxs.us # interactive dashboard $ ssh t.wxs.us -t 48201 # by zipcode $ ssh t.wxs.us -t 42.33,-83.05 # by coordinates
US locations only. Data sourced from the National Weather Service and NOAA Storm Prediction Center.
Enter a zipcode to see your forecast.
Consulting the rock...
The radar map's alert filters now start with both Warnings and Watches turned on for Tornado and Severe Thunderstorm, so the most-watched storms show up the moment the map loads. The Hazard list also grew: alerts that all used to land in one "Other" pile can now be filtered on their own — Wind / Dust (high wind, dust storm, blowing dust), Fire Weather (red flag warnings and fire weather watches), Marine (small craft, gale, storm, and special marine warnings), and Heat / Cold (heat, freeze, frost, and wind chill). Several of these now draw in their own distinct colors instead of a generic warning or advisory shade.
Mesoscale discussions on the radar map and dashboards were coming from a NOAA map service that runs 20–30 minutes behind the Storm Prediction Center — new discussions showed up late, and expired ones lingered until that service got around to refreshing. They now come straight from SPC's own feed, which updates within minutes of issuance, and each discussion's valid window is checked on every request so expired ones drop off the moment they end. The radar map also checks for new discussions every minute instead of every two.
The radar map used to freeze briefly on a regular rhythm — every 30 seconds it re-downloaded and re-decompressed the entire radar volume from scratch, even when nothing had changed, and every redraw paused the page again while the radar image was converted for display. Now each refresh only downloads the handful of new radar chunks since the last check (or nothing at all on a quiet cycle), the image conversion happens in the background instead of freezing the page, and the renderer skips the empty corners outside the radar's range circle. Panning, zooming, and clicking should feel noticeably smoother, especially with a busy radar up.
Toggling an alert filter checkbox on the radar map sometimes did nothing: the change was saved, but the map only redrew if it happened to be sitting idle at that exact moment. While radar frames or map tiles were still loading — which is most of the time — the toggle was silently skipped, so alerts and mesoscale discussions could look stuck on or stuck off until the next background refresh. Filter changes now apply to the map immediately, every time.
Advisories and warnings that NWS issues by forecast zone instead of a storm polygon — Dense Fog Advisory, Wind Advisory, Heat Advisory, Winter Weather Advisory, Frost/Freeze, and many zone-issued Flood and Winter Storm Warnings — were being silently dropped from the radar map, because only alerts that came with their own polygon were drawn. The map now fills in the missing shapes from the National Weather Service zone geometry, so these alerts appear in their proper colors alongside the storm-based warnings.
When NOAA's outlook map service is down or timing out, the SPC convective outlook used to just vanish from the dashboard, which looked the same as a calm day with no severe risk. It now tells the difference: if the fetch genuinely fails, a short "SPC outlook temporarily unavailable (NOAA service) — try again shortly" note appears in its place, on the SSH dashboard, curl t.wxs.us, and the web view. A real no-risk day still shows nothing, as before.
The Normalized Rotation product was painting nearly the whole storm because it estimated rotation from a single pair of neighboring radials, which lets velocity noise dominate. It now fits velocity across a small window of radials and gates (a least-squares slope), so the field stays blank except where there is real rotation, and rotation couplets stand out the way they do in other radar software.
The SSH dashboard header now ends with an "SSH:" count showing how many people are connected to the terminal service right now, including you. It updates every second alongside the refresh countdown.
The dashboard and curl t.wxs.us output now include a single-line "Current:" reading under the header — the latest observation from the nearest METAR station, including text description, temperature, dew point, wind, humidity, visibility, and pressure. Observations refresh on the same cycle as the forecast, so what's actually happening outside lives next to what the forecast says will happen.
Radar map alert polygons now reflect the impact-based-warning tier. Tornado Warnings show in red, Particularly Dangerous Situation (PDS) warnings in hot magenta, and Tornado Emergencies in deep crimson-magenta. Severe Thunderstorm Warnings show in orange, with Considerable warnings in deep orange-red and Destructive warnings in magenta. Higher tiers also render on top of lower ones when polygons overlap, so the worst warning in an area is always visible. The alert detail modal now shows the tier in its title (e.g. "Tornado Emergency" instead of "Tornado Warning").
The SSH terminal has a new stats page (press s on the dashboard) that shows unique visitor counts for HTTP and SSH traffic across rolling 24-hour, 7-, 30-, 90-, and 365-day windows plus all-time. IP addresses are never stored: each request runs through HMAC-SHA256 keyed with a 32-byte random secret that's generated on the server's first boot and lives only on the server, so the recorded values cannot be reversed back to an address.
Severe Thunderstorm Watches and Tornado Watches now appear on the radar map. The NWS public alerts feed publishes these watches by county reference only (no polygon), so they were silently dropped from the map even though warnings rendered fine. Watch polygons are now pulled from the NWS event-driven map service and stitched onto the matching alert, so a watch shows up as the union of its affected counties — the same outline the SPC convective watches map uses.
The radar basemap is still dark mode but the pure-black floor has been lifted to a dark grey-blue, easier on the eyes without losing the dark feel. The Radar tab also has a new opacity slider for the radar layer; the value persists across reloads.
The radar overlay now renders in Web Mercator coordinates instead of equirectangular. Storms were previously drawn ~20–30 km north of their true position because a flat lat/lon canvas was being stretched into a Mercator map; the overlay now lines up with RadarScope, GR2Analyst, and other reference apps for the same station and product.
Radar tab improvements:
Server-side caching improvements for the alerts and SPC mesoscale discussion endpoints. A single transient NWS timeout previously caused every browser to receive a 502 until upstream recovered; the cache now falls back to a recent-good copy on upstream failure, and concurrent requests share a single upstream fetch via singleflight.
The radar map now has a two-tab control panel: Radar for station/product controls and Alerts for filtering what's drawn on the map.
The Alerts tab splits into a left column of categories (Warnings, Watches, Advisories, Statements, MCDs) and a right column of hazard sub-types (Tornado, Severe T-storm, Flash Flood, Flood, Winter Storm, Hurricane / Tropical, Other) that gate what shows for Warnings and Watches. Defaults keep only tornado and severe thunderstorm warnings visible — a clean severe-weather-focus view. Toggle state persists in your browser so your preferences stick across visits.
SPC Mesoscale Discussions can now be overlaid on the radar map as amber dashed outlines. Click one to read the full narrative text pulled from SPC.
A new Forecast tab is available on the website. Enter a zipcode or allow geolocation to see the 7-day forecast and active NWS alerts for your location, powered by the same cached data that drives the terminal service.
A 100% accurate weather forecasting device is now available. The rock reads real weather conditions at your location and reports its state accordingly.
$ curl t.wxs.us/rock # consult the rock $ curl t.wxs.us/rock/48201 # rock for a specific location
Also available in the SSH TUI — press r from the dashboard.
A web-based NEXRAD Level II radar viewer is now available. Select any WSR-88D station to view live radar data with auto-refresh every 30 seconds.
Data is fetched directly from the NEXRAD Level II archive on AWS. This is an early alpha — expect rough edges.
The terminal TUI and web SPC Outlook page now include Days 4-8 probabilistic convective outlooks with the shared Day 4-8 discussion text.
The terminal service now displays significant/extreme severe weather probabilities alongside existing SPC outlook data. When non-zero, you'll see a sig annotation on the outlook bar:
SPC Day 1: ENH RISK - Tornado 10% (CIG1, 2% sig), Wind 30% (CIG1, 4% sig)
The sig values represent the probability of the most dangerous events: EF2+ tornadoes, 2"+ diameter hail, and 75+ mph winds. These correspond to the "hatched" areas on SPC outlook maps.
The terminal service now pulls from three distinct NWS/NOAA data sources:
All three sources are fetched in parallel. NDFD data is cached for 15 minutes. The sig values only appear when greater than zero, so quiet weather days look unchanged.
Added the SPC Outlook tab to the website with Days 1-8 categorical and probabilistic outlook images, plus full discussion text for Days 1-3.
Launched t.wxs.us — a terminal-based weather service for the US. Get forecasts, alerts, and SPC outlooks via curl or an interactive SSH dashboard.
All data sourced from the National Weather Service. No API keys or signup required.