1. Welcome
How this guide is organised, and how to use the badges below.
Cervid Ballistics is an exterior-ballistics calculator covering Air Rifle, Rimfire, and Centrefire shooting. It runs entirely in your browser — no install required, and no signal needed at the range. An optional free account lets you back your presets up to the cloud and keep them in sync automatically across every device you sign into.
This guide walks through the app one feature at a time, in roughly the order you'll meet them on screen. Every topic carries one of three badges so you can tell at a glance whether it's something to learn on day one, or something to come back to once you're comfortable:
Basic — everything you need to get a trustworthy drop chart from a Quick Preset in under a minute.
Intermediate — entering your own loads and real conditions, reading the full results table.
Advanced — calibrating the model to your specific rifle, correcting for spin and the Earth's rotation, and comparing loads side by side.
You don't need to read this guide start to finish. Jump straight to what you need from the menu on the left (or the ☰ Menu button on a phone), and use the badges to decide how deep to go.
2. Getting Started
Your first result, in under a minute.
Choose a discipline Basic
The three buttons at the top of the screen — Air Rifle, Rimfire, Centrefire — switch the whole app between disciplines. Each has its own presets, its own sensible default ranges, and its own plausibility checks, so switching modes is the very first thing to get right.
Pick Imperial or Metric Basic
The Imperial / Metric toggle changes every field label and unit on the page — fps vs m/s, yards vs metres, and so on. You can switch at any time; nothing you've typed in is lost, it's simply re-displayed in the other system.
Tap a Quick Preset Basic
The fastest way to a result: tap any tile under Quick Presets. This instantly fills every field on the Inputs tab with a known load and calculates a trajectory — no typing required. Presets are grouped per discipline, and on a phone, tapping one automatically switches you to the Results tab so you see the outcome straight away.
Press Calculate Trajectory Basic
Whenever you change a field by hand, press Calculate Trajectory at the bottom of the Inputs tab to refresh the Results page. Nothing recalculates automatically as you type — this is deliberate, so a half-finished edit never produces a misleading half-finished result.
60-second cheat sheet
- Pick your discipline: Air Rifle, Rimfire, or Centrefire.
- Tap a Quick Preset, or fill in Firearm & Load by hand.
- Press Calculate Trajectory.
- Read the stat cards and table on the Results tab.
3. Entering Your Own Load
Every field in the Firearm & Load panel, and when it matters.
The core numbers Basic
Four fields drive most of the result: Bullet Weight (gr), Muzzle Vel. (fps), BC (G1), and Scope Height (in). Weight and muzzle velocity usually come straight off the ammunition box or your chronograph; BC (G1) is the manufacturer-quoted ballistic coefficient, almost always published as a G1 figure. Scope Height is the vertical distance from the centre of your bore to the centre of your scope — typically 2–3in for a rifle.
Zero Range, Max Range & Interval Basic
Zero Range is the distance your rifle is actually sighted in at. Max Range sets how far the table and chart extend. Interval controls the row spacing in yards or metres — leave it blank for a sensible automatic spacing.
Choosing a Drag Model: G1, G7, GA, or RA4 Intermediate
A ballistic coefficient is only meaningful alongside the reference shape it was measured against. G1 is the oldest and most common standard, used by most manufacturer-quoted BCs. G7 suits modern boat-tail, low-drag rifle bullets and tends to model the transonic region more realistically for that shape. GA is a community-sourced table built specifically for diabolo airgun pellets, whose sharp drag rise above roughly Mach 0.8 neither G1 nor G7 fit well. RA4 is a published reference table fit specifically to .22 LR rimfire bullets — nearly identical to G1 well below transonic, but tracking a .22 LR's own transonic drag rise more closely than G1 does through and beyond that region.
BC (G1) is always required — the field's own label switches to "BC (GA)" or "BC (RA4)" when either of those models is selected, since it's the single BC number the currently selected model actually uses, not a second field. If you switch Drag Model to G7 and haven't entered a real published BC (G7) figure, a yellow banner appears — press ≈ Estimate BC (G7) for me to pre-fill a reasonable approximation (BC(G1) ÷ 1.9), which you're free to overwrite if you find a better published number. GA and RA4 have no equivalent fallback estimate, since they share the primary BC field directly rather than needing a second one.
Projectile Shape & Twist Direction Advanced
Projectile Shape (Flat-base / Boat-tail / Diabolo) applies a small correction to the gyroscopic stability calculation, since a boat-tail or a hollow pellet skirt needs less spin to stabilise than the same length-to-diameter ratio would otherwise suggest. Twist Direction (RH standard / LH) determines which way Spin Drift pushes the impact point — get this backwards and your spin-drift correction will point the wrong way.
Diameter, Length & Twist Rate Advanced
These three feed the Gyroscopic Stability (Sg) calculation and are only needed if you want that stat card populated. Twist Rate is written as Twist 1:X — the barrel makes one full turn every X inches (or millimetres in Metric).
Spot Range — one extra data point Intermediate
Spot Range inserts a single additional row into the table at a distance of your choosing, on top of the regular interval — handy for checking one specific target distance without changing your whole table spacing.
4. Environmental Conditions
Air is not a constant — and neither is wind.
Altitude, Temperature, Humidity & Pressure Intermediate
These four combine into an air-density ratio that scales drag directly — thinner air means less deceleration and a flatter trajectory. Press 🌍 Capture Weather to pull current conditions automatically for your current location, or fill them in by hand if you know them. Your browser or device will first ask permission to share its location; the app then asks Open-Meteo, a free weather service, for the temperature, pressure, humidity, wind and altitude at that spot. Only your approximate coordinates are sent to Open-Meteo, and nothing is stored. The same button also fills in Wind Speed & Wind Clock below with the live reading, and Latitude for the Coriolis calculation. Because the reading is for where you are right now, press it at your shooting position rather than at home; if location is blocked or you're offline, simply type the values in yourself. If you only know altitude, press 📍 Pressure from altitude to estimate station pressure from a standard atmosphere model.
If you've already run a calculation this session, capturing the weather automatically recalculates with the fresh reading — you don't need to press Calculate again yourself. If HUD, Reticle View, or Probability of Hit happens to already be open, that page's own wind override refreshes immediately too, right alongside its numbers, so it's never left showing a wind from before you checked the weather. That does mean a live weather fetch resets any of the three you'd already customised with your own "what if" wind back to auto-following the live reading — exactly what pressing Calculate already does, and for the same reason: a fresh calculation is always the natural start-over point for those overrides.
Wind Speed & Wind Clock Basic
Wind direction is entered as a clock face relative to your direction of fire, with the target at 12 o'clock. Wind Clock = 3 means a full-value wind FROM your right, 9 a full-value wind FROM your left, and 12 or 6 a pure head/tailwind with no sideways component at all. When using a Kestrel, establish the wind direction by turning the meter until the impeller slows or stalls, then orient the back of the meter into that incoming wind and read whichever hour it points to. This one field drives two separate effects at once — the crosswind component deflects the trajectory sideways (a wind from 3 o'clock pushes the point of impact left), and the head/tailwind component very slightly changes drag, adding a touch more drop and time of flight into a headwind (wind from 12), or taking a touch off both with a tailwind at your back (wind from 6). See "Head/tailwind affects drop, not just crosswind" in Section 12 for how large that second effect actually is. A clock-face dial sits beside the field itself — the same dial used on Compare, Reticle View, HUD, and Probability of Hit — so you can drag to set direction instead of typing a number, or do both: typing a value updates the dial and dragging the dial updates the number, always in sync either way.
Wind at Target Advanced
Wind Speed & Wind Clock above describe conditions at the shooter, and by default the app assumes that same wind holds for the whole flight. Wind at Target is an optional second speed+clock reading for when the wind genuinely differs out at the target — calm at the muzzle but gusting further out, say. Leave it blank and nothing changes; fill it in and the app blends smoothly between the two readings across the shot instead of assuming one uniform wind everywhere.
The blend is by straight-line downrange fraction — 0% of the way there at the muzzle, 100% at the table's max range — applied separately to the crosswind and head/tailwind parts of each reading rather than to the raw speed-and-clock numbers themselves. That matters because averaging clock positions directly can be meaningless (a 3 o'clock wind and a 9 o'clock wind don't blend to "no wind" by any sensible physical reasoning), whereas blending the sideways and along-the-shot components separately always behaves sensibly, including when the two readings come from very different directions.
Wind at Target is a standing field like Wind Speed/Wind Clock themselves — it describes today's conditions, not a property of the load, so it is not saved into presets and is left untouched when clearing or switching loads. When active, the Results header's "Wind at <range>" card shows both readings (shooter → target) so it's always visible which two conditions are actually driving the figures. It also carries through correctly into HUD and Compare Loads — each still blends toward the same target range you originally entered it for, even though both views can show figures at a shorter distance than that. Reticle View shows a small note of its own when a target reading is active, right below its wind override row.
Latitude & Azimuth (Coriolis) Advanced
These two feed the Coriolis and Eötvös corrections — the Earth's own rotation measurably deflecting very long shots. They only become practically relevant at longer centrefire distances, which is why they're optional rather than defaulted silently. Azimuth is the compass bearing of the shot, measured from true north.
Shooting Angle Intermediate
Shooting Angle accounts for uphill or downhill shots (uphill is positive). A shot at any real incline covers less horizontal distance than its slope distance suggests, which affects both drop and every angular correction derived from it.
Plausibility warnings Basic
If a value looks unusual for the selected discipline — a decimal point in the wrong place, fps entered as m/s — a dismissible yellow banner appears above Calculate Trajectory. These checks are advisory only: they will never block a calculation, even for a genuinely unusual but real load, such as a deliberately low-powered air rifle or an experimental wildcat cartridge.
5. Reading Your Results
What every stat card and table column actually means.
The stat cards Basic
Across the top of the Results tab: Muzzle Energy, Muzzle Velocity, Velocity/Energy/Drop/Wind at your max range, Gyro Stability, Subsonic point, and Air Density as a percentage of the standard atmosphere. Cards are colour-coded — green/yellow/red shading on the energy card for air rifle loads flags whether a shot is likely to be humane at that power level, for instance.
The trajectory chart Basic
The blue line is drop, read against the left axis; the dashed green line is energy, read against the right axis. The two lines use different line styles as well as different colours so the chart stays legible if you're colourblind.
Switching the table's display unit Intermediate
The row of buttons above the table — mils / MOA / clicks / inches / cm — changes how Drop, Wind, Spin Drift, and Coriolis are all displayed together. Switching to clicks also reveals a turret click-size selector, so the table can show whole-click adjustments for your specific scope.
1dp — rounding to one decimal place Basic
The 1dp button to the right of the unit toggles rounds every value in the results table, Range Card, and HUD to one decimal place. Tap it again to restore full precision. The preference is saved, so it stays on between sessions. This has no effect on the physics — the underlying trajectory data always stays at full precision; only the display changes.
Mach, Time of Flight & Subsonic Intermediate
The Mach and ToF(s) columns show speed relative to sound and elapsed flight time at each range. Rows past the point where a projectile drops below the local speed of sound are marked distinctly in the table — useful context, since the drag model becomes markedly less predictable through the transonic region.
Gyroscopic Stability (Sg) & Min Twist Advanced
Sg is classified into bands: below 1.0 Unstable, 1.0–1.4 Marginal, 1.4–2.5 Stable, 2.5–4.0 Over-stabilised, above 4.0 Excessively fast. The Min Twist card shows the loosest twist rate (in both Miller's and Greenhill's formulas) that would still adequately stabilise the projectile you've entered.
Exporting the table Intermediate
Export CSV, above the results table, downloads the full range table as a spreadsheet-ready file — handy for printing your own custom range card or importing into another tool.
6. Presets & Saved Loads
Building your own library of loads.
Saving a load Basic
Once you've filled in a load and calculated a trajectory, type a name into the field beside + Save and press it. Your load appears as a new tile under Quick Presets, ready to reload with one tap next time.
Editing, reordering & deleting Basic
Tap any of your own preset tiles to load it straight into edit mode. On desktop, drag tiles to reorder them; on touch devices, press and hold. The Sort by calibre link switches to an automatic alphabetical grouping instead, without losing your manual order — toggle back any time.
Editing a built-in preset Basic
Tapping a built-in (stock) preset tile just loads it for viewing — any changes you then make to the fields are not saved, since a built-in tile isn't tied to a slot of its own to save back into. To actually change one (a different BC, drag model, velocity, and so on), open that tile's ⋯ overflow menu and choose Edit. That arms the Save button and shows a reminder that saving will create your own copy of the load and hide the original stock entry (still recoverable — see Restoring below). Make your changes and press ✓ Save to keep them.
Duplicating a preset Basic
Trying a different load through the same rifle, or the same load through a different rifle, usually means most fields — sight height, twist, zero preference, and so on — stay the same. Rather than re-typing all of that, open a preset's ⋯ overflow menu (built-in or your own) and press Duplicate. You'll be asked for a name for the copy straight away; the original tile — built-in or custom — is left completely untouched, and the new one appears alongside it, ready to open and adjust whichever fields actually differ.
Backing up your presets Intermediate
⬇ Export presets downloads all of your custom loads (and any edits you've made to built-in ones) as a single backup file — it also carries every discipline's Probability of Hit target-size list, so a rename, resize, addition, or deletion you've made there travels along with your loads. ⬆ Import presets restores from that file on another device, or after clearing your browser data — existing presets and target sizes with the same name are skipped rather than overwritten, so importing is always safe to repeat.
Restoring a pre-truing BC Advanced
If you've saved a load after applying Trajectory Truing (Section 8), a small overflow menu on that preset offers Restore pre-truing BC — reverting just the ballistic coefficient back to its value before that first calibration, without touching anything else you've since edited.
7. Account & Cloud Sync
A free account is required to use the app — it takes about a minute to set up and keeps your presets backed up and in sync across every device automatically.
Creating an account Basic
When you open the app for the first time, you'll be prompted to sign in or create a free account. Switch to the Create account tab, enter your name, email address, and a password (at least 8 characters), then press Create account. A confirmation email will arrive within a minute — click the link inside it, then return to the app and sign in.
Signing in Basic
If you already have an account, enter your email and password on the Sign in tab and press Sign in. Your presets will load automatically. If you've forgotten your password, use the Forgot password? link to receive a reset email.
How sync works Basic
Once signed in, the app keeps your presets, target sizes, hidden loads, ordering, and preferences backed up in the cloud. The sync is automatic and bidirectional:
When you make a change — adding, editing, reordering, or deleting a preset — it is pushed to the cloud within a few seconds, silently in the background.
When another device saves a change — the app detects it in real time and reloads your presets automatically, so every signed-in device always carries the same library.
If you're offline — the app works exactly as normal using your local copy. When you reconnect and sign in again, the latest version of your presets is pulled from the cloud.
Signing out Basic
Tap your name in the top-right pill and press Sign out. The app continues to work with your local copy of the presets; no data is deleted from your device when you sign out.
Managing your account Basic
When signed in, a Profile button appears in the header pill alongside Sign out. Tap it to open the Account panel, which has three independent sections — each saves separately with its own button, so you can update just the one thing you need without touching the others.
Display name — enter a new name and press Save name. The pill in the header updates immediately to reflect the change.
Email address — enter your new address and press Update email. Supabase sends a confirmation link to the new address; the change only takes effect once you click that link. Your current address continues to work until then.
Password — enter a new password (minimum 6 characters), confirm it in the second field, and press Change password. You must be signed in to change your password this way; if you've been locked out, use the Forgot password? link on the Sign in tab instead.
8. Loader's Journal
A session log that lives in the cloud — record your shot strings, group sizes, and notes against a snapshot of the exact load you fired, and access every entry from any signed-in device.
Logging a session Basic
After calculating a trajectory, a 📝 Log this session button appears at the bottom of the results. Tap it to open the log form. The load details and environmental conditions (temperature and altitude) are pre-filled from whatever is currently entered in the app — you just add the session-specific information.
Fill in the date (defaults to today), session type (Range, Hunt, Chrono, or Competition), a shot string (velocity readings separated by spaces or commas), a group size with distance and unit, and any free-text notes. The app calculates average velocity, extreme spread (ES), and standard deviation (SD) from the shot string automatically as you type. All fields except the date are optional — log as much or as little as is useful.
Viewing the Journal Basic
Tap Journal in the header to open the Journal panel. Entries appear in reverse date order showing the preset name, session type, mode, average velocity, and group size at a glance. Tap any entry to open its full detail view — the complete shot string, ES/SD breakdown, conditions, load snapshot, group measurement, and notes.
You can also create a new entry directly from the Journal panel using the + New Entry button, without needing to calculate a trajectory first.
Sync and offline use Basic
Journal entries are stored in the cloud under your account and sync automatically across every signed-in device, the same way presets do. If you log a session while offline, the entry is saved locally and a yellow badge appears on the Journal button showing how many entries are waiting. When connectivity returns, the pending entries sync automatically — no action needed. You can edit a pending entry before it syncs by opening the Journal panel and tapping Edit on any entry marked PENDING.
Deleting entries Basic
Open the Journal panel and tap Delete on any entry. You'll be asked to confirm before the entry is removed. Deletion is permanent and syncs to all devices.
RF Batch Library Intermediate
The Batches tab inside the Journal panel is a library for your rimfire ammunition lots. Each batch is a named record — ammunition name, lot number, star rating (1–5), and free-text notes — that you can link to any journal entry so your session log always shows exactly which tin was in the rifle.
To register a new batch, tap Batches in the Journal panel and then + Register Batch. Give it a name (e.g. Eley Tenex), enter the lot number from the tin, add a star rating and any notes, then tap Save. The batch is immediately available in the Batch dropdown on the log form.
Each batch card shows aggregated stats drawn from all the journal entries linked to it — number of sessions, average velocity, and average group size — so you can compare lots at a glance over time.
Batches sync to the cloud under your account alongside your journal entries. To delete a batch, tap Delete on its card — any journal entries previously linked to it remain intact, they just lose the batch association.
9. Calibrating to Your Rifle
Trajectory Truing and Verification — making the model match your actual chronograph and target data.
The short explanations that used to sit permanently under each heading here now live behind a small ? icon next to the section title instead — tap it for the same text, or just use the fields below if you already know what they do.
Why Truing exists Advanced
Manufacturer-quoted BCs are averages, and frequently don't match your specific rifle, load, and chronograph combination exactly. Trajectory Truing lets you correct for this using one real observed data point, rather than trusting the catalogue figure in isolation.
Running a Truing pass Advanced
Enter the distance you actually shot at into Validation Range, and the holdover you genuinely needed at that distance into Observed Holdover — in mils, MOA, inches, or cm, whichever you measured in. Press True Trajectory. The engine searches for a BC multiplier that reproduces your observed holdover exactly, and the whole table updates immediately.
Press 💾 Save to preset to bake the correction permanently into the loaded preset's own BC, so you don't need to re-true it every session.
Verifying the fit Advanced
Once trued, enter a second, independent observation — a different distance you also have real data for — into Verify At and Observed Holdover, then press Verify Second Point. You'll get the model's prediction, your observed value, the difference, and a plain verdict: holding up well, some drift, or diverging. A growing gap at the second point usually means a different input is wrong (muzzle velocity is the most common culprit) rather than the BC fit itself.
Fit BC from Doppler Data Advanced
This whole section is collapsed by default — tap its heading to expand it. Most shooters never need it, so it stays out of the way until you do.
If you own a Doppler radar chronograph (a LabRadar or similar unit that measures actual velocity at many points down range from a single shot, not just a single muzzle-velocity reading), you can feed that whole string into the app for a far stronger BC correction than a single holdover reading gives you above. Every point in a Doppler string comes from the same shot under the same conditions, so there's no need to log separate weather for each one the way combining several different range-day observations would — it reuses whatever's already Calculated, exactly like True Trajectory does.
Paste your data — one distance/velocity pair per line, comma, tab, or space separated — into the box under Fit BC from Doppler Data, set the Distance Unit, Velocity Unit, and Column Order to match your device's export, and press Fit BC from Data. The app doesn't try to guess your device's exact column layout automatically — a silently wrong guess would swap two different physical quantities into the fit with no obvious symptom until the resulting BC looked implausible, so it asks you to confirm the order instead. A header row above your numbers (e.g. "Distance,Velocity") is fine; it's detected and skipped automatically rather than needing to be deleted first.
Unlike the single-point pass above, which solves one observation exactly, fitting against many points generally can't satisfy every one of them perfectly — so the app finds whichever single BC comes closest to all of them at once, and shows you a residual table (each distance, its observed and predicted velocity, and the difference) so you can judge the fit's quality yourself rather than trusting a bare number. A point that's badly off from the others in that table is worth a second look — a misread velocity, an odd flier, or a data-entry slip — before trusting the fit.
Import Chronograph Shot Log Advanced
Like the Doppler fit above, this section is collapsed by default — tap its heading to expand it.
This isn't about whether a chronograph uses Doppler radar internally — the FX True Ballistics Chronograph (the one currently recognised here) is itself a Doppler device, genuinely measuring velocity at multiple points down range from a single shot, the same underlying technology as a LabRadar. What differs is the exported log: rather than exposing that full point-by-point velocity string, its own shot log reports just one summarised velocity per shot, alongside its own already-computed BC estimate (printed as "T-BC(model): value"), for as many shots as you fired in the string. Many other chronographs go a step further and only ever report muzzle velocity, with no BC of any kind. Either way, this import is built for that shape of data — one velocity (and optionally one BC) per shot — rather than the dense single-shot velocity-vs-distance string the Doppler fit above expects. There's no distance data to regress against here, so the app doesn't fit anything. It simply averages, exactly the way taking several ordinary chronograph readings and trusting their average gives a more reliable velocity than any single shot.
Paste the entire exported log — header, weather line, shot count, and all — into the box under Import Chronograph Shot Log and press Read Chronograph Log. Only the individual shot rows are actually read; everything else in the log is ignored rather than needing to be trimmed out first. There's no limit on how many shots a log can contain — a 3-shot string and a 30-shot string are both averaged the same way.
Once it's read, you'll see a per-shot table (velocity and BC for every shot, with any shot whose BC is more than 15% off the average flagged for a second look) and two buttons: Apply Avg Velocity, which writes the averaged velocity straight into Muzzle Velocity, and Apply Avg BC, which sets the same BC multiplier as True Trajectory and the Doppler fit above.
10. Zero Offset
For when you know a holdover, but haven't re-zeroed.
When to use it Advanced
If you've zeroed for one load, then switch to a different projectile without re-zeroing, you often already know from experience how much that new load holds over or under point of aim at your zero range. Zero Offset – Elevation lets you enter that figure directly (in mils, MOA, or clicks) and shifts the whole elevation table by that constant angular amount.
A second, independent field — Zero Offset – Windage — does the same thing for left/right instead of up/down: a known real-world drift at your zero range, for example a scope that isn't perfectly boresighted, or a previous zero done in a crosswind. It has its own mils/MOA/clicks toggle (so it can be entered in a different unit from the elevation field if you prefer), and it stacks on top of — rather than replacing — wind deflection, spin drift, and Coriolis, all of which are added into the same combined windage figure used by Reticle View, HUD, and the Windage row of the Turret Dial. Positive values describe an additional rightward drift baked into the zero — the same way you'd describe a group landing off-centre, not a correction to dial in — so its sign is the opposite of the "correct R/L" windage readouts shown everywhere else in the app.
11. Advanced Corrections
The physics that only matters once you're shooting a long way.
Spin Drift Advanced
A spin-stabilised projectile drifts slightly to the side of its twist direction over the course of a flight, independent of any crosswind, growing disproportionately at long range. It's computed automatically once Diameter, Length, and Twist Rate are filled in, and shown as its own stat card and table column — kept separate there so you can see how much of your total windage is wind versus spin. It's also folded into the single combined windage figure Reticle View and HUD hand you to actually dial or hold; see "Combined windage" under Field Tools below.
Aerodynamic Jump Advanced
A crosswind doesn't just push a bullet sideways — it also causes a small VERTICAL shift in point of impact, via a completely different mechanism from Spin Drift or Wind Deflection above. As the bullet exits the muzzle into a crosswind, it briefly yaws slightly off the flight path; because it's spinning, gyroscopic precession converts that sideways yaw into an upward or downward nudge within the first few calibers of travel, well before it settles into normal flight. The direction depends on twist: a right-hand-twist bullet jumps up for a crosswind from the right and down for one from the left (reversed for left-hand twist) — so the same "clock = direction the wind is FROM" reading you already use for Wind Speed & Wind Clock also determines which way this pushes. It's computed automatically once Diameter, Length, and Twist Rate are filled in (the same gate as Spin Drift and Gyroscopic Stability), shown as its own "Aero Jump" stat card, and folded directly into Drop — the same way a Zero Offset – Elevation value is (Section 8), rather than needing a separate figure to add in yourself.
In practical terms this is usually the smallest of the three wind-related corrections in this app — typically a few hundredths of a MOA per mph of crosswind, smaller than Spin Drift and much smaller than Wind Deflection at the same range — but it's a genuine, real effect, not a rounding artefact, and it grows with gyroscopic stability (Sg) the same way Spin Drift does. It deliberately ignores a Wind at Target reading (Section — see "Wind at Target" below): unlike Wind Deflection and Spin Drift, which build up gradually over the whole flight and so genuinely depend on conditions further downrange, Aerodynamic Jump is set entirely by conditions at the muzzle the instant the bullet leaves — nothing about it changes because the wind happens to differ near the target.
Coriolis & Eötvös Advanced
The Earth's rotation deflects a bullet in two distinguishable ways: a vertical Eötvös effect (an eastward shot experiences marginally reduced effective gravity, a westward shot the opposite) and a horizontal Coriolis drift perpendicular to the line of fire. Both depend on your Latitude and the shot's Azimuth (Section 4), and both are genuinely tiny outside long-range centrefire shooting. The vertical Eötvös component is already baked directly into Drop everywhere in the app — it's not a separate figure you'd ever need to add in yourself. The horizontal component is the one shown as its own "Coriolis" stat/column, the same way Spin Drift is.
12. Field Tools
Range Card, Reticle View, the turret dial, and HUD — built for glancing at, not reading closely.
Combined windage in Reticle View & HUD Advanced
The main results table shows Wind, Spin Drift, and Coriolis as three separate columns, so you can see exactly where your total lateral correction is coming from. But the windage figure Reticle View and HUD actually give you to dial or hold — the reticle's hold point and its "Hold ... left/right" text, and HUD's Windage hero number — is all three added together into one number, so there's no ambiguity about what to actually dial: you don't need to read three figures and add them up yourself before trusting the reticle marker or the number on screen. Elevation is unaffected by this — Spin Drift and the horizontal Coriolis component are both purely lateral effects, so only windage is combined; Drop already includes the vertical Eötvös component on its own (see Coriolis & Eötvös, Section 9). For most air rifle shooting, Spin Drift and Coriolis are small enough next to wind that the combined figure and the wind-only figure barely differ — the difference grows at longer centrefire range, where all three genuinely matter. If a Zero Offset – Windage value is active (Section 8), it's folded into this same combined figure too, on top of Wind/Spin Drift/Coriolis.
Range Card Intermediate
Press 📋 Range Card for a stripped-down, large-print range-vs-holdover view — easy to read at a glance in the field or on a bright phone screen. Each row also shows a small "Wind (per mph)" (or "Wind (per kph)" when the page is set to metric) reference figure underneath the holdover value — how much correction to apply for every 1mph/1kph of full-value wind, in whatever unit (mils, MOA, clicks, in, or cm) the holdover value itself is shown in. This is deliberately not a single wind-corrected number: the wind speed you enter is one static guess, and real field wind rarely matches it exactly, so the card instead gives you a per-mph/per-kph rate to scale by whatever you actually read off the wind at the line. The label spells out "per mph"/"per kph" rather than just stating the unit, since this is a rate rather than a wind-speed reading, and a bare unit label could otherwise be misread as one. It's left off when the calculation used 0mph wind, since there's nothing to derive a rate from. Press 🖨 Print inside the card for a paper copy, or 📤 Share to send it as plain text (wind reference included) to any app on your phone — Notes, Reminders, Messages, or a Shortcut — via the standard iOS/macOS share sheet. There's no direct Apple Watch app, but anything saved to Notes or Reminders this way syncs automatically and shows up on your wrist, so Share is the quickest route to having your range card on your watch without leaving the field. On a browser without share-sheet support, the button copies the text to your clipboard instead.
Reticle View Intermediate
Press Reticle View to see your holdover overlaid directly on a Mil-Dot, MOA Hash, or Christmas Tree reticle pattern for a chosen range — useful for rehearsing exactly where your reticle needs to sit before you're on the clock. Each pattern is numbered so you can read the hold off the picture at a glance: every mil on the Mil-Dot and Christmas Tree, and every 5 MOA on the MOA Hash. All three patterns have a fine dot at the centre of the crosshairs marking the exact aim point. The Christmas Tree also has a windage scale along its horizontal axis (a tick at every mil, numbered every 2 mils) and an elevation scale running up to 5 mil above the crosshair, in addition to its holdover rows below. The Mil-Dot also carries small 0.1 mil tick marks between its dots, with a slightly longer one at each half mil, for reading fine holds. A small grey arrow in the top-left corner shows the wind condition that hold was calculated for — pointing at whichever clock position you entered (12=up, 3=right, and so on), which is also where that wind is blowing FROM (see Wind Speed & Wind Clock above), so the arrow doubles as a small weathervane reading, just like glancing at a Kestrel. Beside it, labelled "HOLD," is which way to actually hold or dial to correct for it — the same side the wind is coming FROM, so it agrees with the arrow itself (a wind FROM 3 o'clock needs a rightward hold). The speed carries a trailing R or L (e.g. "10mph R") giving that hold side as a quick letter rather than needing to judge the arrow's exact angle. "Calm" replaces the whole readout when wind speed is 0. It's a static readout of the assumption behind the drawn hold, not a separate target — deliberately drawn in muted grey rather than the orange used for the actual aim-point marker. No letter appears for a pure head- or tailwind (12 or 6 o'clock), since there's no sideways correction to report — and for the same reason, the "HOLD" word itself is left off at those two positions too, leaving just the arrow and speed. The windage half of the hold point (and the "Hold ... left/right" text) is the combined figure described in "Combined windage" above — wind, spin drift, and Coriolis added together, not wind alone.
Overriding the wind in Reticle View Intermediate
Below the Range field, a wind speed box and the same small clock-face dial used on Compare Loads let you re-check the hold for a different wind without leaving Reticle View or re-running Calculate on the Inputs tab. It defaults to whatever wind the current calculation actually used and keeps following it until you type your own speed or drag/tap the dial — drag anywhere on the ring or tap a spot on its edge, it snaps to the nearest hour using the same "clock = direction the wind is FROM" convention as the Wind Clock field. Unlike Compare Loads, there's no separate button to press: the hold point, the reticle marker, and the small grey wind arrow all update as soon as you release the dial or finish typing a speed, since this is a genuine recalculation under the new wind rather than a shortcut estimate. A Reset link beside the wind row snaps it back to the calculated wind at any time, and it resets on its own the next time you press Calculate — a fresh calculation is always the starting point for a new "what if." If a Wind at Target reading is active for the current load, a small note appears below the override row saying so — this override only ever adjusts the near/shooter-side wind; the target-side reading stays whatever was entered on the Inputs tab and can't be touched from inside Reticle View.
Overriding velocity in Reticle View Intermediate
Below the wind row, a Velocity field lets you re-check the hold under a different muzzle velocity — handy for testing a chronograph reading against your saved figure without touching the preset or leaving Reticle View. It defaults to whatever velocity the current calculation actually used and keeps following it until you type your own; a Reset link beside it snaps back to the calculated value at any time, and it resets on its own the next time you press Calculate. Like the wind override, this is a genuine recalculation — the hold point and reticle marker update as soon as you finish typing, not an estimate.
Turret Dial Advanced
The optional Turret Dial (inside Reticle View) tracks what you've already dialed on your scope's elevation and windage turrets, then shows the remaining holdover needed on top of that — handy when you've dialed most of the correction and want to hold the small remainder rather than dial it all.
Reticle label mode: Subtensions and Distances Intermediate
Below the Reticle Pattern selector, a two-button toggle switches the labels on the vertical axis between Subtensions (the default — mil or MOA numbers as they appear on the real reticle) and Distances (the computed range at which the bullet's drop equals each mark, shown in your current unit — metres or yards). In Distances mode, the orange impact dot carries its own range label in orange directly alongside it, so the selected distance is always clearly identified even when the exact holdover falls between two whole-unit marks. Horizontal arm labels and the Christmas Tree's upper elevation scale stay as subtensions in both modes, since those axes don't map to a single bullet-drop distance. Switching modes is instant and requires no recalculation.
Custom range in Reticle View Basic
The Range field in Reticle View now has two options side by side: the existing dropdown (which lists every distance in the computed table, with stars and diamonds marking zero and spot ranges) and a free-entry number field to its right. Type any distance into the number field — in yards or metres, matching your current unit setting — and the reticle updates immediately, with the hold point computed by linearly interpolating between the two nearest table rows. Using the dropdown clears the custom field; entering a custom value overrides the dropdown without clearing it, so switching back is a single click. Values beyond the table's computed range clamp to the last available row.
HUD (Head Up Display) Intermediate
Press 📡 HUD in the Results page's button row for a single-distance, single-glance solution in the largest type anywhere in the app — type a distance to target and get elevation and windage as two big numbers, in mils, MOA, or clicks. Unlike Reticle View's range field, HUD's distance box takes any number you've actually ranged, not just a distance the main table happened to compute — type 437 and get 437, not whatever tabulated mark is closest. Wind and velocity can be overridden the same way as on Reticle View, with their own independent dial and speed fields that don't affect Compare Loads or Reticle View's own overrides, and everything recomputes live as you type or drag, with no separate button to press. The velocity field has +/- buttons beside it for a quick 10fps (5m/s) nudge, rather than relying on your browser's own number-field arrows — Safari doesn't show those at all. Below the two big numbers, a headline table shows Muzzle Energy, Velocity at Target, Energy at Target, Drop, Wind, and Air Density — the same physical-distance figures the main Results page's own stat cards show, as a quick reference alongside the angular hold values above. The big Windage number is the combined figure described in "Combined windage" above (wind, spin drift, and Coriolis added together); the headline table's own "Wind" row underneath stays crosswind-only, matching the main Results page's own Wind column, so the two aren't showing the same thing under different labels.
Probability of Hit Advanced
Press 🎯 Probability of Hit in the Results page's button row for an honest, single number: given everything you don't know exactly — your wind call, this load's shot-to-shot velocity spread, your rifle's own mechanical precision, and your own skill — how likely is a hit on a target of a given size at a given range? This is a planning estimate, not a promise, and it doesn't replace judgement at the line.
Only two things are needed to get a result, and they're the only fields shown by default: Distance to target at the top, and Target size below it. Everything else on this page — wind, velocity, both uncertainty figures, shooter proficiency, and rifle mechanical precision — is an optional refinement with a sensible default already in place, so it's tucked behind a collapsed Refine the estimate heading rather than competing for attention with the two fields you actually need to fill in. Tap it to open up those extra controls if you want to tune any of them; it reopens on its own if you'd already set a wind or velocity override on a previous visit.
Pick a distance to target and a target size (a small chip-style list of sizes for the current discipline — targets are always treated as a single circular-equivalent diameter, even an odd-shaped one). Every tile here, including the app's own built-in sizes, can be renamed, resized, or deleted with its ⋯ button, and you can add as many of your own as you like with the name/diameter row underneath — nothing on this list is fixed. Press and drag a tile (press-and-hold first on a touchscreen) to reorder the list into whatever sequence makes sense to you. If you change your mind, Reset to defaults above the list restores that discipline's original built-in sizes, discarding anything you've added, edited, deleted, or reordered for it. Wind and velocity default to whatever the current calculation used, exactly like HUD, and can be overridden the same way with their own independent dial and stepper. Two figures here are new and not shown anywhere else in the app: wind call uncertainty (how far off your wind guess might realistically be) and velocity SD (this load's own round-to-round muzzle velocity spread) — both widen the probability spread the less confident they are. Velocity SD starts as a rough manual placeholder (2fps) labelled "manual estimate"; read a chronograph log with two or more shots on the Trajectory Truing tab and press Apply Velocity SD there to replace it with a measured figure, which relabels it "from chronograph log." Editing the SD field by hand afterwards reverts the label back to manual, so it never keeps claiming a measured figure you've since typed over.
Two more figures round out the error budget. Range estimate uncertainty (next to Distance to target) is how far off your ranged distance might realistically be — a rangefinder's typical accuracy, or your own margin if ranged by eye. Unlike every other figure on this page, it isn't about getting an input wrong; it's about the target turning out to be somewhere other than where you dialled or held for, so it's worked out by comparing your trajectory's own drop and drift at the true distance against the assumed one, not by re-running the calculation with a different input. Atmospheric confidence (next to Velocity SD) is a plus-or-minus percentage on today's air density — wider if you're going on a forecast or a distant weather station, narrower right after a fresh Live Weather fetch or an on-site Kestrel reading. Both default to a modest non-zero figure (2yd/2m and 2%) rather than zero, for the same reason wind call uncertainty and velocity SD do: a real source of error left at zero would be hidden, not honestly modelled. If you do set every uncertainty source to zero the result shows 100% — a hit is certain under perfect conditions — rather than a dash.
Shooter proficiency is your own dispersion and is a single global setting shared by every rifle and load — it describes you, not any one gun, so it isn't saved with a preset and can be adjusted at any time. Rifle mechanical precision (group size), by contrast, is saved with the currently loaded preset, the same way BC and weight are, since it's a property of that specific rifle-and-ammo combination. Both give you the exact same entry options: mils, MOA, or a linear group size in inches or centimetres measured at a stated distance (handy if you're working from a printed target or a spotter's reticle subtension) — the app converts whichever you pick to an angle for you. If you'd rather not measure a fired group by hand, press the large 📷 Measure your group from a photo button just below the target sizes (it's always visible, not hidden under "Refine the estimate"): choose or take a photo of the target, then work through two clearly labelled steps. Step 1 — Set the scale: tap two points a known distance apart (a ruler, a printed grid square, or the target's own known width), enter that real distance, and press Next. Step 2 — Mark the group: tap the two widest bullet holes, one on each side of the group. Each step has its own banner, colour (orange scale line, green group line) and Redo link, and group taps are ignored until the scale is set — the app works out the real-world group size from those taps and can apply it straight to Shooter proficiency for you. There's no automatic hole detection here by design: every measurement comes from your own taps, which you can see and redo, rather than an unverifiable number a computer decided for you — useful for the kind of decision, like agreeing with a client how close to stalk before a shot, where you want a figure you can stand behind. Photos are processed entirely on your device and are never uploaded anywhere.
The page combines all six sources by root-sum-square (independent uncertainties add in quadrature, not by simply adding them up) into one elevation spread and one windage spread, then works out the actual hit probability against your chosen circular target — a genuine calculation for the general case where the elevation and windage spreads differ, not a simplified formula that only works when they happen to match. A small breakdown table shows each source's own contribution alongside the combined figure, plus a Dominant Factor callout naming whichever single source is contributing most, so you know what to work on first if you want a better number: a steadier wind call, a more consistent load, a more precise rifle, a better range estimate, more trust in today's atmospherics, or more trigger time.
Beside the headline percentage, a small circular graphic plots a random scatter of simulated shots against your chosen target, drawn from that same combined elevation and windage spread — a quick visual feel for the shape of your dispersion (tight and round, or stretched out along one axis) alongside the number. It's illustrative only, not itself the source of the headline percentage, so don't read anything into exactly how many of the dots on screen happen to land inside the ring on any given draw — the percentage above is the one to trust. The dots only reshuffle when something that actually changes your dispersion changes (wind call uncertainty, velocity SD, mechanical precision, shooter proficiency, wind direction, or target size) — adjusting something that doesn't affect the spread, like wind speed on its own, leaves the same dots in place rather than redrawing them for no reason. Press Redraw underneath the graphic at any time to draw a fresh sample from the same spread — a reminder that any one scatter is just one draw from the distribution, not the whole picture of it.
13. Compare Loads
Deciding which rifle and load to bring, side by side.
Selecting loads to compare Intermediate
Press ⚖️ Compare in the header to open the comparison picker. Select up to three saved presets — any mix of disciplines and any mix of your own and built-in loads — then press the Compare button inside the overlay to see headline stats and an overlaid trajectory chart for all three side by side.
The comparison distance Intermediate
All three loads are shown out to one shared distance, defaulting to the shortest of the selected loads' own max ranges. Type your own value into the distance field beside the Compare button to override it — your typed value sticks across further selection changes until you clear the selection back to zero.
Overriding the wind for a comparison Intermediate
Below the distance field, a wind speed box and a small clock-face dial let you ask "what if the wind picked up?" or "what if it swung round?" without leaving the Compare page. Both default to whatever's currently set on the Inputs tab and keep following it — right up until you type your own speed or drag/tap the dial, at which point your override sticks across further selection changes, exactly like the distance field beside it. Drag anywhere on the ring or tap a spot on its edge; it snaps to the nearest hour using the same "clock = direction the wind is FROM" convention as the Wind Clock field. Clearing the selection back to zero resets both the distance and wind overrides together, ready for a fresh comparison.
Drop & Windage Correction units Intermediate
The Drop & Wind units dropdown above the comparison table switches those two rows between mils, MOA, clicks, inches, and cm — independent of whatever unit the single-load Results table happens to be showing. The row labels always state the unit directly, e.g. "Drop (mil) at 500yd", so there's never any doubt what's being read. Switching units is instant and doesn't re-run the comparison. Choosing clicks reveals the same turret click-size selector as the single-load Results table, and the two stay in sync — changing the click size in either place updates both.
Overriding velocity per load Intermediate
Unlike the wind and distance overrides above, which apply to the whole comparison at once, velocity can be overridden separately for each column — a small Velocity box sits in each load's own header in the results table, with +/- buttons beside it for a quick 10fps (5m/s) nudge rather than your browser's own (often invisible on Safari) number-field arrows. Type a value, or tap the buttons, to test a chronograph reading, or nudge just one load's velocity without disturbing the other two, then press Compare again to see it take effect. A Reset link appears next to a column's box once it has an override, and takes effect immediately rather than waiting for the next Compare press. Deselecting a load clears its own override; clearing the whole selection back to zero clears all of them.
Comparing a load you're still editing Advanced
If a selected load is also the one currently open on the Inputs tab, Compare automatically uses whatever you've most recently calculated for it — including an unsaved Trajectory Truing correction or a quick field edit — rather than the stale saved preset. It's marked (live) in the comparison table whenever this applies.
The subsonic-crossing warning Advanced
A centrefire load that goes subsonic before the comparison distance is flagged — subsonic centrefire is usually a deliberate choice (a suppressed .300 BLK load, for example) and worth a second look. Air rifle and rimfire loads never trigger this warning, since subsonic flight is the ordinary case for pellets, slugs, and standard-velocity rimfire ammunition, not the exception.
14. Tips, Limitations & Troubleshooting
Things worth knowing, at every level.
Warnings never block a calculation Basic
Every yellow banner in the app — plausibility checks, BC estimates, extrapolation, subsonic crossing — is advisory only. You can always dismiss it and proceed; the app trusts you to know your own load better than a generic bound can.
Everything works offline Basic
The whole application, including this guide, runs entirely in your browser with no server component required. It works fully offline once loaded — ideal at the range, away from signal. If you have an account, your presets are kept in the cloud and sync automatically when you're back online. If you don't, back them up manually (Section 6) before switching devices or browsers.
The G1↔G7 estimate is approximate Intermediate
The ÷1.9 estimate used to fill in a missing BC (G7) is a commonly cited approximation for modern boat-tail rifle bullets specifically. It has no general validity for pellets or flat-base projectiles — use a genuine published G7 figure, or GA for pellets, whenever you can.
Head/tailwind affects drop, not just crosswind Advanced
Drag is computed from the bullet's velocity relative to the air, not relative to the ground — so a headwind (12 o'clock) very slightly increases drag and drop, and a tailwind (6 o'clock) very slightly decreases both, on top of whatever crosswind deflection the same Wind Clock position also produces. This is a genuinely small effect for centrefire and rimfire: at 15-20mph even a rifle bullet at long range shifts by only a few hundredths of a mil, well inside the uncertainty already present from BC tolerance and chronograph error. It's proportionally larger for air rifle pellets specifically, since a given wind speed is a much bigger share of a pellet's much lower muzzle velocity — a light, low-BC pellet (around 0.02 BC) at a typical 50yd Field Target distance can see roughly 0.07-0.09mil of extra drop from a 15-20mph headwind, comparable to half a scope click. Heavier, higher-BC pellets are far less affected — the same wind speed moves a denser 0.08+ BC pellet by only a few thousandths of a mil, one more reason competitive air rifle shooters favour them.
Sg doesn't apply Miller's velocity correction Advanced
Miller's stability formula is referenced to roughly 2800fps rifle velocities, and Miller did publish a velocity correction — capped at its value at the speed of sound rather than extrapolated further into subsonic territory. Air rifle loads typically run 700–950fps, but the app doesn't apply this correction: neither the base formula nor Miller's own correction was derived from or validated against airgun pellets, so adding it would swap one unvalidated number for another rather than clearly improve accuracy. Read the raw Sg figure for pellets as indicative rather than exact — a documented, known limitation rather than a bug.
My Quick Presets are empty Basic
Some deployments of the app (the public "General Release" build in particular) intentionally ship with no built-in preset library. Enter your own loads by hand, or import a backup file from another install (Section 6).
15. Installing as an App
Cervid Ballistics is a single offline file with no server — every platform below just adds a shortcut icon to it, so it opens without a browser address bar and behaves like an installed app. Nothing is downloaded or installed beyond that icon; it's still the same file.
iPhone & iPad (Safari) Basic
- Open the Safari app and go to the web page you want.
- Tap the Share button (the square with an upward arrow, or the three dots depending on your layout).
- Scroll down the list of options and tap Add to Home Screen. If you do not see it, scroll to the bottom, tap Edit Actions, and add it.
- Type a custom name for the icon if you want.
- Turn on Open as Web App if you want it to open like a standalone app, or leave it off to open in Safari.
- Tap Add in the top-right corner.
Mac (Safari — add to the Dock) Basic
- Open the web page in Safari.
- Click the Share button in the toolbar.
- Choose Add to Dock.
- Edit the name if you want, then click Add.
This creates a standalone web app in your Applications folder, launchable from the Dock or Spotlight with its own window and no address bar — you don't need to keep a Safari tab open for it.
Android (Chrome) Basic
- Open the web page in Chrome.
- Tap the three-dot menu at the top right.
- Tap Add to Home screen, then Install.
The icon appears on your Home screen and in the app drawer, opening in its own window without Chrome's address bar. Android has no universal taskbar equivalent; on tablets with a taskbar/dock strip, drag the installed icon there the same way you would any other app.
Windows (Edge or Chrome — pin to the taskbar) Basic
- Open the web page in Edge or Chrome.
- Edge: click Settings and more (•••) → Apps → Install this site as an app. Chrome: click the three-dot menu → Cast, save, and share → Install page as app… (some pages also show an install icon directly in the address bar).
- Confirm the name in the dialog and click Install.
- Once installed and open, right-click its taskbar icon and choose Pin to taskbar — Edge also offers this directly from the "App installed" confirmation.