Native enhancements
Native backend capabilities that make Hopper programs inspectable without changing the wire format.
Hopper Native is the primary substrate. It already owns loader parsing,
syscalls, eager + lazy entrypoints, duplicate-account resolution, and
AccountView. This document is the source of record for what we absorb
from Pinocchio and Quasar's substrates, what we deliberately do not,
and the priority order.
Pinocchio is the reference for low-level substrate efficiency. Quasar is the reference for substrate-plus-DX integration. Hopper Native targets both dimensions without copying either project.
Substrate-boundary commitment (Option A)
Hopper Native is the primary substrate. legacy-pinocchio-compat and
solana-program-backend are compat shims for users with existing
dep trees, not peer targets. Enhancement effort goes into Hopper Native.
The legacy-pinocchio-compat feature surface is frozen.
Product repositories
Framework-internal crates live in this repo so Hopper's runtime, core, macros, schema, SPL wrappers, and CLI evolve together. The earlier one-repo-per-crate split was folded back with subtree history preserved; those temporary repos are archived/private.
Only coherent standalone products remain public siblings:
| Repo | Purpose |
|---|---|
| Hopper-Solana-Zero-copy-State-Framework | Main framework workspace. |
| hopper-bench | Cross-framework benchmark harness and CU regression lab. |
| hopper-svm | In-process Solana execution harness for tests. |
Status
| # | Item | Status |
|---|---|---|
| 1.1 | Public process_entrypoint |
✅ shipped (hopper_native::entrypoint::process_entrypoint) |
| 1.2 | MAX_TX_ACCOUNTS configurability |
✅ shipped (hopper_program_entrypoint!(fn, max)) |
| 1.3 | no_allocator! macro |
✅ shipped |
| 1.4 | hopper-log crate |
⏳ planned |
| 1.5 | Static syscalls feature | ✅ feature flag added (static-syscalls) |
| 1.6 | Anza modular SDK 2.x audit | ⏳ planned |
| 2.1 | Wire integer arithmetic convenience | ✅ shipped on all Wire* integer types (+, -, *, +=, -=, *=) |
| 2.2 | Wrapping in release / panic in debug | ✅ matches Rust default for direct operators; checked helpers stay explicit |
| 2.3 | Compile-time discriminator dispatch | ⏳ planned substrate audit item; not part of current release claims |
| 2.4 | Self-CPI event emission | ⏳ planned |
| 2.5 | init_if_needed, realloc, close parity |
⏳ planned Anchor-keyword parity audit; current release documents only shipped keywords |
Tier 3 - explicitly not porting
- Anchor's runtime types verbatim. Hopper's public surface is Hopper-owned:
Account<'info, T>,InitAccount<'info, T>,Signer<'info>, and the lower-level modifier composition remain separate layers. - Quasar's IDL-by-default. We separate that into
hopper-schema. - Bump allocator on by default.
no_allocstays default; heap is opt-in. - Pinocchio-style "zero deps" minimalism for the whole framework. We
keep
bytemuck,sha2-const-stable,five8_const.
Priority order for the next quarter
hopper-logcrate (1.4)- Self-CPI event pattern (2.4)
- Anza modular SDK 2.x migration audit (1.6)
- Compile-time dispatch table audit (2.3)
- Anchor-keyword parity audit (2.5)
