Config Schema
Alpage config is HCL. The blocks below are the complete schema; it is generated from the hcl:"..." struct tags in nns/, so it always matches what the tool parses.
This page documents the schema as of the latest release. The Since column gives the release each block and field first appeared in, so a field newer than your binary is visible as such; see Schema History for the schema as of each release.
resources.hcl
subnet "<name>" { }
v0.1.0 A subnet, referenced from proposals and nodes as subnet.<name>.id.
| Field | Kind | Required | Since | Description |
|---|---|---|---|---|
id |
attr | yes | v0.1.0 | Principal of the subnet. |
label |
attr | no | v0.1.0 | Human-readable name. |
sev_enabled |
attr | no | v0.1.1 | Whether the subnet runs with SEV-SNP enabled, reconciled against the registry's features.sev_enabled. Omitted means false. |
type |
attr | no | v0.2.0 | Subnet type: application, verified_application, system, or cloud_engine. Omitted means application. |
cost_schedule |
attr | no | v0.2.0 | Canister cycles cost schedule: normal or free. Omitted means free for a cloud_engine, which the registry requires, and normal otherwise. |
admins |
attr | no | v0.2.0 | Principals with admin rights on the subnet (subnet_admins). Allowed only on a cloud_engine or a rented subnet (application on the free schedule), at most 10. Declaring none asserts none, so an admin added on-chain is drift. Order is not significant. |
data_center "<name>" { }
v0.1.0 A registry data center, referenced by node_operator as data_center.<name>.id.
| Field | Kind | Required | Since | Description |
|---|---|---|---|---|
id |
attr | yes | v0.1.0 | Registry data center id. |
label |
attr | no | v0.1.0 | Human-readable name. |
region |
attr | no | v0.1.0 | Registry region string (e.g. Europe,CH,Vaud). |
node_provider "<name>" { }
v0.1.0 A node provider, referenced by node_operator as node_provider.<name>.id.
| Field | Kind | Required | Since | Description |
|---|---|---|---|---|
id |
attr | yes | v0.1.0 | Principal of the node provider. |
label |
attr | no | v0.1.0 | Human-readable name. |
node_operator "<name>" { }
v0.1.0 A node operator, referenced by node as node_operator.<name>.id.
| Field | Kind | Required | Since | Description |
|---|---|---|---|---|
id |
attr | yes | v0.1.0 | Principal of the node operator. |
label |
attr | no | v0.1.0 | Human-readable name. |
provider |
attr | no | v0.1.0 | Id of its node provider (node_provider.<name>.id). |
dc |
attr | no | v0.1.0 | Id of its data center (data_center.<name>.id). |
guestos_version "<name>" { }
v0.3.0 A named GuestOS/replica version, referenced by node as guestos_version.<name>.id.
| Field | Kind | Required | Since | Description |
|---|---|---|---|---|
id |
attr | yes | v0.3.0 | GuestOS/replica version hash. Spelled id, not hash, so it resolves through the same <kind>.<name>.id form as every other resource. |
label |
attr | no | v0.3.0 | Human-readable name (e.g. the release name). |
node "<name>" { }
v0.1.0 A node, referenced from proposals as node.<name>.id.
| Field | Kind | Required | Since | Description |
|---|---|---|---|---|
id |
attr | yes | v0.1.0 | Principal of the node. |
label |
attr | no | v0.1.0 | Human-readable name. |
subnet |
attr | no | v0.1.0 | Id of the subnet it belongs to (subnet.<name>.id). Empty means unassigned. |
operator |
attr | no | v0.1.0 | Id of its node operator (node_operator.<name>.id). |
decommissioned |
attr | no | v0.1.1 | Marks a node deregistered on-chain. Its block is kept so historical proposal payloads keep resolving to the ids they were submitted with; reconcile expects it to be absent from the registry. |
guestos_version |
attr | no | v0.2.0 | GuestOS/replica version this node is expected to run. Not a registry fact: the registry stores one version per subnet, so reconcile reads the node's own /api/v2/status impl_version, which needs IPv6. If the node is unreachable it falls back to the public dashboard, marking the row "via dashboard" since that data may lag. Reconcile also checks the declared version against the NNS elected set and marks it "NOT ELECTED" if absent; when that source is unreadable the check is skipped rather than failing. Omitted means unchecked. |
proposals.hcl
provider { }
v0.1.0 Global submission settings; CLI flags override these.
| Field | Kind | Required | Since | Description |
|---|---|---|---|---|
host |
attr | no | v0.1.0 | Governance host URL. Defaults per command; overridden by --host. |
neuron |
attr | no | v0.1.0 | Proposer neuron id. |
fetch_root_key |
attr | no | v0.1.0 | Whether to fetch the IC root key. Unset defaults to true for non-mainnet hosts. |
proposal "<name>" { }
v0.1.0 One NNS proposal. Carries common metadata plus a nested block named after its kind.
| Field | Kind | Required | Since | Description |
|---|---|---|---|---|
kind |
attr | yes | v0.1.0 | Proposal kind; selects the nested block (membership, deploy_guestos). |
title |
attr | yes | v0.1.0 | Proposal title shown on the NNS. |
summary |
attr | no | v0.1.0 | Proposal summary (markdown). |
url |
attr | no | v0.1.0 | Reference URL (e.g. forum thread). |
membership { }
v0.3.0 Nested in a proposal of kind "membership": change_subnet_membership. Holds add/remove node blocks. Renamed from resize in v0.3.0; a config written for v0.2.0 or earlier must rename the block and its kind.
| Field | Kind | Required | Since | Description |
|---|---|---|---|---|
subnet_id |
attr | yes | v0.3.0 | Subnet whose membership changes (subnet.<name>.id). |
add |
block | no | v0.3.0 | A node to add to the subnet; repeatable. See the add / remove block. |
remove |
block | no | v0.3.0 | A node to remove from the subnet; repeatable. See the add / remove block. |
deploy_guestos { }
v0.1.0 Nested in a proposal of kind "deploy_guestos": deploy_guestos_to_all_subnet_nodes.
| Field | Kind | Required | Since | Description |
|---|---|---|---|---|
subnet_id |
attr | yes | v0.1.0 | Subnet whose nodes to upgrade (subnet.<name>.id). |
replica_version_id |
attr | yes | v0.1.0 | Replica version to deploy to every node in the subnet. Must be elected by the NNS: preflight checks the registry for a replica_version_<id> record (read via the registry explorer) and refuses an unelected version, since the NNS would reject the proposal. --force submits anyway, and also lets apply proceed when that lookup fails (downgraded to a warning); plan always degrades that way. Preflight additionally resolves the version's release name and election proposal from the public dashboard, which is display-only and degrades to a note when unavailable. |
add / remove { }
v0.1.0 Inside a membership block: a node to add to or remove from the subnet.
| Field | Kind | Required | Since | Description |
|---|---|---|---|---|
id |
attr | yes | v0.1.0 | Node id (node.<name>.id). |
label |
attr | no | v0.1.0 | Optional human-readable name. |
Schema History
Each release's schema, as generated at that tag: