Skip to content

Windows (MSys2)

Overview#

mwp has, since December 2024, had somewhat functional support for building mwptools using the Windows Msys2 toolchain with the aim of providing a native Windows version of mwp.

  • A "portable" Windows Installer is published in the "Snapshot" builds (Github release area).
  • May be built locally using the Msys2

Status#

Most things work.

Building#

It is necessary to install the Msys2 toolchain. This is not required for a binary install.

System Build Dependencies#

  • Add export LC_ALL=C.utf8 to .profile (.bash_profile) so the blueprint UI definitions will compile.
  • Set your Msys terminal to UTF-8 as well (Options from the title bar icon) Screenshot From 2024-12-04 21-13-24
  • It may also be neccesary to set Windows to use UTF-8.
  • Add export LC_ALL=C.utf8 to .profile (.bash_profile).

Then install dependencies.

 pacman -S  --needed mingw-w64-ucrt-x86_64-gtk4 mingw-w64-ucrt-x86_64-gstreamer mingw-w64-ucrt-x86_64-cairo \
   mingw-w64-ucrt-x86_64-pango mingw-w64-ucrt-x86_64-mosquitto mingw-w64-ucrt-x86_64-libshumate \
   mingw-w64-ucrt-x86_64-libadwaita mingw-w64-ucrt-x86_64-libsecret mingw-w64-ucrt-x86_64-libsoup3 git \
   mingw-w64-ucrt-x86_64-vala mingw-w64-ucrt-x86_64-meson mingw-w64-ucrt-x86_64-go \
   mingw-w64-ucrt-x86_64-blueprint-compiler mingw-w64-ucrt-x86_64-gcc mingw-w64-ucrt-x86_64-gtk4-media-gstreamer mingw-w64-ucrt-x86_64-librsvg \
   mingw-w64-ucrt-x86_64-SDL2 mingw-w64-ucrt-x86_64-readline

Optional, but recommended:

pacman -S --needed unzip mingw-w64-ucrt-x86_64-ruby
* Note that the packages are (mainly) prefixed mingw-w64-ucrt- (vice standard Arch Linux).

It is also recommended to install the following optional GStreamer packages:

  • mingw-w64-ucrt-x86_64-gst-plugins-bad
  • mingw-w64-ucrt-x86_64-gst-plugins-bad-libs
  • mingw-w64-ucrt-x86_64-gst-plugins-base
  • mingw-w64-ucrt-x86_64-gst-plugins-good
  • mingw-w64-ucrt-x86_64-gst-plugins-rs
  • mingw-w64-ucrt-x86_64-gst-plugins-ugly

Then follow the documented build instructions using meson and ninja.

PKGBUILD#

There is also a pacman PKGBUILD file in the docs/windows-pkg directory. You can build your own Msys2 package (currently from the development branch) using this PKGBUILD.

  • Create / enter a build directory, any name your like, e.g. mkdir msys-builds && cd msys-builds
  • Copy docs/windows-pkg/PKGBUILD there:
    cp <PATHTO>/mwptools/docs/windows-pkg ./
    
  • Now you can build the package:
    MINGW_ARCH=ucrt64 makepkg-mingw -C -f
    
    This will generate a Msys2 package named like (the name includes a git tag and commit id) mingw-w64-x86_64-mwptools-24.12.02.r76.c1e34843-1-any.pkg.tar.zst which can be installed with pacman
    pacman -U mingw-w64-x86_64-mwptools-24.12.02.r76.c1e34843-1-any.pkg.tar.zst
    
  • Note that you can build and install in one command:
    MINGW_ARCH=ucrt64 mmakepkg-mingw -C -f -i
    
    After you've done this once, subsequently, after the repo has been updated, you can rerun the build / package generation by rerunning makepkg-mingw (and pacman to install) as required.

Windows Installer#

A Windows Installer is provided, this includes:

  • mwptools : mwptools and GTK infrastructure

mwp also depends on the GStreamer multi-media package. Prior to GStreamer 1.28.0 (30th January 2026), mwp either included GStreamer components directly in its installer or provided a separate mwptools-gstreamer installer.

Since the GStreamer 1.28.0 (30th January 2026) release, the GStreamer archive provides all the components required for mwp video replay, so it is more convenient to use the official GStreamer installer.

The user must install the latest MinGW x64_64-bit runtime installer prior to installing mwptools. In the GStreamer installer, the user can select the sub-components they require; if in doubt, choose the "Full / Runtime" option (i.e. deselect the Development and Debug options).

The mwptools installer attempts to detect the presence of GStreamer by:

  • The existence of the GSTREAMER_1_0_ROOT_MINGW_X86_64 environment variable (which sadly appears broken in the 1.28.0 release) ; or
  • The existence of the default GStreamer installation directory. (c:\Program Files\gstreamer\1.0\mingw_x86_64).

Binary Components and Open Source Licences#

The Windows installer includes components distributed under various Open Source Licences:

The following binary components are from the Msys2 Project.

Also included (replay tools):

Post Install Tasks#

PKGBuild / Msys 2 local build#

  • Install any required GStreamer packages
  • Install blackbox_decode and fl2ltm
  • Install the DejuVu Mono fonts as Windows fonts

All installation methods#

Audio#

Voice assistance requires a spawned "audio (text to speech) helper". The following third party tools are suitable.

  • voice.exe an open source program by Eli Fulkerson uses the Windows Speech Synthesis engine, and works perfectly. Sounds great (similar to piper-tts on Linux). The --voice-command option may be set permanently in %LOCALAPPDATA%\mwp\cmdopts, for example:
        # -m option gives a female voice ... (voice -h for other options)
        --voice-command "voice.exe -m"
    
  • The Windows espeak port also works as an external helper via --voice-command espeak (having set an appropriate PATH). The voice is somewhat robotic. The --voice-command option may be set permanently in %LOCALAPPDATA%\mwp\cmdopts, for example:
        --voice-command espeak.exe
    

Terrain Plots (Terrain Analysis / Line of sight)#

Requires a third party gnuplot. The gnuplot in Mys2 behaves somewhat strangely and is not suitable. Gnuplot Windows binary. Install the Msys2 version.

PATH#

The above external applications will need to be on the PATH available to the installed mwp.

Known issues#

  • Bluetooth in general may be unreliable, in some part due to the difficulty in consistently enumerating BT devices.
  • BLE is not available
  • Terrain Analysis and Line of Sight Analysis is only available "off-line"
  • In the event that mwp should crash, it may leave behind some spawned applications, for example one of more of fl2ltm, blackbox_decode, espeak, voice, bproxy, gmproxy, gdbus. In particular, mwp may not restart if a gdbus orphan remains. In such cases, the user is advised to clean up using the Windows Task Manager.

Data Locations#

Configuration Files#

  • %UserProfile%\AppData\Local\mwp / $LOCALAPPDATA/mwp (~/.config/mwp on POSIX systems).

Map caches:#

  • %UserProfile%\AppData\Local\Microsoft\Windows\INetCache / $LOCALAPPDATA/Microsoft/Windows/INetCache (~/.cache on POSIX systems).
  • And sub-directories:
    • shumate : Tile caches
    • mwp/DEMs : Digital Elevation Models (aka Terrain data)
    • fl2x : Flight log metadata cache.

None of these locations are cleared by an uninstall.

Settings#

mwp maintains documented settings in a Registry like Gtk component which can be assessed by the command line tool gsettings. If you use Msys2, this will be installed. If you use the installer it is also installed; but it is necessary to establish its path to use it (and enable it to find the settings):

  • The mwp Windows Installer will install gsettings, this will need C:\Program Files\mwptools\bin to be on the PATH or cd "C:\Program Files\mwptools" and invoke bin/gsettings. e.g.:

    PS C:\Users\win11> $env:Path += ";C:\Program Files\mwptools\bin"
    PS C:\Users\win11> gsettings list-recursively org.stronnag.mwp
    org.stronnag.mwp adjust-tz true
    ...
    ## show current in the voltage box ...
    PS C:\Users\win11> gsettings set org.stronnag.mwp smartport-fuel-unit 'mAh'
    

You may also the graphical mwpset application to maintain settings. This is part of mwp.

Other#

Note that mwp creates and consumes IP services. It may be necessary to ensure that mwp.exe is white-listed in the Windows firewall.

Reporting Issues#

Please see the general guidance, in particular:

  • Build issues require the full build text, not just some random subset
  • Run time issues require the "stderr" log (mwp_stderr_YYYY-MM_DD.txt) as well as any artefacts that cause an issue (BBL, ETX log, mission files etc.).

Previously, these folders defaulted to GLib's Environment.get_home_dir() which was $HOME / %HOME% everywhere. Now they default to:

  • Normal (POSIX) OS: Environment.get_home_dir() aka $HOME
  • Windows: Environment.get_user_special_dir(UserDirectory.DOCUMENTS)/mwp which is Documents/mwp . This means for Msys2, you now get the same directory regardless of whether you're the Windows user or the Msys2 user (i.e. c:/Users/<NAME>/Documents/mwp.

The user may change the log location via the Environment Variable MWP_LOG_DIR.