
GPU-accelerated vector map engine offering WGPU-based rendering, RustyBuzz text shaping, custom tiles and tile server, routing integration, plus navigation features like map‑matching and dead‑reckoning.
A WIP map engine written in Rust using WGPU.
The initial goal of the project is to learn a new cross-platform tech stack to build a mobile and Linux KMS-ready map engine. The project focuses on rendering and navigation features, including dead reckoning and map matching.
I'm writing about the tech I've learned here
Running on macOS and mobile (Android, iOS):
Running on CPU-only hardware using Slint as the host UI and Skia as the renderer (NXP i.MX93 chip used as a reference hardware):
The stack leverages the following approaches and libraries:
In root folder:
cargo run --package winit-run --release
./gradlew :composeApp:installRelease && adb shell am start -n "com.shashlik.demo/com.shashlik.demo.MainActivity"
Open "kmp/iosApp" project in XCode and just Run it
The current version has been tested on a Raspberry Pi 4 with Raspberry Pi OS Lite. It works via KMS and doesn't require a window subsystem.
Prerequisites for the Linux device:
sudo apt install mesa-vulkan-drivers vulkan-tools libvulkan1
sudo apt install libfontconfig1 libgbm1 libinput10 libxkbcommon-x11-0
Prerequisites for the building machine:
cargo install cross --git https://github.com/cross-rs/cross --branch main --force
Execute kms_deploy.sh script:
chmod +x kms_deploy.shTARGET_HOST=admin@raspberrypi.local ./kms_deploy.sh. Note: Replace with your actual device user and address.Using an AI coding agent? Point it at llms.txt first — it indexes the version-stamped API reference, build facts and known limitations.
Add the dependency to your version catalog:
[versions]
shashlikMap = "0.3.29"
[libraries]
shashlikmap = { module = "io.github.shashlikmap:mapshared", version.ref = "shashlikMap" }In build.gradle.kts:
implementation(libs.shashlikmap)Requires mavenCentral(), Android minSdk 26, and an arm64-v8a device or
emulator. iOS is also supported (iosArm64, iosSimulatorArm64).
From 0.3.21 the SDK declares org.rustls:rustls-platform-verifier in its POM.
Earlier versions carried the verifier as a JNI method inside libffi_run.so,
with no Maven coordinate at all, so nothing extra was needed.
That artifact is not on Maven Central, Google, JitPack or Sonatype. rustls
distributes the Android support library from a Maven archive in their own
repository, which is the setup their README documents. Add it to your
settings.gradle.kts:
dependencyResolutionManagement {
repositories {
mavenCentral()
maven("https://github.com/rustls/rustls-platform-verifier/raw/maven-archive/android-release-support/maven/") {
name = "RustlsAndroidSupport"
// Scoped like the others: a GitHub-backed repo should never be
// consulted for anything but the one group it exists to serve.
content { includeGroup("org.rustls") }
}
}
}Without it the build fails to resolve org.rustls:rustls-platform-verifier.
Do not pick a version by hand. The support library must stay SemVer-compatible
with the Rust crate compiled into the .so, and a mismatch causes runtime
crashes rather than resolution failures. Take whatever version the SDK's POM
pins — 0.3.29 pins 0.2.0, read from the rustls-platform-verifier-android
entry in Cargo.lock.
Then place the composable anywhere in your Compose UI:
@Composable
fun App() {
MaterialTheme {
ShashlikMap(
state = rememberLocationState(latitude = 35.6879, longitude = 139.7570),
)
}
}Full API reference: kmp/shared/README_API.md.
Activity context.Software one.A WIP map engine written in Rust using WGPU.
The initial goal of the project is to learn a new cross-platform tech stack to build a mobile and Linux KMS-ready map engine. The project focuses on rendering and navigation features, including dead reckoning and map matching.
I'm writing about the tech I've learned here
Running on macOS and mobile (Android, iOS):
Running on CPU-only hardware using Slint as the host UI and Skia as the renderer (NXP i.MX93 chip used as a reference hardware):
The stack leverages the following approaches and libraries:
In root folder:
cargo run --package winit-run --release
./gradlew :composeApp:installRelease && adb shell am start -n "com.shashlik.demo/com.shashlik.demo.MainActivity"
Open "kmp/iosApp" project in XCode and just Run it
The current version has been tested on a Raspberry Pi 4 with Raspberry Pi OS Lite. It works via KMS and doesn't require a window subsystem.
Prerequisites for the Linux device:
sudo apt install mesa-vulkan-drivers vulkan-tools libvulkan1
sudo apt install libfontconfig1 libgbm1 libinput10 libxkbcommon-x11-0
Prerequisites for the building machine:
cargo install cross --git https://github.com/cross-rs/cross --branch main --force
Execute kms_deploy.sh script:
chmod +x kms_deploy.shTARGET_HOST=admin@raspberrypi.local ./kms_deploy.sh. Note: Replace with your actual device user and address.Using an AI coding agent? Point it at llms.txt first — it indexes the version-stamped API reference, build facts and known limitations.
Add the dependency to your version catalog:
[versions]
shashlikMap = "0.3.29"
[libraries]
shashlikmap = { module = "io.github.shashlikmap:mapshared", version.ref = "shashlikMap" }In build.gradle.kts:
implementation(libs.shashlikmap)Requires mavenCentral(), Android minSdk 26, and an arm64-v8a device or
emulator. iOS is also supported (iosArm64, iosSimulatorArm64).
From 0.3.21 the SDK declares org.rustls:rustls-platform-verifier in its POM.
Earlier versions carried the verifier as a JNI method inside libffi_run.so,
with no Maven coordinate at all, so nothing extra was needed.
That artifact is not on Maven Central, Google, JitPack or Sonatype. rustls
distributes the Android support library from a Maven archive in their own
repository, which is the setup their README documents. Add it to your
settings.gradle.kts:
dependencyResolutionManagement {
repositories {
mavenCentral()
maven("https://github.com/rustls/rustls-platform-verifier/raw/maven-archive/android-release-support/maven/") {
name = "RustlsAndroidSupport"
// Scoped like the others: a GitHub-backed repo should never be
// consulted for anything but the one group it exists to serve.
content { includeGroup("org.rustls") }
}
}
}Without it the build fails to resolve org.rustls:rustls-platform-verifier.
Do not pick a version by hand. The support library must stay SemVer-compatible
with the Rust crate compiled into the .so, and a mismatch causes runtime
crashes rather than resolution failures. Take whatever version the SDK's POM
pins — 0.3.29 pins 0.2.0, read from the rustls-platform-verifier-android
entry in Cargo.lock.
Then place the composable anywhere in your Compose UI:
@Composable
fun App() {
MaterialTheme {
ShashlikMap(
state = rememberLocationState(latitude = 35.6879, longitude = 139.7570),
)
}
}Full API reference: kmp/shared/README_API.md.
Activity context.Software one.