Skip to content

Limitations

Understanding tenement’s design constraints helps you decide if it’s right for your use case.

These are fundamental to tenement’s design and won’t change:

tenement requires Linux for:

  • Namespace isolation (unshare syscalls)
  • Cgroup resource limits (cgroups v2)
  • gVisor sandbox (Linux kernel interface)

Workaround: Develop on macOS/Windows using a Linux VM or container, deploy to Linux.

tenement manages processes on one machine. For multi-server deployments:

  • Use slum for fleet orchestration
  • Use Kubernetes, Nomad, or Fly.io for cluster management

tenement runs processes, not containers. You can’t:

  • Pull images from Docker Hub
  • Use OCI registries (GitHub Container Registry, etc.)
  • Layer-cache builds

Workaround: Pre-install dependencies on the host using uv, bun, nix, or build static binaries.

tenement doesn’t manage:

  • Virtual networks between instances
  • Service discovery
  • Cross-instance DNS

Workaround: Instances communicate via localhost. Use environment variables for service URLs.

These are current constraints that may change:

Logs are kept in memory (ring buffer) and not persisted to disk. On restart, logs are lost.

Workaround: Ship logs to external service (Loki, CloudWatch, Papertrail).

Prometheus metrics are exported but not stored. You need an external Prometheus server.

Workaround: Run Prometheus + Grafana, or use a hosted metrics service.

tenement doesn’t encrypt or manage secrets. Environment variables are stored in plain text in config.

Workaround: Use external secrets managers (Vault, Doppler, AWS Secrets Manager) and inject at runtime.

tenement doesn’t auto-scale based on load. You manually spawn/stop instances.

Workaround: Write a script that monitors metrics and spawns/stops instances.

The ten deploy command spawns new instances but doesn’t automatically stop old ones.

Workaround: Use ten route for blue-green deployments, manually stop old versions.

These features are explicitly out of scope:

tenement won’t:

  • Support Docker images
  • Integrate with Kubernetes
  • Run OCI containers

Alternative: Use Docker, Podman, or containerd.

tenement won’t:

  • Provision cloud resources
  • Manage VMs across providers
  • Handle cloud-specific networking

Alternative: Use Terraform, Pulumi, or cloud-native tools.

tenement won’t:

  • Run databases
  • Manage database connections
  • Handle migrations

Alternative: Use managed databases or run databases separately.

tenement won’t:

  • Cold-start functions per request
  • Run short-lived functions
  • Manage function deployments

Alternative: Use Lambda, CloudFlare Workers, or Deno Deploy.

FeaturetenementDockerKubernetes
Single serverYesYesNo (cluster)
Multi-serverNo (use slum)SwarmYes
Container imagesNoYesYes
Native performanceYes~95%~90%
Setup complexityLowMediumHigh
Memory overhead~0-20MB~50MB~200MB+
Scale-to-zeroBuilt-inManualComplex
  • You need multi-server deployments → Kubernetes, Nomad, Fly.io
  • You need container images → Docker, Podman
  • You need Windows/macOS production → Docker
  • You need serverless → Lambda, CloudFlare Workers
  • You need managed databases → Cloud providers
  • You need high availability → Multiple servers with load balancer
  • Multi-tenant SaaS on a budget → tenement + scale-to-zero
  • Microservices on one server → tenement + namespace isolation
  • Development environments → tenement + fast iteration
  • Cost-sensitive deployments → tenement + overstuff VPS
  • Simple deployments → tenement + single binary