Changes for version 0.101 - 2026-09-22

  • New: WWW::Hetzner::Storage, a third API host (api.hetzner.com) for Storage Boxes
    • $storage->storage_boxes, ->storage_box_types and ->actions; Storage Box objects expose per-box ->subaccounts, ->snapshots and ->actions
    • CLI: hcloud.pl storage-box, 33 subcommands (create/update/delete, access settings, protection, snapshot plan, snapshots, subaccounts)
  • New: list_all collects all remaining pages on paginated controllers (WWW::Hetzner::Role::Pagination); list keeps its single-page contract. CLI lists and local name lookups use complete results; pagination failures are reported explicitly
  • New read-only Cloud resources: ISOs, Load Balancer Types and Pricing
    • $cloud->isos (list/get/get_by_name), ->load_balancer_types, and ->pricing (a singleton, so get only)
    • New entities WWW::Hetzner::Cloud::ISO, ::LoadBalancerType, ::Pricing
    • CLI: hcloud.pl iso, load-balancer-type and pricing
  • New Robot resources: boot, rdns and failover
    • $robot->boot (rescue system, Linux install, VNC, Windows), with enable_*/disable_* methods; returns raw hashrefs, no entity
    • $robot->rdns and $robot->failover, listable per-IP resources with entities WWW::Hetzner::Robot::RDNS and ::Failover
    • CLI: hrobot.pl boot (rescue/linux/vnc/windows), rdns, failover
  • BREAKING: mutating Cloud methods now return a WWW::Hetzner::Action object instead of a raw decoded-JSON action hashref (66 methods across the API controllers and their entity mirrors)
    • Action has status predicates (is_running/is_success/is_error), error_message, refresh and a blocking wait(interval => 1, timeout => 120)
    • $cloud->actions looks up any action by id, independent of the resource that created it
    • Created entities carry the creating action as ->action plus any ->next_actions (WWW::Hetzner::Role::HasAction); Firewall create returns plural ->actions
    • Server enable_rescue/rebuild/reset_password/request_console preserve their sidecar data (root_password, password, wss_url) on the Action via ->result and typed readers
    • Action and its roles live directly under WWW::Hetzner, so the other Hetzner APIs can reuse them
    • CLI: mutating hcloud.pl commands wait for a terminal action state by default; --no-wait opts out (new injectable Role::HTTP sleeper)
  • BREAKING: server, zone and rrset delete now return an Action; the other ten DELETE endpoints answer 204 and are unchanged
    • CLI: hcloud.pl server/zone/record delete wait for the deletion action by default; --no-wait opts out
  • Fix: Robot request bodies use application/x-www-form-urlencoded, incl. repeated array fields; Cloud and Storage keep JSON encoding
  • Fix: URI-encode query names and values (incl. Unicode); arrayrefs become repeated query parameters
  • Fix: CLI table output reads entity accessors, restoring server type, datacenter and location values; firewall add-rule preserves existing rules
  • Fix: --output json no longer dies on the server, image, datacenter, sshkey, location, servertype, zone and record list commands
  • Tests: exercise every Cloud and Robot CLI command through execute with MockIO, including action waits and non-action deletes

Documentation

Hetzner Cloud CLI (Perl implementation)
Hetzner Robot CLI (Perl implementation)

Modules

Perl client for Hetzner APIs (Cloud, Storage, Robot)
Hetzner API action object
Hetzner Cloud CLI
Hetzner Cloud Certificate commands
Hetzner Cloud Firewall commands
Apply a firewall to a server
Remove a firewall from a server
Hetzner Cloud Floating IP commands
Assign a floating IP to a server
Unassign a floating IP from its server
Hetzner Cloud Load Balancer commands
Load balancer type commands
Hetzner Cloud Network commands
Hetzner Cloud Placement Group commands
Hetzner Cloud Primary IP commands
Assign a primary IP to a server
Unassign a primary IP from its server
DNS Record commands
Rebuild a server with a new image
Enable or disable rescue mode
Shutdown a server (graceful)
Server type commands
Storage Box commands
Disable Storage Box delete protection
Enable Storage Box delete protection
Remove a label from a Storage Box
Roll a Storage Box back to a snapshot
Remove a label from a Storage Box snapshot
Storage Box subaccount commands
Attach a volume to a server
Detach a volume from a server
DNS Zone commands
CLI role that waits for a returned Action by default
Perl client for Hetzner Cloud API
Hetzner Cloud Actions API
Hetzner Cloud Certificates API
Hetzner Cloud Datacenters API
Hetzner Cloud Firewalls API
Hetzner Cloud Floating IPs API
Hetzner Cloud ISOs API
Hetzner Cloud Images API
Hetzner Cloud Load Balancer Types API
Hetzner Cloud Load Balancers API
Hetzner Cloud Locations API
Hetzner Cloud Networks API
Hetzner Cloud Placement Groups API
Hetzner Cloud Pricing API
Hetzner Cloud Primary IPs API
Hetzner Cloud DNS RRSets (Records) API
Hetzner Cloud SSH Keys API
Hetzner Cloud Server Types API
Hetzner Cloud Servers API
Hetzner Cloud Volumes API
Hetzner Cloud DNS Zones API
Hetzner Cloud Certificate object
Hetzner Cloud Datacenter object
Hetzner Cloud Firewall object
Hetzner Cloud Floating IP object
Hetzner Cloud ISO object
Hetzner Cloud Image object
Hetzner Cloud Load Balancer object
Hetzner Cloud LoadBalancerType object
Hetzner Cloud Location object
Hetzner Cloud Network object
Hetzner Cloud Placement Group object
Hetzner Cloud Pricing object
Hetzner Cloud Primary IP object
Hetzner Cloud DNS RRSet object
Hetzner Cloud SSHKey object
Hetzner Cloud Server object
Hetzner Cloud ServerType object
Hetzner Cloud Volume object
Hetzner Cloud DNS Zone object
HTTP request object for Hetzner API
HTTP response object for Hetzner API
Synchronous HTTP backend using LWP::UserAgent
Perl client for Hetzner Robot API (Dedicated Servers)
Hetzner Robot Boot Configuration API
Hetzner Robot Failover IP API
Hetzner Robot IPs API
Hetzner Robot SSH Keys API
Hetzner Robot Reverse DNS API
Hetzner Robot Server Reset API
Hetzner Robot Servers API
Hetzner Robot Traffic API
Hetzner Robot CLI
Robot boot configuration commands
Linux installation boot configuration
Rescue system boot configuration
VNC installation boot configuration
Windows installation boot configuration
Robot failover IP commands
Robot SSH key commands
Robot reverse DNS commands
Reset a dedicated server
Query traffic statistics
Send Wake-on-LAN to a server
Hetzner Robot failover IP entity
Hetzner Robot IP entity
Hetzner Robot SSH Key entity
Hetzner Robot reverse DNS entry entity
Hetzner Robot Server entity
HTTP client role for Hetzner API clients
Entity role exposing a creation action
Controller role wrapping raw hashes as Action objects
Interface role for pluggable HTTP backends
Controller helper for collecting paginated API lists
Perl client for Hetzner Storage Box API
Hetzner Storage Box Actions API
Hetzner Storage Box Snapshots API
Hetzner Storage Box Types API
Hetzner Storage Boxes API
Hetzner Storage Box Subaccounts API
Hetzner Storage Box Snapshot object
Hetzner Storage Box object
Hetzner Storage Box Type object
Hetzner Storage Box Subaccount object