Skip to content

Client and server compatibility

Hubuum CLI, hubuum_client, and the Hubuum server are versioned independently. Each CLI release pins a hubuum_client version; that client library declares and reproducibly tests its Hubuum server target. CLI v0.0.13 uses hubuum_client 0.13.0, which targets Hubuum server v0.0.17. The CLI inherits this compatibility target from its client dependency and runs its own integration checks against the same pinned server. Command availability against other server versions is not guaranteed.

Compatibility matrix

CLI version hubuum_client dependency Client's Hubuum server target Status
0.0.13 0.13.0 0.0.17 Current CLI release; chat webhook presets, notification policies, backup output 7 and restore input 6/7
0.0.12 0.12.0 0.0.16 Previous CLI release; structured search, credential approvals, task discovery, and backup format 6
0.0.11 0.10.1 0.0.14 Previous CLI release; backup format 5, queued restores, and restorable follow-up backups
0.0.10 0.9.1 0.0.9 Previous CLI release
0.0.9 0.9.0 0.0.9 Previous CLI release
0.0.8 0.8.0 0.0.8 Previous CLI release
0.0.5 0.7.2 0.0.5 Previous CLI release
0.0.4 0.7.1 0.0.4 Previous CLI release
0.0.3 0.6.1 0.0.3 Previous CLI release
0.0.2 0.5.1 0.0.2 Previous CLI release
0.0.1 0.4.0 main@eed194f2339ce221ef251a14062e2a37850186b1 Historical pre-release snapshot; no stable server target was declared

CLI v0.0.10 uses hubuum_client v0.9.1, tested against the immutable Hubuum server v0.0.9 image ghcr.io/hubuum/hubuum-server@sha256:1f12baf882b6d3df5b4b2dbdf26aad0793274e57f86a2c186b8e1e68632db5db. CLI v0.0.9 uses hubuum_client v0.9.0, tested against the same immutable Hubuum server v0.0.9 image ghcr.io/hubuum/hubuum-server@sha256:1f12baf882b6d3df5b4b2dbdf26aad0793274e57f86a2c186b8e1e68632db5db. CLI v0.0.8 uses hubuum_client v0.8.0, tested against the immutable Hubuum server v0.0.8 image ghcr.io/hubuum/hubuum-server@sha256:850bfd95a2802485f93c1700fbff5a33465cbc7855cbc94962982c1074fd96f6. CLI v0.0.5 uses hubuum_client v0.7.2, tested against the immutable Hubuum server v0.0.5 image ghcr.io/hubuum/hubuum-server@sha256:6f3e0f0debd418acd5cbc2b1399db9859a85ca1fa397525a5ef0e2f493a77c9b. CLI v0.0.4 uses hubuum_client v0.7.1, tested against the immutable Hubuum server v0.0.4 image ghcr.io/hubuum/hubuum-server@sha256:60142d605f423b1dc58d9dfe709164b0d5ec93befd2d702f9bdca7ee0654a583. CLI v0.0.3 uses hubuum_client v0.6.1, tested against the immutable server image ghcr.io/hubuum/hubuum-server@sha256:f1f57a991f69005ee81f24e77533e61f75b5586949d98cccf1c40fc4329eb186. CLI v0.0.2 uses hubuum_client v0.5.1, tested against the immutable server image ghcr.io/hubuum/hubuum-server@sha256:8f543383b422124546c8d337fd557e1b182b1b6c7078d7870d3c5cd4f955ef1f. The v0.0.1 row records the reproducible server snapshot inherited from hubuum_client v0.4.0; that client did not declare a stable server target.

Forward-compatibility checks against the server's main branch are useful early warnings, but they do not change the server target of a published client version.

CLI v0.0.13: client v0.13.0

CLI v0.0.13 pins hubuum_client 0.13.0, which targets Hubuum server v0.0.17. Cargo.toml records that client's server version and the immutable multi-platform image used for CLI integration checks: ghcr.io/hubuum/hubuum-server@sha256:cc0518167816bfddb38853b8b7217c4a347511318d51e1abca93ca418f31b302. The server tag is v0.0.17, source commit 4a03d56b27f35af62175a80d09d36d0d41c4a663. The client's reviewed OpenAPI contract grows from 220 operations and 330 schemas to 227 operations and 336 schemas. The client release evidence records all 87 reconciled wire-model mappings and its own pinned integration, feature, Rust 1.88, contract, and semver checks.

The CLI continues to enable only the client's blocking feature. The client's MSRV is still Rust 1.88; no CLI MSRV is declared or implied by that requirement. This release is verified with Rust 1.99.0. Existing workspace public interfaces are unchanged; the JSONC parser update explicitly retains the existing syntax. The new hubuum-update crate adds a small typed update interface backed by self_update 1.3 (upstream MSRV 1.88), with GitHub, Rustls, tar/ZIP, and checksum features. It updates official CLI binaries independently of the server. See self-update behavior and supported platforms.

Chat webhook presets generate ordinary webhook configuration for Slack, Mattermost, and Discord. Sink create/update exposes delivery policies; subscription filter JSON accepts task kinds. Delivery health retains nullable collection IDs for system subscriptions, and delivery records retain purpose and deferral metadata. System-subscription CRUD and notification preview/test have no dedicated CLI commands; use the server API. These limits mean that the CLI does not expose every operation in the upstream OpenAPI contract.

Breaking backup output: new backups use format 7, which older servers cannot restore. Staging accepts formats 6 and 7; keep existing format 6 files intact. Restores reset transient sink scheduling while preserving notification configuration and terminal delivery history. See backup migration.

Breaking server upgrade: stop all API, worker, and restore-executor writers, take a PostgreSQL snapshot, then apply migrations and start matching v0.0.17 binaries. Binary-only rollback is unsupported. Recovery requires that snapshot and matching v0.0.16 binaries, losing subsequent writes. Optional Treetop installations must upgrade to protocol 0.1 and migrate their policy bundles. See the server release notes.

The reproducible CLI check is cargo build --locked && python3 scripts/test-backup-restore.py. It passed on 2026-10-05 with Rust 1.99.0 on Linux x86_64 against the pinned server above and PostgreSQL 18 image docker.io/library/postgres:18@sha256:5a5a84b19854a9ffaa54082c166ff4ec27473a361e496e5ea167f298f2da9722. The run used isolated Podman storage under /tmp and a RAM-backed disposable database because the host's /var filesystem was full. This verifies Linux amd64 from the multi-platform index, not every architecture.

All three webhook presets were created through the CLI and rendered by the real server preview endpoint, including [TEST] messages, Discord length bounds and disabled mentions, and pacing updates/clearing. The test does not resolve real provider secrets or send messages to hosted Slack, Mattermost, or Discord. Object/relation reads, structured search and JSONL streams, credential approval rejection and success paths, task discovery, and schema evolution passed. All three format 7 restore cycles completed with approval, token invalidation, password reset, and preservation of revisions, timestamps, JSON nulls, and previous deletions. Follow-up staging after a history-free restore also passed. Local regression tests cover format 6 and 7 decoding and rejection of unsupported versions before row decoding.

CLI v0.0.12: client v0.12.0

CLI v0.0.12 pins hubuum_client 0.12.0, which targets Hubuum server v0.0.16. Its integration checks use the immutable multi-platform server image ghcr.io/hubuum/hubuum-server@sha256:37b3299edd845a0c2aa7772d7d68565233ac8c1802bc44be3fb4bbc6dfa8778e. The client's pinned OpenAPI contract has 220 operations and 330 schemas, up from 204 operations at CLI v0.0.11. New client features include fresh credential approvals and typed task discovery. The CLI also exposes structured resource search through the client's raw request API, with validation owned by the new hubuum-search workspace crate. Client features remain blocking-only; its MSRV remains 1.88. No CLI MSRV is declared. Local verification uses Rust 1.98.0.

This upgrade includes the schema-command and backup-format changes introduced by server v0.0.15, plus v0.0.16's credential approval requirement. Follow schema evolution, backup migration, and credential approvals. All schema writes move to class schema; the old class create/modify policy flags are removed. Backup format remains 6 when upgrading from server v0.0.15. Older format 6 artifacts without task discovery metadata remain accepted.

Drain workers, quiesce credential changes, and run hubuum-admin --migrate before starting upgraded API, administrator, template-worker, and restore-executor processes together. Server v0.0.16 adds task-discovery and credential-approval migrations. Keep a verified backup from the previous server version.

The reproducible check is cargo build --locked && python3 scripts/test-backup-restore.py. Executed successfully on 2026-09-22 with Rust 1.98.0 on Linux x86_64 against the pinned image above. It verified structured query files and equivalent terminal predicates, JSONL search events, bearer-only credential rejection, approved local user creation/password changes, user token creation/renewal, service-account token creation, credential-import dry runs, and retained backup task discovery. Schema checks covered incompatible/compatible impact, retained HTML reports, strict activation, compliance, revalidation, and idempotent cancellation through both routes. All three format 6 restore cycles passed with fresh approval, invalidated old tokens, and recovered revision/timestamp/JSON-null state. Follow-up staging and the second-generation restore preserved earlier deletions. This run verifies the Linux amd64 image from the pinned multi-platform index.

Mock-transport tests additionally cover bound approval payloads, the original bearer, server-normalized token expiry, ambiguous-send evidence without replay, structured cursor preservation and loop rejection, and typed task filters across pages. Subprocess tests require text and JSONL batches to reach stdout before the server sends done, and verify truncated-stream failure and atomic redirects. These checks do not imply that every OpenAPI operation has a CLI command or that other server versions are supported.

The read-path cleanup later included in v0.0.13 was initially checked on 2026-10-03 against the same pinned server and PostgreSQL images with scripts/test-backup-restore.py. It verified object detail text, full JSON (--json), and pipeline projections; object lists; class details; and object/class relation reads, including related classes in different collections. The run used isolated Podman storage under /tmp and a RAM-backed disposable database because the host's /var filesystem was full. That earlier check did not change the client dependency, its server target, or API surface.

CLI v0.0.11: client v0.10.1

CLI v0.0.11 pins hubuum_client 0.10.1, which targets Hubuum server v0.0.14. Its integration checks pin the immutable server image ghcr.io/hubuum/hubuum-server@sha256:6c1c8d7316a1f60a02e4505611a44e21030ba678b5b451f5b293a12f2bd87594 in Cargo.toml. The client pins the server's 204-operation OpenAPI contract; the previous v0.0.9 target had 202 operations. The added structured-search POST routes have no dedicated CLI commands in this update. Administrative config output includes the newly modeled storage, database-role, secret-source, token-hash, tracing, query-budget, and traversal settings. The OpenAPI contract is unchanged from v0.0.13 apart from the server version. Client 0.10.1 retains the public APIs and features of 0.10.0.

Backup format 5 excludes password hashes, tokens, and token scopes. Restore confirmation queues work for the matching hubuum-admin --restore-executor. Upgrade the server, administrator, and template-worker binaries together and run hubuum-admin --migrate before starting the server when upgrading from an older schema. Server v0.0.14 adds no migration over v0.0.13; update any separately deployed restore executor to obtain its history-free restore fix. Format 4 backups require a compatible older server. Existing history-free format 5 artifacts can be restored by the fixed executor. See migration and recovery.

The CLI continues to enable only the client's blocking feature. Verification uses Rust 1.98.0; this update does not introduce a CLI MSRV declaration. The client's own MSRV remains 1.88, which is not a claim about the complete CLI dependency graph.

The reproducible CLI integration check is cargo build --locked && python3 scripts/test-backup-restore.py. It provisions its own pinned PostgreSQL and Hubuum containers, applies migrations, runs the restore executor, and checks both backup history settings and both restore confirmation modes. Each cycle verifies receipt-only monitoring, terminal success, rejection of the old token, administrator password reset, and recovery of a deleted object with JSON-null data, preserving its revision and timestamps. It then checks default backup staging immediately after a history-free restore and performs a full second-generation restore after further updates and a deletion. CI requires this check before publishing rolling binaries.

Executed on 2026-09-10 with Rust 1.98.0 and Podman 5.8.2 on Linux x86_64 against the immutable image above. Its source revision is 0b0aa17f278496a32cc018cfcac56f34a408ccd6 (server v0.0.14). The pin identifies the multi-platform image index; this live run verifies its Linux amd64 image. All three restore cycles reached succeeded, rejected the old token, and recovered the object with its original revision, timestamps, and JSON-null data after password reset. Immediate follow-up staging and the second-generation restore after updates and a deletion passed. Normal CLI object assignments preserved sibling fields; excessive path depth and array indices were rejected without modifying the object.

The server's v0.0.13 history-loss rejection is now a required success case; the earlier history-free follow-up workaround is no longer needed with the fixed executor.