Lightweight infrastructure orchestration platform for multi-cloud container deployment
Project description
Mesh
Deploy containers across any cloud. Zero SSH. Auto-HTTPS. Multi-cloud.
Mesh turns any collection of VMs — across AWS, Hetzner, DigitalOcean, and 50+ providers — into a single unified computer. Pulumi provisions. Tailscale connects. Nomad schedules. Zero SSH required.
https://github.com/rethink-paradigms/mesh/assets/demo/mesh-demo-30s.mp4
Why Mesh
10x cheaper than Heroku. 90% less overhead than Kubernetes. Zero SSH. Multi-cloud by default.
| Metric | Mesh | Kubernetes | Heroku |
|---|---|---|---|
| 3-node cluster | $25/mo | $72+/mo (control plane) | $250+/mo |
| Control plane RAM | 530MB | 2GB+ | N/A (managed) |
| Setup time | <5 min | 2+ hours | <5 min |
| Multi-cloud | Native | Complex (federation) | No |
| Auto HTTPS | Let's Encrypt | Cert Manager + config | Built-in |
| SSH required | Never | Often | Never |
From $8/month (single VM) to $25/month (3-VM multi-cloud cluster).
Quick Start
# Install
pip install rethink-mesh
# Initialize a cluster (interactive wizard)
mesh init
# Deploy an application
mesh deploy my-app --image nginx:latest --port 80
# View cluster status
mesh status
# View logs
mesh logs my-app --follow
What it looks like
|
|
|
Local Development (5 minutes, $0)
# Prerequisites: Multipass, Python 3.11+, Tailscale account (free tier)
brew install --cask multipass
# Clone and configure
git clone https://github.com/rethink-paradigms/mesh.git && cd mesh
cp .env.example .env # Add your Tailscale auth key
# Launch
mesh init --provider "Local (Multipass)" --workers 2
# Deploy
mesh deploy hello --image nginx:latest
mesh status
Cloud Deployment
# AWS, Hetzner, DigitalOcean — same workflow
mesh init
# → Select provider, region, sizing via interactive wizard
# → Cluster ready in ~3 minutes
For detailed provider setup, instance sizing, and configuration options, see the Deployment Guide or docs/guides/deploy.md.
Architecture
┌─────────────────────┐
│ EXTERNAL WORLD │
│ Users / CI/CD │
└──────────┬──────────┘
│ HTTP/HTTPS + Pulumi API
┌──────────┴──────────┐
│ LEADER NODE (VM-1) │
│ Traefik or Caddy │
│ Nomad + Consul │
│ Tailscale + Docker │
└──────────┬──────────┘
│
Tailscale WireGuard Mesh (100.x.y.z)
┌──────────┴──────────┐
│ │
┌────────┴────────┐ ┌─────────┴───────┐
│ WORKER (VM-2) │ │ WORKER (VM-N) │
│ AWS / Hetzner │ │ DO / GCP / ... │
│ App Containers │ │ App Containers │
└─────────────────┘ └─────────────────┘
How It Works
- Pulumi provisions VMs on any provider (AWS, Hetzner, DO, 50+ others)
- Modular boot scripts install Docker, Nomad, Consul, Tailscale (~2 min)
- Tailscale creates encrypted WireGuard mesh across all VMs
- Nomad schedules containers with resource-aware bin-packing
- Consul provides health-checked service discovery
- Traefik or Caddy handles HTTPS ingress with automatic Let's Encrypt
Technology Stack
| Layer | Component | RAM | Why |
|---|---|---|---|
| IaC | Pulumi (Python) | 0MB | Real language vs HCL |
| Mesh | Tailscale | 20MB | Zero-config multi-cloud |
| Scheduler | Nomad | 80MB | K8s needs 1GB+ |
| Discovery | Consul | 50MB | Health-aware DNS |
| Ingress | Traefik | 256MB | Dynamic Consul routing |
| Ingress (Lite) | Caddy | 20MB | Single-VM HTTPS |
| Runtime | Docker | 100MB | Standard isolation |
| Secrets | GitHub Secrets | 0MB | Zero infra overhead |
Control plane overhead: ~530MB (full mode) | ~200MB (lite mode)
CLI Commands
| Command | Description |
|---|---|
mesh init |
Interactive cluster provisioning wizard |
mesh deploy <name> |
Deploy a containerized application |
mesh status |
View cluster health, nodes, and running apps |
mesh logs <app> |
Stream application logs |
mesh ssh <node> |
Connect to a cluster node |
mesh destroy |
Tear down a cluster |
mesh compare |
Show resource comparison vs Kubernetes |
mesh roadmap |
Show the project roadmap |
mesh version |
Show installed version |
Extensible via Plugins
Mesh supports a plugin architecture via Python entry_points. Third-party and enterprise extensions can add commands without modifying the core:
# In your plugin's pyproject.toml:
[project.entry-points."mesh.plugins"]
my-command = "my_package.cli:register"
Deployment Tiers
The platform automatically activates services based on cluster topology. No manual configuration required.
| Lite | Standard | Ingress | Production | |
|---|---|---|---|---|
| Topology | 1 VM | 2+ VMs, 1 region | 2+ VMs, 1 region | 3+ VMs, multi-region |
| Ingress | Caddy (20MB) | Caddy (20MB) | Traefik (256MB) | Traefik (256MB) |
| Service Discovery | -- | Consul | Consul | Consul + WAN |
| RAM Overhead | ~200MB | ~400MB | ~530MB | ~530MB+ |
| Cost | ~$8/mo | ~$15/mo | ~$25/mo | ~$50/mo |
Project Structure
src/
├── infrastructure/ # Domain: Compute, Network, OS
│ ├── provision_node/ # Multi-provider VM provisioning (50+ providers)
│ ├── boot_consul_nomad/ # Modular boot scripts (Jinja2)
│ ├── configure_tailscale/ # Auth key generation
│ ├── providers/ # Libcloud provider implementations
│ └── progressive_activation/ # Tier detection and configuration
├── workloads/ # Domain: Application Deployment
│ ├── deploy_app/ # Tier-aware unified deployment API
│ ├── deploy_web_service/ # Nomad web app templates (Traefik)
│ ├── deploy_lite_web_service/ # Lite web service (Caddy routing)
│ ├── deploy_lite_ingress/ # Caddy HTTPS ingress controller
│ ├── deploy_traefik/ # Traefik TLS ingress controller
│ └── manage_secrets/ # GitHub Secrets to Nomad sync
├── verification/ # Domain: System Testing
│ ├── e2e_app_deployment/ # Full cluster deployment tests
│ ├── e2e_lite_mode/ # Lite mode E2E validation
│ └── e2e_multi_node_scenarios/ # Multi-node fault tolerance
└── cli/ # Domain: mesh CLI Tool
├── commands/ # init, status, deploy, destroy, logs, ssh
├── plugins.py # Plugin discovery (entry_points)
└── ui/ # Rich panels and themes
Each feature directory contains a CONTEXT.md (interface contract), implementation code, and co-located tests.
Documentation
| Resource | Description |
|---|---|
| Deployment Guide | Provider setup, sizing, configuration |
| Architecture | How Mesh works under the hood |
| API Reference | Public interfaces from all modules |
| Comparisons | Mesh vs K8s vs Heroku vs Coolify vs Dokku |
| FAQ | Common questions and troubleshooting |
Testing
pytest src/mesh -v -m "not e2e" # Unit + integration
pytest src/mesh/verification/ -v # End-to-end (requires running cluster)
Security
- WireGuard encryption on all mesh traffic (Tailscale)
- TLS/HTTPS on all external endpoints (Let's Encrypt)
- Docker container isolation with resource limits
- Zero SSH access — all configuration is declarative
License
MIT — see pyproject.toml.
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
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
File details
Details for the file rethink_mesh-0.3.0.tar.gz.
File metadata
- Download URL: rethink_mesh-0.3.0.tar.gz
- Upload date:
- Size: 156.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6655cdeeabc5b9448a9ff7d8e85a6ea60adb2e580fa3f6436555df7d50643d35
|
|
| MD5 |
3798138e26ff7dc8540634ef5a5d63d3
|
|
| BLAKE2b-256 |
8ad8fa27cf7b416e86b9fd08903f4fb926cb664edf4645069b2f878341ec9fd0
|
File details
Details for the file rethink_mesh-0.3.0-py3-none-any.whl.
File metadata
- Download URL: rethink_mesh-0.3.0-py3-none-any.whl
- Upload date:
- Size: 208.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1e652ea7038f1de4f4aba30a6b5691677899341407ca9eec1c1daab38386171b
|
|
| MD5 |
2d9bd0a30356fe32c8345819f13232d9
|
|
| BLAKE2b-256 |
eb1a62ea00da8d9393810c362704630e391b17b0eab278fe0873848429462668
|