View on GitHub

Ballistic Calculator 2

User guide — a free, open-source ballistic calculator for Windows, Linux and macOS

Installation and first run

Goal of this article: get from the download to a trajectory on screen, on Windows or Linux, and know where the application keeps its files.

There is no installer. The application ships as one archive per platform.zip for Windows, .tar.gz for Linux and macOS; you unpack it wherever you like and run it. Nothing is registered, no services are added, and removing it is deleting the folder.

What you need

Download

Take the archive for your platform from the Releases page — a .zip for Windows, a .tar.gz for Linux and macOS — and unpack it into any folder you can write to: your home directory, Documents, a USB stick. Avoid C:\Program Files and /usr/local: the application keeps its window layout in a file beside the executable, and in a read-only folder those settings are silently not remembered (see Where your settings go).

Windows

Run BallisticCalculator2.exe. The reticle editor is a separate program in the same folder, ReticleEditor.exe.

Both executables are code-signed. Windows SmartScreen may still show a “don’t run” prompt for a release it has not seen before — More info → Run anyway.

Linux

Unpack with tar and run the launcher:

tar xzf BallisticCalculatorPortable-linux-x64.tar.gz
cd BallisticCalculator2                 # wherever you unpacked it
./BallisticCalculator2                  # the reticle editor is ./ReticleEditor

The binaries have no extension: BallisticCalculator2 and ReticleEditor. The archive is a .tar.gz precisely so they arrive executabletar carries permissions where zip does not, so there is no chmod step. If you have somehow ended up with them non-executable, chmod +x them, or run the assembly through the runtime instead, which never needs a permission bit of its own:

dotnet BallisticCalculator2.dll

On a desktop distribution nothing else is needed. On a minimal or server install, the pieces usually missing are fontconfig (Skia will not render text without it) and libicu (which .NET needs for globalization) — install your distribution’s fontconfig and libicu packages.

macOS

Take …-osx-arm64.tar.gz on Apple Silicon or …-osx-x64.tar.gz on an Intel Mac — getting this wrong is the single most common failure, see below — and install the matching .NET 8 Runtime.

tar xzf BallisticCalculatorPortable-osx-arm64.tar.gz
cd BallisticCalculator2                 # wherever you unpacked it
./BallisticCalculator2                  # the reticle editor is ./ReticleEditor

tar carries the execute bit, so the launcher runs as unpacked. The alternative, which needs no permission bit at all, is to name the assembly and let the runtime start it:

dotnet BallisticCalculator2.dll         # or ReticleEditor.dll

The application is not notarised, so spctl --assess reports it as rejected and Finder will refuse to open the launcher by double-click. Running it from Terminal is unaffected — macOS is far stricter about double-clicked application bundles than about a command-line binary. If you do meet a Gatekeeper refusal, clear the quarantine flag the download left behind:

xattr -dr com.apple.quarantine .

dotnet <name>.dll works on Windows and Linux too, and is worth remembering whenever a launcher will not start. It does not cross architectures, though: each archive’s .deps.json is pinned to its own runtime identifier, so an Intel dotnet cannot run the osx-arm64 build and vice versa. Matching the archive to the machine comes first.

If it will not start

What you see What it means
Bad CPU type in executable Wrong archive for the machine — an osx-arm64 build on an Intel Mac, or an osx-x64 build on Apple Silicon without Rosetta. Apple Silicon can run x64 under Rosetta; Intel can never run arm64
dotnet reports it cannot load the assembly The same mismatch reached through dotnet: the runtime is one architecture and the build is pinned to the other
zsh: permission denied The launcher has no execute bit — unusual from a .tar.gz, but chmod +x fixes it
"…" cannot be opened because the developer cannot be verified A Finder double-click on an un-notarised binary. Launch it from Terminal instead, or clear the quarantine flag: xattr -dr com.apple.quarantine .
dotnet: command not found The runtime is not installed, or not on your PATH. It normally lives at /usr/local/share/dotnet/dotnet, which is not always symlinked into /usr/local/bin

Not sure which Mac you have? uname -m answers it: arm64 for Apple Silicon, x86_64 for Intel.

What is in the folder

Everything sits in one flat directory: the managed assemblies, and the native rendering libraries for that platform — libSkiaSharp.dll on Windows, libSkiaSharp.so on Linux, libSkiaSharp.dylib on macOS. Each archive carries one platform’s natives, so take the one matching the machine.

The one subdirectory that matters is data:

Path Holds
data/drg Custom drag tables (.drg) — a large set of radar-derived Lapua tables, plus others
data/reticle Reticle definitions (.reticle) — 34: 13 measuring grids (Mil-Dot, MOA, H58, Leupold CCH and CMR-MIL, six EOTech Vudu patterns, German #4, an M16 iron sight) and 21 real optics with calibrated drop ladders (Trijicon ACOG, V-COG and Huron, Elcan Specter, Leupold CMR-W and CM-R², four EOTech Vudu, PSO-1). README.md there indexes them with their calibration, and each reticle has a companion .md with the full detail
data/ammo The sample ammunition library (.ammox and legacy .ammo), organised by cartridge
data/dictionaries.xml The sight and barrel presets the application ships with. Your own copy is user-dictionaries.xml beside the executable; see Updating

Keep data next to the executable. The application looks for it beside the binary it is running from; moved or renamed, the shipped drag tables, reticles and presets simply will not be found. These folders are also the default locations the Open and Save dialogs start in, so anything you add to them is one click away.

Where your settings go

Your own work — saved shots, drag tables, reticles, ammunition — is only ever where you put it. The application writes nothing else outside its own folder.

First run

The main window opens empty: a menu bar and a blank workspace that child windows will fill. Nothing is calculated until you describe a shot.

  1. Trajectory → New, then Imperial or Metric (Ctrl+I / Ctrl+M). This is the only choice the application asks you to make up front, and it decides nothing more than the units the new window’s fields are labelled and entered in.
  2. The Shot Parameters dialog opens on its Ammunition tab. The remaining tabs — Weather, Wind, Rifle, Zero, Parameters — hold the conditions, the rifle, the zero and the run settings. Every tab has usable defaults, so you can press OK immediately to see the machinery work, then come back and enter a real load.
  3. OK computes the trajectory and opens a window titled with the ammunition name, holding four views: Table, Chart, Reticle and Summary (Ctrl+T, Ctrl+C, Ctrl+R; the View → Show menu lists them).
  4. View → Edit Parameters (Ctrl+E) reopens the dialog for that window and recalculates on OK. Iterating on one shot is the normal way to work, rather than opening a new window each time.

A few things worth knowing on day one:

Updating and removing

To update, unpack the new archive over the old folder, or beside it. Unpacking over the folder is a merge: it replaces every file the archive contains and leaves your own files alone. Deleting data first does not — that takes your files with it. Your presets and window layout live outside data and are never at risk.

Updating the application sets out exactly what a release replaces, what it keeps, and how sight and barrel presets survive an update.

To remove the application, delete the folder. On Windows, also delete %LOCALAPPDATA%\ReticleEditor if you used the reticle editor.

Running from source instead

If you would rather build it, the only prerequisite is the .NET 8 SDK:

git clone https://github.com/nikolaygekht/ballistic.calculator.app.avalonia
cd ballistic.calculator.app.avalonia
dotnet build BallisticCalculator2.sln
dotnet test BallisticCalculator2.sln          # optional, but it is the project's own check

On Windows the App.bat and ReticleEditor.bat scripts in the repository root launch the two applications, and BuildDebug.bat / TestDebug.bat wrap the two commands above.

Next

Your first trajectory — the imperial/metric choice, what each of the six tabs owns, and what pressing OK actually checks.


← Contents