The dApp Store
Publishing and distribution on the Solana Mobile dApp Store.
Recipe
- Build release APK/AAB with signed keystore.
- Prepare icons, screenshots, and privacy policy URL.
- Submit via Solana dApp Store publisher portal (see docs.solanamobile.com/dapp-store).
When to reach for this:
- Distributing Seeker/Saga-targeted apps outside Google Play-only strategy.
- Crypto-native discovery for Solana users.
- Co-marketing with Solana Mobile hardware.
Working Example
# Production Android build (Expo)
eas build --platform android --profile production
# Artifacts needed for submission:
# - signed APK or AAB
# - app icon 512px
# - feature graphic and screenshots
# - short + long description
# - support URL and privacy policyWhat this demonstrates:
- Use EAS or Gradle release pipelines - not debug builds.
- Metadata should mention MWA wallet requirement.
- Declare network usage (mainnet/devnet) honestly in description.
Deep Dive
How It Works
- Publisher account registers developer identity.
- Review process checks policy compliance.
- Updates ship as new APK versions with changelog.
- Coordinate with Seeker feature announcements when applicable.
Gotchas
- Debug keystore on release - reject or security fail. Fix: production signing keys in EAS secrets.
- Missing privacy policy - submission blocked. Fix: host HTTPS policy page.
- Undeclared RPC data collection - policy violation. Fix: disclose wallet addresses and analytics.
- Broken MWA on review device - rejection. Fix: test on reference hardware.
- Version code not bumped - update rejected. Fix: monotonic Android versionCode.
Alternatives
| Alternative | Use When | Don't Use When |
|---|---|---|
| Google Play | Mass Android audience | SMS-native discovery |
| Direct APK sideload | Closed beta | Consumer trust |
FAQs
App Router?
Providers in client layout.tsx; pages mix server + client components.
Secrets?
Server env only for keypairs; NEXT_PUBLIC_ for RPC URLs.
kit 7.0.0?
All examples use @solana/kit, not web3.js v1.
Wallet?
Signing only in client components.
Caching?
Revalidate on-chain reads carefully - chain is source of truth.
Actions?
HTTPS endpoints returning Solana Actions JSON.
Mobile?
Separate React Native app with MWA.
Testing?
Surfpool for integration; mock RPC in unit tests.
Mainnet?
Separate env files and program IDs.
Errors?
Decode simulation logs for user-facing messages.
Related
- Building a Mobile dApp - build pipeline
- Solana Mobile Basics - stack overview
- Seed Vault & Security - Seeker keys
Stack versions: This page was written for Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0, and LiteSVM 0.6.x.