elf-magic ✨
Automatic compile-time ELF exports for Solana programs. One-liner integration, zero config, just works.
🚀 New in 0.4: Ecosystem packages for instant access to popular Solana programs! Plus enhanced configuration with constants and targets support.
🌟 New Ecosystem Packages: Pre-built ELF exports for popular Solana programs! No more building from source - just add the dependency and go.
Stop wrestling with Solana program builds. elf-magic automatically discovers all your programs, builds them, and generates clean Rust code so your ELF bytes are always available as constants.
Ecosystem Packages 🌟
NEW: Pre-built ELF exports for popular Solana programs. Zero build time, just add the dependency.
| Program | Package | Version | What's Included |
|---|---|---|---|
| SPL Token | elf-magic-solana-spl-token |
3.4.0 |
Standard + Pinocchio optimized |
| SPL Token 2022 | elf-magic-solana-token-2022 |
9.0.0 |
Token 2022 + ElGamal Registry |
| SPL Associated Token | elf-magic-solana-associated-token-account |
7.0.0 |
Associated Token Account program |
| Solana Memo | elf-magic-solana-memo |
6.0.0 |
Memo + Pinocchio memo programs |
| Solana Stake | elf-magic-solana-stake |
1.0.0 |
Solana Stake program |
👉 Full ecosystem documentation - Installation, usage examples, roadmap
Quick ecosystem example:
[]
= "3.4.0"
use SPL_TOKEN_PROGRAM_ELF;
// Deploy, test, embed - ready to use!
let program_id = deploy_program?;
Quick Start
# Create an ELF crate in your workspace
Add to my-elves/Cargo.toml:
[]
= "0.5"
Add to my-elves/build.rs:
What You Get
After building, your ELF crate exports constants for every Solana program in your workspace:
Your hand-written src/lib.rs:
//! ELF binaries for my Solana programs.
include!;
Generated at build time (in $OUT_DIR):
pub const TOKEN_MANAGER_ELF: & = include_bytes!;
pub const GOVERNANCE_ELF: & = include_bytes!;
Use your programs anywhere:
use ;
// Deploy, test, embed - whatever you need
let program_id = deploy_program?;
Three Modes for Every Workflow
🪄 Magic Mode (Default)
Zero config, just works
Perfect for: Single workspaces, development, getting started
🎛️ Permissive Mode
Multi-workspace with exclusions
[]
= "permissive"
= ["package:*-test"]
= [
{ = "./Cargo.toml", = ["target:dev*"] },
{ = "examples/Cargo.toml" }
]
Perfect for: Complex repos, excluding test programs, multi-workspace projects
🎯 Laser Eyes Mode
Precision targeting
[]
= "laser-eyes"
= [
{ = "./Cargo.toml", = ["target:token_manager", "target:governance"] }
]
Perfect for: Production builds, CI optimization, focused development
Rich Build Reporting
First build shows what's happening:
)
)
The + shows included programs, - shows excluded programs.
How It Works
The magic behind the one-liner:
- 🔍 Auto-discovery:
cargo metadatafinds all workspace members - 🎯 Smart filtering:
crate-type = ["cdylib"]identifies Solana programs - 🔨 Automatic building:
cargo build-sbfruns when source changes - 📝 Code generation: Target names become
TARGET_NAME_ELFconstants - ⚡ Incremental: Only rebuilds what changed
Installation
Add to your ELF crate's Cargo.toml:
[]
= "0.5"
Documentation
- 🌟 Ecosystem Packages - Pre-built ELF exports for popular programs
- 🪄 Magic Mode - Zero config auto-discovery
- 🎛️ Permissive Mode - Multi-workspace with exclusions
- 🎯 Laser Eyes Mode - Precision targeting
- 📖 Usage Guide - Using your generated constants
- 🏗️ Architecture - How it works under the hood
Examples
Works with any workspace layout:
Single Workspace (Magic Mode)
my-workspace/
├── Cargo.toml # Workspace root
├── my-elves/ # Generated ELF exports
│ ├── build.rs # One-liner magic ✨
│ └── src/lib.rs # Hand-written wrapper
└── programs/
├── token-manager/ # Your Solana programs
└── governance/
Multi-Workspace (Permissive/Laser Eyes Mode)
arch-network/
├── Cargo.toml # Main workspace (5 programs)
├── elves/ # ELF exports with advanced config
└── examples/ # Separate workspaces
├── basic/Cargo.toml # Independent workspace
└── advanced/Cargo.toml
Requirements
- Rust 2021 edition
- Solana CLI tools for
cargo build-sbf
License
MIT