Raw resources
when no bundled node covers it4,156 typesThe bundled nodes are opinions — a database whose password never enters Terraform state, a bucket that blocks public access, a network that has already made its private-services peering. The Raw resource node is the other trade: exactly the one resource you name, none of those defaults, and the only way to reach the resource types no bundled node covers. It is one node type per cloud rather than a generated node per resource — the resource type is a field, so the palette stays navigable and a graph that uses it is still an ordinary graph.
AWS1,715resource typeshashicorp/aws ~> 6.19
Google Cloud1,337resource typeshashicorp/google ~> 8.1
Azure1,104resource typeshashicorp/azurerm ~> 5.4
The catalogues above are generated from each pinned provider's own schema, so the palette offers exactly what the provider in this build accepts. They list type names only: the arguments are the provider's to validate, at plan time, against its own documentation.
A raw node arrives wired to nothing — all four port kinds in both directions, and no meaning attached to any of them yet. Four fields give it one:
Resource typeThe provider's own name for it — aws_sqs_queue, google_bigquery_dataset, azurerm_signalr_service. Picked from the catalogue, and the only required field.
Arguments · Nested blocksTwo fields rather than one because HCL treats them differently and the provider will not accept either for the other: a security group's ingress is a block, its tags an object-valued argument, and both look like a JSON object here. Blocks go in as [{ "type": "ingress", "attrs": {…} }], repeated for repeated blocks.
Exports · SlotsThe interface every node has, declared by hand instead of built in. An export maps a name others may read to an attribute of this resource (url → url); a slot maps a name an edge may fill to one of its arguments (vpcId → vpc_id). Until you declare them, nothing can connect.
IAM actionsNo template exists for a resource type chosen at drawing time, so an iam edge needs the grant spelled out — a list of actions on AWS, a built-in role name on Azure, and on Google Cloud the additive _iam_member resource that carries the role. Never an authoritative binding.
What you give up is worth stating plainly. No slot is ever required, because nothing here knows which of a given resource's arguments are mandatory — the provider catches a missing one at plan time. The permission preflight and the enabled-API check are keyed on resource type, so they cannot vouch for a raw resource: if the project's credentials cannot create it, the apply is where you find out. And cv in the console opens no page for one, because its type is not known until you pick it. Everything else — the plan diff, approval, the deployment log — is identical.
The full field list and each cloud's edge rules are on the node cards below: Raw resource · AWS, Raw resource · Google Cloud, Raw resource · Azure.