---
title: "SPL Governance & Realms"
url: "https://caper.network/wiki/dao-governance/tooling/frameworks/spl-governance"
updated: 2026-09-07
license: CC-BY-4.0
license_url: "https://creativecommons.org/licenses/by/4.0/"
---

# SPL Governance & Realms

**SPL Governance** is the on-chain program that most decentralized autonomous organizations on **Solana** run on, and **Realms** is the open-source web app that fronts it. The program is, in its maintainers' words, ["a program the chief purpose of which is to provide core building blocks and primitives to create Decentralized Autonomous Organizations"](https://github.com/Mythic-Project/solana-program-library/blob/master/governance/README.md) – deliberately ["DAO type and asset type agnostic"](https://github.com/Mythic-Project/solana-program-library/blob/master/governance/README.md) so a treasury, a protocol, or an NFT community can all be governed by the same primitive. It is the Solana equivalent of what [OpenZeppelin Governor](/wiki/dao-governance/tooling/voting/openzeppelin-governor) plus [Safe](/wiki/dao-governance/tooling/treasury/safe) are on the EVM: a canonical governance kernel that everything else composes around.

|  |  |
| --- | --- |
| **Category** | On-chain governance framework (Solana) · program + shared front-end |
| **Program** | SPL Governance – originally part of the Solana Program Library, whose monorepo Solana Labs [archived on 11 March 2025](https://github.com/solana-labs/solana-program-library). The maintained line is the [Mythic Project fork](https://github.com/Mythic-Project/solana-program-library/tree/master/governance) |
| **Front-end** | [Realms](https://app.realms.today/) – the [open-source governance UI](https://github.com/Mythic-Project/governance-ui) used by most Solana DAOs to create and run a realm |
| **Mainnet program IDs** | `GovER5Lthms3bLBqWub97yVrMmEogzX7xNjdXpPPCVZw` (default) · `GTesTBiEWE32WHXXE2S4XbZvA5CrEc4xs6ZgRe895dP` (test) |
| **Upgrade authority** | Held by a governance PDA of a seven-member council realm running on a second SPL Governance deployment – the program governs itself. Last upgrade executed by proposal on 8 July 2026 |
| **Vote model** | Token-weighted – a **community** mint and an optional **council** mint per realm; deposit = voting weight |
| **Extensibility** | Swappable voter-weight _addins_ (plugins): [Voter Stake Registry](https://github.com/blockworks-foundation/voter-stake-registry), [NFT voter, quadratic, gateway](https://github.com/Mythic-Project/governance-program-library) |
| **Notable users** | [Marinade](/wiki/daos/staking/marinade), [Jito](/wiki/daos/staking/jito), Mango, Metaplex, Helium (via VSR) |
| **Docs** | [docs.realms.today](https://docs.realms.today/) |

## The primitive: a realm, two mints

Everything in SPL Governance hangs off a **realm**. As the [program README](https://github.com/Mythic-Project/solana-program-library/blob/master/governance/README.md) puts it, the ["Realm account ties Community Token Mint and optional Council Token mint to create a realm."](https://github.com/Mythic-Project/solana-program-library/blob/master/governance/README.md) Members deposit governing tokens into the program and use ["the deposited amount as their voting weight to vote on Proposals."](https://github.com/Mythic-Project/solana-program-library/blob/master/governance/README.md) That is plain [token-weighted voting](/wiki/dao-governance/concepts/voting/token-weighted-voting) at the base layer.

The optional **council** mint is what makes the model expressive: a realm can run two voting populations at once. A small trusted council can hold veto or fast-track powers over the same DAO the broad community token governs – the program notes ["users can submit Proposals that have a different voting population from a different mint that can affect the same DAO."](https://github.com/Mythic-Project/solana-program-library/blob/master/governance/README.md) It is the on-chain version of the two-chamber pattern many DAOs reach for, without bolting on a separate tool.

## Realms: the shared front-end

Almost no one interacts with the raw program. [Realms](https://app.realms.today/) is the [open-source UI](https://github.com/Mythic-Project/governance-ui) – ["a sophisticated, fully on-chain platform designed to simplify and enhance the management of decentralized autonomous organizations on the Solana blockchain"](https://docs.realms.today/) – that the large majority of Solana DAOs deploy and operate through. Its docs frame a realm around three moving parts: ["DAOs, proposals, and votes."](https://docs.realms.today/)

Because the front-end is shared and open source, a new Solana DAO gets a working governance surface – proposal creation, delegation, treasury views, member lists – without building any of it, the same way an EVM project reaches for [Tally](/wiki/dao-governance/tooling/voting/tally) or [Snapshot](/wiki/dao-governance/tooling/voting/snapshot) rather than shipping its own governance app. Realms and the program are maintained together by the [Mythic Project](https://github.com/Mythic-Project/solana-program-library/tree/master/governance).

## Proposals, votes, and a governed treasury

A ["Proposal is an instance of a Governance created to vote on and execute given set of instructions."](https://github.com/Mythic-Project/solana-program-library/blob/master/governance/README.md) It moves through draft → voting → executing → completed, and a ["vote is tipped once it passes the defined `vote_threshold`"](https://github.com/Mythic-Project/solana-program-library/blob/master/governance/README.md) – early resolution once the outcome is mathematically settled, rather than always waiting out the clock.

What separates SPL Governance from a pure [off-chain signalling tool](/wiki/dao-governance/tooling/voting/snapshot) is that the treasury _is_ the DAO. Assets are held in specialised governance accounts that only a passed proposal can move:

- **ProgramGovernance** – controls program (smart-contract) upgrades.
- **MintGovernance** – controls an SPL token mint (issuance).
- **TokenGovernance** – controls transfers out of a token account (the treasury proper).

Because execution is on-chain and account-scoped, a Realms DAO owns and moves its own funds by vote – the proposal _is_ the transaction, not a request for a multisig to act later.

## The plugin architecture: voter-weight addins

The program is ["modular and uses open/close architecture where individual parts of the program's behavior can be customized through external plugins."](https://github.com/Mythic-Project/solana-program-library/blob/master/governance/README.md) The default one-token-one-vote weight ["can be swapped with a custom program implementation"](https://github.com/Mythic-Project/solana-program-library/blob/master/governance/README.md) – an _addin_ that computes each member's voting power however the realm wants. This is the most consequential design choice in the stack: governance math is pluggable.

The addins in wide use:

- [Voter Stake Registry (VSR)](https://github.com/blockworks-foundation/voter-stake-registry) – the dominant one, built by the [Blockworks Foundation](https://github.com/blockworks-foundation/voter-stake-registry). It lets a realm ["control which token mints can be used to vote, and at what scaling factor"](https://github.com/blockworks-foundation/voter-stake-registry), and lets members ["lock up tokens with different vesting schedules"](https://github.com/blockworks-foundation/voter-stake-registry) where ["locked up tokens may have extra voting weight."](https://github.com/blockworks-foundation/voter-stake-registry) It also supports [clawback](https://github.com/blockworks-foundation/voter-stake-registry) of locked grants. That makes VSR Solana's [vote-escrow (ve)](/wiki/dao-governance/concepts/voting/vote-escrow) analogue – time-lock for weight.
- [NFT voter](https://github.com/Mythic-Project/governance-program-library) – voting power derived from NFT holdings across accepted collections, for NFT-native communities.
- [Quadratic and Gateway plugins](https://github.com/Mythic-Project/governance-program-library) – a quadratic-weighting addin, and a Civic-gateway addin that gates voting behind identity/uniqueness passes.

An addin can also cap the _max_ voter weight, so quorum is measured against an effective supply rather than the raw mint – the same accounting problem [token-weighted systems](/wiki/dao-governance/concepts/voting/token-weighted-voting) everywhere have to solve.

## In production

SPL Governance and Realms are the default governance layer for the Solana ecosystem. [Marinade](/wiki/daos/staking/marinade) runs its mDAO in Realms with MNDE locked under VSR; [Jito](/wiki/daos/staking/jito) governs JTO, StakeNet, and its NCN fee routing through it; Mango, Metaplex, and Grape are long-running Realms DAOs; and [Helium](https://github.com/helium/voter-stake-registry) governs HNT through its own fork of VSR after migrating to Solana. Because the program and UI are shared, these DAOs differ mainly in _which addin_ and _which council setup_ they choose – the kernel underneath is identical.

## Who can upgrade the kernel

Every Realms DAO's on-chain execution guarantee rests on one assumption its own governance cannot check: that the program holding its treasury will not be replaced underneath it. SPL Governance is deployed under Solana's upgradeable loader, so someone can replace it. The question has an exact answer, and it is worth reading in full because it is unusually good.

The default program's `ProgramData` account names an upgrade authority of `HF7gCq7BMB6cFfhharTGGm31sqDdpmvLTgF4WEoW8y9n`. That address is **off the ed25519 curve**, so it is a program-derived address and not a wallet – no private key exists for it. Reading the last transaction it authorised settles which program derives it: the upgrade at slot 431,624,473 on **8 July 2026** logs `GOVERNANCE-INSTRUCTION: ExecuteTransaction` from [a second SPL Governance deployment](https://explorer.solana.com/address/GoVERLMGbGF8kwAwhyNgF1BQ2uyQPawHCWbnFRmLZCf) at version 3.1.1, which then invokes the loader. **SPL Governance is upgraded by an SPL Governance proposal.** The kernel governs itself with its own machinery, one deployment removed.

The realm that holds that authority is named _Realms Security council 8_, and its parameters are all on-chain:

- **Seven seats, one vote each.** The council mint has **zero decimals and a total supply of 7**; ten member records exist and seven of them hold a deposit of exactly 1. The community mint attached to the same realm has a supply of **0**.
- **Community voting is switched off.** The governance account's `community_vote_threshold` is `Disabled` and its minimum community weight to open a proposal is `u64::MAX`. Only the council votes.
- **Five of seven carries it.** The `council_vote_threshold` is `YesVotePercentage(60)`, measured against the whole council supply, and the program rounds the requirement up ([`get_min_vote_threshold_weight`](https://github.com/Mythic-Project/solana-program-library/blob/master/governance/program/src/state/proposal.rs)). Sixty per cent of seven is 4.2, so four votes – 57 % – is not enough and five are required. The veto threshold is the same 60 %.
- **72 hours of voting, then a 24-hour cool-off** in which only Deny and Veto votes are accepted, with council vote tipping set to `Early`, so a fifth yes ends the vote the moment it lands.
- **No timelock.** The governance's `transactions_hold_up_time` is **0** – the config imposes no delay of its own between a proposal succeeding and its instruction executing.
- **The council can resize itself.** The same PDA that holds the upgrade authority is also the mint authority of both the council and community mints, so a passed proposal can issue an eighth seat.

Read against the alternatives this is a strong answer: not a founder's keypair, not a company multisig, but a quorum rule enforced by the same program it governs, with every parameter publicly readable. Read strictly it is still a small-committee arrangement with no delay attached: five people can, in principle, replace the program that executes the treasury decisions of every Realms DAO, and there is no window in which those DAOs could react. That is the honest shape of the trust assumption, and it is one almost no Realms DAO states in its own documentation.

## Who maintains it

The other half of the same question is who writes the code that gets deployed, and the answer changed quietly. Solana Labs **archived** the Solana Program Library monorepo – last push 11 March 2025 – and broke its programs out into individually maintained repositories under the [`solana-program` organisation](https://github.com/orgs/solana-program/repositories). Thirty-nine repositories live there today: token, token-2022, stake-pool, the associated-token-account program, memo, and the rest. **Governance is not among them.**

What happened instead is that maintenance moved to a community fork. The archived README now opens with a one-line redirect – ["This repo still exists in archived form, but the maintained version has now relocated to"](https://github.com/solana-labs/solana-program-library/blob/master/governance/README.md) the [Mythic Project's copy](https://github.com/Mythic-Project/solana-program-library/tree/master/governance) – and that fork, together with [the Realms front-end](https://github.com/Mythic-Project/governance-ui) and [the addin library](https://github.com/Mythic-Project/governance-program-library), is where the work now happens. It is live work, not a courtesy fork: the program repository was pushed the day this page was last checked, and the on-chain deployment was upgraded a month before that.

So the governance layer of an entire L1's DAO ecosystem sits outside the official program organisation of that L1, maintained by a separate team, and upgraded by a seven-member council. None of those three facts is a defect on its own. Together they are the thing a DAO choosing Realms should know it is choosing, and the wider pattern is covered on [DAO tooling discontinuity](/wiki/dao-governance/concepts/analysis/dao-tooling-discontinuity).

## Limits and failure modes

- **Council centralisation.** The council mint that makes two-chamber governance possible is also the usual point of centralisation – an early-stage realm is frequently a small multisig council wearing a DAO's clothes until the community token is genuinely distributed. As the section above shows, the program's own governance is exactly this shape.
- **Upgrade authority.** A DAO is only as trustless as its **ProgramGovernance** discipline. If the realm's own program upgrade authority isn't itself governed (or is retained by the team), the on-chain execution guarantees are advisory – and the same question applies one layer down, to the governance program itself.
- **Plugin trust.** A voter-weight addin is unrestricted code that decides who has power. A buggy or malicious registrar config can silently mis-weight votes, and VSR lockups concentrate weight with the earliest, longest-locked holders – the [ve trade-off](/wiki/dao-governance/concepts/voting/vote-escrow) in full.
- **Turnout.** On-chain execution does not fix [voter apathy](/wiki/dao-governance/concepts/analysis/voter-apathy); a realm still has to reach quorum, and many run on a thin active minority.

## How Caper approaches this

SPL Governance’s pluggable weight is its strength and its exposure: VSR turns voting power into freely-tradeable capital plus an optional lockup multiplier, so a large enough bag – or a long enough lock – still buys the most say. [Caper](/wiki/foundations/what-is-a-caper) answers the same question by welding the weight function into the contract instead of exposing it as a plug-in. A caper does tally: a [proposal](/wiki/governance/proposals) carries up to four executable options plus a standing “do nothing”, holders rank all of them on one ballot, and a Borda fold picks a leader that must clear `1.5 / option_count` of the weight cast – and a leading “do nothing” fails the proposal outright. Every ballot carries the same canonical weight `w = (t · v) / (V · T)`, so there is no registrar to reconfigure – not because there is no weight function, but because the one there is cannot be swapped without replacing the logic component. A legislative pass then earns a **trigger**, which opens the market window and locks the trailing TWAP as a baseline; the action executes only if the window’s own TWAP closes at or above that baseline. The tunable SPL Governance hands a DAO – which holdings count, and how much – is the one thing a caper does not expose.

That weight, `compute_vote_weight`, prices two things at once: how far a member’s ballot moves the tally, and their claim on the treasury at `exit`. _t_ is the caper tokens held; _v_ is a soulbound token that accrues at `0.01` per XRD on both legs of every trade and at 1 per ballot cast, and a zero in either input still yields zero, so a holder who has neither traded nor voted has no exit to take. Those _v_ tokens can never move peer-to-peer – deposit is restricted to the caper’s own immortal state component – but they are fully divisible (`DIVISIBILITY_MAXIMUM`), because a per-XRD accrual rate cannot mint whole units. Where a Realms DAO’s members can exit only by selling into a secondary market, `exit()` gives every member who has taken part a pro-rata claim on the treasury at exactly that weight, pre-burn – a built-in [credible exit](/wiki/dao-governance/concepts/voting/vote-escrow) rather than a purely political one.

The upgrade question above has a structural answer too. A caper’s state tier – treasury and proposal record – is deployed once and never migrated, so past decisions do not depend on anyone’s continued authority. The logic tier can be replaced, but only by an [UPGRADE proposal](/wiki/governance/execution) raised on the `$CAPER` caper itself, resolved the same way every other proposal is and routed through the protocol registry: there is no separate council, and no key that shortcuts it. Same job as SPL Governance – own and move a treasury without a signer set – with the price of the thing being governed, rather than a configurable weight function, as the settlement rule. See [Caper proposals](/wiki/governance/proposals).

## References

The upgrade-authority, council and mint figures on this page were read directly from Solana mainnet on 13 August 2026 via `getAccountInfo`, `getProgramAccounts` and `getTransaction` against the public RPC, and decoded against the program's own account layouts.

- [SPL Governance program README](https://github.com/Mythic-Project/solana-program-library/blob/master/governance/README.md) – Mythic-Project/solana-program-library, the maintained line · [the archived solana-labs original](https://github.com/solana-labs/solana-program-library/blob/master/governance/README.md), which carries the relocation notice.
- [the `solana-program` organisation](https://github.com/orgs/solana-program/repositories) – the 39 repositories the SPL monorepo was broken into; governance is not one of them.
- [`governance.rs`](https://github.com/Mythic-Project/solana-program-library/blob/master/governance/program/src/state/governance.rs) and [`proposal.rs`](https://github.com/Mythic-Project/solana-program-library/blob/master/governance/program/src/state/proposal.rs) – the `GovernanceConfig` field order and the threshold-rounding rule used to decode the council's parameters.
- [Realms documentation](https://docs.realms.today/) · [developer resources: spl-governance](https://docs.realms.today/developer-resources/spl-governance) · [governance-ui](https://github.com/Mythic-Project/governance-ui), the open-source Realms front-end.
- [Voter Stake Registry](https://github.com/blockworks-foundation/voter-stake-registry) (Blockworks Foundation) · [governance-program-library](https://github.com/Mythic-Project/governance-program-library) (NFT / quadratic / gateway addins).
