R Rivet View repo
In active development — APIs and commands may change

A simple self-hosted PaaS for your VPS.

Rivet helps you ship Docker apps to your own server with SSL, domain routing, encrypted secrets, auto-sleep, and per-app runtime monitoring.

terminal
$ curl -fsSL \
  https://raw.githubusercontent.com/devmin8/rivet/main/scripts/install.sh \
  | sh

# Guided setup starts
# After install:
# https://console.your-given-domain.com

What Rivet does today

The goal is not to be a giant platform. The goal is to make the common VPS deployment path clean, secure, and understandable.

Create projects

Create and manage apps from Rivet with the core project lifecycle in one place.

Automatic SSL

Set up HTTPS for deployed apps so they are reachable securely on their domain.

Cloudflare DNS support

Provide a Cloudflare token and Rivet can create the required domain entry for you.

Domain-based app access

Once configured, apps become available automatically on the given domain.

Auto-sleep

Apps can sleep when there are no requests. Sleep timing is configurable per deployment needs.

Encrypted secrets

Manage environment variables and secrets safely. Secrets are encrypted and injected at runtime.

Per-app monitoring

View CPU, memory, and network usage for each individual app running on your server.

From empty VPS to first deploy

Bring up the Rivet server once, then use the CLI from any Docker project directory to create a project, upload an image, and deploy it behind your domain.

The server installer asks for your domain, secret key, image names, and persistent state path. When it finishes, the console is served from the domain you configured.

The CLI talks to that server with RIVET_SERVER_URL or --server-url, and stores your session after signup or signin.

1. Boot the Rivet server

curl -fsSL \
  https://raw.githubusercontent.com/devmin8/rivet/main/scripts/install.sh \
  | sh

Run this on the VPS that will host your apps. The guided setup configures the domain, secret encryption key, Docker network, Caddy, server, and console containers.

2. Get the CLI

Download the Rivet CLI for your machine from GitHub releases, then point it at your Rivet server before signing in.

Open releases

3. Ship a new Docker project

# Point the CLI at your Rivet server
export RIVET_SERVER_URL=https://console.example.com

# Create the first account and store a session
rivet signup

# From a directory with a Dockerfile
rivet ship

# Choose "new", then enter:
# name, domain, app port, and optional description

rivet ship builds the current directory, uploads the image, and deploys it. Use --platform for linux/amd64 or linux/arm64.

Runtime values from .env

If a .env file is present, rivet ship imports it before the Docker build. Keys prefixed with RIVET_SECRET_ are saved as encrypted secrets and exposed to the app without that prefix.

APP_URL=https://my-app.example.com
RIVET_SECRET_API_KEY=sk_live_example

What is coming next

Rivet is being built in public and the roadmap is focused on practical infrastructure features for small teams and self-hosters.

Docker logs

View and inspect app logs from the console.

Multi-server management

Manage multiple servers from one Rivet control plane.

Server monitoring

Track server-level CPU, memory, disk, swap, and runtime health.

Static site hosting

Host static sites directly without needing a Docker image.

Automatic image builds

Build Docker images automatically with Railpack.

Databases and backups

Database provisioning and backup workflows for hosted apps.

Development preview

Built for people who want their deployment stack to stay understandable.

Rivet is early, but the direction is clear: minimal self-hosted infrastructure, secure defaults, and enough automation to make VPS deployments pleasant.