Connect is a JavaScript library for building web applications connected to Stacks.
Use your favorite package manager to install @stacks/connect
in your project.
Follow the Getting Started section of the @stacks/connect
README.
Or use one of our starter-templates to bootstrap a fresh project already including connect — directly in your browser or using the command-line locally! e.g. via
npm create stacks
This repository includes three packages:
@stacks/connect
: The one-stop-shop tool for letting web-apps interact with Stacks web wallets.@stacks/connect-react
: A wrapper library for making @stacks/connect
use in React even easier@stacks/connect-ui
: A web-component UI for displaying an intro modal in Stacks web-apps during authentication (used in the background by @stacks/connect
).Wallets implement a "Provider" interface.
The latest spec uses a simple JS Object exposing a .request(method: string, params?: object)
method.
Pseudo-code:
window.MyProvider = {
async request(method, params) {
// Somehow communicate with the wallet (e.g. via events)
// Recommendation: Create a JSON RPC 2.0 request object
// https://www.jsonrpc.org/specification
return Promise.resolve({
// Respond with a JSON RPC 2.0 response object
id: crypto.randomUUID(), // required, same as request
jsonrpc: '2.0', // required
// `.result` is required on success
result: {
// object matching specified RPC methods
},
// `.error` is required on error
error: {
// Use existing codes from https://www.jsonrpc.org/specification#error_object
code: number, // required, integer
message: string, // recommended, single sentence
data: object, // optional
},
});
},
};
window.wbip_providers = window.wbip_providers || [];
window.wbip_providers.push({
// `WbipProvider` type
/** The global "path" of the provider (e.g. `"MyProvider"` if registered at `window.MyProvider`) */
id: 'MyProvider',
/** The name of the provider, as displayed to the user */
name: 'My Wallet';
/** The data URL of an image to show (e.g. `data:image/png;base64,iVBORw0...`) @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URLs */
icon?: 'data:image/png;base64,iVBORw0...';
/** Web URL of the provider */
webUrl?: 'https://mywallet.example.com';
// Addional URLs
chromeWebStoreUrl?: string;
mozillaAddOnsUrl?: string;
googlePlayStoreUrl?: string;
iOSAppStoreUrl?: string;
});
Wallets may add their own unstandardized methods. However, the minimum recommended methods are:
getAddresses
WBIPsignPsbt
WBIPstx_getAddresses
SIP-030stx_transferStx
SIP-030stx_callContract
SIP-030stx_signMessage
SIP-030stx_signStructuredMessage
SIP-030Development of this product happens in the open on GitHub, and we are grateful to the community for contributing bugfixes and improvements. Read below to learn how you can take part in improving the product.
Please read our Code of conduct since we expect project participants to adhere to it.
Read our contributing guide to learn about our development process, how to propose bugfixes and improvements, and how to build and test your changes.
Join our community and stay connected with the latest updates and discussions:
PostConditionModeName
to all options (new and old) — This might have been missing since the v7 release.Search for the below and replace with inline return.