---
title: Core Programs
description:
  Solana core programs — System Program with instruction reference, Vote, Stake,
  Config, Compute Budget, Address Lookup Table, and ZK ElGamal Proof. Includes
  source links for all 7 programs.
url: /docs/core/programs/builtin-programs
type: reference
prerequisites:
  - /docs/core/programs
related:
  - /docs/core/programs/precompiles
  - /docs/core/programs/program-deployment
  - /docs/core/accounts/account-types
  - /docs/core/instructions
---

<Callout type="info" title="Summary">
  Core programs provide fundamental network functionality: account management
  (System Program), consensus (Vote, Stake), transaction optimization (Compute
  Budget, Address Lookup Table), and privacy (ZK ElGamal Proof). Includes System
  Program instruction reference and source links for all 7 programs.
</Callout>

## The System Program

The System Program (`11111111111111111111111111111111`) is the only program that
can create new accounts. All new accounts are initially owned by the System
Program, though ownership is typically reassigned upon creation. The System
Program consumes
[`DEFAULT_COMPUTE_UNITS`](https://github.com/anza-xyz/agave/blob/v3.1.8/programs/system/src/system_processor.rs#L282)
(150 CUs) per instruction.

### System Program instruction reference

| Instruction                                                                                                            | Description                                                                                                                                                                                                     |
| ---------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [`CreateAccount`](https://github.com/anza-xyz/agave/blob/v3.1.8/programs/system/src/system_processor.rs#L295)          | Creates a new account. Allocates `space` bytes, assigns `owner`, and transfers `lamports` from the payer. The new account and the payer must sign.                                                              |
| [`CreateAccountWithSeed`](https://github.com/anza-xyz/agave/blob/v3.1.8/programs/system/src/system_processor.rs#L318)  | Same as `CreateAccount`, but derives the new account's address from an account's pubkey, a seed string, and the owner program. The account whose pubkey was used to derive the address and the payer must sign. |
| [`Assign`](https://github.com/anza-xyz/agave/blob/v3.1.8/programs/system/src/system_processor.rs#L343)                 | Sets the account's owner. Account must sign. No-op if already that owner.                                                                                                                                       |
| [`AssignWithSeed`](https://github.com/anza-xyz/agave/blob/v3.1.8/programs/system/src/system_processor.rs#L484)         | Same as `Assign`, but for a seed-derived address. The account whose pubkey was used to derive the address must sign.                                                                                            |
| [`Transfer`](https://github.com/anza-xyz/agave/blob/v3.1.8/programs/system/src/system_processor.rs#L353)               | Transfers lamports between accounts. The sender must sign.                                                                                                                                                      |
| [`TransferWithSeed`](https://github.com/anza-xyz/agave/blob/v3.1.8/programs/system/src/system_processor.rs#L357)       | Same as `Transfer`, but from a seed-derived address. The account whose pubkey was used to derive the address must sign.                                                                                         |
| [`Allocate`](https://github.com/anza-xyz/agave/blob/v3.1.8/programs/system/src/system_processor.rs#L452)               | Sets the account's data length. Account must sign, have empty data, and be owned by System Program. Maximum 10 MiB.                                                                                             |
| [`AllocateWithSeed`](https://github.com/anza-xyz/agave/blob/v3.1.8/programs/system/src/system_processor.rs#L462)       | Same as `Allocate`, but for a seed-derived address. Also assigns the owner. The account whose pubkey was used to derive the address must sign.                                                                  |
| [`AdvanceNonceAccount`](https://github.com/anza-xyz/agave/blob/v3.1.8/programs/system/src/system_processor.rs#L374)    | Advances the nonce value to the current blockhash. Nonce authority must sign.                                                                                                                                   |
| [`InitializeNonceAccount`](https://github.com/anza-xyz/agave/blob/v3.1.8/programs/system/src/system_processor.rs#L412) | Initializes an account as a nonce account with the given authority. Account must be rent-exempt.                                                                                                                |
| [`AuthorizeNonceAccount`](https://github.com/anza-xyz/agave/blob/v3.1.8/programs/system/src/system_processor.rs#L432)  | Changes the nonce authority. Current authority must sign.                                                                                                                                                       |
| [`WithdrawNonceAccount`](https://github.com/anza-xyz/agave/blob/v3.1.8/programs/system/src/system_processor.rs#L392)   | Withdraws lamports from a nonce account. Authority must sign. If not closing, remaining balance must cover rent.                                                                                                |
| [`UpgradeNonceAccount`](https://github.com/anza-xyz/agave/blob/v3.1.8/programs/system/src/system_processor.rs#L437)    | Upgrades a nonce account from legacy to current version format. Account must be writable and contain a legacy nonce version.                                                                                    |

## All core programs

| Program                  | Program ID                                    | Description                                                                 | Source                                                                            |
| ------------------------ | --------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------------- |
| **System**               | `11111111111111111111111111111111`            | Creates accounts, transfers SOL, allocates data, and assigns ownership      | [Source](https://github.com/anza-xyz/agave/tree/v3.1.8/programs/system)           |
| **Vote**                 | `Vote111111111111111111111111111111111111111` | Creates and manages accounts that track validator voting state and rewards  | [Source](https://github.com/anza-xyz/agave/tree/v3.1.8/programs/vote)             |
| **Stake**                | `Stake11111111111111111111111111111111111111` | Creates and manages stake delegations to validators                         | [Source](https://github.com/solana-program/stake/tree/main)                       |
| **Config**               | `Config1111111111111111111111111111111111111` | Stores configuration data onchain with key-based access control             | [Source](https://github.com/solana-program/config/tree/main)                      |
| **Compute Budget**       | `ComputeBudget111111111111111111111111111111` | Sets compute unit limits and priority fees for transactions                 | [Source](https://github.com/anza-xyz/agave/tree/v3.1.8/programs/compute-budget)   |
| **Address Lookup Table** | `AddressLookupTab1e1111111111111111111111111` | Manages address lookup tables for transactions that reference many accounts | [Source](https://github.com/solana-program/address-lookup-table)                  |
| **ZK ElGamal Proof**     | `ZkE1Gama1Proof11111111111111111111111111111` | Verifies zero-knowledge proofs for ElGamal-encrypted data                   | [Source](https://github.com/anza-xyz/agave/tree/v3.1.8/programs/zk-elgamal-proof) |

## Loader programs

Every program is owned by a loader program. Loaders handle deployment, upgrade,
and execution of the programs they own. See
[Loader Programs](/docs/core/programs/program-deployment#loader-programs) for
the full list of loaders and their addresses.
