A cross-platform game collection tracker built with Rust, Tauri 2, and Svelte. Memory Pak tracks consoles, games, and toy-to-life collectibles (LEGO Dimensions, Skylanders, and more) across owned, favorite, wishlist, and notes states.
- Desktop and mobile app shells through Tauri 2
- Static web/PWA build using the same Svelte frontend and Rust core compiled to WASM
- Embedded catalog precompiled at build time into a single binary blob (
postcard) - Deterministic slug-based entry IDs (
game:nes/super-mario-bros,collectible:legodimensions/batman, etc.) - Unified Collectibles tab spanning every toy-to-life line in
database/collectibles/ - Cross-console search, sorting, filtering, and virtualized long lists
- JSON import/export at schema version
2.0
Memory-Pak/
|-- crates/
| |-- memory_pak_core/ # shared Rust data model, queries, state reducer, import/export
| `-- memory_pak_wasm/ # wasm-bindgen adapter for the browser/PWA target
|-- frontend/ # Svelte 5 + TypeScript + Vite app
|-- src-tauri/ # Tauri 2 desktop/mobile shell and commands
|-- database/ # `consoles.json`, `games/*.json`, `collectibles/*.json`
|-- icons/ # platform icons reused by Tauri and PWA
`-- site/ # GitHub Pages landing page; deploy copies frontend/dist to site/app
- Rust 1.94.0 (pinned via
rust-toolchain.toml) - Bun 1.3.13
wasm-pack0.14.0- Tauri CLI 2.11.1
- Tauri platform prerequisites for desktop/mobile builds (Xcode CLT on macOS, WebView2 on Windows,
webkit2gtketc. on Linux)
Install the tooling (wasm-pack, tauri-cli, the WASM target, and frontend deps) in one shot:
bun run setupRoot scripts are grouped by task:
bun run dev:web # Svelte/Vite PWA development server
bun run dev:desktop # Tauri desktop app
bun run dev:android # Tauri Android app
bun run build:web # production PWA build
bun run build:desktop # desktop integration build without installers
bun run build:android # Android package build
bun run package:desktop # desktop installer/package build
bun run package:win # Windows NSIS/MSI bundles
bun run package:mac # macOS DMG bundle
bun run package:linux # Linux .deb bundle + portable .tar.gz
bun run check:fast # fmt + clippy + Rust tests + WASM + frontend checks/build
bun run check:ci # check:fast + Playwright + desktop smoke buildIcons under icons/web/ are the canonical PWA icon source. Vite serves them under /icons/... in dev and emits them to dist/icons/... at build time, so there is no separate copy to keep in sync.
Generated WASM bindings are written to frontend/generated/wasm/ and ignored by git. Frontend check/build/dev scripts generate them before TypeScript or Vite runs.
Frontend-only scripts live in frontend/package.json; run them directly with bun run --cwd frontend <script> when needed.
Tauri mobile entrypoints are scaffolded through the standard Tauri CLI:
bun run android:init
bun run dev:android
bun run build:android
bun run ios:init- Desktop / mobile: a single
state.jsonunder Tauri's app data directory, written atomically via a temp file + rename. Older desktop data under the previousProjectDirspath is migrated on first load. - Web / PWA: a single IndexedDB record in the
memory-pakdatabase, written debounced to coalesce rapid toggles.
Normal CI validates the project only. The manual Package Artifacts workflow builds Windows, macOS, and Linux bundles, creates updater signatures for the supported self-updating desktop targets, and uploads workflow artifacts plus latest.json and checksums.sha256. It does not publish a GitHub release; attach those files manually when ready.
Desktop self-updates use the Tauri updater and require these repository secrets for the manual package workflow:
TAURI_SIGNING_PRIVATE_KEY
TAURI_SIGNING_PRIVATE_KEY_PASSWORD # optional if your key has no password
TAURI_UPDATER_PUBKEY
The generated latest.json is intended to be attached to the same GitHub release as the Windows and macOS bundles. Linux does not use Memory Pak's in-app updater: Debian/Ubuntu users install the .deb, and everyone else can use the manual .tar.gz binary. Desktop update checks are available only in signed updater-enabled Windows/macOS bundles, not ordinary dev builds. The web app prompts when the PWA service worker sees a newer build. Android updates are handled by the app store outside Memory Pak.
AppImage is not a supported Memory Pak release format. Linux release artifacts are:
.debfor Debian/Ubuntu-style systemsMemory-Pak-linux-x86_64-portable.tar.gzfor manual binary installs
{
"version": "2.0",
"exportedAt": "2024-01-01T00:00:00Z",
"entries": [
{
"id": "console:nes",
"owned": true,
"favorite": false,
"wishlist": false,
"notes": "My original NES"
},
{
"id": "game:nes/super-mario-bros",
"owned": true,
"favorite": true,
"wishlist": false,
"notes": ""
}
]
}