Skip to main content
When your Mini App runs inside the Startale App, the host populates sdk.context with three layers: Farcaster-standard fields, client/device metadata, and a startale extension object with Startale-specific user data.

Full context shape

Identifying users. Use the smart account address (retrieved via eth_requestAccounts) as the primary user identifier in your backend. user.fid and client.clientFid are internal protocol placeholders and are not stable user identifiers.

Reading context

sdk.context is a Promise. The bridge between your Mini App and the host is asynchronous, so you must await it before reading any field. The startale object is a Startale extension not included in the official @farcaster/miniapp-sdk TypeScript types. Cast the result to access it with full type safety:
In React, read context once on mount inside a useEffect:
The startale type cast is necessary today because the Startale context extensions are not yet part of the upstream @farcaster/miniapp-sdk type definitions. The cast is safe; the host always populates these fields when your Mini App runs inside the Startale App.

STAR Points

STAR Points are the Startale App’s user-engagement currency. Users earn them through daily activities in the Mission Center and through USDSC usage inside the app, and the balance is treated as a proof of contribution toward future token rewards. Mini Apps see the balance through sdk.context.startale.starPoints and can use it as an eligibility signal, for example, gating bonus content or rewarding power users. For the full earning rules and the latest mission catalog, link users to the Startale App page.

Reading user STAR Points

Reading the app edition

startale.language tells you which edition of the Startale App the user is running at the moment your Mini App loads: Global ('en') or Japan ('ja'). The host decides this, including any residency and compliance checks, before your Mini App ever sees it. Use it to pick the content or feature set your Mini App shows, for example JP-only copy or anything gated on Japan compliance requirements. Don’t run your own geo or residency checks for this: if startale.language says 'ja', the host has already confirmed the user’s edition, and any JP content it’s willing to show them is already vetted for that edition. Edition and display language happen to match today, so you can also use the same field to pick your Mini App’s own UI translation if it has one:

Discovering linked EOAs

eoaWallets is the canonical way to discover personal wallets the user has linked to their Startale account. Each address has been verified server-side via SIWE. Common use cases:
  • Restoring user progress from an existing user base.
  • Granting NFT utility based on assets held in a personal wallet.
  • Co-marketing eligibility checks (“are you an existing player of project X?”).

EOAs are read-only

You can read balances and onchain state for any address in eoaWallets. You cannot sign or send transactions from a linked EOA inside a Mini App, the active signer is always the user’s smart account. If a user holds assets in a linked EOA that they want to use inside your Mini App:
  1. Detect the asset using eoaWallets and a read-only contract call.
  2. Inform the user that they need to transfer the asset to their smart account.
  3. The transfer must happen outside the Mini App, on your project’s standalone website where MetaMask connects directly.
See Wallet integration for the full constraint surface.

Sandbox simulation gap

The Mini App sandbox simulates sdk.context.startale.starPoints as 100 and populates location, client.platformType, and client.safeAreaInsets with default values. sdk.context.startale.eoaWallets, sdk.context.startale.language, user, and features are not populated. Test EOA-discovery features, identity-dependent logic, and capability checks against a staging or production Startale App, not the local sandbox.