Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Onboarding

Summary. First run walks you from nothing to a funded, named wallet: create or restore a wallet, confirm your recovery phrase, choose your network privacy, and optionally claim a username, with a prominent skip so you can stay anonymous. Goblin connects to a Grin node automatically, so there’s no node setup to wade through.

Motivation

Goblin’s audience isn’t only Grin veterans. The first-run flow has to teach just enough (a recovery phrase is your money; a username is optional and public) without burying a newcomer in node configuration or nostr jargon. It reuses GRIM’s proven mnemonic machinery so the security-critical parts are the upstream-tested ones.

How it works

The flow (OnboardingContent) steps through:

  1. Intro: what Goblin is (private, pay-by-username). Goblin connects to a default Grin node automatically, so there’s no node step to wade through; you can change the node later in Settings → Advanced.
  2. Wallet setup: name + password, or choose restore.
  3. Recovery phrase: generate (12–24 words) or import. Import supports paste, a SeedQR scan, and (Build 158) a Choose a .backup file picker: point it at a full wallet .backup, unlock it with the wallet password, and it fills the 24-word grid for you. This step uses GRIM’s MnemonicSetup word grid and validation.
  4. Confirm words: verify the phrase by re-entering it.
  5. Network privacy: choose whether the wallet’s Nostr traffic rides Tor. The step explains what goes over the network (“Goblin sends only a few things over the network, each sealed with end-to-end encryption so relays can’t read them or link them to you.”) and offers the “Route through Tor” switch, captioned “Hide your IP from relays.” A brand-new wallet defaults this off (clearnet); it applies to this wallet and is changeable later under Settings → Privacy → Tor routing. The choice is written before the wallet first opens, so a wallet created with Tor off uses the direct connection from its very first session (and one created with Tor on uses Tor from the start). Wallets that update from an older version keep Tor on and don’t see this step.
  6. Identity: optionally claim a username (reusing the name-authority claim flow) or import an existing identity (nsec / backup). A prominent Skip keeps you anonymous.

On completion the new wallet is opened and its NostrService starts. Restoring from a bare seed phrase gives you a fresh random nostr identity by default; you bring an old one back via Import. Restoring from a full .backup file instead brings every identity it held back automatically once the wallet opens (a “Restoring your identities…” card shows the progress), with the previously active identity re-selected.

Screenshots: Intro, Recovery-phrase grid, Claim-username step, dark, 390×844.

Reference

In goblin/src/gui/views/goblin/onboarding.rs:

  • OnboardingContent + Step enum. The live flow is Intro → WalletSetup → Words → ConfirmWords → Network privacy → Identity; the legacy Node step is retired (#[allow(dead_code)]) and the wallet auto-connects to a default public node, with node management in Settings → Advanced. The network-privacy step writes the wallet’s Tor-routing preference (default off for a fresh wallet) to the new wallet’s nostr.toml before open() starts its relay service (onboarding.rs:936-949); updated wallets keep their existing on setting and skip the step.
  • The recovery-phrase steps (Words, ConfirmWords) set the secure-screen flag, so on Android the words are hidden from screenshots, screen recording and the Recents view (onboarding.rs:217).
  • OnbImport: optional identity import (nsec / backup, with password when sealed), async worker result.
  • Reuses GRIM MnemonicSetup.word_list_ui (made pub(crate)), with SeedQR scan.
  • Hosted in goblin/src/gui/views/wallets/content.rs (replaces only the empty-state branch; the stock GRIM wallet-creation path stays for later wallets).

References