Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

twc-rs vs the official Timeweb CLI — measured comparison

A head-to-head against the official Python CLI timeweb-cloud/twc. Every performance number below is produced live by benches/compare.sh — nothing here is hand-written or estimated. Re-run it yourself to reproduce.

Test environment

CPUAMD Ryzen AI MAX+ 395 (32 threads)
Memory62 GiB
OS / kernelLinux 7.1.2 (x86_64)
Rust toolchainrustc 1.96.0 (release build, --features tui, stripped)
Official CLItwc-cli v2.15.2, in a clean virtualenv on Python 3.14.6
Sampling50 runs per measurement, mean reported, one warm-up discarded
Startup metric--version / --help (no network — pure process start)
Memory metricpeak RSS via getrusage(RUSAGE_CHILDREN)

Reproduce:

cargo build --release --features tui
python3 -m venv /tmp/twcbench && /tmp/twcbench/bin/pip install twc-cli
benches/compare.sh ./target/release/twc-rs /tmp/twcbench/bin/twc

Performance — twc-rs wins on every axis

Metrictwc-rsofficial twcAdvantage
Cold start (--version)2.3 ms357.3 ms≈155× faster
Cold start (--help)2.1 ms347.4 ms≈165× faster
Peak memory (RSS)13.7 MB59.2 MB≈4.3× less
On-disk size15 MB, one static binary33 MB of packages + a Python interpretersmaller, self-contained
Runtime dependenciessystem libc only15 PyPI packages + CPythonnone to install
Installcopy one filepip + Python toolchainno runtime needed

The Python tool spends ~350 ms loading the interpreter and importing its dependency tree before any application code runs; twc-rs is a native binary, so the same invocation completes in single-digit milliseconds.

Capabilities only twc-rs has

Featuretwc-rsofficial
Interactive TUI dashboard (k9s-style)yesno
Live per-resource metrics (CPU / RAM / network)yesno
Create / delete resources from the dashboardyesno
Switch account profile from the dashboardyesno
Localization — English + Russian (CLI & TUI)yesEnglish only
Named profiles (--profile)yesyes
Installation self-check (doctor finds conflicting copies in PATH)yesno
Address apps by name, not just numeric IDyesno
Dynamic shell completion of live resource values (app names/IDs from the API)yesno
Shell completionsbash, zsh, fish, powershell, elvish, nushellbash, zsh, fish, powershell

Command coverage

Near-complete parity with the official CLI across all resource groups (accounting for naming: ssh-keyssh, storages3, clusterkubernetes, balancer backendbalancer ip-*):

GroupStatus
accountfull — status, finances (show), access restrictions
appsfull — list, info, create, delete, presets, repositories, vcs-providers, logs (--tail/--since/--today), list-deploys, deploy-logs; per-app commands accept the app name or ID
balancerfull — list/info/create/update/delete, rules, IPs (backends), presets
databasefull — list/info/create/update/delete, backups, users, presets, types, instances
domainfull — list/info/add/delete, DNS records, subdomains, name servers
firewallfull — groups, rules, resource link/unlink
imagefull — list, info, create, set, delete, upload
ipfull — list, info, create, attach, detach, set, delete
kubernetesfull — clusters, node groups, nodes, addons, presets, versions, network drivers
projectfull — list, create, set, delete, resources
serverlist, info, create, set, clone, delete, reboot, start, shutdown, reset-password, resize, reinstall, disk, ip, history, backup-list, backup-create, set-nat-mode, set-boot-mode, list-presets/os/software/configurators
ssh-keyfull — list, add (upload), info, edit, delete, attach/detach key to a server
storage (s3)full — buckets, users, subdomains, transfer, presets, genconfig
vpcfull — list, info, create, set, delete, ports

The single uncovered command is server vnc — Timeweb’s API has no VNC endpoint at all (it is absent from the OpenAPI spec), so there is nothing to call. image upload was missing only because the upstream spec omitted the request body; that defect was fixed in the timeweb-rs normalizer (0.3.0) and the command now works. Custom server configurators (CPU/RAM/disk arrays) remain behind the common preset path. The TUI dashboard additionally exposes delete / power / clone management for every integer-id resource.

Engineering quality

Lintsclean under clippy pedantic + nursery, no #[allow] crutches
Tasksnon-blocking UI — data fetched off the render thread
SDKgenerated from the official OpenAPI spec via timeweb-rs; spec defects fixed in a normalizer pass, never by hand-editing generated code
Deprecationszero — migrated to the current v2/cluster endpoints