Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
c43fd1f
refactor cli to pass through publishing portal
kumailn Mar 26, 2026
e3ec076
refactor CLI to support version publishing through the portal, update…
kumailn Mar 27, 2026
f2fc1d5
enhance CLI with verbose option and improve ingestion session error h…
kumailn Mar 27, 2026
58e7131
add release metadata URI and session metadata URI handling in CLI and…
kumailn Mar 27, 2026
afe5325
remove deprecated code
kumailn Mar 27, 2026
c57444b
Enhance ingestion session reporting
kumailn Mar 27, 2026
d7ee047
remove unused commands and dependencies
kumailn Mar 27, 2026
ded5173
Refactor CLI to remove the --new-version flag
kumailn Mar 30, 2026
b782670
Refactor CLI to remove deprecated API base URL
kumailn Mar 30, 2026
4de5686
improve error messages with updated usage guide link
kumailn Mar 30, 2026
ea821b2
remove unused code and dependencies from CLI utility
kumailn Mar 30, 2026
915bd0d
improve error handling for required parameters
kumailn Mar 31, 2026
e5a1764
remove unused dependencies from CLI and core packages
kumailn Mar 31, 2026
ef16e10
Refactor CLI entry point and enhance error handling
kumailn Mar 31, 2026
70be7b0
Add @metaplex-foundation/mpl-token-metadata dependency and update tes…
kumailn Mar 31, 2026
7afd7e7
Update pnpm-lock and package.json to include get-video-dimensions and…
kumailn Apr 1, 2026
282fed2
add signer balance check
kumailn Apr 1, 2026
a33f5b3
refactor balance message for clarity in funding preflight checks.
kumailn Apr 1, 2026
aed247f
Update README.md
kumailn Apr 1, 2026
53b5ab4
Update README.md
kumailn Apr 1, 2026
3509e5d
Update publishing CLI documentation URL for clarity and accessibility
kumailn Apr 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 27 additions & 23 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,35 +1,39 @@

# dApp Publishing CLI

Tooling for publishing to the Solana Mobile dApp Store.
Portal-backed CLI for Solana Mobile dApp version publishing.

For all documentation regarding usage of the tooling, including a thorough walkthrough of the dApp publishing process, visit the [Solana Mobile docs site](https://docs.solanamobile.com/dapp-publishing/intro).
The legacy config-driven `init`, `create`, `validate`, and direct
`publish submit|update|remove|support` flows are no longer part of the active
CLI surface. The supported entrypoints are:

# Installation

Please run the CLI with Node version 18 or greater.

```shell
corepack enable
corepack prepare pnpm@`npm info pnpm --json | jq -r .version` --activate
```bash
dapp-store --apk-file ./app.apk --whats-new "Bug fixes"
dapp-store --apk-url https://example.com/app.apk --whats-new "Bug fixes"
```

If you don't have [jq](https://stedolan.github.io/jq/), you can manually get the current version of pnpm with `npm info pnpm` and setup like this:
Api key:
Can be obtained from https://publish.solanamobile.com/dashboard/settings/api-keys

```shell
corepack prepare pnpm@7.13.4 --activate
```

```shell
mkdir publishing
cd publishing

pnpm init
pnpm install --save-dev @solana-mobile/dapp-store-cli
npx dapp-store init
npx dapp-store --help
```
```bash
# API key from env
export DAPP_STORE_API_KEY=...
# Or read the API key from stdin
printf '%s' "$DAPP_STORE_API_KEY" | dapp-store ...

# License
```

Apache 2.0
The CLI expects a signer keypair path and a portal API key. For
the default publish flow, the target app is inferred from the APK package name by the
portal. That same portal flow handles both the first release for an existing
portal app and later updates; the CLI does not need a separate mode for
those cases. The app itself must already exist in the portal and already
have its App NFT. Solana RPC submission is
handled by the portal backend, so the publication workflow does not require a
separate RPC URL.

This means you do not need to pass a dApp id for version publications. The
portal extracts the APK metadata, matches the Android package name to the
existing app, and creates the next release for that app.
2 changes: 0 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,6 @@
"eslint": "^8.25.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-prettier": "^4.2.1",
"eslint-plugin-react": "^7.30.1",
"eslint-plugin-react-hooks": "^4.6.0",
"eslint-plugin-require-extensions": "^0.1.1",
"pnpm": "^7.8.0",
"prettier": "^2.7.1",
Expand Down
4 changes: 3 additions & 1 deletion packages/cli/bin/dapp-store.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
#!/usr/bin/env node

import "../lib/index.js";
import { main } from "../lib/index.js";

await main();
25 changes: 3 additions & 22 deletions packages/cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,49 +28,30 @@
},
"scripts": {
"clean": "shx mkdir -p lib && shx rm -rf lib",
"prebuild": "pnpm run clean && node src/prebuild_schema/schemagen.js",
"prebuild": "pnpm run clean",
"build": "swc src -d lib --copy-files",
"watch": "swc src --out-dir lib -w",
"test": "node --experimental-vm-modules node_modules/jest/bin/jest.js"
},
"devDependencies": {
"@jest/globals": "^29.5.0",
"@jest/types": "^29.5.0",
"@metaplex-foundation/js": "0.20.0",
"@metaplex-foundation/mpl-token-metadata": "2.13.0",
"@swc/jest": "^0.2.26",
"@types/commander": "^2.12.2",
"@types/debug": "^4.1.7",
"@types/jest": "^29.5.1",
"@types/js-yaml": "^4.0.5",
"@types/terminal-link": "^1.2.0",
"@types/update-notifier": "^6.0.1",
"jest": "^29.5.0",
"jest-transform-stub": "^2.0.0",
"shx": "^0.3.4",
"ts-jest": "^29.1.0",
"ts-node": "^10.9.1"
"shx": "^0.3.4"
},
"dependencies": {
"@ardrive/turbo-sdk": "^1.41.0",
"@aws-sdk/client-s3": "^3.321.1",
"@metaplex-foundation/js-plugin-aws": "^0.20.0",
"@solana-mobile/dapp-store-publishing-tools": "workspace:0.16.0",
"@solana/web3.js": "1.92.1",
"@types/semver": "^7.3.13",
"ajv": "^8.11.0",
"boxen": "^7.0.1",
"bs58": "^5.0.0",
"chokidar": "^3.5.3",
"commander": "^9.4.1",
"debug": "^4.3.4",
"dotenv": "^16.0.3",
"esm": "^3.2.25",
"generate-schema": "^2.6.0",
"get-video-dimensions": "^1.0.0",
"image-size": "^1.0.2",
"js-yaml": "^4.1.0",
"semver": "^7.3.8",
"terminal-link": "^3.0.0",
"tweetnacl": "1.0.3",
"update-notifier": "^6.0.2"
}
Expand Down
Loading
Loading