A blazing-fast, native desktop overlay for tracking game collectibles on interactive maps.
๐ฑ iOS support is in active development โ the UI and state logic share a codebase that compiles to iOS via Tauri v2. See the iOS section below.
CollectThemAll (CTA) is a cross-platform companion app for completionists. It pulls interactive game maps and collectible locations, renders them in a smooth, hardware-accelerated map view, and lets you check off every chest, shrine, and secret as you find it โ without alt-tabbing out of your game.
A global hotkey summons a transparent, always-on-top overlay that floats over the running game and mirrors whatever map you last opened, so your progress stays in sync wherever you mark it.
Most game trackers are Electron apps that ship a full Chromium instance, eating hundreds of megabytes of RAM and stealing CPU cycles (and frames) from the game you're actually trying to play. CTA is built on Tauri v2 + Svelte 5, compiling to a lightweight native binary that renders thousands of map markers without dropping system frames.
- ๐ชถ Featherweight โ a native binary instead of a bundled browser; minimal RAM/CPU footprint while gaming.
- ๐ฎ In-game overlay โ `Ctrl + Alt + `` toggles a borderless, always-on-top window that mirrors your active map.
- โก Instant maps, streamed tiles โ a Rust caching proxy serves map tiles from disk and streams higher-res tiles from the CDN on demand, so maps open immediately.
- ๐ด Offline first โ game assets, marker data, and your found-location progress are all saved locally.
- ๐ Filter & track โ toggle marker categories, hide found items, and watch per-category completion progress update live.
- ๐ Cross-window sync โ mark a location in the main window or the overlay; both stay consistent.
The floating, always-on-top overlay mirrors your active map so you can track collectibles without leaving the game.
Pick a game to load its maps and collectible data.
Thousands of markers rendered smoothly, with category filters and live completion tracking.
![]() |
![]() |
| Marker details & found toggle | Per-category completion progress |
| Layer | Technology |
|---|---|
| Frontend | Svelte 5 (runes) + TypeScript |
| Map engine | MapLibre GL JS (Web Mercator projection) |
| Backend | Tauri v2 (Rust) |
| Networking | reqwest + tokio async tile fetching with a custom tile:// protocol |
| Build / dev | Vite 6 + SvelteKit (static adapter) |
- Node.js v18+ and a package manager (npm, pnpm, or yarn)
- Rust toolchain (
cargo,rustc) โ install via rustup - OS build dependencies:
- Windows: Microsoft C++ Build Tools (MSVC) + WebView2
- Linux:
webkit2gtkand related packages (see Tauri prerequisites) - macOS: Xcode Command Line Tools
# 1. Clone
git clone https://github.com/yourusername/CollectThemAll.git
cd CollectThemAll
# 2. Install frontend dependencies
npm install
# 3. Launch the app with hot reload (frontend + Rust backend)
npm run tauri dev- Launch CTA โ the game library loads available games.
- Click a game to download its lightweight assets (markers + location data). Map tiles stream in on demand.
- Browse the map, toggle marker categories, and click a marker to mark it as found.
- While in a game, press `Ctrl + Alt + `` to toggle the floating overlay and keep tracking without leaving the game (press Esc to dismiss it).
npm run tauri buildOptimized installers/executables are written to src-tauri/target/release/bundle/.
The iOS port shares the same Svelte 5 frontend and Rust backend as the desktop build. Tiles stream on demand via the tile:// protocol handled by WKWebView โ no bulk pre-download is needed or triggered automatically.
-
macOS (Xcode runs only on Apple hardware)
-
Xcode 16+ with iOS SDK installed
-
CocoaPods โ
brew install cocoapods -
Rust iOS targets:
rustup target add aarch64-apple-ios aarch64-apple-ios-sim x86_64-apple-ios
npm run tauri ios devA device build requires an Apple Developer account and provisioning profile. Set your 10-character team ID before building:
export APPLE_DEVELOPMENT_TEAM=XXXXXXXXXX
npm run tauri ios build- Overlay is desktop-only. The always-on-top overlay window and the
Ctrl+Alt+\`` global hotkey are compiled out on mobile (#[cfg(desktop)]in Rust) and redirect to/` as a defence-in-depth measure on the frontend. This is by design. - Bulk offline download is available, use it sparingly on cellular. The map sidebar and the library's multi-select mode both let you pre-download a game's tiles. Tiles otherwise stream in on demand as you pan and zoom, so bulk download is optional โ a full game's tile set can be a large download over a metered connection.
The Android port shares the same Svelte 5 frontend and Rust backend as the desktop and iOS builds. Tiles stream on demand via http://tile.localhost (Android WebView cannot fetch() a raw custom scheme, so Tauri maps tile:// to this HTTP alias automatically). A release-signed .apk is attached to every GitHub Release.
-
JDK 17+
-
Android Studio (includes SDK, build tools, and
sdkmanager) -
NDK 26 โ install via Android Studio SDK Manager or:
sdkmanager "ndk;26.3.11579264" -
Rust Android targets:
rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android
-
Set environment variables (add to
~/.zshrc):export ANDROID_HOME="$HOME/Library/Android/sdk" export NDK_HOME="$ANDROID_HOME/ndk/26.3.11579264"
npm run tauri android devnpm run tauri android build -- --apkThe signed APK is also attached to every GitHub Release automatically by CI.
- Overlay is desktop-only. The always-on-top overlay window and the
Ctrl+Alt+\`` global hotkey are compiled out on mobile (#[cfg(desktop)]in Rust) and redirect to/` as a defence-in-depth measure on the frontend. This is by design. - Bulk offline download is available, use it sparingly on cellular. The map sidebar and the library's multi-select mode both let you pre-download a game's tiles. Tiles otherwise stream in on demand as you pan and zoom, so bulk download is optional โ a full game's tile set can be a large download over a metered connection.
CollectThemAll/
โโโ src/ # Svelte 5 frontend
โ โโโ components/ # UI components, each kept small and focused
โ โ โโโ GameLibrary.svelte # game grid + download-on-click
โ โ โโโ GameMapView.svelte # the map; orchestrates the sidebar pieces below
โ โ โโโ MapSwitcher.svelte # โโ map list (presentational)
โ โ โโโ ProgressPanel.svelte # โโ progress box (presentational)
โ โ โโโ CategoryFilters.svelte# โโ filter checkboxes (presentational)
โ โ โโโ SearchBar.svelte / Background.svelte
โ โโโ lib/
โ โ โโโ api/ # Tauri command bindings, split by topic
โ โ โ โโโ games.ts # games list
โ โ โ โโโ assets.ts # images / location data on disk
โ โ โ โโโ tiles.ts # tile download + metadata
โ โ โ โโโ mapgenie.ts # barrel re-export (back-compat)
โ โ โโโ map/ # pure map helpers extracted from GameMapView
โ โ โ โโโ markdown.ts # tiny markdown->HTML (with XSS caution)
โ โ โ โโโ geojson.ts # locations -> GeoJSON
โ โ โ โโโ tileUrl.ts # platform-correct tile:// URL template
โ โ โ โโโ popup.ts # marker popup DOM builder
โ โ โโโ stores/ # found-marker persistence (localStorage)
โ โ โโโ types/ # shared TypeScript types (game.ts + barrel)
โ โโโ routes/ # SvelteKit routes (library, game/[id], overlay)
โโโ src-tauri/ # Rust backend
โโโ src/
โ โโโ lib.rs # window mgmt, global shortcut, tile:// protocol
โ โโโ commands/
โ โโโ mapgenie/ # one concern per file:
โ โโโ mod.rs # module wiring + the #[tauri::command]s
โ โโโ models.rs # data structs
โ โโโ tile_config.rs# scraped tile config + custom deserializer
โ โโโ http.rs # HTTP client + file download
โ โโโ parsing.rs # URL/HTML string helpers
โ โโโ cache.rs # on-disk + in-memory caches
โ โโโ sprites.rs # marker sprite-sheet slicing
โ โโโ scraping.rs # fetch + extract map page config
โโโ tauri.conf.json # Tauri configuration
โน๏ธ A note on the layout. Both the frontend and the Rust backend are organised as many small, single-purpose files rather than a couple of large ones. This makes the code easier to read and to audit โ you can find the one place a thing happens (e.g. all network calls live in
http.rs/scraping.rs, and the only doors the UI can open into the backend are the#[tauri::command]s inmapgenie/mod.rs).
- iOS build (in active development โ see iOS)
- Native Android build (in active development โ see Android)
- User-defined custom markers and notes
- Cloud sync of found progress across devices
- Bugs & feature requests: open an issue.
- Questions & ideas: start a discussion.
Contributions are welcome! Please read CONTRIBUTING.md before opening a
pull request. Run npm run check to type-check the frontend before submitting.
Released under the MIT License.





