Skip to main content

Thresh 1.5.0 Release - Complete Feature Overview

ยท 9 min read
thresh Team
thresh Development Team

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 start and stop commands 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 -p flag
  • 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โ€‹

ProfileDescriptionUse Case
databaseFixes file permissionsPostgreSQL, MySQL, MongoDB, Redis
dockerEnables systemdDocker daemon auto-start
web-serverOptimized mountsNginx/Apache development
systemdBasic systemdModern services (Kubernetes, etc.)
minimalMaximum isolationSecurity-focused environments
developmentBalanced setupGeneral 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 -p flags)
  • โœ… 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:

New CLI Reference:

Updated Guides:


๐Ÿ› 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?

Happy provisioning! ๐Ÿš€