Packages & tools
Which packages to install for a Product project. Your app code needs the Product SDK, pinned to the version the hosts speak. The CLIs register names and publish bundles.
Developer packages
Section titled “Developer packages”Most projects only need a few direct dependencies:
| Package | Install | Purpose | Bin |
|---|---|---|---|
@parity/product-sdk | npm i @parity/product-sdk@0.39.0 | TypeScript SDK for building apps: multi-chain access, transactions, signing, contract calls, cloud storage, and identity. Pinned: see Install the SDK version the hosts speak. | — |
@polkadot-community-foundation/dotns-cli | npm i -g @polkadot-community-foundation/dotns-cli@latest | CLI for the .dot naming system: register names, set content/address records, manage reverse names and stores. | dotns |
@polkadot-community-foundation/polkadot-app-deploy | npm i -g @polkadot-community-foundation/polkadot-app-deploy@latest | Deploy CLI: uploads a built static bundle to Bulletin, and binds it to a .dot domain. pad-bootstrap (same package) authorizes the Bulletin storage pool. | pad, pad-bootstrap |
pad requires Node 22+. On Node 20 it fails at startup with an
unrelated-looking error, so check node --version first.
Install the CLIs at their latest release, and re-run the same command to upgrade. They carry network presets and contract addresses, and a stale copy is the usual cause of a command that succeeds while nothing changes on chain. The Product SDK is the one package to pin, as described below.
Both CLIs select a network preset with --env, and for this Devnet it is
--env devnet.
Product SDK family
Section titled “Product SDK family”@parity/product-sdk is the main dependency for Product app code. It gives an
app access to wallet, storage, chain, contract and identity services through
the host: the Polkadot app or the web gateway. This is deliberate. Your app
should not manage private keys or build its own wallet layer.
| Package | Purpose |
|---|---|
@parity/product-sdk | Main SDK entry point for Product apps. |
@parity/product-sdk-chain-client | Typed access to the Devnet chains. |
@parity/product-sdk-descriptors | Chain descriptors used by the SDK. |
@parity/product-sdk-signer | Host-backed signing, plus development signers for tests. |
@parity/product-sdk-contracts | Contract calls and ABI handling for PolkaVM contracts. |
@parity/product-sdk-cloud-storage | Bulletin-backed content storage helpers. |
@parity/product-sdk-host | Host detection and host-provided services. |
These packages live in the
Product SDK monorepo and are
versioned separately. @parity/product-sdk pins a matching version of each, so
install them through it, not one by one.
Install the SDK version the hosts speak
Section titled “Install the SDK version the hosts speak”Apps talk to their host over TrUAPI. The Devnet hosts speak the TrUAPI version that Product SDK 0.39.0 speaks, so install exactly that version:
npm i @parity/product-sdk@0.39.0Newer SDK releases speak a newer TrUAPI that these hosts do not. If you add SDK
packages one by one, use the versions @parity/product-sdk@0.39.0 depends on.
Current Devnet chain metadata
Section titled “Current Devnet chain metadata”The Devnet chains run newer runtimes than the metadata in
@parity/product-sdk-descriptors. For typed access to the current pallets,
swap in the Polkadot Community Foundation's build of the same package. Add it
as a dependency and as an override, with the same value in both:
{ "dependencies": { "@parity/product-sdk-descriptors": "npm:@polkadot-community-foundation/product-sdk-descriptors@0.14.0-pcf.1" }, "overrides": { "@parity/product-sdk-descriptors": "npm:@polkadot-community-foundation/product-sdk-descriptors@0.14.0-pcf.1" }}{ "dependencies": { "@parity/product-sdk-descriptors": "npm:@polkadot-community-foundation/product-sdk-descriptors@0.14.0-pcf.1" }, "pnpm": { "overrides": { "@parity/product-sdk-descriptors": "npm:@polkadot-community-foundation/product-sdk-descriptors@0.14.0-pcf.1" } }}Your imports stay the same (@parity/product-sdk-descriptors/...), and every
SDK package uses the same copy.
Host protocol (TrUAPI)
Section titled “Host protocol (TrUAPI)”@parity/product-sdk-host speaks TrUAPI to the host for you, so apps rarely
import it directly. For end-to-end tests, use the test host in
@parity/truapi-host; see
Test without the real host.
TrUAPI lives in trinity-user-agents.
@novasamatech/host-api, @novasamatech/host-api-wrapper and
@parity/host-api-test-sdk do not speak the Devnet hosts' current protocol.
Command-line tools
Section titled “Command-line tools”| CLI | Package | Bin | What it does |
|---|---|---|---|
| Deploy | @polkadot-community-foundation/polkadot-app-deploy | pad | Publishes a built static bundle, stores it on Bulletin, and points a .dot domain at it. |
| Storage bootstrap | @polkadot-community-foundation/polkadot-app-deploy | pad-bootstrap | Authorizes the Bulletin storage pool pad uploads with, using an authorizer key. Ships in the same package as pad. |
| DotNS | @polkadot-community-foundation/dotns-cli | dotns | Registers and manages .dot domains: register, lookup, content, primary, transfer, store, pop, and more. |
A typical deploy binds a built bundle to a name on a chosen network:
pad ./dist my-app.dot --env devnetThe account pad deploys with must hold a live Bulletin storage authorization,
because pad never authorizes itself. See
Get storage authorization.
Where your app runs
Section titled “Where your app runs”Your Product runs inside the Polkadot app or the web gateway. Download links, the deployed reference Products and source repositories are in More resources.
Learn more
Section titled “Learn more”- Source: product-sdk · trinity-user-agents (TrUAPI) · polkadot-app-deploy · dotns-sdk
- Networks & endpoints: which network these tools target