No. Infrastructure-as-code tools like Terraform and Pulumi provision infrastructure: VMs, networks, DNS. wxctl manages IBM product resources (AI agents, governance policies, data catalogs, object storage) that span services with incompatible identifier schemes. The two are complementary: IaC stands up the platform, wxctl declares the product resources on it. See How wxctl compares.
On macOS or Linux, run the install script, which downloads the release binary for your platform, verifies its SHA-256 checksum, and installs it to ~/.local/bin:
curl -fsSL https://raw.githubusercontent.com/randyphoa/wxctl/main/install.sh | sh
On Windows, run irm https://raw.githubusercontent.com/randyphoa/wxctl/main/install.ps1 | iex in PowerShell. As an alternative on any platform, install with npm, which skips the macOS Gatekeeper and Windows SmartScreen prompts:
npm install -g wxctl
To build from source instead, use Rust 1.88 or newer (cargo build --release). Upgrade with wxctl update, or npm update -g wxctl for npm installs. Package-manager channels (Homebrew, cargo install) are on the roadmap. See Installation.
SaaS services authenticate with an IBM Cloud API key (auth_type: apikey). Software services (Cloud Pak for Data / Software Hub) use cp4d (username + password) or zenapikey (username + API key). apikey is rejected on Software and zenapikey on SaaS. Object-storage services use hmac. See Profiles & credentials.
Because it makes the same config portable. You reference resources by ${kind.ref_name} instead of a literal ID. wxctl resolves each reference into whatever the consuming API expects (UUID, GUID, href, CRN, or a nested object) at execution time. With no embedded IDs, the same YAML runs unchanged across dev, staging, and prod. See Declarative model.
No. wxctl reconciles your config against live API state on every run, so there is no local state file to store, share, or drift. This is what makes re-applying an unchanged config a no-op. See Pipeline.
Re-run wxctl init -p <name> --force to re-scaffold a named profile to placeholders (other profiles and preferences are preserved), or delete ~/.wxctl/profiles.yaml to start fresh. The active profile is resolved as -p flag, then WXCTL_PROFILE, then ~/.wxctl/active_profile, then default. See Profiles & credentials.

Next steps

How wxctl compares

wxctl next to Terraform, Pulumi, and Ansible.

Quickstart

Declare resources and run your first plan.