You write Python
def handler(ctx: Context, payer: Signer, amount: u64) -> u64:
vault = make_pda("vault", payer.key)
require!(amount >= 1000)
move_lamports(from=vault, to=payer.key, lamports=amount)
return 0
You get a Solana program
pythsol build program.py out/program.so native SBF bytecode out/idl.json Anchor-style IDL out/pythsol_client.py solders client out/manifest.json build manifest
What PythSol gives you
Checked, not executed
The parser reads your AST and the type checker proves accounts, seeds, and lamports — your Python never gets executed by the site.
Native, not WASM
clang targets the Solana SBF backend directly, so the artifact is a real deployable program with verifiable bytecode.
Workflow included
LiteSVM tests, deploy, faucet, wallet, verify, and a generated client ship with the CLI — no extra glue to write.
Pick your road
Try ideas in the browser
Open the PlaygroundCheck types, seeds, and lamports flow; view the generated C.
Build locally, deploy to Devnet
Follow the Quickstartpipx install pythsol, then pythsol init my-program.