AI Pocket Desktop is the sender application for the AI Pocket screen-capture & casting system. It captures your screen, encodes it to H.264, and streams it to AI Pocket receiver devices over the network.
Built with Tauri 2 (Rust backend) and React + Vite (frontend).
- Tauri 2 — native shell, window management, and the Rust command surface
- React 18 + Vite 5 — the desktop UI
- TypeScript (strict) — frontend type safety
- Rust 2024 (
rust-version1.85) — capture engine integration via the sharedai-pocket-coreandai-pocket-transportcrates
- Node.js 18+ and pnpm 10+
- Rust 1.85+ (edition 2024)
- Platform-specific Tauri system dependencies — see the Tauri prerequisites guide
pnpm install
pnpm tauri devpnpm tauri dev starts the Vite dev server on http://localhost:1420 and
launches the native window with hot reload.
To run only the frontend in a browser (no native shell):
pnpm devpnpm tauri buildThis produces a platform-native installer/bundle under
src-tauri/target/release/bundle/.
Icons required. Bundling needs the app icons in
src-tauri/icons/(32x32.png,128x128.png,icon.icns,icon.ico, …). They are not committed yet — seesrc-tauri/icons/README.md. Generate them withpnpm tauri icon path/to/source.pngbefore building.
The Rust backend depends on two shared crates, ai-pocket-core and
ai-pocket-transport. There are two dependency modes:
-
Development (default): local path dependencies, so changes in the shared crates are picked up immediately without publishing.
ai-pocket-core = { path = "../../core/crates/core" } ai-pocket-transport = { path = "../../core/crates/transport" }
-
Release: switch to pinned git-tag dependencies for reproducible builds. Each path dependency in
src-tauri/Cargo.tomlhas the locked form in a comment directly above it:ai-pocket-core = { git = "https://github.com/OpenLoaf/ai-pocket-core", tag = "v0.1.0" } ai-pocket-transport = { git = "https://github.com/OpenLoaf/ai-pocket-core", tag = "v0.1.0" }
When cutting a release, comment out the path lines and uncomment the
git-tag lines (and replace OpenLoaf with the real org).
Runtime configuration is read from environment variables. Copy the example and fill in your own values — never commit real secrets:
cp .env.example .envTODO — choose and add a license (e.g. MIT or Apache-2.0) before publishing.