{"id":50412830,"url":"https://github.com/tovuk/tovuk","last_synced_at":"2026-06-06T03:05:27.026Z","repository":{"id":360175458,"uuid":"1248999475","full_name":"tovuk/tovuk","owner":"tovuk","description":"Public tovuk packages, CLI, skills, and examples","archived":false,"fork":false,"pushed_at":"2026-06-01T06:19:56.000Z","size":3239,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-01T06:29:55.756Z","etag":null,"topics":["agents","backend","cli","deploy","hosting","rust","tovuk"],"latest_commit_sha":null,"homepage":"https://tovuk.com","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tovuk.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":"docs/support.mdx","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-25T08:50:12.000Z","updated_at":"2026-06-01T06:20:00.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/tovuk/tovuk","commit_stats":null,"previous_names":["zerct/zerct","tovuk/tovuk"],"tags_count":54,"template":false,"template_full_name":null,"purl":"pkg:github/tovuk/tovuk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tovuk%2Ftovuk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tovuk%2Ftovuk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tovuk%2Ftovuk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tovuk%2Ftovuk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tovuk","download_url":"https://codeload.github.com/tovuk/tovuk/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tovuk%2Ftovuk/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33967647,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-06T02:00:07.033Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agents","backend","cli","deploy","hosting","rust","tovuk"],"created_at":"2026-05-31T05:00:16.450Z","updated_at":"2026-06-06T03:05:26.992Z","avatar_url":"https://github.com/tovuk.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Tovuk\n\nPublic Tovuk workspace for packages, agent skills, examples, and docs.\n\nTovuk hosts Rust workers, static frontends, and worker-static services. A\nworker-static service uses one `tovuk.toml`, one deployment URL, static files at\n`/`, and a Rust worker under `/api/*`.\n\n## Install\n\nUse npm for the lowest-friction agent path:\n\n```sh\nnpx tovuk init\nnpx tovuk doctor\nnpx tovuk preview\nnpx tovuk deploy\n```\n\nCreate a worker-static starter:\n\n```sh\nnpx tovuk init hello-service --template worker-static-rust-tanstack\ncd hello-service/web \u0026\u0026 bun install \u0026\u0026 cd ..\n```\n\nFrom a worker-static repo root, `npx tovuk deploy` reads the single root\n`tovuk.toml`, builds `api` and `web`, and returns one service URL. Create\ndatabases, KV namespaces, queues, cron triggers, Durable Object namespaces,\nservice bindings, and usage caps through CLI resource commands.\n\nWorker-static deploys use this `tovuk.toml` shape:\n\n```toml\nname = \"hello-service\"\nkind = \"worker_static\"\n\n[worker]\nroot = \"api\"\ncheck = \"cargo fmt --all --check \u0026\u0026 cargo check --locked --release --all-targets --all-features \u0026\u0026 cargo test --locked --release --all-targets --all-features \u0026\u0026 cargo clippy --locked --release --all-targets --all-features -- -D warnings -D clippy::all -D clippy::pedantic -D clippy::dbg_macro -D clippy::todo -D clippy::unimplemented -D clippy::panic -D clippy::unwrap_used -D clippy::expect_used -D clippy::large_futures -D clippy::large_include_file -D clippy::large_stack_frames -D clippy::mem_forget -D clippy::rc_buffer -D clippy::rc_mutex -D clippy::redundant_clone -D clippy::clone_on_ref_ptr\"\nbuild = \"cargo build --release\"\ncommand = \"./target/release/api\"\nport = 3000\nhealth = \"/api/healthz\"\n\n[frontend]\nroot = \"web\"\ncheck = \"bun ci \u0026\u0026 bun run typecheck \u0026\u0026 bun run lint\"\nbuild = \"bun run build\"\noutput = \"dist\"\n```\n\nStatic frontend deploys use the same command with this `tovuk.toml`:\n\n```toml\nname = \"dashboard\"\nkind = \"static_frontend\"\n\n[build]\ncheck = \"bun ci \u0026\u0026 bun run typecheck \u0026\u0026 bun run lint\"\ncommand = \"bun run build\"\noutput = \"dist\"\n```\n\nFor new TanStack or Vite frontends, prefer fast native checks and avoid\nJavaScript-based lint, format, dead-code, or duplicate-code tooling:\n\n```sh\nbun add -d oxlint oxlint-tsgolint fallow\n```\n\n```json\n{\n  \"scripts\": {\n    \"typecheck\": \"oxlint src vite.config.ts --deny-warnings --type-aware --type-check --tsconfig tsconfig.json\",\n    \"lint\": \"oxlint src vite.config.ts --deny-warnings \u0026\u0026 fallow dead-code --production --include-dupes --include-entry-exports --fail-on-issues \u0026\u0026 fallow dupes --production --mode semantic --threshold 1 --ignore-imports --fail-on-issues \u0026\u0026 fallow health --production --max-cyclomatic 10 --max-cognitive 15 --max-crap 20 --complexity\",\n    \"build\": \"vite build\"\n  }\n}\n```\n\nRust worker checks must include `cargo fmt --all --check`, locked release-mode\n`cargo check`, locked release-mode tests, and strict all-target, all-feature\nClippy with panic/unwrap bans plus resource-sensitive lints.\nFrontend checks must install dependencies, run stable native type-aware\nTypeScript checks, and run native linting plus Fallow dead-code, semantic\nduplicate-code, and health gates before build work is queued. Frontend browser\nsource must be `.ts` or `.tsx` under\n`src`, `app`, `pages`, `routes`, or `components`; browser `.js`, `.jsx`,\n`.mjs`, and `.cjs` source is rejected. Bun projects should commit `bun.lock`\nfor the fastest Tovuk build path. Existing npm projects can still deploy with a\ncommitted npm lockfile and npm-based build commands.\n\nPlain static HTML/CSS/JS sites can deploy without a package manager by setting\n`kind = \"static_frontend\"`, `[build].check = \":\"`, `[build].command = \":\"`, and\n`[build].output = \".\"`.\n\nUse Homebrew for a persistent developer CLI:\n\n```sh\nbrew tap tovuk/tovuk https://github.com/tovuk/tovuk\nbrew install tovuk\ntovuk deploy\n```\n\n- npm: `tovuk`\n- PyPI: `tovuk`\n- crates.io: `tovuk`\n- Homebrew: `tovuk/tovuk/tovuk`\n\nAgent prompt:\n\n```txt\nUse Tovuk to deploy this project. Read https://docs.tovuk.com/llms.txt first.\nRun `npx tovuk doctor --json`. Fix the first failed check by following\n`agent_instruction`, then rerun doctor. Deploy with\n`npx tovuk deploy --wait --json`. If the build fails, read\n`npx tovuk logs --build \u003cbuild_id\u003e --json`, fix the first actionable\nerror, rerun doctor, and redeploy. If a plan limit blocks work, run\n`npx tovuk billing checkout --json` and show the returned URL to the\nhuman. If Tovuk support is needed, run `npx tovuk support create` with\n`--failing-command`, `--service`, `--build`, `--deploy`, and `--first-log-line`.\nResolve the support ticket after the issue is fixed.\n```\n\n## Repository\n\n- `packages/tovuk`: npm CLI.\n- `packages/tovuk-py`: PyPI CLI package.\n- `crates/tovuk`: Cargo CLI crate.\n- `skills/`: agent skill files.\n- `examples/`: deployable examples.\n- `docs/`: Mintlify documentation.\n\nThe Homebrew formula lives in `Formula/tovuk.rb` in this main public repo.\n\n`packages/tovuk` is the CLI behavior source of truth. PyPI and Cargo CLIs must\nexpose the same agent-facing commands, recovery text, login behavior, deploy\nflow, logs, env, domains, usage, billing, and support operations so deploy UX\ndoes not drift.\n\n## Example\n\n```sh\ncd examples/hello-rust\nnpx tovuk doctor\nnpx tovuk deploy\n```\n\nOn first deploy, the CLI opens browser login, waits for GitHub or Google, stores\nthe Tovuk session in the user's credential store when available, and continues\nthe deploy. Later commands reuse that session.\n\nUseful agent commands:\n\n```sh\nnpx tovuk capabilities\nnpx tovuk me\nnpx tovuk usage\nnpx tovuk activity --json\nnpx tovuk service list\nnpx tovuk service show service_1 --json\nnpx tovuk deploys\nnpx tovuk builds --service service_1\nnpx tovuk logs --service service_1 --limit 100 --json\nnpx tovuk logs --deploy deploy_1 --json\nnpx tovuk logs --build job_1 --json\nnpx tovuk env list --service service_1\nnpx tovuk domains list --service service_1\nnpx tovuk domains verify --service service_1 api.example.com\nnpx tovuk database query --service service_1 DB \"select 1\" --json\nnpx tovuk kv put --service service_1 CACHE user:1 '{\"name\":\"Ada\"}' --json\nnpx tovuk kv get --service service_1 CACHE user:1 --json\nnpx tovuk queue send --service service_1 jobs '{\"task\":\"sync\"}' --json\nnpx tovuk billing checkout --json\nnpx tovuk billing portal\nnpx tovuk support create \"Deploy failed\" \"Agent retried deploy after doctor.\" --service service_1 --build job_1 --deploy deploy_1 --failing-command \"npx tovuk deploy --wait --json\" --first-log-line \"cargo check failed in src/main.rs\" --json\nnpx tovuk support list --json\nnpx tovuk support resolve ticket_0123456789abcdef0123 --json\n```\n\nThe same commands are available through PyPI and Cargo after installation:\n\n```sh\npipx install tovuk\ncargo install tovuk\ntovuk deploy --wait\ntovuk logs --build job_1 --json\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftovuk%2Ftovuk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftovuk%2Ftovuk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftovuk%2Ftovuk/lists"}