Logos Kit

How apps talk to the wallet

Intents for anything the user sees, module calls for reads.

A Basecamp app reaches the wallet two ways.

IntentsModule calls
ForConnect, send, sign, get fundsBalances, accounts, status, chain reads
OpensThe wallet's own sheet, via the Basecamp shellNothing: returns data
IdentityThe shell attests the requesting appBasecamp attests the calling module
In metadata.jsonListed under useslogos_kit_wallet under dependencies
your app ──intent──▶ Basecamp shell ──▶ wallet chooser ──▶ Logos Kit sheet
   │                                                          │ user approves
   └────────── module call ──────────▶ logos_kit_wallet ◀─────┘

The SDK hides the difference: kit.api.transfer(…) opens the intent, kit.api.getWalletBalance(…) makes the call. Both return promises.

Intents Logos Kit provides

IntentSDK call
lez.wallet.connectconnect()
lez.transaction.sendtransfer(), sendCall(), sendTransaction(), postTestimonial()
lez.message.signsignMessage()
lez.wallet.sign_insignIn()
lez.wallet.request_fundsrequestFunds()

If more than one wallet provides an intent, Basecamp asks the user which to use. The full list is in Intents.

The sandbox

Basecamp runs ui_qml apps in a sandbox. Plan for it:

  • no network access from QML, and no remote or data: images;
  • Qt.openUrlExternally is blocked (use kit.api.openExplorer);
  • only files inside your module's folder load;
  • Qt 6.9's JavaScript engine: no BigInt, no Intl.

Amounts are strings everywhere in the SDK for that reason.

The protocol as a package

LWS-0's types, JSON Schema, error codes and test vectors are published, so a wallet or an app in any language can implement the same contract:

npm@logos-kit/protocolv0.1.1
npm i @logos-kit/protocol

On this page