Beautiful deployment tool for Together AI. Like flyctl but simpler.
One file. Zero dependencies. Just works.
export TOGETHER_API_KEY=your_key_here
jig deployThat's it. Everything else is automatic.
Add to your pyproject.toml:
[tool.jig]
name = "my-model" # optional, defaults to directory name
[tool.jig.image]
python_version = "3.11"
system_packages = ["git", "libglib2.0-0"]
cmd = "python app.py"
auto_include_git = true # copy all git-tracked files
[tool.jig.deploy]
name = "my-model"
gpu_type = "h100-80gb"
port = 8000Instead of pyproject.toml, you can also configure jig through jig.toml.
This config file is only used when the [tool.jig] section is absent from the pyproject.toml file.
Alternatively, you can specify any custom configuration file using the --config argument:
jig --config path/to/custom-config.toml <command>jig init- Create initial configjig dockerfile- Generate Dockerfilejig build- Build imagejig push- Push to registryjig set_secret --name secret_name --value secret_content --env_var env_var_name- Create secret and map it to environment variablejig unset_secret --name secret_name- Remove secret mapped to the deploymentjig list_secrets- List all secrets mapped to deploymentjig deploy- Build, push, and deployjig deploy --image existing:tag- Deploy existing imagejig deploy --build-only- Build and push onlyjig status- Show deployment statusjig destroy- Delete deployment
- Reads config from
pyproject.toml - Generates optimized multi-stage Dockerfile with uv
- Builds with Docker BuildKit caching
- Pushes to Together registry
- Creates/updates deployment via API
Files are copied based on git tracking (repo must be clean) plus any explicit copy entries.
The Dockerfile is regenerated when the config file changes. Otherwise builds are unconditional like fly deploy.
Minimal state in .jig.json:
deployment_id- Current deploymentusername- Registry username from API
No complex build tracking. Filesystem timestamps are truth.