| Crates.io | pinoc |
| lib.rs | pinoc |
| version | 0.1.5 |
| created_at | 2025-07-16 18:42:59.165329+00 |
| updated_at | 2025-07-17 17:45:16.675975+00 |
| description | A CLI tool for setting up pinocchio program project |
| homepage | |
| repository | https://github.com/a91y/pinoc |
| max_upload_size | |
| id | 1756246 |
| size | 517,603 |
Pinoc is a command-line tool designed to make it easy to set up and manage Pinocchio projects on Solana. It automates common development tasks including project initialization, building, testing, and deployment with simple commands.
cargo install pinoc
cargo install --git https://github.com/a91y/pinoc --force
Clone the repository
git clone https://github.com/a91y/pinoc.git
cd pinoc
Build the tool
cargo build --release
Install globally
cargo install --path .
# Install pinoc
cargo install pinoc
# Create a new project
pinoc init my_awesome_app
# Navigate to your project
cd my_awesome_app
# Build and test
pinoc build
pinoc test
# Deploy to Solana
pinoc deploy
# Create a new project without git initialization
pinoc init my_awesome_app --no-git
# This will skip git repository initialization.
| Command | Description |
|---|---|
pinoc init <project-name> [--no-git] [--no-boilerplate] |
Initialize a new Pinocchio project (skip git init with --no-git, minimal structure with --no-boilerplate) |
pinoc build |
Build your Solana program |
pinoc test |
Run project tests |
pinoc deploy [--cluster] [--wallet] |
Deploy your program to Solana (uses Pinoc.toml config, optional overrides) |
pinoc clean [--no-preserve] |
Clean target directory (preserves keypairs by default) |
pinoc add <package-name> |
Add a package to your project |
pinoc search [query] |
Search for Pinocchio packages |
pinoc keys list |
List all program keypairs |
pinoc keys sync |
Sync program ID in lib.rs with keypair |
pinoc --help |
Get help and see all available commands |
pinoc help |
Display custom help banner with all commands |
# Create a new project
pinoc init my_pinocchio_app
# Create a new project without git initialization
pinoc init my_pinocchio_app --no-git
# Create a minimal project without tests and boilerplate
pinoc init my_minimal_project --no-boilerplate
# Navigate to your project
cd my_pinocchio_app
# Build your project
pinoc build
# Run tests
pinoc test
# List program keys
pinoc keys list
# Sync program keys (checks consistency first)
pinoc keys sync
# Clean build artifacts (preserves keypairs)
pinoc clean
# Add a package
pinoc add some_package
# Search for packages
pinoc search database
# Get help
pinoc help
# Deploy your program
pinoc deploy
# Deploy with custom cluster and wallet
pinoc deploy --cluster devnet --wallet ./custom-keypair.json
When you initialize a project with pinoc init, it creates the following structure:
my_project/
โโโ Cargo.toml # Project configuration with Pinocchio dependencies
โโโ README.md # Project documentation
โโโ .gitignore # Git ignore file
โโโ Pinoc.toml # Deployment configuration
โโโ src/
โ โโโ lib.rs # Library crate using no_std
โ โโโ entrypoint.rs # Program entrypoint
โ โโโ errors.rs # Error definitions
โ โโโ instructions/ # Program instructions
โ โ โโโ mod.rs
โ โ โโโ initialize.rs # Initialize instruction
โ โโโ states/ # Account state definitions
โ โโโ mod.rs
โ โโโ state.rs # State structure
โ โโโ utils.rs # State management utilities
โโโ tests/ # Test files
โ โโโ tests.rs # Unit tests using mollusk-svm
โโโ target/
โโโ deploy/
โโโ my_project-keypair.json # Generated program keypair
When you initialize a project with pinoc init --no-boilerplate, it creates a minimal structure:
my_minimal_project/
โโโ Cargo.toml # Minimal configuration with only pinocchio dependency
โโโ README.md # Basic documentation
โโโ .gitignore # Git ignore file
โโโ Pinoc.toml # Deployment configuration
โโโ src/
โ โโโ lib.rs # Minimal program with just program ID and basic structure
โโโ target/
โโโ deploy/
โโโ my_minimal_project-keypair.json # Generated program keypair
Minimal Project Features:
The pinoc clean command intelligently manages your build artifacts:
# Clean target directory while preserving keypairs (default)
pinoc clean
# Clean everything including keypairs
pinoc clean --no-preserve
Why preserve keypairs? Your program keypair is essential for deployment. The default behavior ensures you don't accidentally lose your deployment credentials.
Easily add dependencies and discover new packages:
# Add a package to your project
pinoc add package-name
# Search for Pinocchio-related packages
pinoc search database
pinoc search oracle
target/deploy/Manage your program keys with consistency checks:
# List all program keypairs
pinoc keys list
# Sync program ID in lib.rs with keypair
pinoc keys sync
Key Sync Features:
declare_id! matches the keypair's public keyExample Output:
# When keys are already consistent
โ
Program key is already consistent!
๐ Program ID: 9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM
๐ No update needed in src/lib.rs
# When keys need syncing
๐ Program key mismatch detected:
Current in lib.rs: 11111111111111111111111111111111
Actual keypair: 9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM
โ
Successfully synced program key!
๐ Program ID: 9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM
๐ Updated src/lib.rs with new program ID
Pinoc uses a Pinoc.toml configuration file to manage deployment settings. This file is automatically created when you initialize a new project.
Pinoc.toml Structure:
[provider]
cluster = "localhost"
wallet = "~/.config/solana/id.json"
Configuration Options:
cluster: The Solana cluster URL to deploy to (e.g., "localhost", "devnet", "mainnet-beta")wallet: Path to your Solana wallet keypair file (supports ~ for home directory expansion)Deployment Process:
When you run pinoc deploy, the tool will:
Pinoc.toml configuration fileCommand-Line Overrides:
You can override the configuration from Pinoc.toml using command-line arguments:
# Override cluster only
pinoc deploy --cluster devnet
# Override wallet only
pinoc deploy --wallet ./custom-keypair.json
# Override both cluster and wallet
pinoc deploy --cluster mainnet-beta --wallet ~/.config/solana/mainnet-keypair.json
Example Deployment Output:
$ pinoc deploy
Deploying program
๐ Using configuration:
Cluster: devnet
Wallet: ~/.config/solana/id.json
Program deployed successfully!
Customizing Configuration:
You can edit the Pinoc.toml file to change deployment settings, or use command-line arguments for one-time overrides:
# For mainnet deployment
[provider]
cluster = "mainnet-beta"
wallet = "~/.config/solana/mainnet-keypair.json"
# For local development
[provider]
cluster = "localhost"
wallet = "~/.config/solana/id.json"
Command-Line Override Examples:
# Use different cluster for this deployment
pinoc deploy --cluster devnet
# Use different wallet for this deployment
pinoc deploy --wallet ./test-keypair.json
# Override both settings
pinoc deploy --cluster mainnet-beta --wallet ~/.config/solana/production-keypair.json
Before using Pinoc, make sure you have the following installed:
Contributions are welcome! Here's how you can contribute:
git checkout -b feature/amazing-feature)git commit -m 'Add some amazing feature')git push origin feature/amazing-feature)Clone and Build
git clone https://github.com/a91y/pinoc.git
cd pinoc
cargo build --release
Install Locally
cargo install --path .
Test Your Changes
# Test the CLI
pinoc --help
# Create a test project
pinoc init test-project
cd test-project
pinoc build
This project is licensed under the MIT License - see the LICENSE file for details.