git-push deploy
powered by docker compose

git push your docker-compose.yml and your containers are live. How did we stray so far from heroku? Where is the next evolution of developer convenience? Manage everything over SSH: shells, logs, exec, compose commands. Zero installation required.

Deploying shouldn't require a CLI SDK.

You have a docker-compose.yml that works locally. To deploy it, you need to click-ops through deploying a VM and then installing docker with proper permissions.

The gap between "it runs on my machine" and "it's live" should be one command.

deploying without picd
# Provision a VM
# Install Docker
# Install docker-compose
# Set up Traefik or Caddy
# Configure ACME certificates
# Set up SSH keys
# rsync your compose file
# ssh in and run docker-compose up
# hope you didn't miss a step
# 9 steps to deploy a container

git push deploy.

Add a git remote pointing to picd, push your docker-compose.yml, and your containers are live. That's it!

picd receives your push, checks out the repo, reads your compose file, and runs docker-compose up -d for you. Your existing compose files work as-is.

  • git remote add picd ssh://cd.pico.sh/user/project
  • git push picd main and your containers are live
  • Roll back with git push picd <old-commit> main
  • Same compose file runs locally and remotely
git push deploy
$ git remote add picd ssh://cd.pico.sh/user/httpbin
$ git push picd main
 
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), done.
remote: Creating user_httpbin_1 ... done
remote:
To ssh://cd.pico.sh/user/httpbin
95fae00..a34685d main -> main
 
# your service is now live

docker compose as a first-class service.

docker-compose.yml
--- docker-compose.yml ---
services:
  echo:
    build: .
    networks:
      - default
      - picd-ingress
    labels:
      traefik.enable: true
      traefik.http.routers.echo.rule: Host(`echo-<user>.apps.pico.sh`)
 
networks:
  picd-ingress:
    external: true
 
$ git remote add picd ssh://cd.pico.sh/user/project.git
$ git push picd main
 
→ containers deployed
→ echo-<user>.apps.pico.sh is live

Your docker-compose.yml is your infrastructure. picd respects every compose feature (volumes, networks, depends_on, restart policies) and adds two things on top:

  • Auto HTTPS via reverse proxy
  • Add a traefik.http.routers label and your service gets a public URL
  • Relative volume mounts preserve data across deploys
  • Compose networks are managed automatically
docker-compose.yml
git push picd
containers live
auto https

Manage everything over SSH.

No web dashboard. No REST API. No CLI SDK to install. If SSH works, you can manage your deployment.

picd gives you management commands, environment variables, custom domains, container exec, logs, and attach, all through standard SSH.

ssh management
# Management commands
$ ssh picd status myapp
$ ssh picd set-env myapp DATABASE_URL=postgres://...
$ ssh picd redeploy myapp
$ ssh picd add-custom-domain myapp.example.com
$ ssh picd dc ps -a
 
# Run a command inside a container
$ ssh echo@cd.pico.sh env
 
# Follow container logs
$ ssh l-echo@cd.pico.sh
 
# Exec into a container
$ ssh c-echo@cd.pico.sh
 
# Attach to a container
$ ssh a-echo@cd.pico.sh

Management commands

Check project status, set environment variables, trigger redeployments, and manage custom domains, all via ssh picd <command>. Run ssh picd help for the full list.

Run commands in containers

Execute any command directly inside a project container with ssh <project>@<host> <command>. No interactive shell needed.

Container exec, logs, attach

SSH directly into containers using their names. Prefix with l- for logs, c- for exec, a- for attach. Standard SSH, standard debugging workflow.

lazydocker pre-loaded

Every project shell comes with lazydocker ready to go. Spin up the TUI to inspect containers, check resource usage, and browse logs interactively.

Built for terminal workflows.

Git Push Deploy

Git-push deployments: add a remote, push your compose file, containers are live. Roll back by pushing an older commit. No platform lock-in.

SSH-First Management

Every operation is an SSH command. Status checks, env vars, custom domains, container exec, logs, and attach. SSH keys are your auth and we support SSH certificates for RBAC control.

Zero-Downtime Deploys

New containers start before old ones stop. Your app stays live during every deploy.

Auto HTTPS

Add traefik.http.routers labels in your compose file. Traefik handles routing and HTTPS certificates automatically. Zero config.

Custom Domains

Bring your own domain. Point a DNS record at picd and your app is live on your domain with HTTPS, no extra configuration needed.

The difference is simplicity.

Other platforms
deploying
# Provision cloud account
# Install cloud CLI
# Configure credentials
# Create cluster / app
# Write platform-specific config
# Configure CI/CD pipeline
# Deploy
# Debug via web console
 
# ← that's a lot of steps
# ← and you need their SDK
# ← and their YAML format
picd
deploying
$ git remote add picd ssh://cd.pico.sh/user/app
$ git push picd main
 
remote: Creating user_app_web_1 ... done
 
# ← that's it
# ← your compose file works
# ← ssh into containers to debug

For people who prefer SSH to web dashboards.

picd is for developers and small teams who want to deploy fast without cloud provider lock-in. You write a docker-compose file, you push it, your containers are live, and if something breaks you SSH in and fix it. No platform-specific tools, no web console navigation, no API key management.

We're going to keep this simple. This is not an enterprise product, this is for individuals and small teams who want to hack on projects without the complexity of large cloud providers.

Frequently asked questions.

How much does it cost?

Pricing hasn't been announced yet. Sign up for the beta and we'll let you know when pricing details are available.

Are there resource limits?

Resource limits (CPU, memory, storage) are to be determined. We'll share details closer to launch.

Can I use private Docker registries?

Yes. Private registries are supported through our environment variable management. Set your registry credentials as environment variables on your project via ssh picd set-env, and they'll be available during container builds.

Are persistent volumes supported?

Yes. Persistent volumes are supported and your data is preserved across deploys. Use named volumes in your docker-compose.yml as you normally would.

Why create another SSH-to-VM service?

We have been prototyping how to best provide a pico-paas for years. We love the ergonomics of docker-compose and created pcompose which is the base for picd. While picd has diverged from this original project, it's rooted in the same concepts and tech.

Get early access to picd managed hosting.

Sign up for our managed beta at cd.pico.sh.