Val Town CLI
The vt CLI manages Val Town projects locally. Key concepts:
- Val: A serverless function/project hosted on Val Town
- HTTP Val: A val that serves HTTP requests (filename must contain "http", e.g.,
index.http.tsx) - Branch: Version control within a val (not git branches)
Quick Reference
| Task | Command |
|------|---------|
| Create new val | vt create my-val |
| Clone existing | vt clone username/valName |
| Push changes | vt push |
| Pull updates | vt pull |
| Auto-sync | vt watch |
| View in browser | vt browse |
| Stream logs | vt tail |
| Check status | vt status |
| List your vals | vt list |
Common Workflows
Create and develop a new val
vt create my-api
cd my-api
# Edit files...
vt push
vt browse # Open in browser
Clone and modify existing val
vt clone username/valName
cd valName
# Edit files...
vt push
Live development with auto-sync
cd my-val
vt watch # Syncs on every file save
Work on a feature branch
cd my-val
vt checkout -b my-feature
# Make changes...
vt push
vt checkout main
File Naming Conventions
Val Town detects file types by naming patterns:
| Pattern | Val Type |
|---------|----------|
| *.http.ts, *.http.tsx | HTTP endpoint |
| *.cron.ts | Scheduled cron job |
| *.email.ts | Email handler |
| Other .ts/.tsx files | Script val |
Example: To create an HTTP API, name the file api.http.ts or index.http.tsx.
Command Details
Create
vt create my-val # New val in ./my-val
vt create my-val ./existing-folder # Upload existing files
vt create my-val --private # Private val
vt create my-val --org-name myorg # Under an organization
Clone
vt clone # Interactive selection
vt clone username/valName # By name
vt clone https://www.val.town/x/user/val # By URL
vt clone username/valName . # Into current directory
Remix
Fork someone else's val:
vt remix std/reactHonoStarter myWebsite
cd myWebsite
vt watch
Branches
vt branch # List branches
vt checkout main # Switch branch
vt checkout -b feature # Create new branch
vt branch -D feature # Delete branch
Logs
vt tail # Stream current val's logs
vt tail @user/valName # Stream specific val
vt tail --print-headers # Include HTTP headers
vt tail --reverse-logs # Latest first
Configuration
vt config options # List options
vt config set dangerousOperations.confirmation false # Disable confirmations
vt config ignore # Edit global .vtignore
Project Structure
After cloning/creating, a val directory contains:
.vt/- Metadata (like .git).vtignore- Files to exclude from syncdeno.json- Deno LSP configuration- Source files (
.ts,.tsx, etc.)
Tips
- Use
vt push --dry-runto preview changes before pushing - Use
vt checkout --dry-runto preview branch switch effects - HTTP vals require "http" in the filename to be recognized as endpoints
- The
vt watchcommand enables live reloading with the browser companion extension