Skip to content

ShashlikMap/shashlik-map

Repository files navigation

Shashlik Map

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-ready MapEngine with focus on Navigation features(including DeadReckoning and Map-matching)

I'm writing about the tech I've learned here

Showcases

Running on macOS, Android and iOS

Screenshot 2026-02-06 at 08 56 25 Screenshot_20260206_085918 Simulator Screenshot - iPhone 16 Pro - 2025-12-24 at 11 46 18

Tech stack

The stack leverages the following approaches and libraries:

  • Map vector graphics renderer written in Rust using WGPU as a low-level cross-platform graphics API and with RustyBuzz support as a vector font shaper for TextRenderer.
  • Uses custom tiles, a simple tiles generator and a tile server, separate repo. The server is running in free AWS EC2 Cloud.
  • Kotlin/Compose Multiplatfom, uniffi-rs and gobley projects enable fast and seamless integration with Android/iOS mobile apps(Android is priority for now)
  • Rust Valhalla client is used a routing clieng/engine

The component diagram:

ShashlikDiagram

Roadmap

Completed

  • Create a baseline POC with initial architecture
  • Complete README and examples
  • Initial rendering to texture
  • Better integration with SlintUI
  • A GPU-driven dotted line rendering
  • Initial SSAO(Screen Space Ambient Occlusion)

Now

  • In progress General Renderer refactoring

Next

  • Running on pure Linux with Rust GUI/CMP
  • Simple shadow mapping
  • Implement an initial geometric Map-matching POC
  • CI for KMP mobile SDK + Screenshot rendering
  • Integrate a simple search

Later

  • Support Mapbox tilesets
  • Software Dead-reckoning
  • Complete iOS counter-part
  • Move TextRenderer to the separate repo

Running examples

macOS

In root folder:

cargo run --package winit-run --release

Android

  • Make sure the latest Xcode is installed!
  • Open "kmp" folder in AndroidStudio and just Run "demo" app or execute:
./gradlew :composeApp:installRelease && adb shell am start -n "com.shashlik.demo/com.shashlik.demo.MainActivity"

iOS

Open "kmp/iosApp" project in XCode and just Run it

Integration with KMP apps

  1. Add dependency to the version catalog
[versions]
shashlikMap = "0.2.1"

[libraries]
shashlikmap = { module = "io.github.shashlikmap:mapshared", version.ref = "shashlikMap" }

In build.gradle.kts(KMP or Android):

implementation(libs.shashlikmap)
  1. Include Composable function ShashlikMap { _, _ -> } anywhere in your Compose UI
   @Composable
   fun App() {
       MaterialTheme {
           ShashlikMap { _, _ -> }
       }
   }
  • Note: Android app will ask for locations permissions.

Known issues

  • Tileset on the Web Service is generated only for Japan(Kanto region) and USA(Bay Area)
  • Android app might not work on Android Emulator with hardware GPU acceleration. Try to change GPU mode to Software one.
  • Debug build performance is significantly lower than Release build.

Contributors