Sondex draws BUFKIT model soundings on iPhone and iPad. It has been on TestFlight since July 2025, through 20 builds, and the TestFlight link has been public since January. Build 20, uploaded October 23, is the first build I’m asking working forecasters to test.
Below is what build 20 does and what’s still wrong with it. What changed in each earlier build is on the blog, and in short on the changelog.
Data
Update, November 2026. NAM and NAM 4 km were retired on November 3, when RRFS replaced them. Their last runs are that day’s 06Z cycle. Build 20 still lists both and will find nothing newer, and it can’t fetch RRFS. The next build swaps them for RRFS, four cycles a day and hourly to F+84, at 1,024 of the 1,078 stations. NAM runs you’ve downloaded stay, and a station’s historical runs still reach NAM through November 3.
Models. GFS, NAM, NAM 4 km, HRRR and RAP, as BUFKIT files from the Iowa Environmental Mesonet’s API. A station’s screen lists the latest run of each model, the runs you’ve downloaded, and historical runs for any date.
Stations. The catalog ships in the app: 1,078 stations, 1,051 ASOS sites and 27 NWS offices, across the US, Alaska, Hawaii and the territories. GFS covers 1,076 of them, NAM and RAP 1,057, HRRR 966 and NAM 4 km 867. IDs match the BUFKIT headers, so it’s KOMA, not OMA. Search finds stations by ID or name, and your runs by model and cycle, without a signal. A custom station can point at your own URL.
Monitoring. Monitor a station and Sondex keeps its runs current. Fetch Latest pulls them on demand, and iOS background refresh fetches them at most once an hour, when iOS allows. A watch can end on a date, and each station keeps its own models and retention.
Import. .buf and .buz files from Files, a link, the clipboard, drag and drop, or Open in from Mail and Files. Multi-member ensemble files are split into members.
Offline. Downloaded runs, the charts and the catalog work without a connection. SPC outlooks, radar and base maps need one. Stations and parsed soundings sync through iCloud. The raw files don’t.
Charts
Twelve charts on one scrubber, each with a readout strip under it:
- Skew-T log-P. 1050 to 100 hPa, with temperature, dewpoint and a wet-bulb trace, and one parcel at a time: surface (the default), mixed layer or most unstable. CAPE and CIN are shaded for that parcel, and the LCL, LFC, EL, 0 °C and −20 °C are called out as heights AGL. Temperature windows: Standard (−30 to 50 °C), Wide, Narrow, Tropical and Arctic. Barbs in knots.
- Hodograph. To 10 or 12 km, inked by height or in 0–3, 3–6, 6–9 and 9–12 km bands, with the Bunkers movers, the 0–6 km mean wind and shear vector, a critical-angle arc, and 0–1 or 0–3 km SRH shaded. In kt, m/s or km/h.
- Time-height section. Temperature, dewpoint, relative humidity, wind speed, vertical motion, θe or mixing ratio, filled or contoured, against pressure or height AGL, with barbs.
- Indices through time. Up to four panels of CAPE, CIN, LI, K index, Total Totals and SWEAT.
- CAPE–shear. Surface-based CAPE against 0–6 km shear, one dot per forecast hour.
- Precipitation type, from Sondex’s own Bourgouin-style rules, and Bourgouin energy, melting against refreezing.
- Accumulation. The model’s QPF when the file has a surface block, and otherwise an estimate labeled as one.
- Moisture potential, an index of Sondex’s own built from PW and LI, and apparent temperature, as heat index or wind chill.
- Mixing height, with an optional ventilation index.
- Ensemble plumes, for imported multi-member files such as SREF.
On iPad, an inspector beside the chart reads out the level under your finger and every parameter family.
Parameters
SB CAPE and CIN, the LCL, LFC and EL, LI, K index, Total Totals, Showalter and PW come from the BUFKIT header. The rest are computed from the profile:
- Thermodynamics. ML and MU CAPE and CIN, DCAPE, 0–3 km CAPE, NCAPE, and lapse rates for sfc–3 km, 3–6 km, 850–500 hPa and 700–500 hPa. The mixed-layer parcel is the lowest 100 hPa, and the most-unstable parcel is the highest θe in the lowest 300 hPa. Parcels rise dry to the Bolton (1980) LCL, then pseudo-adiabatically.
- Kinematics. 0–1, 0–3, 0–6 and 0–8 km shear, effective shear, 0–1 km, 0–3 km and effective SRH, BRN and critical angle. The effective inflow layer is where CAPE ≥ 100 J/kg and CIN ≥ −250 J/kg.
- Composites. SCP, STP (effective and fixed layer), SHIP, significant hail, significant severe, EHI, SWEAT, WNDG, ESP and MMP.
- Storm motion. Bunkers right and left movers, 0–6 km mean wind, Corfidi downshear and upshear, and 4–6 km storm-relative wind.
- Moisture and levels. Mid- and low-level RH, mean mixing ratio, wet-bulb zero, freezing level and convective temperature.
Several of these are wrong in build 20. The list is below, under what’s still wrong.
The forecast read
A station’s screen has a forecast read, written on the device. It starts from an hourly digest of the run: CAPE, CIN, LI, PW, K index, 0–6 km shear from the winds, 700–500 hPa RH, 850–500 hPa omega, cloud fraction, the model’s QPF and convective QPF, and surface temperature and dewpoint. SCP, STP and SHIP are left out.
Rules grade the chance of storms from that digest as unlikely, isolated, scattered or numerous. A cap of −150 J/kg or stronger holds the chance down unless the model shows lift or QPF. The potential comes from CAPE and shear: moderate from 1,000 J/kg and 25 kt, high from 2,000 J/kg and 35 kt, extreme from 3,000 J/kg and 45 kt.
Where Apple Intelligence is available and turned on, Apple’s on-device model writes the text from the digest. Elsewhere, templates write it. Text that contradicts the graded chance is replaced by the template’s, and the tier always comes from the digest, not the model.
Home uses the same grades: a 48-hour ribbon for each model at every station you monitor, under the SPC Day 1 and Day 2 categorical outlooks.
Devices
Sondex runs on iPhone and iPad with iOS or iPadOS 26 or later, in dark mode only. On iPad, Home, Stations and the station screen go two-pane at 760 pt and wider, and Charts puts the inspector beside the chart. On iPhone Duo, panes split at the hinge, and on the outer display the chart menu, layers and scrubber move into the side bar.
The Mac build is still build 19, from September 16, and has none of build 20’s changes.
What’s still wrong
These are known to be wrong in build 20:
- Bunkers storm motion. The right and left movers are swapped, the deviation is applied as 7.5 kt instead of 7.5 m/s, and the 0–6 km mean wind leaves out the 6 km level. The hodograph’s mover marks, SRH, critical angle, storm-relative wind, EHI, SCP and STP all inherit it.
- Wind units in the parameters. Winds come from the file in knots, and the parameter math treats them as m/s. SRH is summed in kt² but labeled m²/s², so it reads about 3.8 times high, and the shear terms in SCP, STP, SHIP, significant hail and WNDG are about 1.9 times high. SWEAT, BRN, the ventilation index and wind chill are affected too. The shear readouts in kt, the wind barbs and the hodograph trace are right.
- LCL, LFC and EL readouts. They show the BUFKIT header’s pressures, in hPa, labeled m AGL. The Skew-T’s callouts are true heights, so the chart and the readout disagree.
- Parcel math. There’s no virtual-temperature correction. CAPE counts positive area below the LCL, and CIN counts only from the LCL to the LFC. The mixed-layer parcel averages temperature and dewpoint, not θ and mixing ratio. DCAPE never descends its parcel, so its values are wrong.
- Composites. Apart from the storm-motion and units problems, STP (fixed layer) uses ML CAPE and adds a CIN term, SCP’s CIN term isn’t SPC’s, SHIP is missing most of SPC’s limits, WNDG uses 0–1 km shear instead of the 1–3.5 km mean wind, and MMP is simplified.
- The Skew-T readout strip shows MU CAPE and CIN while the chart draws the surface parcel by default.
- Units. Temperature readouts are in °F while the Skew-T is in °C, and there’s no units setting.
- NAM 4 km runs are filed as NAM.
- A missing LI, K index, Total Totals, Showalter or PW shows as 0 instead of a dash.
- A network failure reads as “All up to date” or “No runs found”.
- The on-device model’s text is checked for wording that contradicts the storm chance, but not for its numbers.
- Smaller things: onboarding says it’s fetching data but only turns on monitoring, the Theme setting does nothing, About says “1.0.0 Beta(15)”, and the notification prompt appears at launch with no explanation.
Getting in
- On an iPhone or iPad running iOS or iPadOS 26 or later, install TestFlight from the App Store.
- Open the invitation link on that device and accept it.
- Install Sondex from TestFlight.
The beta is free. At launch Sondex will be $5, once, on the App Store, with every feature included. The optional Supporter Pack is a tip that adds cosmetic options only: the Print and Monochrome chart themes, accent colors and readout density. TestFlight purchases run in Apple’s sandbox and aren’t charged.
Sending feedback
Feedback goes through TestFlight. Sondex has no feedback form of its own yet.
- Take a screenshot in Sondex, tap the thumbnail, and send it with Share Beta Feedback.
- Or open TestFlight, choose Sondex and tap Send Beta Feedback.
- After a crash, TestFlight offers to send the report. Add a line about what you were doing.
The most useful report names the station, model, cycle and valid time, the value Sondex shows, and what BUFKIT, NSHARP or SHARPpy gives for the same file.