Frontends
Desktop app
src-tauri wraps the same oceanln-web wizard in a Tauri v2 window.
Native IPC, no HTTP
There is no HTTP server, loopback port, or bearer token in the desktop build: the
webview reaches the Rust backend over native IPC (#[tauri::command] ↔ invoke),
and the seed lives in the OS app-data dir (e.g. ~/Library/Application Support/xyz.oceanln.desktop/seed, 0600). The commands
are thin adapters over oceanln_httpd::service, so signing/seed logic is identical to the
HTTP path.
cargo install tauri-cli --version "^2.0" --locked # one-time
cargo tauri dev # from the repo root (finds src-tauri/) cargo tauri dev builds oceanln-web, opens the window, and hot-reloads. It's
its own Cargo workspace (heavy native deps), excluded from the root so the core Rust CI is unaffected.
Linux packages (.deb / .rpm / .AppImage)
Tauri's Linux bundlers link webkit2gtk/GTK and shell out to dpkg-deb, rpmbuild, and appimagetool, so the Linux packages must be built on
Linux — they cannot be cross-built from macOS. Two ways:
- CI —
.github/workflows/desktop-linux.ymlbuilds the.deb,.rpm, and.AppImageon an Ubuntu runner and uploads them as artifacts (attaching them to a Release on av*tag). Trigger it manually or by pushing a version tag. - Locally, with Docker —
scripts/build-linux-desktop.shbuilds the same three formats inside anubuntu:22.04container and drops them indist-linux/. It reuses the staticoceanln-web/distand a container-internal Rust target, so it won't clobber your host build.
macOS .app / .dmg come from cargo tauri build on macOS. Signed/notarized installers are not yet wired up.
The Lexe sidecar
The CLI payout command can talk to a Lexe sidecar running locally on 127.0.0.1:5393 (or pass --url). Launch it with the same
seed generate produced:
LEXE_ROOT_SEED_PATH=<path-to-your-mnemonic> lexe-sidecar
# or LEXE_CLIENT_CREDENTIALS=<client-credentials-from-the-Lexe-app> The sidecar must be a version that serves POST /v2/node/create_offer. If it isn't running you'll see: could not reach sidecar at http://127.0.0.1:5393.
Note the oceanln-httpd server uses --sidecar-url / --sidecar-credentials instead of the CLI's --url / --credentials — see the HTTP API.