An executor is a piece of Novacula software you install on your own infrastructure. It authenticates to the control plane with an API key, polls outbound for work assigned to it, reconciles desired-state specs into actual blockchain client processes, and reports observed status back. Everything that happens to a node — start, config edit, version upgrade, stop, delete — is mediated by an executor.Documentation Index
Fetch the complete documentation index at: https://docs.novacula.io/llms.txt
Use this file to discover all available pages before exploring further.
Two backends
Both implement the same
ChainAdapter interface, so the same node spec is meaningful under either. See Execution backends for the comparison.
What flows in each direction
Executor identity
Each executor has a server-side row keyed by(organizationId, name). The row carries:
kind—agentoroperator. Set on first sync, immutable after that.capabilities— JSON blob declaring which chains, networks, clients, versions, and node types this executor can run. See Executor capabilities.currentVersion— the executor binary version reported on every sync.channel— which release channel this executor follows (stable,beta, or internaldev). Drives the available upgrades list.updatedAt— refreshed on every sync. Thestatusvirtual field returnsonlineifnow() − updatedAt < HEARTBEAT_TIMEOUT_MS(30s default), otherwiseoffline.
syncExecutor call comes in for an unknown name, the row is created on the spot — that’s how new executors register themselves.
Lifecycle from the UI
| Action | What it does |
|---|---|
| Connect new executor | Issues an API key + shows the install command. See Connect an executor. |
| View executor | Shows status, capabilities, hosted nodes, recent events, last API-key usage. |
| Upgrade executor | Records a pending upgrade spec; the executor picks it up on its next sync. See Upgrade an executor. |
| Deactivate executor | Disables the API key and orphans the row. See Deactivate an executor. |
Compatibility window
The control plane and executor each carry a major version. Compatibility is checked on every sync:- In-window — executor major == CP major. Full functionality.
- Deprecated — executor major == CP major − 1. Sync still succeeds; UI surfaces a deprecation banner. Plan an upgrade before the next CP major release.
- Out-of-support — executor major < CP major − 1.
syncExecutorcontinues to accept heartbeats and serve upgrade specs, butnodesqueries return409 Conflictuntil you upgrade.
compatWindowStatus() in @vos/protocol.
Where to start
- Connect an executor — bring one up from zero.
- Provision on Kubernetes or Provision on bare-metal — backend-specific install detail.
- Executor capabilities — what an executor declares and how the deploy wizard uses it.