Why this guide matters right now

Every few weeks somebody sends me a screenshot of cargo build failing on a fresh laptop, asks me what they should install, and then waits politely while I try to remember which combination of CLI tools, Rust toolchains, and local validators I actually trust this month. The honest answer is that the Solana development stack just went through one of the biggest cleanups it has had since the original Anchor 0.x era. If you set up a machine in early 2025 and you have not touched it since, almost every step in that old README is now either obsolete, renamed, or replaced by something faster.

This is the writeup I wish someone had handed me on Day 1 of the bot project. It is not a marketing post and it is not a recap of a hackathon — it is the actual command sequence I lean on today, plus the parts of the stack that are interesting enough to be worth understanding rather than just copy-pasting.

The 2026 stack at a glance

If you squint, the Solana development environment in 2026 is still the same four things it has always been: a compiler, a CLI that talks to clusters, a framework that hides the boilerplate, and a local validator that lets you iterate without burning real SOL. What changed is who maintains each layer and how they fit together.

The compiler is still Rust, installed through rustup. Nothing exotic here — the official Solana installation docs require a recent stable Rust toolchain (Solana Foundation). The CLI is now officially the Agave fork maintained by Anza, the engineering team that took over the original Solana Labs validator client (Anza docs). The framework is Anchor, which finally crossed the 1.0 line and quietly renamed half of its TypeScript surface in the process (Anchor changelog). And the local validator most new projects start with is no longer solana-test-validator — it is Surfpool, a drop-in replacement that ships bundled with the official installer (Surfpool repo).

For years the joke in the Solana developer community was that getting your machine set up was harder than writing your first program. The 2026 stack does not make that joke completely wrong, but it gets you close. The reason is one of the most underrated changes in the ecosystem this year: the official one-liner installer.

The one-liner that replaces a weekend

The entire "set up everything" flow on Mac or Linux now collapses into a single command published by the Solana Foundation:

curl --proto '=https' --tlsv1.2 -sSfL https://solana-install.solana.workers.dev | bash

That one line pulls down a curated bundle: Rust, the Solana CLI, the Anchor CLI, the Surfpool local validator, Node.js, and Yarn. When it finishes, the installer prints back a checklist of versions and tells you whether anything is missing. The verification command at the end — rustc --version && solana --version && anchor --version && surfpool --version && node --version && yarn --version — is your sanity check (Solana Foundation).

The scripted versions are pinned to a known-good combination, which means the installer might lag the absolute newest releases of each tool. The Solana docs page shows one set of expected version numbers, while the Anchor docs page references a slightly different set, and the Agave docs are already on a higher CLI major version than either of those scripts. This is not a bug — it is the installer choosing a tested combination over the bleeding edge. The right mental model is the same as picking a Long Term Support release of Ubuntu instead of the daily build. You can always upgrade individual tools after the script finishes; you just do not have to.

If you are on Windows, the official answer is the same answer it has been for years: install Windows Subsystem for Linux, then run the Linux command inside Ubuntu. Native Windows Solana development is explicitly not supported by the official docs. I have seen developers fight this for an entire afternoon before giving up. Save yourself the trip and run wsl --install first.

When the one-liner is not enough

The one-liner does the easy part. The hard part on Linux is the system packages that the Rust compiler needs in order to link Solana's dependencies. On a fresh Ubuntu or Debian image, you have to install build tools, OpenSSL headers, the LLVM libraries that bindgen relies on, and the protobuf compiler before the Rust build will succeed. The Solana Foundation publishes the exact list (dependencies docs):

sudo apt-get update
sudo apt-get install -y \
    build-essential \
    pkg-config \
    libudev-dev llvm libclang-dev \
    protobuf-compiler libssl-dev

On Red Hat or Fedora the equivalent is a couple of dnf group install calls. None of this is exciting, but skipping it produces some of the most frustrating error messages in the entire ecosystem. A linker failure with no obvious cause almost always means you are missing one of these packages.

My personal rule of thumb: if you are setting up a brand new VM or container, run the package install before you run anything else, even before you run the one-liner. It costs you sixty seconds and saves you an afternoon of debugging Stack Overflow threads from 2022.

Why Surfpool changed how I run local development

For the longest time, the answer to "how do I test my Solana program" was the same: spin up solana-test-validator, point your client at http://127.0.0.1:8899, and pray that whatever you need to test does not depend on the actual state of mainnet. That last part is the catch. If your program interacts with any existing on-chain protocol — a token mint, a swap pool, a price oracle, anything — you either had to clone enormous amounts of state by hand or accept that your local validator was a sandbox that bore very little resemblance to production.

Surfpool takes a different approach. It runs a local cluster that lazily forks mainnet (or devnet, or any RPC you point it at), copies account data on read, and writes your changes locally. Think of it as the difference between mocking out an API and using a record-and-replay layer in front of a real service. The official description from the Surfpool team is "a drop-in replacement for solana-test-validator" that is "built local-first and offline-ready" — the project landed under the Solana Foundation organization on GitHub and the team behind it joined the Foundation last year (Surfpool repo).

The practical effect for me has been that my iteration loop got shorter. Spinning up a fresh local cluster that already knows about every program and account I care about is now surfpool start. There is a companion local web UI — Surfpool Studio — that runs at http://127.0.0.1:18488 and shows things like per-instruction compute unit breakdowns, before-and-after state diffs for every affected account, and a time-jump widget that lets you push the cluster forward by slots or epochs to test things like vesting schedules or stake epochs without waiting for real time to pass (Solana Foundation).

The other thing worth knowing about Surfpool is that Anchor 1.0 made it the default backend for anchor test and anchor localnet. If you anchor init a new project today, you are running on Surfpool whether you noticed or not. The legacy solana-test-validator still works and is still documented — you can absolutely use it — but the path of least resistance now points to Surfpool.

What Anchor 1.0 actually breaks

Anchor crossed the 1.0 line after a long stretch in the 0.x series, with 0.32.1 in October 2025 being the last pre-1.0 patch (Anchor changelog). I was nervous about this release the way you are nervous about any framework hitting its first stable major version, because the changes that matter are not the ones in the changelog headline.

The loudest breaking change is the TypeScript package rename. The npm package formerly published as @coral-xyz/anchor is now @anchor-lang/core. If you have an older client-side codebase, this is a search-and-replace job, and if you have CI that locks the old package name, you will find out the hard way. The rename reflects that Anchor finally has a single canonical namespace tied to the framework itself, but it does not give you a deprecation window — old code does not magically work.

The second change worth knowing about is the test toolchain. Anchor 1.0 uses Surfpool by default. If your existing project's Anchor.toml does not specify a different backend, your anchor test invocation now spins up Surfpool instead of solana-test-validator. That is mostly good news, but if your test suite implicitly depended on specific behavior of the legacy validator — for example the exact timing of slot progression or the precise rent edge cases — you may see flaky tests. The fix is either to update your tests to be timing-independent (which is good hygiene anyway) or to pin the legacy validator in Anchor.toml.

A few smaller items are worth a paragraph each. Anchor 1.0 ships a Migration<'info, From, To> account type that formalizes the schema-migration pattern people were doing by hand. It removes the program account info from the CPI context, which is a small footgun-removal that pays off the first time you forget to pass it. It removes the [registry] section from Anchor.toml, which had been quietly broken for a while. And it integrates Program Metadata for IDL management, replacing the old IDL instructions that lived on chain — which is mostly relevant if you have ever debugged an IDL deploy and lost an evening to it. None of these are dramatic on their own, but together they are the kind of cleanup that makes the framework feel less like an indie project and more like a tool you can deploy a serious system on.

The AVM-based install flow has not changed and remains the recommended way to install Anchor:

cargo install --git https://github.com/solana-foundation/anchor avm --force
avm install latest
avm use latest

AVM is to Anchor what rustup is to Rust — a version manager that lets you switch between toolchains per project. Once you have used it for a week, the idea of installing Anchor any other way feels primitive.

Agave 4.0: the validator that finally feels fast

The other major shift in 2026 is on the validator side. Anza, the team that took over the original Solana Labs codebase, recommended on May 18, 2026 that mainnet validators upgrade to the Agave 4.0 series (CryptoNews.net). This matters to application developers even if you have no intention of running a validator yourself, because Agave 4.0 changes some on-chain behaviors that your programs may need to be aware of.

The most visible performance win is in Turbine, Solana's block propagation layer. Per benchmarks published in the Agave 4.0 release notes, retransmit latency dropped from roughly 250 milliseconds without XDP acceleration to roughly 0.7 milliseconds with it (Helius blog). That is the kind of improvement that does not show up in any single transaction but compounds into a noticeably tighter cluster. Replay also got faster by moving entry verification and transaction signature verification into asynchronous background processes.

For program developers, the developer-facing changes in Agave 4.0 are where the action is. Native BLS12-381 curve syscalls and G2 arithmetic open up cryptographic primitives that were previously expensive to implement on chain. The ZK ElGamal program got re-enabled after security fixes, which matters if you are working with confidential transfers. A new CreateAccountAllowPrefund instruction removes the old constraint that an account had to have zero lamports at the moment of creation — a tiny change that eliminates an entire class of awkward initialization sequences. And SBPFv3 support enhances the VM's eBPF instruction compatibility, which translates to faster program loading.

There are two changes that will quietly bite people. The minimum stake delegation went from 1 lamport to 1 SOL, which matters if you have any program logic that creates or manipulates stake accounts on behalf of users. And the reserved compute units for vote transactions went from 3,428 to 19,812 under a new dynamic cost model, which is something validator operators care about more than program devs, but it changes what the network looks like under load.

The roadmap from here is public: Agave 4.1, scheduled for Q3 2026, brings the Alpenglow consensus rollout. I am not going to predict what that will or will not break — I will deal with it when it lands. The point right now is that 4.0 is the baseline the network is converging on, and any new project should be testing against it.

The cluster setup most people get wrong

There is one part of Solana development that I have watched newcomers stumble through dozens of times: cluster configuration. The CLI has a global config that tells every command where to send transactions by default. If you forget what it is set to, you can spend a real amount of money or time before you notice. The relevant commands are short (Anchor docs):

solana config get        # What am I pointed at?
solana config set -ul    # Localhost
solana config set -ud    # Devnet
solana config set -um    # Mainnet-beta

The shortcuts (-ul, -ud, -um) are the kind of thing that you will memorize after typing them wrong once. The full URLs they expand to are http://127.0.0.1:8899 for localnet, https://api.devnet.solana.com for devnet, and https://api.mainnet-beta.solana.com for mainnet-beta. Devnet has a faucet — solana airdrop 2 will hand you 2 SOL on devnet for testing, subject to rate limits. Mainnet does not have a faucet, for what should be obvious reasons.

The rule I drill into anyone who works on the bot with me is to verify the cluster setting before doing anything that costs money. solana config get is two seconds. A misconfigured airdrop on mainnet that becomes a real transaction is not.

When you do not want to install anything

Not everything needs a local toolchain. If you are learning the language, prototyping a quick idea, or running a workshop, the browser-based Solana Playground at beta.solpg.io is the right tool. It supports Rust + Anchor as well as Seahorse (a Python-flavored syntax that compiles down to Solana programs), has real-time collaboration so two people can edit at the same time, and even has a VS Code extension if you want the IDE experience without the full local install (Solana Playground).

The limits show up the moment you try to do anything serious. Solana Playground does not give you a persistent local state, does not let you bring in custom tooling or external dependencies that are not pre-packaged, and is not the right environment for end-to-end testing of a complex application. Quick scripts and learning material — yes. Production workflows — no. That is the right line to draw.

What this stack means for the next twelve months

The pattern I see when I step back and look at all of this together is consolidation. Two years ago a Solana developer had to choose between competing validators, multiple ways to install the CLI, two or three different package names for the same TypeScript library, and a local validator that was clearly the official one but did not match real network conditions. In 2026 there is one validator (Agave), one CLI install path (Anza's), one TypeScript package (@anchor-lang/core), and one local validator that mirrors mainnet by default (Surfpool). The framework is past its 1.0 line and the tooling is bundled under a single one-liner.

That does not mean the ecosystem stopped moving — Alpenglow consensus is coming, the cost model for transactions keeps evolving, and the Anchor team has plenty more to do. But the day-to-day developer experience finally feels like a maintained product instead of a science experiment, and that is a real change. If you have been on the fence about starting a Solana project because the setup looked intimidating the last time you tried, that excuse is genuinely weaker than it was a year ago.

The one piece of advice I would give anyone starting today: do not skip the local validator. Surfpool's ability to fork mainnet state lazily makes it possible to test against real conditions without paying real money, and that capability is the single biggest reason my own iteration cycle is faster than it was at the start of this project. The temptation to develop straight against devnet is real, but devnet behavior is not mainnet behavior, and the gap shows up at exactly the wrong moment.

Key Takeaways

  • One-liner first: The official Solana installation script bundles Rust, the Solana CLI, Anchor, Surfpool, Node.js, and Yarn in a single curated install — start there before installing tools individually.
  • Windows means WSL: Native Windows is not officially supported. Install WSL with Ubuntu and run everything through the Linux command path.
  • Anchor 1.0 is a real major version: The TypeScript package renamed from @coral-xyz/anchor to @anchor-lang/core, and Surfpool replaced solana-test-validator as the default test backend.
  • Agave 4.0 is the new baseline: As of May 2026 it is the recommended mainnet validator. Newer cryptographic syscalls, an updated VM, and a higher minimum stake delegation are the changes most likely to affect application developers.
  • Verify your cluster before you transact: solana config get takes two seconds and prevents the kind of mistake you only make once.

Disclaimer

This article is for informational and educational purposes only and does not constitute financial, investment, legal, or professional advice. Content is produced independently and supported by advertising revenue. While we strive for accuracy, this article may contain unintentional errors or outdated information. Readers should independently verify all facts and data before making decisions. Company names and trademarks are referenced for analysis purposes under fair use principles. Always consult qualified professionals before making financial or legal decisions.