The professional developer CLI and scaffolding toolkit for Soroban smart contracts on Stellar.
Building on Soroban today means stitching together a fragmented set of tools β manual contract initialization, no standardized project structure, custom deployment scripts for every team, and near-zero testing scaffolding out of the box. Developers waste days on setup before writing a single line of contract logic.
Ethereum has Hardhat and Foundry. Solana has Anchor. Stellar has nothing like it β until now.
StellarForge is a batteries-included CLI and SDK scaffold that gives Stellar developers a single, opinionated tool to build, test, deploy, and verify Soroban smart contracts from end to end.
Think of it as your Stellar development command center: one tool, zero ceremony, production-ready from day one.
Scaffold a new Soroban project with best-practice structure, pre-configured Cargo.toml, test harness, and deployment manifest β in under 30 seconds.
sforge init my-escrow-contract --template escrow
cd my-escrow-contractCompile Soroban contracts to WASM with optimized output and ABI generation in one command.
sforge build --optimize
# Output: ./target/wasm32-unknown-unknown/release/my_contract.wasm
# ABI: ./artifacts/my_contract.jsonRun the full test suite against an embedded local Soroban environment β no external dependencies required.
sforge test --verbose
sforge test --coverageSpin up a local Stellar devnet with pre-funded accounts and deployed test contracts in seconds.
sforge devnet start
sforge devnet fund --account alice --xlm 10000
sforge devnet statusDeploy contracts to testnet or mainnet with automatic network switching, fee estimation, and deployment receipts.
sforge deploy --network testnet
sforge deploy --network mainnet --confirmVerify deployed contract source code against on-chain bytecode and publish to the Stellar contract registry.
sforge verify --contract-id CXXX... --source ./srcInspect any deployed Soroban contract β read its ABI, state, and call history directly from the chain.
sforge inspect CXXX...
sforge inspect CXXX... --function transfer --args '["alice", 1000]'my-contract/
βββ src/
β βββ lib.rs # Contract logic
βββ tests/
β βββ integration.rs # Integration tests
βββ artifacts/
β βββ my_contract.json # Generated ABI
βββ scripts/
β βββ deploy.sh # Deployment scripts
β βββ setup-devnet.sh # Local environment setup
βββ forge.config.toml # StellarForge configuration
βββ Cargo.toml
# Via cargo
cargo install stellarforge
# Via npm (wrapper)
npm install -g @stellarforge/cli
# Verify installation
sforge --version# 1. Scaffold a new project
sforge init hello-stellar --template token
# 2. Start a local devnet
sforge devnet start
# 3. Build and test
sforge build && forge test
# 4. Deploy to testnet
sforge deploy --network testnet
# 5. Inspect the deployed contract
sforge inspect $CONTRACT_IDStellarForge ships with production-ready templates for the most common Soroban patterns:
| Template | Description |
|---|---|
token |
SEP-41 compliant fungible token |
escrow |
Time-locked escrow with dispute resolution |
multisig |
M-of-N multisignature authorization |
vesting |
Token vesting schedule with cliff |
dao |
Basic governance with proposal voting |
nft |
Non-fungible token (SEP-NFT draft) |
blank |
Minimal contract skeleton |
sforge init my-project --template escrow
sforge list-templates # Browse all available templates[project]
name = "my-contract"
version = "0.1.0"
soroban_version = "21"
[networks.testnet]
rpc_url = "https://soroban-testnet.stellar.org"
network_passphrase = "Test SDF Network ; September 2015"
funded_accounts = ["alice", "bob"]
[networks.mainnet]
rpc_url = "https://soroban-mainnet.stellar.org"
network_passphrase = "Public Global Stellar Network ; September 2015"
[deploy]
optimize = true
gas_buffer = 1.2
auto_verify = trueStellarForge also ships a lightweight TypeScript SDK for frontend integration, auto-generated from your contract ABI.
import { StellarForge } from '@stellarforge/sdk';
const sforge = new StellarForge({ network: 'testnet' });
// Auto-typed client from your contract ABI
const contract = await sforge.loadContract('CXXX...');
// Call contract functions with full type safety
const result = await contract.transfer({
from: 'alice',
to: 'bob',
amount: BigInt(1000),
});
console.log(result.hash); // tx hash| Feature | StellarForge | Manual Setup |
|---|---|---|
| Project scaffold | β
forge init |
β Hours of setup |
| Local devnet | β One command | β Manual Docker config |
| Test runner | β Built-in | β Custom harness |
| Deploy pipeline | β Automated | β Custom scripts |
| Contract verification | β
forge verify |
β Not standardized |
| ABI generation | β Automatic | β Manual |
| TypeScript SDK gen | β Auto-generated | β Hand-written |
-
sforge auditβ Static analysis and security checks for Soroban contracts - VS Code extension β IntelliSense for Soroban + StellarForge
- Contract registry β Public searchable index of verified Soroban contracts
-
sforge upgradeβ Safe contract upgrade management with migration scripts - GitHub Actions integration β CI/CD templates for Stellar projects
- Multi-contract workspace support
StellarForge is open source and actively seeking contributors. We follow the Stellar Contribution Guidelines.
git clone https://github.com/your-org/stellarforge
cd stellarforge
cargo build
cargo testSee CONTRIBUTING.md for issue labels, complexity levels, and how to get started. Good first issues are tagged good-first-issue.
MIT Β© StellarForge Contributors
Built for the Stellar ecosystem. Powered by Soroban. Maintained with β€οΈ by the community.