Deploy Rust workers, static frontends, and full-stack services to Tovuk.
Project description
tovuk
Python CLI package for deploying Rust workers, static frontends, and full-stack services to Tovuk. It installs or downloads the same native Tovuk binary used by npm, Homebrew, and Cargo. PyPI requires Python to install and launch the package, but it does not require Node.js, npm, or any JavaScript runtime.
pipx install tovuk
tovuk new hello-service --template fullstack-rust-tanstack
cd hello-service/web && npm install && cd ..
tovuk check --json
tovuk account show --json
tovuk account update --handle tovuk-team --display-name "Tovuk Team" --json
tovuk deploy --dry-run --json
tovuk check
tovuk deploy --wait --json
tovuk deploy list --json
tovuk deploy show deploy_1 --json
tovuk deploy cancel deploy_1 --json
For agent sessions, set TOVUK_OUTPUT=json once and run the same commands
without repeating --json. Use --output text on a single command when you
want human-readable output.
From a full-stack repo root, tovuk deploy reads one root tovuk.toml,
reads explicit [capabilities], builds the worker and frontend roots, and
returns one service URL with /api/* routed to the Rust worker.
tovuk new can scaffold a starter tovuk.toml from existing files, but deploy
behavior is controlled only by the committed tovuk.toml. Review explicit
[capabilities] before deploy.
Rust worker deploys require cargo fmt --all --check, locked release-mode
cargo check, locked release-mode tests, and strict all-target, all-feature
Clippy with panic/unwrap bans plus resource-sensitive lints.
Deploy archives must contain source files only. Tovuk rejects generated
directories, secret files, and compiled artifacts such as .exe, .so,
.dylib, .jar, .node, and .rlib.
Package static frontend deploys require TypeScript browser source, stable native
type-aware TypeScript checks, native linting such as oxlint or
biome check, and Fallow dead-code, semantic duplicate-code, and health
gates.
The npm package is also available:
npm install -g tovuk
tovuk deploy
Homebrew uses the main public repository tap:
brew tap tovuk/tovuk https://github.com/tovuk/tovuk
brew install tovuk
tovuk deploy
The Python package exposes the same agent command surface as npm:
tovuk pricing
tovuk pricing --json
tovuk account show --json
tovuk account activity --json
tovuk deploy --dry-run --json
tovuk deploy list --json
tovuk deploy show deploy_1 --json
tovuk deploy cancel deploy_1 --json
tovuk usage
tovuk usage --json
tovuk service list
tovuk service status service_1 --json
tovuk service show service_1 --json
tovuk service delete service_1 --json
tovuk logs --deploy deploy_1 --limit 100 --json
tovuk env list --service service_1
tovuk env set --service service_1 API_KEY=value
tovuk env delete --service service_1 API_KEY
tovuk secrets list --service service_1
tovuk secrets set --service service_1 API_KEY=value
tovuk secrets delete --service service_1 API_KEY
tovuk domains add --service service_1 api.example.com
tovuk domains verify --service service_1 api.example.com
tovuk storage list --service service_1 --json
tovuk storage upload --service service_1 ./logo.png uploads/logo.png --public --json
tovuk storage download --service service_1 uploads/logo.png ./logo.png --json
tovuk storage url --service service_1 uploads/logo.png --json
tovuk storage delete --service service_1 uploads/logo.png --json
tovuk sqlite create --service service_1 DB --json
tovuk sqlite query --service service_1 DB "select 1" --json
tovuk sqlite backup create --service service_1 DB --json
tovuk sqlite backup list --service service_1 DB --json
tovuk sqlite backup restore --service service_1 DB sqlite_backup_1 --json
tovuk sqlite delete --service service_1 DB --json
tovuk kv create --service service_1 CACHE --json
tovuk kv put --service service_1 CACHE user:1 '{"name":"Ada"}' --json
tovuk kv get --service service_1 CACHE user:1 --json
tovuk kv bulk put --service service_1 CACHE '[{"key":"feature:search","value":"enabled"}]' --json
tovuk kv bulk get --service service_1 CACHE feature:search user:1 --json
tovuk kv bulk delete --service service_1 CACHE feature:search old:key --json
tovuk queue create --service service_1 jobs --json
tovuk queue send --service service_1 jobs '{"task":"sync"}' --json
tovuk queue send-batch --service service_1 jobs '[{"body":{"task":"sync"}},{"body":{"task":"index"}}]' --json
tovuk queue metrics --service service_1 jobs --json
tovuk cron create --service service_1 nightly "0 0 * * *" --json
tovuk cron update --service service_1 nightly "*/15 * * * *" --json
tovuk cron disable --service service_1 nightly --json
tovuk cron enable --service service_1 nightly --json
tovuk state list --service service_1 --json
tovuk state create --service service_1 Room --json
tovuk state objects --service service_1 Room --json
tovuk state keys --service service_1 Room room-1 --json
tovuk state put --service service_1 Room room-1 counter 1 --json
tovuk state get --service service_1 Room room-1 counter --json
tovuk state alarm set --service service_1 Room room-1 --delay-seconds 60 --json
tovuk state alarm get --service service_1 Room room-1 --json
tovuk state alarm delete --service service_1 Room room-1 --json
tovuk state delete-value --service service_1 Room room-1 counter --json
tovuk binding create --service service_1 AUTH_SERVICE --target auth-service --json
tovuk limits set worker_requests --period day --value 100000 --notify-at-percent 80 --json
tovuk billing checkout --json
tovuk billing portal
tovuk support create "Deploy failed" "Agent retried deploy after check." --service service_1 --build job_1 --deploy deploy_1 --failing-command "tovuk deploy --wait --json" --first-log-line "cargo check failed in src/main.rs" --json
tovuk support list --json
tovuk support resolve ticket_0123456789abcdef0123 --json
tovuk abuse report https://demo.tovuk.app "Phishing page" "Credential collection form" --category phishing --reporter-email reporter@example.com --evidence "Screenshot URL and request id" --json
tovuk abuse list --json
tovuk abuse list --operator --json
tovuk abuse appeal abuse_0123456789abcdef0123 "Removed the reported file and rotated credentials." --evidence "deploy_1 remediation log" --json
tovuk abuse triage abuse_0123456789abcdef0123 "Reviewed reporter evidence and target service metadata." --json
tovuk abuse notify-owner abuse_0123456789abcdef0123 "Owner-visible report recorded with evidence summary." --json
tovuk abuse quarantine abuse_0123456789abcdef0123 "Confirmed malware object and preserved scanner evidence." --json
tovuk abuse resolve abuse_0123456789abcdef0123 "Reporter issue remediated and clean deploy verified." --json
tovuk abuse reject abuse_0123456789abcdef0123 "Evidence did not match the reported target." --json
tovuk abuse release abuse_0123456789abcdef0123 "Owner removed object and redeployed clean build." --json
tovuk nodes list --token "$TOVUK_OPERATOR_TOKEN" --json
tovuk nodes drain tovuk-riesling --token "$TOVUK_OPERATOR_TOKEN" --json
tovuk nodes enable tovuk-riesling --token "$TOVUK_OPERATOR_TOKEN" --json
tovuk pricing --json includes plan pricing and product meter metadata, so
agents can choose the correct product and cap the right meters before heavy
work.
tovuk usage --json includes billingEstimate.lineItems for current-month
cost estimates.
Without --json, tovuk service list prints a compact table with Service
kind, runtime status, URL, enabled and disabled capabilities, and resource counts.
tovuk service status --json returns top-level ok, url, and
agent_instruction fields for smoke tests; text mode prints only the
live/deploy/build summary. tovuk service show prints the broader Service snapshot.
Dashboard Overview Service rows expose copyable commands for service status,
service show, logs, storage listing, worker request caps, support tickets,
and service deletion.
tovuk deploy --dry-run --json combines tovuk.toml, explicit enabled and
disabled capabilities, quality checks, capability meters, account limits, and
billingEstimate before deploy, without creating a build. Each service
includes missingConfig for tovuk.toml repair, requiredFixes for every
failed quality check, and meterPlan entries for enabled service meters with
meter units, pricing fields, limit fields, and ready-to-fill tovuk limits set
cap commands with --notify-at-percent.
After adding or upgrading Rust dependencies, run
tovuk deploy --dry-run --build-artifact --json; it performs the local release
build without uploading or promoting, then reports
artifactCheck.compressedBytes against limits.workerCompressedSizeMib.
tovuk dev --json returns planned local worker/frontend commands, env, URLs,
and port_statuses without starting processes. When a planned port is already
occupied, JSON mode returns ok: false and dev.port_statuses[].owner when the
PID/command can be detected. Text mode refuses to start child processes until
ports are free, so agents do not inspect a stale worker or a different app
already using the planned port.
tovuk storage upload automatically switches to multipart transfer for files
larger than 100 MiB.
Public media uploads reject executable and script payloads. Store artifacts
privately, and use Static Frontend for browser-executed web assets.
Agent repair loop:
tovuk check --json
tovuk deploy --dry-run --build-artifact --json
tovuk deploy --wait --json
tovuk deploy show deploy_1 --json
tovuk logs --build job_1 --json
Fix the first failed agent_instruction. In JSON mode, filter failed checks
with checks[] | select(.status == "failed"). If a build fails, inspect build
logs, fix the first actionable log error, rerun check, then redeploy.
On first deploy, the CLI opens browser login, waits for GitHub or Google, stores the Tovuk session in the OS credential store when available, and continues the deploy. Later commands reuse that session.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tovuk-0.1.98.tar.gz.
File metadata
- Download URL: tovuk-0.1.98.tar.gz
- Upload date:
- Size: 6.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9ff97f59c05d36fd1fac0162c31ce69025c81ac09db505ff8c3a356fff9713be
|
|
| MD5 |
f31d9b1d2cefd1fd6e31bc1ed2eeb93a
|
|
| BLAKE2b-256 |
80c4b2d1c7d348b6f851b69a72fe3e6587bf16552577b885d8effab2d45a64fa
|
Provenance
The following attestation bundles were made for tovuk-0.1.98.tar.gz:
Publisher:
publish-pypi.yml on tovuk/tovuk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tovuk-0.1.98.tar.gz -
Subject digest:
9ff97f59c05d36fd1fac0162c31ce69025c81ac09db505ff8c3a356fff9713be - Sigstore transparency entry: 1735149874
- Sigstore integration time:
-
Permalink:
tovuk/tovuk@b23431a4b0c74f3958ab5c71d6329043a0e12c16 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/tovuk
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@b23431a4b0c74f3958ab5c71d6329043a0e12c16 -
Trigger Event:
push
-
Statement type:
File details
Details for the file tovuk-0.1.98-py3-none-any.whl.
File metadata
- Download URL: tovuk-0.1.98-py3-none-any.whl
- Upload date:
- Size: 6.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d7a61e1bf241e2a90ddbfac7b865cebdac8539fe25e1502290aa709c8f59594a
|
|
| MD5 |
d396e72788ed735e1e10bf31fcf9f6e3
|
|
| BLAKE2b-256 |
bdda135ce21e41d4cbcf7908f1c3f56ffcf64719e5a715f5f5e3f8828d1729aa
|
Provenance
The following attestation bundles were made for tovuk-0.1.98-py3-none-any.whl:
Publisher:
publish-pypi.yml on tovuk/tovuk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tovuk-0.1.98-py3-none-any.whl -
Subject digest:
d7a61e1bf241e2a90ddbfac7b865cebdac8539fe25e1502290aa709c8f59594a - Sigstore transparency entry: 1735149913
- Sigstore integration time:
-
Permalink:
tovuk/tovuk@b23431a4b0c74f3958ab5c71d6329043a0e12c16 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/tovuk
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@b23431a4b0c74f3958ab5c71d6329043a0e12c16 -
Trigger Event:
push
-
Statement type: