Building PureMaps (Tested on Debian 12 and Ubuntu 24.04)
January 25, 2026 · View on GitHub
This document covers the full process for building and installing PureMaps and its dependencies from source. It applies to common Linux distributions and has been tested on Debian 12 and Ubuntu 24.04.
Dependencies
In addition to general QML development packages, the following specific dependencies are required:
- PyOtherSide
- PyXDG
- MapLibre Native Qt
- Mapbox GL QML
- GPXPy (available as submodule)
- S2 Geometry Library
- Nemo DBus (needed for Kirigami platform)
When building with flatpak-builder, dependencies will be handled via Flatpak manifest.
Install System Packages
sudo apt update
sudo apt install -y git build-essential cmake ninja-build pkg-config \
qt5-qmake libqt5core5a libqt5dbus5 qtbase5-dev qtdeclarative5-dev \
python3 python3-pip python3-setuptools python3-xdg \
libpcre2-dev libasound2-dev libssl-dev \
libtool automake autoconf libxml2-dev libxslt1-dev \
libgeoip-dev libgl1-mesa-dev libgles2-mesa-dev \
libicu-dev libpopt-dev libqt5svg5-dev qtpositioning5-dev \
qttools5-dev gettext qtquickcontrols2-5-dev \
qml-module-qtpositioning qml-module-qtmultimedia \
qml-module-qtsensors libqt5location5-plugins
Build Third-Party Dependencies
Abseil
git clone https://github.com/abseil/abseil-cpp.git -b lts_2024_07_22
cd abseil-cpp
mkdir build && cd build
cmake -DBUILD_SHARED_LIBS=ON -G Ninja ..
ninja -j$(nproc)
sudo ninja install
cd ../..
S2Geometry
git clone --depth 1 https://github.com/google/s2geometry.git -b v0.12.0
cd s2geometry
mkdir build && cd build
cmake -DBUILD_SHARED_LIBS=ON -DBUILD_PYTHON=OFF -DBUILD_TESTS=OFF -G Ninja ..
ninja -j$(nproc)
sudo ninja install
cd ../..
Nemo DBus (for Kirigami)
wget https://github.com/sailfishos/nemo-qml-plugin-dbus/archive/refs/tags/2.1.27.tar.gz
tar -xzvf 2.1.27.tar.gz
cd nemo-qml-plugin-dbus-2.1.27
qmake
make -j$(nproc)
sudo make install
cd ..
PyOtherSide
wget https://github.com/thp/pyotherside/archive/1.5.9.tar.gz
tar -xzvf 1.5.9.tar.gz
cd pyotherside-1.5.9
qmake
make -j$(nproc)
sudo make install
cd ..
MapLibre GL Native Qt
git clone --depth 1 --shallow-submodules --recurse-submodules --jobs 8 -b v3.0.0 https://github.com/maplibre/maplibre-native-qt.git
cd maplibre-native-qt
mkdir build && cd build
cmake -DMLN_QT_WITH_WIDGETS=OFF -DMLN_QT_WITH_LOCATION=OFF \
-DMLN_QT_WITH_INTERNAL_ICU=ON -DMLN_WITH_WERROR=OFF -G Ninja ..
ninja -j$(nproc)
sudo ninja install
cd ../..
Mapbox GL QML
git clone --depth 1 https://github.com/rinigus/mapbox-gl-qml.git -b 3.0.0
cd mapbox-gl-qml
mkdir build && cd build
cmake -DQT_INSTALL_QML=$(qmake -query QT_INSTALL_QML) -G Ninja ..
ninja -j$(nproc)
sudo ninja install
cd ../..
Mimic1 (TTS Engine)
git clone --depth 1 https://github.com/MycroftAI/mimic1.git
cd mimic1
./autogen.sh
./configure --with-audio=none
make -j$(nproc)
sudo make install
cd ..
PicoTTS
git clone --depth 1 https://github.com/ihuguet/picotts.git
cd picotts
cd pico
./autogen.sh
./configure --prefix=/usr
make -j$(nproc)
sudo make install
cd ../../
Build PureMaps
git clone --recursive https://github.com/rinigus/pure-maps.git
cd pure-maps
# to get current flatpak version: git checkout 3.4.2
cp poor/apikeys.py tools/apikeys.py
mkdir build && cd build
cmake -DFLAVOR=kirigami -DAPP_NAME=pure-maps \
-DUSE_BUNDLED_GPXPY=ON -DMAPMATCHING_CHECK_RUNTIME=OFF \
-DMAPMATCHING_AVAILABLE=ON -DUSE_BUNDLED_GEOCLUE2=ON -G Ninja ..
ninja -j$(nproc)
sudo ninja install
Notes on Build Options
-
To run without installing, add
-DRUN_FROM_SOURCE=ONand avoid usingmake install. -
GUI Platform can be specified using
-DFLAVOR=:silica– Recommended for Sailfish OSkirigami– Use on KDE Plasma systems or other environments where a responsive Qt/KDE-style UI is desiredqtcontrols– Use on generic Qt platformsuuitk– Use when targeting Ubuntu Touch / Lomiri–based systems
-
Recommended: use an out-of-source build with a separate
build/directory.
Packaging and Defaults
To configure default services for packaging:
cmake -DDEFAULT_PROFILE=online \
-DDEFAULT_BASEMAP=osm \
-DDEFAULT_GEOCODER=photon \
-DDEFAULT_GUIDE=guideservice \
-DDEFAULT_ROUTER=graphhopper ..
Each provider refers to its corresponding JSON or Python configuration file in PureMaps.
Run PureMaps
pure-maps