Thresh 1.5.0 Release - Complete Feature Overview
Release Date: February 27, 2026
Major Release: Phase 1.5 - Enterprise Container Features
We're thrilled to announce thresh 1.5.0, the most significant release yet! This update brings production-ready networking, persistent storage, advanced WSL configuration, and volume management to your development environments.
๐ Release Highlightsโ
What's New in 1.5.0โ
- ๐ Full Networking Support - Port mapping, network modes, hostnames, and exposed ports
- ๐ฆ Persistent Storage - Named volumes, bind mounts, and tmpfs storage
- ๐ Lifecycle Management - New
startandstopcommands for better control - โ๏ธ WSL Configuration Profiles - Fix database permissions and optimize environments
- ๐พ Volume Management - Complete volume lifecycle with CLI commands
- ๐ Improved Metadata - Persistent configuration tracking
๐ Networking & Port Mappingโ
Access your services from anywhere with full networking support.
Port Mappingโ
Define port mappings in blueprints:
{
"name": "webserver",
"base": "ubuntu-22.04",
"ports": ["8080:80", "8443:443", "5432:5432"],
"packages": ["nginx"]
}
Platform behavior:
Windows (WSL2):
- All listening ports automatically forwarded to localhost
- No manual configuration needed - WSL2 handles it
- Access services:
http://localhost:8080
Linux/macOS (containerd/nerdctl):
- Ports explicitly mapped with
-pflag - Docker-compatible syntax
- Full control over port bindings
Advanced Networking Optionsโ
IP Binding:
{
"ports": ["127.0.0.1:8080:80"] // Localhost only
}
Protocol Specification:
{
"ports": ["8080:80/tcp", "53:53/udp"]
}
Exposed Ports (inter-container communication):
{
"expose": ["9090", "9091"]
}
Network Modes:
{
"network": "bridge" // or "host", "none"
}
Custom Hostnames:
{
"hostname": "api.local"
}
Complete Example: Full-Stack Applicationโ
{
"name": "fullstack-app",
"base": "ubuntu-22.04",
"packages": ["nodejs", "npm", "postgresql-14"],
"ports": [
"3000:3000", // Frontend
"8080:8080", // API
"5432:5432" // PostgreSQL
],
"expose": ["6379"], // Redis (internal only)
"network": "bridge",
"hostname": "app.local",
"volumes": [
{"name": "postgres-data", "mount": "/var/lib/postgresql/data"},
{"name": "app-logs", "mount": "/var/log/app"}
],
"wslConfig": "database"
}
Learn More: Networking Tutorial
๐ฆ Persistent Storageโ
Three types of storage for every use case.
1. Named Volumesโ
Persistent data that survives environment recreation:
{
"volumes": [
{"name": "postgres-data", "mount": "/var/lib/postgresql/data"},
{"name": "redis-data", "mount": "/var/lib/redis"},
{"name": "app-config", "mount": "/etc/myapp"}
]
}
Perfect for:
- Database files
- Application configuration
- User-generated content
- Logs and state
Platform behavior:
Windows (WSL):
- Stored in
%USERPROFILE%\.thresh\volumes\ - Accessible from both Windows and WSL
- Directory-based bind mounts
Linux/macOS:
- Managed by containerd/nerdctl
- Container runtime handles lifecycle
- Volume driver support
2. Bind Mountsโ
Direct access to host files:
{
"bind_mounts": [
{
"host": "C:/projects/myapp",
"container": "/app",
"readonly": false
},
{
"host": "/etc/ssl/certs",
"container": "/certs",
"readonly": true
}
]
}
Perfect for:
- Live code editing
- Sharing configuration files
- Mounting source code
- Development workflows
3. Tmpfs Mountsโ
Fast in-memory storage:
{
"tmpfs": ["/tmp", "/run", "/cache"]
}
Perfect for:
- Temporary files
- Build artifacts
- Cache directories
- Session data
Volume Persistence Exampleโ
# Create environment with volume
thresh up postgres-server
# Populate database
psql -h localhost -p 5432 -c "CREATE TABLE users (id SERIAL, name TEXT);"
# Destroy environment
thresh destroy postgres-server -y
# Recreate - data still exists!
thresh up postgres-server
psql -h localhost -p 5432 -c "SELECT * FROM users;"
# โ Data persisted across recreations
Learn More: Volumes Tutorial
๐ Lifecycle Managementโ
New commands for better environment control.
thresh startโ
Start stopped environments:
# Windows (WSL)
thresh start webserver
# Starts WSL distribution
# Services accessible via localhost
# Linux/macOS
thresh start webserver
# Starts container
# Port mappings restored
Use after:
- System restarts
- Manual stops
wsl --shutdown(Windows)
thresh stopโ
Stop running environments without data loss:
thresh stop webserver
# Graceful shutdown
# All volumes preserved
# Port mappings released
Use when:
- Freeing system resources
- Temporarily disabling services
- Changing configuration
Learn More: start command | stop command
โ๏ธ WSL Configuration Profilesโ
Fix database permission errors and optimize environments (Windows only).
The Problemโ
Databases fail on WSL2 due to Plan9 filesystem permissions:
$ sudo systemctl start postgresql
Job for postgresql.service failed...
FATAL: data directory has wrong ownership
The Solutionโ
Use built-in WSL configuration profiles:
{
"name": "postgres-server",
"base": "ubuntu-22.04",
"packages": ["postgresql-14"],
"wslConfig": "database", // โ Fixes permissions!
"volumes": [
{"name": "postgres-data", "mount": "/var/lib/postgresql/data"}
]
}
Built-in Profilesโ
| Profile | Description | Use Case |
|---|---|---|
database | Fixes file permissions | PostgreSQL, MySQL, MongoDB, Redis |
docker | Enables systemd | Docker daemon auto-start |
web-server | Optimized mounts | Nginx/Apache development |
systemd | Basic systemd | Modern services (Kubernetes, etc.) |
minimal | Maximum isolation | Security-focused environments |
development | Balanced setup | General development |
Custom Profilesโ
Create your own:
# Create profile
mkdir ~/.thresh/profiles
nano ~/.thresh/profiles/ml-workstation.wslconf
# ML Workstation Profile
[boot]
systemd=true
command=nvidia-smi
[automount]
enabled=true
options=metadata,uid=1000,gid=1000,umask=022
[network]
hostname=ml-workstation
[gpu]
enabled=true
Use in blueprint:
{
"wslConfigFile": "~/.thresh/profiles/ml-workstation.wslconf"
}
CLI Managementโ
# List profiles
thresh wslconf list
# Show profile content
thresh wslconf show database
# Show all valid options
thresh wslconf options
# Validate custom profile
thresh wslconf validate my-profile.wslconf
Learn More: WSL Configuration Guide | wslconf command
๐พ Volume Managementโ
Complete volume lifecycle management.
Volume Commandsโ
List volumes:
thresh volume list
# Shows all named volumes with mount points
Create volume:
thresh volume create app-data
# Pre-create for initialization or sharing
Inspect volume:
thresh volume inspect postgres-data
# Shows driver, mount point, created date, labels
Delete volume:
thresh volume delete old-data
# Permanent deletion (cannot be undone)
Volume Workflowsโ
Backup and restore:
# Backup (Windows)
$volume = "$env:USERPROFILE\.thresh\volumes\postgres-data"
Compress-Archive -Path $volume -DestinationPath backup.zip
# Restore
Expand-Archive -Path backup.zip -DestinationPath $volume
Share between environments:
// Environment 1
{
"name": "postgres-server",
"volumes": [{"name": "shared-data", "mount": "/data"}]
}
// Environment 2
{
"name": "backup-service",
"volumes": [{"name": "shared-data", "mount": "/backup-source"}]
}
Learn More: volume command
๐ Metadata & Configurationโ
Persistent environment tracking.
Metadata Filesโ
thresh now stores complete environment configuration:
Location: ~/.thresh/metadata/{environment-name}.json
Contents:
- Blueprint configuration
- Port mappings
- Volume mounts
- WSL configuration
- Creation timestamp
- Last started/stopped
Example:
{
"name": "webserver",
"blueprint": "webserver",
"created": "2026-02-27T10:30:00Z",
"lastStarted": "2026-02-27T14:15:00Z",
"ports": ["8080:80", "8443:443"],
"volumes": ["web-content"],
"wslConfig": "web-server"
}
Benefits:
- Restore configuration on restart
- Track environment history
- Enable start/stop commands
- Audit environment changes
๐ง Platform Supportโ
Windows 11 (WSL2)โ
Full feature support:
- โ Port mapping (automatic WSL2 forwarding)
- โ Named volumes (directory-based)
- โ Bind mounts
- โ Tmpfs mounts
- โ WSL configuration profiles
- โ Start/stop commands
- โ Volume management
Linux (containerd/nerdctl)โ
Container-native features:
- โ
Port mapping (explicit
-pflags) - โ Named volumes (containerd-managed)
- โ Bind mounts
- โ Tmpfs mounts
- โ Network modes
- โ Exposed ports
- โ Start/stop commands
- โ Volume management
- โ WSL configuration (Windows-only)
macOS (Apple Silicon)โ
Beta support:
- โ Port mapping (containerd)
- โ Named volumes
- โ Bind mounts (with path restrictions)
- โ Tmpfs mounts
- โ Network modes
- โ Start/stop commands
- โ Volume management
- โ WSL configuration (Windows-only)
๐ Complete Example: Production-Ready PostgreSQLโ
Blueprint: postgres-production.json
{
"name": "postgres-prod",
"description": "Production PostgreSQL with persistence and optimization",
"base": "ubuntu-22.04",
"packages": [
"postgresql-14",
"postgresql-contrib",
"postgresql-client"
],
"ports": ["5432:5432"],
"volumes": [
{
"name": "postgres-data",
"mount": "/var/lib/postgresql/data"
},
{
"name": "postgres-logs",
"mount": "/var/log/postgresql"
}
],
"bind_mounts": [
{
"host": "C:/backups/postgres",
"container": "/backups",
"readonly": false
}
],
"tmpfs": ["/tmp", "/run/postgresql"],
"network": "bridge",
"hostname": "postgres.local",
"wslConfig": "database",
"environment": {
"POSTGRES_PASSWORD": "secure_password",
"POSTGRES_DB": "production"
},
"scripts": {
"postInstall": "sudo systemctl enable postgresql && sudo systemctl start postgresql"
}
}
Provision:
# Create environment
PS C:\> thresh up postgres-production.json
โ Environment provisioned
โ Volumes created and mounted
โ WSL configuration applied
โ PostgreSQL started successfully
# Connect from Windows
PS C:\> psql -h localhost -p 5432 -U postgres -d production
production=#
# Backup to bind mount
production=# \! pg_dump production > /backups/backup-$(date +%Y%m%d).sql
# Stop to save resources
PS C:\> thresh stop postgres-prod
โ Environment stopped (data preserved)
# Start anytime
PS C:\> thresh start postgres-prod
โ Environment started
# All data intact, same connection string
๐ฏ Migration from 1.4.0โ
New Blueprint Propertiesโ
Add to existing blueprints:
{
"name": "existing-environment",
// Add networking (1.5.0)
"ports": ["8080:80"],
"expose": ["9090"],
"network": "bridge",
"hostname": "myapp.local",
// Add storage (1.5.0)
"volumes": [
{"name": "app-data", "mount": "/data"}
],
"bind_mounts": [
{"host": "C:/projects", "container": "/app"}
],
"tmpfs": ["/tmp"],
// Add WSL config (1.5.0, Windows only)
"wslConfig": "database"
}
New Commandsโ
# Lifecycle (1.5.0)
thresh start <name>
thresh stop <name>
# Volumes (1.5.0)
thresh volume list
thresh volume create <name>
thresh volume inspect <name>
thresh volume delete <name>
# WSL Config (1.5.0, Windows only)
thresh wslconf list
thresh wslconf show <profile>
thresh wslconf options
thresh wslconf validate <file>
Backward Compatibilityโ
All 1.4.0 blueprints work unchanged:
- Old blueprints run without modification
- New properties are optional
- Existing environments unaffected
- Gradual migration supported
๐ Documentationโ
New Guides:
- ๐ Networking Tutorial - Complete port mapping and network configuration
- ๐ฆ Volumes Tutorial - Persistent storage patterns and workflows
- โ๏ธ WSL Configuration Guide - Profiles and optimization
New CLI Reference:
- thresh start - Start stopped environments
- thresh stop - Stop running environments
- thresh volume - Volume management commands
- thresh wslconf - WSL configuration commands
Updated Guides:
- thresh up - Added networking and storage examples
- CLI Reference - Reorganized with new Storage category
๐ Bug Fixes & Improvementsโ
- Fixed: Database permission issues on WSL2 with proper mount options
- Fixed: Volume persistence across environment recreation
- Improved: Environment metadata tracking and restoration
- Improved: Platform detection and runtime selection
- Improved: Error messages for networking and storage failures
- Improved: Blueprint validation for new properties
๐ฎ What's Nextโ
Planned for 1.6.0:
- Docker Compose support for multi-container applications
- Network bridge creation and management
- Volume backup and restore commands
- Environment snapshots and cloning
- SSH access and remote development
- Custom distro builder
๐ฅ Download & Installโ
Windows 11โ
# Download
Invoke-WebRequest -Uri "https://github.com/dealer426/thresh/releases/download/v1.5.0/thresh.exe" -OutFile "C:\thresh\thresh.exe"
# Add to PATH
$env:Path += ";C:\thresh"
# Verify
thresh --version
Linuxโ
# Download
curl -L "https://github.com/dealer426/thresh/releases/download/v1.5.0/thresh-linux-x64" -o thresh
chmod +x thresh
sudo mv thresh /usr/local/bin/
# Verify
thresh --version
macOS (Apple Silicon)โ
# Download
curl -L "https://github.com/dealer426/thresh/releases/download/v1.5.0/thresh-macos-arm64" -o thresh
chmod +x thresh
sudo mv thresh /usr/local/bin/
# Verify
thresh --version
Full installation guides: Windows | Linux | macOS
๐ Creditsโ
Special thanks to the community for feedback and testing:
- Database permission fix inspired by countless WSL issues
- Volume persistence requested by production users
- Networking features requested by full-stack developers
๐ Changelogโ
Full changelog: GitHub Releases
Questions? Issues? Ideas?
- ๐ฌ GitHub Discussions
- ๐ Report a Bug
- ๐ง Contact
Happy provisioning! ๐
