Skip to content
LiveStart building for free · CA$100 signup credit, up to CA$300 totalCA$1 verification payment credited back · Ends December 31, 2026
Get started for free →

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

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.

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.

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.

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.