Run any command in the cloud. Like tmux, but virtual.
Project description
tup
Run any command in the cloud. Close your laptop, keep running.
# Local
uv run python train.py
# Cloud (just prefix with tup)
tup uv run python train.py
Installation
pip install tup
Quick Start
# Configure (one-time)
tup config set api_url https://tup-api.your-account.workers.dev
# Run a command in the cloud
tup python train.py --epochs 100
# Detach and check later
tup --detach python train.py --epochs 1000
tup logs # Stream logs
tup status # Check job status
Usage
tup <command> # Run command, stream logs until done
tup --detach <command> # Run in background, return job ID
tup --name "exp-v1" <command> # Named job for easy reference
tup logs [job-id] # Stream logs (default: latest job)
tup status # List all jobs
tup stop <job-id> # Kill a running job
tup attach <job-id> # Reattach to running job's logs
Options
--detach, -d Run in background
--name, -n NAME Job name
--instance TYPE Instance size: lite, basic, standard-1, standard-2, standard-3, standard-4
--env KEY=VALUE Pass environment variable (can repeat)
--timeout DURATION Max runtime (e.g., "2h", "30m", "1d")
Configuration
Configuration is stored in ~/.tup/config.toml:
[default]
api_url = "https://tup-api.your-account.workers.dev"
[env]
# Environment variables passed to all jobs
WANDB_API_KEY = "your-key"
TINKER_API_KEY = "your-key"
Or use environment variables:
export TUP_API_URL="https://tup-api.your-account.workers.dev"
How It Works
tuppackages your current directory (respecting.gitignore)- Uploads the bundle to Cloudflare R2
- Spins up a container with your command
- Streams logs back to your terminal
- Container runs until your command exits
Self-Hosting
Deploy your own tup backend:
cd worker
cp wrangler.example.toml wrangler.toml
# Edit wrangler.toml with your account details
pnpm install
pnpm run deploy
See CONTRIBUTING.md for architecture details.
Instance Types
| Type | vCPU | Memory | Disk | ~Cost/hour |
|---|---|---|---|---|
| lite | 1/16 | 256MB | 2GB | $0.002 |
| basic | 1/4 | 1GB | 4GB | $0.01 |
| standard-1 | 1/2 | 4GB | 8GB | $0.04 |
| standard-2 | 1 | 6GB | 12GB | $0.08 |
| standard-3 | 2 | 8GB | 16GB | $0.16 |
| standard-4 | 4 | 12GB | 20GB | $0.32 |
License
MIT
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
vmux_cli-0.2.0.tar.gz
(56.1 kB
view details)
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
vmux_cli-0.2.0-py3-none-any.whl
(19.3 kB
view details)
File details
Details for the file vmux_cli-0.2.0.tar.gz.
File metadata
- Download URL: vmux_cli-0.2.0.tar.gz
- Upload date:
- Size: 56.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1455231ce4e403c246e71c7aeafb624a7ff74e1e2f6b325f9e5dcd58ec2e5192
|
|
| MD5 |
2a6a7b8593e509d34128fe70cb2e00e3
|
|
| BLAKE2b-256 |
aeec6eb53dd6148e83a2d85245141f52b730db9ba15194e6cf50549c4724354e
|
File details
Details for the file vmux_cli-0.2.0-py3-none-any.whl.
File metadata
- Download URL: vmux_cli-0.2.0-py3-none-any.whl
- Upload date:
- Size: 19.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7cbf56348dbb4735ad9bf0c1ca318f4a3fdfe085c0c5fb2132af89f8984eb004
|
|
| MD5 |
d2e9017fc3a358d85339aa4b8eec4966
|
|
| BLAKE2b-256 |
2c7c4dc6c82e81c36051bf815b1d5f15ec0fa21397c2186773869659bf8c2e1d
|