All notable changes to this repository are documented here.
The format is based on Keep a Changelog.
- Quasar CI broke repo-wide when
quasar-svm's HEAD (c63afd2, "sbpf v3") moved tosolana-program-runtime4.1 /solana-address2.6, which cannot co-resolve with the pinnedquasar-langrev623bb70(needssolana-address<2.6). Pinnedquasar-svmtocb7565d(the last rev before the bump) in every Quasar example that pinsquasar-lang, matching the pinprop-ammalready carried.basics/pythand the threecompressionQuasar examples float both dependencies and are left as-is.
- FAQ sections, written as the questions people actually ask, in the root README and every finance example's
anchor/README. llms.txtat the repository root: a summary and link manifest for LLM crawlers and answer engines.docs/example-readme-template.md, the example-README template thatCONTRIBUTING.mdreferenced but which did not exist. It documents the H1 convention and the definition-first opener.
- Every finance example README now titles itself
# Solana <Example> (<Framework>)(e.g.# Solana Escrow (Anchor)) and opens with a self-contained definition that names Solana, so each example page stands alone in search results. - The root README states its toolchain currency explicitly (Anchor 1.1, LiteSVM, July 2026) with a pointer to this changelog.
CONTRIBUTING.mdstyle rules now include the README H1 naming convention and the no-em-dash rule.
token-fundraiser(Anchor): aclose_fundraiserinstruction handler. The Fundraiser PDA is derived from the maker's key alone, so a failed raise used to lock its maker out of ever raising again. The maker can now retire a failed fundraiser (after the deadline, target missed, all contributions refunded), sweeping any direct vault donations to themselves and recovering both rent deposits, then initialize a fresh fundraiser. New error variantRefundsOutstanding.token-fundraiser(Anchor): tests for both contribution caps (test_contribute_above_cap_fails,test_cumulative_contributions_above_cap_fail) and for every branch of the close path (before deadline, target met, refunds outstanding, donation sweep, and close-then-raise-again).
- Upgraded every Anchor program from
anchor-lang/anchor-spl1.0.0to the latest stable1.1.2, and bumped the Anchor CLI used byanchor.ymlCI to match (anchor-version: 1.1.2).
anchor.ymlbuilt no projects when.ghaignorewas empty:find … | grep -vE "$ignore_pattern"treated the empty pattern as "match everything" and dropped the whole list, so the workflow passed without building anything. Guarded the filter (asnative.yml,pinocchio.ymlandsolana-asm.ymlalready do).vault-strategyandperpetual-futuresLiteSVM tests loaded their sibling mock program's.sowithinclude_bytes!, which is evaluated at compile time. Anchor's IDL build compiles the tests before that sibling.sois built, so the build failed. They now read the sibling.soat runtime withstd::fs::read, matching the existingcross-program-invocation/handtest.
- All native, Pinocchio, and ASM examples are now tested exclusively with Rust + LiteSVM. The web3.js v1 / solana-bankrun / ts-mocha TypeScript test suites (which duplicated existing Rust tests) were removed, along with their
package.json,pnpm-lock.yaml, andtsconfig.jsonfiles and thets/client directories. - Rust tests now load the program binary from the workspace
target/deploy/(built withcargo build-sbf --manifest-path=./program/Cargo.toml) instead of per-projecttests/fixturesdirectories. Committed foreign-program fixtures (e.g.mpl_token_metadata.so) stay where they were. - ASM examples standardized on
sbpf build's defaultdeploy/output directory; their inline LiteSVM tests load from there. tools/shank-and-codamanow generates a Rust client (@codama/renderers-rust) instead of a TypeScript one, wrapped in thecar-rental-service-clientcrate, and its tests are Rust + LiteSVM underprogram/tests/.transfer-hook/block-listgained a Rust + LiteSVM lifecycle test (program/tests/) driving the program through its Codama-generated Rust SDK; the mocha/web3.js test was removed. Itspackage.jsonnow only covers SDK generation.- CI (
native.yml,pinocchio.yml,solana-asm.yml) no longer installs Node/pnpm; it builds withcargo build-sbf(orsbpf build) and tests withcargo test.
basics/hello-solana/pinocchioRust + LiteSVM test (it previously had only a TypeScript test).
Mike MacCana led the Quicknode fork of the Solana Foundation program examples from late 2025. The first commits on this repository lineage are dated 8 April 2026; the summary below covers that work through the initial merge.
Toolchain and frameworks. The tree had accumulated examples from several years of Solana development (including Anchor releases going back to the ~0.26 era in 2022 and many intermediate versions). The fork brought the Anchor examples up to Anchor 1.0.0 stable (from 1.0.0-rc.5), refreshed Agave/Solana CLI pins, standardized on pnpm, and added parallel implementations in Quasar, Pinocchio, Native Rust, and ASM where applicable. Token-2022 examples were renamed to token-extensions.
Testing. Replaced the old pattern of local validators, Bankrun, and scattered TypeScript anchor test flows with LiteSVM in-process tests for most Anchor programs - matching current Anchor defaults (cargo test wired through Anchor.toml / pnpm test). Fixed broken or flaky tests across Native, Pinocchio, and Anchor; added missing harnesses (e.g. block-list Pinocchio). CI was reworked for a repo this size: path filtering, caching, matrix sharding, and reliable detection of framework roots.
Programs and layout. Broke large monolithic lib.rs files into instruction handler modules; adopted InitSpace and explicit PDA bumps instead of magic account sizes; corrected several logic bugs (escrow, token swap invariant, counter authority checks, compression Bubblegum program id, and more). Expanded finance and token-extension coverage; reorganized transfer-hook examples (including block-list under Pinocchio).
Documentation. Rewrote the root README (framework badges, clearer example blurbs, ASM links), ran a style and truth audit on READMEs, and linked canonical Solana terminology on first mention. Added this changelog, CONTRIBUTING.md (aligned with LiteSVM testing), README templates, per-example Anchor and Quasar READMEs, fixed Husky for GUI git clients, removed unused maintainer scripts (sync-package-json, cicd.sh, local-validator helpers for the allow/block-list UI), dropped the orphan tokens/spl-token-minter/ tree, and removed legacy root package.json dependencies (web3.js, Bankrun, chai).
Removed / deferred. Dropped duplicate or WIP trees (duplicate block-list Pinocchio copy, Quasar metadata example blocked on sol_realloc, root yarn.lock). Some examples remain excluded from CI via .ghaignore until they build cleanly again (compression, escrow, pyth, and others - see that file for the live list).
There was no changelog before June 2026. Older history lives in git only.