Skip to content
Open console

Changelog

The single place to follow what’s new across the ZSoftly Cloud Platform. Each section below is its own changelog: platform & services, the Marketplace, the zcp CLI, and the Terraform / OpenTofu provider, newest first.

Subscribe to RSS

CLI v1.1.0: block storage snapshot schedules (October 23, 2026)

Terraform / OpenTofu provider v1.1.0 (October 23, 2026)

ZCP Store (October 11, 2026)

Longer instance passwords (October 11, 2026)

CLI v1.0.1: lifecycle-route and volume fixes (October 11, 2026)

CLI v1.0.0: separate root storage and backup schedules (October 11, 2026)

Terraform / OpenTofu provider v1.0.0 (October 11, 2026)

Compute and storage sold separately (October 11, 2026)

CLI v0.0.31: ACL rule pagination and dependency security updates (October 9, 2026)

CLI v0.0.30: custom VM plans and object storage keys (October 3, 2026)

Terraform / OpenTofu provider v0.2.0 (September 7, 2026)

CLI v0.0.29: complete volume listings (September 7, 2026)

Up to 8 subnets per VPC (September 7, 2026)

CLI v0.0.28: security fixes and working backups (September 7, 2026)

Object storage endpoint DNS resolution from VPCs (September 6, 2026)

Kubernetes 1.37 is available (September 6, 2026)

Postpaid billing is available (September 1, 2026)

Intel compute in Montréal (YUL) (August 16, 2026)

Platform and services updates (August 8, 2026)

CLI v0.0.26: port forwarding and SSH key fixes (July 19, 2026)

CLI v0.0.25: DNS MX record support (July 18, 2026)

CLI v0.0.24: lifecycle and SDK improvements (July 16, 2026)

CLI v0.0.17: full object storage workflows (June 17, 2026)

Marketplace updates (June 17, 2026)

Terraform and OpenTofu provider (June 10, 2026)

Updates to the Public Cloud platform and managed services.

The console has a Store tab where an account buys services, licences and dedicated servers. Store products bill on the same invoice as your instances. They are account level, not tied to a project. Available today: Basic Support (free, included with every account), Pro Support at $99 a month, and ten priced bare metal servers from $231 a month. Products at CAD 100 a month or less can be bought by any account. Products above that can be bought by postpaid accounts and by prepaid accounts whose credit balance covers the order. Accounts on manual invoicing order them through support. Professional services, managed services, backup and DR, security and compliance, networking, training and licensing products are placed through support after a quote. See Store.

Longer instance passwords (October 11, 2026)

Section titled “Longer instance passwords (October 11, 2026) ”

New instances get a random sixteen character provisioning password instead of six. A password reset on an existing instance also returns the longer form. Instances created before this date keep their current password until reset. See Connect With SSH.

Compute and storage sold separately (October 11, 2026)

Section titled “Compute and storage sold separately (October 11, 2026) ”

Every VM plan now covers CPU and memory only. Plan names carry a c before the size, for example ca2c.m (2 vCPU, 4 GB, YUL on b2.g1, $24.80 per month). You choose the root disk on the OS Disk Offering step as a per-GB block storage volume. The minimum is the template size. Grow it at any time. It never shrinks. Rates per GB per month:

  • b1.g1 and b2.g1: $0.14
  • b1.g3: $0.03
  • b2.g2: $0.09
  • b2.l1: $0.10
  • b2.l2: $0.07

The same root size on the default tier costs the same total as before. Review and Deploy now lists compute, network, public IP, and block storage root as separate lines.

Existing servers keep their plan and their price. Resizing an existing server’s plan does not change its root disk. Custom plans, where you pick your own CPU and RAM, are retired, so choose a fixed size. CLI v1.0.0, released the same day, sets the root disk with --blockstorage-plan and --root-disk-size. The Terraform and OpenTofu provider v1.0.0 supports the same named compute and root storage selections. See Instance Types.

Up to 8 subnets per VPC (September 7, 2026)

Section titled “Up to 8 subnets per VPC (September 7, 2026) ”

Each VPC supports up to 8 subnets, up from 3. Existing VPCs get the new limit with no changes on your side. If a workload needs more than 8 subnets in a single VPC, raise a support ticket from the console. We will review the request. See Add Subnet.

Object storage endpoint DNS resolution from VPCs (September 6, 2026)

Section titled “Object storage endpoint DNS resolution from VPCs (September 6, 2026) ”

Fixed DNS configuration for newly created VPCs. Workloads in these VPCs now resolve the object storage endpoint.

Kubernetes 1.37 is available (September 6, 2026)

Section titled “Kubernetes 1.37 is available (September 6, 2026) ”

New managed clusters can run 1.37.0 or the refreshed patch releases 1.36.4 (the default), 1.35.8, and 1.34.11. At release, clusters already running 1.36.1, 1.35.1, or 1.34.3 remained on those versions until an upgrade. Those earlier patch releases are no longer offered for new clusters. Upgrade one minor version at a time, or apply a patch upgrade within the same minor version. Do this from the Cluster Overview page. These versions are available in both regions. See Create Kubernetes Cluster for the full version list and lifecycle information.

Postpaid billing is available (September 1, 2026)

Section titled “Postpaid billing is available (September 1, 2026) ”

Choose Postpaid during signup for eligible hourly and monthly services, then pay invoices with a credit card saved through Stripe. Choose Prepaid or Postpaid during signup. After you create your account, it remains in that billing mode for the life of the account. See Billing.

General-purpose ci2 plans from 1 to 96 GB of RAM, memory-optimized cim2 plans from 8 to 64 GB of RAM, custom Intel configurations, and Intel-backed Kubernetes node capacity. See Instance types.

Outbound SMTP on port 25 is now blocked by default on all compute instances to protect platform-wide sender reputation. Ports 465 and 587 remain open for authenticated email. Verified customers can request access through support. See SMTP Port 25.

Kubernetes 1.36 is now supported for managed clusters.

Windows Server 2025 images are available for compute instances.

Dedicated, single-tenant storage clusters are generally available.

One-click application images for compute instances.

  • 20+ one-click apps available, including cPanel, GitLab, Grafana, WordPress, PostgreSQL, MySQL, MariaDB, MongoDB, Elasticsearch, InfluxDB, Docker, n8n, and more. Browse them in the Marketplace.

The official command-line tool for the platform. The entries below mirror the CLI’s CHANGELOG.md on GitHub.

Snapshot schedules, DNS fixes, and security updates. See the CLI releases on GitHub and the CLI reference.

  • Create and manage block storage snapshot schedules. zcp snapshot schedule creates, lists, shows, updates, pauses, resumes, deletes, and runs schedules on demand. Configure the interval, time zone, retention, and an optional immediate snapshot.
  • Keep schedules within the selected scope. Before creation, the CLI checks the target volume’s region and project. Updates and actions reject schedules outside the selected region and project.
  • Certificate-verification security fix. The CLI release uses Go 1.26.10 to fix a certificate-verification vulnerability.
  • Default DNS record-create output verifies the created value. Without --show-zone, dns record-create returns an error if the API accepts the request but the CLI cannot verify the new value. Inspect the zone with dns show before retrying. --show-zone prints the resulting zone after creation or deletion and skips this check during creation.
  • DNS deletion handles multiple values. Default deletion output is a labelled pre-delete snapshot, not a guarantee of the values removed if the record changes concurrently. The CLI deletes the values from its initial snapshot one by one. If a deletion fails, it stops and reports partial progress. The CLI leaves values added after the read alone. An already absent record is treated as deleted.
  • CAA values must be quoted. Use, for example, --content '0 issue "letsencrypt.org"'.

See the v1.0.1 release on GitHub.

  • Instance cancellation and hostname changes use the current API routes. Changing a hostname restarts the instance.
  • VM snapshot lists retrieve all reported pages. A later pagination failure returns an error instead of a partial list.
  • Named volume plans accept an explicit capacity. Use --plan with --size in zcp volume create. See the CLI reference.

Separate compute and root-storage selections, VM backup schedules, and complete DNS lists. See the v1.0.0 release on GitHub.

  • New instances require named compute and root-storage plans. Pass --plan, --blockstorage-plan, and --root-disk-size. Custom CPU, memory, and disk inputs are retired.
  • New Kubernetes clusters use separate control-plane, worker, and root-storage plans. The root disk size applies to every node. Automatic scale-out remains unverified.
  • VM backup schedules support interval, time zone, retention, pause, resume, and run-now controls. List schedules after an everyOtherDay error because the platform can persist that policy before returning the error.
  • DNS lists retrieve every reported page. A later pagination failure returns an error instead of a partial list.

ACL rule pagination controls and dependency security updates. See the v0.0.31 release on GitHub.

  • List ACL rules across API pages. zcp acl rules <vpc-slug> <acl-name-or-id> now reads every API page by default. Use --max-items, --starting-token, and --page-size to control a paginated listing, or --no-paginate to request one API page. The command returns an error instead of partial rules if a later page fails. See the CLI reference.
  • Go dependency security updates. The language minimum remains Go 1.26.0. The selected toolchain is Go 1.26.9, and the CLI updates golang.org/x/net to v0.60.0.

Custom VM plans, load balancer rule lists, and object-storage access keys. See the v0.0.30 release on GitHub.

  • Create a custom VM without a catalogue plan. Omit --plan, supply a CPU count with --cpu, and supply memory and disk in GB with --memory and --disk.
  • List load balancer rules. zcp loadbalancer list-rule <load-balancer-slug> displays rule IDs for use with VM attachment commands.
  • Rotate object-storage access keys. zcp object-storage keys lists, creates, and revokes S3-compatible access keys. Keep the new secret when you create the key, update your consumers, then revoke the old key. A store supports one or two active keys.
  • Use saved S3 credentials for direct S3 commands. A plaintext secret is visible for five minutes after key creation. Save it, then set ZCP_S3_ACCESS_KEY and ZCP_S3_SECRET_KEY. The CLI checks that the access key is active for the selected store before it connects.
  • Object-storage output follows the current API response. Allocation, usage, and unknown status values now display correctly. Debug output also redacts object-storage secrets.

Complete volume listings and clearer VPC quota errors. See the v0.0.29 release on GitHub.

  • Volume listings now retrieve every page. The CLI and its Go SDK no longer miss volumes beyond the API’s first results page. Pagination anomalies return explicit errors instead of partial or duplicated results.
  • VPC subnet-limit failures explain the next step. When zcp network create --vpc reaches the default limit of eight subnets, it directs you to request a quota increase through support. Run the command again after the increase is applied. See the CLI reference.

Security fixes, working backups, and a public-IP-first instance ssh. This release also ships everything prepared for v0.0.27, which was never published. Upgrading from v0.0.26 picks up both sets of changes. See the v0.0.28 release on GitHub.

  • --debug output no longer leaks your API token. Debug output and error messages now redact the token, the password field, and other credential fields. This includes messages built from responses the CLI cannot parse. We updated golang.org/x/crypto and the Go toolchain to close two SSH denial-of-service advisories. Rotate your token if you shared --debug output before this release.
  • Backups work again. backup list decodes the scheduled hour whether the API sends it as a number or a string. vm-backup delete now works: it submits a cancellation request instead of the DELETE request the API always rejected. --interval accepts only dailyAt or hourlyAt. backup list and vm-backup list show clearer columns.
  • instance ssh prefers the public IP. It connects over the public IP when one is attached and falls back to the private IP otherwise. New --use-public and --use-private flags force the choice.
  • Output fixes: firewall list now shows each rule’s state. dns show prints - instead of a fabricated status. autoscale policy delete and autoscale condition delete print the numeric ID correctly.
  • From v0.0.27: instance create supports the Vpc network type and can attach existing networks with --networks. ip static-nat enable now requires --network. volume attach and volume detach show the API’s status instead of a blank row.
  • Known limitation: object-storage bucket encryption enable is disabled until the region’s gateway supports SSE-S3 default encryption. status and disable still work.

Port forwarding and SSH key fixes.

  • portforward list shows the ports again. The public and private port columns were blank because the response was read from the wrong field names. They display correctly now.
  • portforward create and firewall create stop printing an empty table. Both create the rule asynchronously and return no object, so they now report that the request was accepted and point you to the matching list command.
  • ssh-key delete accepts the key’s ID, name, or slug. It previously took only the slug and rejected the ID that ssh-key list shows. Deleting an unknown key is now a no-op.

MX records now work from the CLI. zcp dns record-create never sent a record’s priority, so every MX create failed with an API error. It now takes a --priority flag (0-65535, required for MX): put the mail server in --content and the preference number in --priority. The CLI sends a 0 preference correctly and rejects --priority on every other type with a clear message. See Manage DNS with the CLI.

zcp dns record-create --domain examplecom --name @ --type MX --content mail.example.com. --priority 10

Deleting a VM now releases its auto-assigned public IP. instance delete uses the same service-cancellation workflow as the console, so the address is no longer left allocated and billable. loadbalancer delete also uses service cancellation, but keeps its separate, reusable public IP by default. Add --release-ip to release the address.

  • instance list and instance get now show the public IP, and get shows the billing cycle.
  • ip list and loadbalancer list return every result instead of stopping at the first page.
  • The CLI and its SDK are now Apache 2.0 licensed, allowing the Terraform / OpenTofu provider to embed the SDK.

--wait now reports the real instance state. The platform’s cached state sometimes lags minutes behind reality, so instance create/start/stop --wait kept waiting on a VM already up. The CLI now polls the live state endpoint, which reconciles with the hypervisor, and returns as soon as the VM is running.

  • Corrected instance delete --delete-public-ip help: the platform does not release the auto-assigned public IP on delete yet (an API-side fix is in progress). The option, prompt, and help now say so plainly. Release the address manually with zcp ip release <ip-slug> after deleting.

DNS records display and delete correctly. The DNS service models records as record sets addressed by name and type. zcp dns show and record-create now display record content (multi-value sets included), and dns record-delete works with --name and --type. Record names are relative: the CLI appends the zone for you.

  • egress create reports honestly when the platform accepts a rule but never lists it, instead of failing with a confusing lookup error.
  • Automated validation now covers the command reference: a script checks all 264 examples against the built CLI, and we rewrote six sections to match the real command trees.
  • L2 instances work, and instance create examples run as pasted, contributed by first-time community contributor @cokerrd: the new --is-public option unblocks --network-type L2, and the required --network-plan and --storage-category options are now in every example.

Profile defaults now apply to create commands. With defaults configured through zcp profile add, create and mutate commands no longer error asking for --region/--project. Set them once. List and get commands already worked this way.

  • First-run guidance: the installers print copy-paste setup for the production defaults (--region yul-1 --project default-9), and the docs use them throughout.
  • We verify every example slug against the live catalog (templates, plans, backup and load balancer plans), so examples run as pasted.

zcp instance delete requests release of the VM’s auto-assigned public IP by default, so no address stays allocated and billed after the VM is gone. Pass --delete-public-ip=false to keep the address. Manually acquired and source-NAT addresses are unaffected. See the v0.0.23 note: the platform-side release is not active yet.

Manage IAM from the CLI: sub-users, roles, and permissions. Everything in the portal’s Profile area is now scriptable. These commands are account-level (no --region/--project). See Roles & Permissions and Users.

  • zcp permission list: browse the permission catalog (filter with --category) to find the slugs you assign to roles.
  • zcp role: list, get <slug> (shows permissions + assigned users), create, update, and delete. --permission is repeatable and replaces the role’s full set; the built-in owner/service-administrator/service-viewer roles are protected from edits.
  • zcp sub-user: list (with --role/--blocked filters), create, update, block, unblock, and delete. Sub-users are referenced by ID or email; new sub-users start blocked until you unblock them.

Load balancers and instance references.

  • zcp loadbalancer create works: it now sends the required first rule (--public-port/--private-port/--algorithm) and can attach back-ends with --vm.
  • Reference an instance by ID, name, or slug in every instance subcommand, with a clear error when a name is ambiguous; instance list now shows the ID column and returns all VMs (the list is paginated).
  • reboot refuses a non-Running VM instead of silently no-op’ing, and -o json/-o yaml emit full objects.

Region and project are now required for region- and project-scoped commands. This makes results predictable and matches how the platform scopes resources. See Configuration for how to provide them.

  • Set them once: zcp profile add now prompts for a default region (required) and project, like aws configure. After that, most commands need no --region/--project. You can still override per command or with the ZCP_REGION/ZCP_PROJECT environment variables.
  • Lists are scoped to your region and project: every resource and catalog list now filters its output, so plan, template list, iso list, marketplace list, and storage-category list no longer mix entries from other regions. Account-level commands (dns, auth, profile, region, project, and the other discovery commands) are exempt.

SSH keys.

  • ssh-key import fixed: it now sends the required project and region, resolving a 500 error on import, and validates the key name client-side (20 characters max).
  • instance create --ssh-key <name> now engages SSH-key authentication correctly. Import the key first with ssh-key import. Key names and public-key material must be unique.

Clearer errors.

  • API validation errors now surface the field-level detail (for example, public_key: The public key has already been taken.) instead of a generic message.

Object storage: the full S3 feature set in the CLI. Many of these are available only through the CLI (or an S3 SDK) today, not yet in the Web UI. See the Object Storage CLI guide for the full reference and a UI-vs-CLI availability matrix.

  • Object versioning workflows: list versions and delete markers, download or delete a specific version, and restore (undelete).
  • Download objects to a local file (object download).
  • Bucket policies: read, set (from a JSON file), or delete a bucket’s raw S3 policy.
  • Tagging on buckets and objects, default encryption (SSE-S3), lifecycle rules (expire current/old versions and incomplete uploads), and CORS rules.
  • Presigned URLs: time-limited download and upload links that need no credentials, even on a private bucket.
  • Server-side copy / move, object stat (full metadata), and put --metadata.
  • Make buckets public/private, empty a bucket, and clean up incomplete uploads.
  • Simpler create: zcp plan object-storage lists plans, and create --plan derives the storage category for you.

CLI usability.

  • Clear argument errors: every command names what’s missing, the usage, and an example.
  • Unknown subcommands now error (non-zero exit) instead of silently printing help.
  • Cloud provider auto-detected: saved to your profile on zcp auth validate, so you no longer pass --cloud-provider.
  • -o yaml is now supported for policy, lifecycle, and CORS output.
  • VPC subnets (tiers): create a network as a VPC subnet with network create --vpc, and attach a custom network ACL at creation with --acl.
  • Network ACL rules: full rule management: acl rules, acl create-rule, acl update-rule (in place), acl delete-rule, plus acl delete for ACL lists. --cidr accepts comma-separated lists.
  • network get: show a network’s CIDR, state, VPC membership, and attached ACL.
  • plan network: list network plans (the slugs for --network-plan).
  • Fixes: VPC get/create now show CIDR/status, plan tables include a SLUG column, and vpc delete polls for completion instead of a false-negative warning. Clearer “already deleted” handling.
  • VPN: new IKE/ESP Diffie-Hellman and Perfect-Forward-Secrecy flags (--ike-dh, --esp-dh, --esp-pfs) on customer-gateway create/update. The full VPN configuration is now returned reliably after create/update.
  • ip allocate --project: assign an IP to a specific project at allocation time.
  • Fixes: VPN gateway/customer-gateway and VPC/network update commands no longer return blank fields. Clearing a --description now works.
  • Infrastructure as code: the CLI’s API packages are now importable by external Go modules, enabling the Terraform / OpenTofu provider. CLI behaviour is unchanged.
  • kubernetes upgrade-version: upgrade a running cluster’s Kubernetes version (--version v1.x.y). The correct version for the cluster’s region is resolved automatically.
  • instance create --user-data / --user-data-file: pass a cloud-init / startup script inline or from a file at VM creation.
  • Fixes: instance Private IP now displays correctly, instance get retries the brief window right after creation, and instance create --blockstorage-plan is now optional (auto-assigned).
  • Object storage introduced: manage S3-compatible storage instances (list, get, create, delete, resize), buckets (list, get, create, delete), and objects (list, get, upload, delete), plus credentials to view S3 access keys.
  • Delete commands added across instances, networks, volumes, snapshots, backups, VPCs, and VM backups (instance delete --force for immediate expunge).
  • Kubernetes: scale worker nodes (with --wait) and get-config (download kubeconfig).
  • Load balancer: delete-rule and detach-vm.
  • Environment-variable overrides: ZCP_PROJECT, ZCP_REGION, ZCP_CLOUD_PROVIDER, ZCP_OUTPUT, ZCP_DEBUG reduce repetitive flags in scripts and CI/CD.
  • Zero-config mode: run with only ZCP_BEARER_TOKEN and ZCP_API_URL, with no config file. ZCP_PROFILE selects the active profile.
  • VPC tier/subnet creation confirmed end to end, with --cloud-provider, --region, and --project flags added to network, VPC, virtual-router, DNS, VPN, and autoscale create commands.
  • A published feature roadmap documenting what works, what’s coming, and what’s blocked.
  • New commands: region list, profile-info (user profile management), vm-backup, and discovery commands: cloud-provider list, server list, currency list, billing-cycle list, storage-category list.
  • Cleanup: removed legacy commands that targeted retired endpoints.

Rebuilt on the current ZSoftly Cloud Platform API with Bearer-token authentication and a consistent response format. A large set of command groups arrived:

  • DNS, projects, monitoring, billing, support, autoscale, dashboard, plans, store, marketplace, product, ISO, affinity groups, and backups.
  • VM operations: reboot, reset, tags, change-hostname/password/plan/OS, add-network, addons.
  • Global --auto-approve / -y to skip confirmation prompts in automation.
  • Reliability fixes: delete commands now verify the resource is gone, volume list deduplicates entries, and messages are clearer for snapshots on detached volumes and for empty accounts.
  • VPC tier networks: vpc create-network and vpc update-network.
  • Added host list, resource quota, VPC-tier flags on network create, and a full integration test suite.
  • Default zone per profile: set it once and stop typing --zone on every command. An explicit flag still overrides.
  • Initial release of the zcp CLI: 28 top-level commands across compute, storage, networking, security, Kubernetes, and billing.
  • Named profiles with secure (0600) credential storage, a --wait flag for async operations, instance ssh, shell completions (bash/zsh/fish/PowerShell), a --pager option, and multi-platform binaries (Linux/macOS/Windows, amd64/arm64) with one-line installers.

Manage ZCP infrastructure as code with the official provider, published as zsoftly/zcp on the OpenTofu registry and the Terraform Registry. Source code lives at github.com/zsoftly/terraform-provider-zcp.

Current provider release. Use zcp_volume_snapshot_schedule to manage recurring block storage snapshots as code. See the provider releases on GitHub.

  • Set the schedule, retention, scope, and paused state in configuration. The resource supports hourly, daily, weekly, and monthly schedules, an optional immediate snapshot, and import.
  • Import schedules without an unnecessary replacement. The first apply records the configured immediate value. Changing name, description, or a recorded immediate value replaces the schedule. Remove retained snapshots before deleting or replacing a schedule.

See the v1.0.0 release and the upgrade guide.

  • New instances require plan, blockstorage_plan, and root_disk_size. The provider rejects new custom CPU, memory, and disk configurations. Existing custom-plan state remains readable and destroyable.
  • New Kubernetes clusters use separate fixed plans for control-plane nodes, workers, and root storage. Changing to that shape replaces a cluster. The provider records requested autoscaling bounds but does not confirm immediate scale-out.
  • zcp_vm_backup_schedule manages recurring policies. It supports interval, time zone, retention, paused state, import, and policy scope. The provider rejects everyOtherDay before the platform can persist it and return an error.
  • DNS lookups paginate by slug, named volumes accept a plan and capacity, and instance name updates use hostname changes. A hostname update can restart a running instance or start a stopped instance.

Custom VM plans, object-storage keys, and load-balancer state fixes. See the v0.3.0 release and tagged changelog for the complete change list.

  • Create custom-plan instances. zcp_instance accepts cpu, memory_gb, and disk_gb together when you omit plan. A fixed catalogue plan still uses plan.
  • Manage object-storage keys as resources. zcp_object_storage_key creates, imports, and revokes S3 access keys. Its api_secret is sensitive and remains in Terraform state after the API stops disclosing the plaintext secret. Revoked keys are removed from state. Protect state access accordingly.
  • Configure S3 bucket settings with explicit credentials. Bucket configuration resources use ZCP_S3_ACCESS_KEY and ZCP_S3_SECRET_KEY from the provider process.
  • Read all ACL rules. The provider now uses CLI SDK v0.0.31, which reads every ACL-rule page and reports a later-page failure instead of treating missing results as absent.
  • Look up load balancers and refresh rule IDs. data.zcp_load_balancer exposes rule IDs for attachments. Load-balancer resources refresh through the detail endpoint and clear an initial rule ID when the API no longer returns that rule. Destroy also accepts a load balancer or attachment that the API confirms is already absent.
  • Read current object-storage allocation. Object-storage reads support the API’s current storage-size response shape.
  • Apply dependency security updates. The provider selects Go 1.26.9 and uses golang.org/x/net v0.60.0.

Upgrade the provider constraint, then run terraform init -upgrade or tofu init -upgrade:

terraform {
required_providers {
zcp = {
source = "zsoftly/zcp"
version = "~> 0.3.0"
}
}
}

Object storage configuration, richer instance networking, and volume lookups. See the v0.2.0 release and tagged changelog for the complete change list.

  • Manage object storage bucket settings as code. New zcp_object_storage_bucket_versioning, zcp_object_storage_bucket_policy, zcp_object_storage_bucket_tagging, zcp_object_storage_bucket_lifecycle, and zcp_object_storage_bucket_cors resources manage the respective S3-compatible gateway settings. The provider obtains gateway credentials internally and does not expose them as resource attributes.
  • Attach instances to VPCs and multiple networks. zcp_instance now supports the Vpc network type and multiple networks, matching the instance-create capabilities in CLI v0.0.27.
  • Look up volumes and attached disks. The new zcp_volume data source looks up an existing volume. data.zcp_instance now exposes root_volume and volumes.
  • Read volume backups again. zcp_volume_backup now decodes the platform backup-list shape correctly.
  • Destroy VM backup schedules. zcp_vm_backup destroys schedules through the billing cancellation workflow instead of a rejected direct delete.
  • Validate backup intervals before apply. zcp_vm_backup and zcp_volume_backup accept only dailyAt or hourlyAt for interval, matching the platform.
  • Fail fast for identifiable VPC public IPs. When zcp_firewall_rule identifies a VPC public IP, it fails immediately instead of polling for a rule the platform will not apply.
  • Fix VPC public-IP ordering guidance. zcp_ip_address explains that a VPC network tier must exist first and indicates when to add depends_on.
  • Complete volume listings. The provider now uses the zcp CLI SDK v0.0.29, which retrieves every page in a volume list.

Upgrade your provider constraint, then initialize again:

terraform {
required_providers {
zcp = {
source = "zsoftly/zcp"
version = "~> 0.2.0"
}
}
}

Run terraform init -upgrade for Terraform or tofu init -upgrade for OpenTofu. If OpenTofu reports no matching version, wait until its registry lists v0.2.0, then retry.

Port forwarding and firewall rules now record their real ID. zcp_port_forward and zcp_firewall_rule stored an empty ID because the create endpoint returns no rule object, so Terraform recreated them on every apply. Both now look up the rule after create, match it on protocol and ports, and record the real ID, so plans stay stable.

  • Upgraded the zcp CLI SDK to v0.0.26, which corrects how port-forwarding rule ports decode.
  • Security: upgraded golang.org/x/text to fix GO-2026-5970, an infinite loop reachable through the load balancer resource.

MX records in zcp_dns_record. A new priority argument (0-65535) sets the preference number. Put the mail server in content. The provider requires priority for MX and rejects it for every other type during planning, so invalid configurations fail before apply. Built on the zcp CLI SDK v0.0.25 and verified against the live DNS API.

  • Dropped SRV from the documented type values. The DNS API rejects SRV and LOC records, so advertising SRV was misleading. type stays a free-form string.

Destroy operations release auto-assigned public IPs. zcp_instance and zcp_load_balancer release auto-assigned public IPs through the service-cancellation workflow, preventing billable addresses from remaining after destroy. Set assign_public_ip = false to create an instance without one. This release also upgrades the zcp CLI SDK to v0.0.24, which pages through every result in public IP and load balancer listings.

First public release, live on both registries. 38 resources and 12 data sources cover everything the zcp CLI supports: instances, volumes, snapshots and backups, VPCs and networks, firewall and egress rules, load balancers, auto-scaling, Kubernetes clusters, DNS, object storage, VPN, and account governance. Every resource supports terraform import, and we sign every release.

terraform {
required_providers {
zcp = {
source = "zsoftly/zcp"
version = "~> 0.1"
}
}
}

Set ZCP_BEARER_TOKEN in your environment, then run terraform init or tofu init. Generate the token in the console under Account → API Keys.

Ask the ZCP docs

Type a question and pick an assistant. The assistant opens in a new tab and reads this page and the full ZCP documentation, so its answer comes from our docs.

Example questions

Ask with

Your question goes to the assistant you pick, under its own terms.