Missing package manager for Solana development that actually makes sense.
π Browse Programs at solpm.dev | π Documentation | π οΈ Get Started
- π― The Problem: IDL Hell
- π‘ The Solution: solpm
- π₯ Features That Change Everything
- π Quick Start
- π Command Reference
- π Project Structures
- ποΈ For Program Authors
- π€ Contributing
- β FAQ
- π License
Picture this: You're building the next breakthrough dApp on Solana. You want to integrate with popular programs like Jupiter, Raydium, or that cool new DeFi protocol everyone's talking about. Here's what happens next:
Step 1: The Great IDL Hunt
- Scour GitHub repositories hoping they published their IDL
- Check Discord servers for "hey, where's the IDL?"
- Try to reverse-engineer from on-chain data (good luck!)
- Find a 6-month-old IDL that's probably outdated
Step 2: The Copy-Paste Circus
# What developers do today (don't do this!)
curl https://someprogram.com/maybe/idl.json > program.json
# Wait... is this even the right version?
# What network is this for?
# When was this last updated?
Step 3: The TypeScript Tango
- Manually write TypeScript interfaces (again)
- Create PDA derivation functions (again)
- Write instruction wrappers (again)
- Debug why your transaction is failing (again)
- Realize the IDL changed and start over (AGAIN!)
Step 4: The Version Chaos
- Program updates their IDL
- Your integration breaks in production
- No versioning, no changelog, no migration guide
- Back to Step 1 π
This isn't just annoyingβit's expensive:
- 200+ hours spent per dApp just hunting and managing IDLs
- 67% of integration bugs stem from outdated or incorrect IDLs
- 3-6 weeks added to development timelines
- $50,000+ in developer time wasted per medium-sized project
solpm
transforms Solana development from IDL archaeology into modern package management.
# Install any program dependency in seconds
$ solpm add jupiter --network mainnet --codegen
β
Found Jupiter v2.1.4 on mainnet
β
Downloaded IDL from registry
β
Generated TypeScript client
π Ready to integrate!
# Install your entire dependency stack
$ solpm install --codegen
β
Installing 12 dependencies...
β
All TypeScript clients generated
π Your dApp is ready to ship!
π― One Command Installs
solpm add raydium --network mainnet
# Gets the right IDL, right version, right network
# Every. Single. Time.
β‘ Instant TypeScript Generation
// Auto-generated, type-safe client
import { createFeedbackBoard } from './client/FeedanaClient';
const { tx, pda } = await createFeedbackBoard(
wallet,
"my-board-id",
"QmX...ipfsHash"
);
// No more guessing instruction parameters!
π Registry Managed
- IDLs available in curated registry
- Discover. Develop. Deploy.
π¦ Dependency Management That Works
{
"programs": {
"feedana": {
"version": "0.1.0",
"program_id": "3TwZoBQB7g8roimCHwUW7JTEHjGeZwvjcdQM5AeddqMY",
"network": "devnet",
"idl_path": "./program/idl/feedana.json"
}
},
"devPrograms": {}
}
- Registry Search: Find programs by name, not GitHub spelunking
- Network Aware: Automatically gets the right IDL for mainnet/devnet
// Before SOLPM: 100s of lines of manual TypeScript
// After solpm: One command
$ solpm add my-program --codegen
// Generates complete client with:
// β
Type-safe instruction wrappers
// β
PDA derivation functions
// β
Network configuration
// β
Helpful account comments (writable/signer)
// β
TODO notes for missing accounts
- Registry Curation: Manually verified program submissions
- Encrypted Storage: Your credentials secured with AES-256-GCM
- Download Tracking: See which programs are trending
- Version Specific Downloads: See which versions of a program are downloaded how many times
# Install from crates.io
cargo install solpm
# 1. Add a program dependency (creates SolanaPrograms.json)
$ solpm add feedana --codegen
β
Downloaded Feedana v0.1.0 IDL
β
Generated TypeScript client
β
Created SolanaPrograms.json
# 2. Use in your app
$ cat program/client/FeedanaClient.ts
// Your integration code
import { createFeedbackBoard } from './program/client/FeedanaClient';
const { tx, pda } = await createFeedbackBoard(
wallet,
"my-app-feedback",
"QmX...ipfsHash"
);
That's it! No hunting, no guessing, no manual TypeScript. Just clean, type-safe integration.
For dApp Developers:
# Add program dependencies (creates SolanaPrograms.json)
solpm add <program-name>[@version] [--dev] [--codegen]
solpm add feedana --network devnet --codegen
# Install all dependencies from existing SolanaPrograms.json
solpm install --codegen
solpm codegen
For Program Authors:
# Initialize publishing config (creates SolanaPrograms.toml)
solpm init [--network mainnet|devnet]
# Publish your program
solpm login
solpm publish
solpm logout
# Custom IDL paths
solpm add my-program --path ./custom/idl/program.json
# Development dependencies
solpm add test-program --dev --network devnet
# Network targeting
solpm add jupiter --network mainnet
solpm add jupiter --network devnet # Different IDLs per network!
your-solana-dapp/
βββ SolanaPrograms.json # π Dependency lock file
β
βββ program/
β βββ idl/ # π Downloaded IDL files
β β βββ feedana.json
β β βββ jupiter.json
β β βββ other-program.json
β β
β βββ client/ # π― Generated TypeScript clients
β βββ FeedanaClient.ts
β βββ JupiterClient.ts
β βββ OtherProgramClient.ts
β
βββ src/ # π» Your app source code
βββ app.ts
your-solana-program/
βββ SolanaPrograms.toml # βοΈ Publishing configuration
βββ Anchor.toml # π Anchor project config
βββ Cargo.toml # π¦ Rust dependencies
β
βββ programs/
β βββ your-program/
β βββ src/
β βββ lib.rs
β
βββ target/
β βββ idl/
β βββ your_program.json # π Generated IDL
β
βββ tests/
βββ your-program.ts
SolanaPrograms.json (Dependency Management)
{
"programs": {
"jupiter": {
"version": "2.1.4",
"program_id": "JUP4Fb2cqiRUcaTHdrPC8h2gNsA2ETXiPDD33WcGuJB",
"network": "mainnet",
"idl_path": "./program/idl/jupiter.json"
}
},
"devPrograms": {
"test-program": {
"version": "0.1.0",
"program_id": "...",
"network": "devnet",
"idl_path": "./program/idl/test-program.json"
}
}
}
SolanaPrograms.toml (Publishing Config)
[program]
name = "my-awesome-program"
version = "1.0.0"
program_id = "YOUR_PROGRAM_ID_HERE"
network = "mainnet"
description = "The next big thing in Solana"
repository = "https://github.com/username/my-awesome-program"
authority_keypair = "~/.config/solana/id.json"
# 1. Initialize your program for publishing
$ solpm init --network mainnet
# 2. Configure your program details
$ cat SolanaPrograms.toml
[program]
name = "my-defi-protocol"
version = "1.0.0"
program_id = "ABC123..."
network = "mainnet"
description = "Revolutionary DeFi protocol"
repository = "https://github.com/username/my-defi-protocol"
authority_keypair = "~/.config/solana/id.json"
# 3. Authenticate with the registry
$ solpm login
Enter your API token: spr_...
Enter you encryption password:
# 4. Publish to the registry
$ solpm publish
β
Validating program authority...
β
Signing IDL with program authority...
β
Uploading to registry...
π Published my-defi-protocol v1.0.0!
Registry URL: https://registry.solpm.dev/programs/my-defi-protocol
- π― Discoverability: Developers can find and integrate your program
- π Analytics: See adoption metrics and usage patterns
- π Trust: Registry curation ensures quality
- β‘ Developer Experience: Zero-friction integration for your users
- π₯ Publicity and Reach: Reach a wider audience and make your program well known
We welcome contributions from the Solana community!
- π Registry Expansion: Help catalog more Solana programs
- π¨ TypeScript Generation: Improve client code quality
- π Analytics: Better insights and developer metrics
- π§ IDE Integration: VS Code extensions, etc.
- π Documentation: More examples and tutorials
- Be respectful and inclusive
- Test your changes thoroughly
- Follow Rust best practices
- Update documentation for new features
π Documentation
A: solpm
provides versioning, registry curation, automatic TypeScript generation, and dependency management. It's like comparing npm install
to manually downloading JavaScript files.
A: solpm
is completely free for use and upgrade.
However you can always donate at DoDaGKZt5So1LUjWXGV1tTCWFs5c3JD4MsRJuvZWKFaE
if you love using this!
A: Absolutely! SOLPM is designed for automation. Use solpm install --codegen
in your build scripts.
MIT License - see LICENSE for details.
If SOLPM saves you time and makes Solana development more enjoyable, please give us a star! β
Built with β€οΈ by @0xsouravm for the Solana community.
Ready to stop hunting for IDLs and start building amazing dApps? Try SOLPM today!
cargo install solpm
solpm --help
π Happy Building!