# ODIAN Launcher The desktop launcher for ODIAN. It signs an operator in with their site's Keycloak account, installs ODIAN from the site (or from an ODIAN drive), forces an update before launch while the site is reachable, and runs ODIAN fully offline otherwise. | Part | Where | Stack | |---|---|---| | Hub UI | `src/` | Svelte 5 + Vite, bundled fonts, no network requests of its own | | Backend | `src-tauri/` | Tauri 2 (Rust): commands and events in [docs/CONTRACT.md](docs/CONTRACT.md) | | Installer | `crates/odian-packs/` | Rust port of the pack format v1 (`ODIAN_MCP_Server/src/odian_packs`) | ## Develop ```bash npm install npm run dev # the hub in a normal browser, with a mock backend (?scenario=…) npm run tauri dev # the real launcher window npm run check # svelte-check cargo test --workspace # Rust tests (needs ~/.cargo/bin on PATH) ``` Build the Windows setup (NSIS): ```bash npm run tauri build ``` ## How it finds the site On first run the launcher reads `site.json` next to its executable and copies it into its settings (`%APPDATA%\fr.odian.launcher\settings.json`). Operators can change the addresses later in Settings. See [site.example.json](site.example.json): ```json { "name": "ODIAN test site", "site_url": "http://192.168.1.41:30097", "mcp_url": "http://192.168.1.41:30091" } ``` - `site_url`: the site's update service (`/v1/health`, versions, packs). - `mcp_url`: the site's MCP, which runs the Keycloak desktop sign-in (`/auth/desktop/start`, `/auth/desktop/exchange`). ## On an operator PC ``` \ D:\ODIAN when a D: drive exists, else C:\ODIAN versions\\ app, API, tile server and runtime files for one version data\db\\ database dumps restored into the local Postgres data\tiles\