Skip to content
hopper
Get started
Model / native-enhancements

Native enhancements

Native backend capabilities that make Hopper programs inspectable without changing the wire format.

Hopper Native is the sovereign 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 Pareto frontier for raw substrate efficiency. Quasar is the Pareto frontier for substrate-plus-DX integration. Hopper Native should aim to be substrate-competitive with Pinocchio and DX-competitive with Quasar - without becoming a copy of either.

Substrate-boundary commitment (Option A)

Hopper Native is the canonical 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_alloc stays 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

  1. hopper-log crate (1.4)
  2. Self-CPI event pattern (2.4)
  3. Anza modular SDK 2.x migration audit (1.6)
  4. Compile-time dispatch table audit (2.3)
  5. Anchor-keyword parity audit (2.5)