Novacula is built around three pieces: a SaaS control plane, one or more executors running on your infrastructure, and chain adapters that translate user intent into the concrete commands each blockchain client needs.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.
Components
| Component | Where it runs | Responsibility |
|---|---|---|
| Control plane | Novacula cloud | Stores desired-state specs, serves the UI and GraphQL API, holds executor capabilities |
| Executor — Agent | Your bare-metal hosts | Reconciles specs into systemd services |
| Executor — Operator | Your Kubernetes clusters | Reconciles specs into ConfigMap + StatefulSet |
| Chain adapter | Inside each executor | Per-chain logic — config files, CLI args, ports, resource defaults, init steps |
Connectivity
Executors are the only side that initiates connections. They open outbound HTTPS to the control plane on a polling interval, fetch any specs assigned to them, push logs and status, and acknowledge revisions. The control plane never reaches into your infrastructure. You don’t need to expose inbound ports, run any platform-side agents, or open VPN tunnels.Outbound-only is the default and only mode. There is no “control-plane-pushes” alternative.
Desired-state lifecycle
Every node has a spec with a monotonically increasing revision. The flow is:- A user edits a node in the UI — wizard, lifecycle action, upgrade — which writes a new revision to the control plane.
- The next time the target executor polls, it receives the new spec.
- The executor’s chain adapter translates the spec into concrete changes (start/stop a
systemdunit, update aStatefulSet, rewrite a config file). - The executor pushes back the revision it is now serving.
Two backends, one interface
The Agent and the Operator are two implementations of the sameChainAdapter interface. A node spec is meaningful under either — you can run a development node on a bare-metal host with the Agent and the same chain/client/version in production through the Operator on Kubernetes.
The chain adapter is what guarantees that. It owns:
- The canonical set of CLI flags or config-file keys for each client.
- Which keys are user-overridable and which are platform-managed.
- Per-network defaults for resources and ports.
- Init steps (genesis download, JWT generation, archive checkpoint URLs, …).