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.yml builds the .deb, .rpm, and .AppImage on an Ubuntu runner and uploads them as artifacts (attaching them to a Release on a v* tag). Trigger it manually or by pushing a version tag.
  • Locally, with Dockerscripts/build-linux-desktop.sh builds the same three formats inside an ubuntu:22.04 container and drops them in dist-linux/. It reuses the static oceanln-web/dist and 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>
warning

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.