Native Letta on a temp VPS: no Docker, systemd, uv
We needed Letta running on a temporary VPS for a client demonstration environment. The hosting environment was minimal — basic Linux VPS, no containers, no systemd service manager, no Docker installation. We needed a lightweight, reproducible Letta runtime, so we built one using native Python with uv for package management, direct database setup, and cron for scheduled execution. This is the full implementation.
Why Consider Native Deployment
Docker remains our standard deployment approach for Letta in production and most development scenarios. The containerized approach simplifies complexity and ensures consistent behavior across environments. However, there are situations where containerization isn't available or appropriate:
A temporary demonstration environment on cheap VPS hosting is a common need — you need to show Letta works to a client, but provisioning a full Docker environment isn't practical or might violate hosting constraints. Some hosting providers intentionally don't support containers, especially budget options — you get a bare VPS and are responsible for everything. Quick prototyping should be fast without container overhead, and native deployment removes layer complexity you sometimes need to understand when containers misbehave. Some client environments have strict data privacy requirements that are easier to reason through with direct process control rather than container isolation.
In these situations, you have two choices: skip the deployment or build native. The approach we document is what we've used successfully.
Infrastructure Setup
The $5/month VPS gets minimal provisioning with a newly deployed Debian installation:
# Fresh Debian: install Python and required system packages
apt-get update
apt-get install -y python3.11 python3-pip python3-venv git sqlite3 libmysqlclient-dev nginx
# Create dedicated non-root user for security
useradd -m -s /bin/bash letta
chown -R letta:letta /home/letta
cd /home/letta
This gives us Python 3.11 with pip available, our database, nginx for reverse proxy, and a user account for isolation.
The key addition is uv (the Rust-based Python package manager) that provides a significant speed advantage:
# Install uv for fast package handling
pip install uv
# Verify installation
uv --version
The speed advantage matters: where pip might take several minutes to resolve and install dependencies for Letta and all its requirements, uv completes the same work in seconds. Over multiple deployment cycles, that's a meaningful time savings.
Letta Configuration
With dependencies ready, Letta gets configured in an isolated virtual environment:
# Create isolated environment
uv venv --python 3.11
# Activate environment for subsequent commands
source .venv/bin/activate
# Install Letta Server and core runtime dependencies
uv pip install letta-server letta-client sqlalchemy pymysql markdown
# Exact version pinning - this makes deployment reproducible
uv pip install "letta-server>=0.3.0,