Documentation

Everything you need to run cloud VMs from your terminal.

Getting Started

From zero to a running cloud VM in under a minute. No signup, no dashboard — your SSH key is your identity.

1

Install the CLI

Install the particle CLI with a single command. Works on macOS and Linux.

terminal
$ curl -fsSL https://runparticle.com/install.sh | sh
✓ particle installed successfully

Or install via Homebrew on macOS:

terminal
$ brew install mj1618/tap/particle
2

Create a Particle

Run particle run with a name to create and start a VM. Your account is auto-created on first use — no signup required.

terminal
$ particle run myapp
Creating particle 'myapp' (p1: 1 vCPU, 2GB RAM, 10GB disk)...
✓ Particle 'myapp' is running

Particles automatically sleep after 2 minutes of inactivity and wake on SSH or HTTP. You only pay while running.

3

SSH In

Connect to your particle with particle ssh. Full root shell, no key management needed.

terminal
$ particle ssh myapp
Welcome to Ubuntu 24.04 LTS
root@myapp:~# 
4

Expose via HTTP

Every particle gets automatic HTTPS routing. Start a web server and it's instantly accessible:

https://myapp.runparticle.com

Traffic routes to port 80 or 8080 by default. Change the port with particle port myapp 3000. You can also access any port directly via myapp-3000-<acct>.runparticle.com.

Particles

Create, manage, and control the lifecycle of your cloud VMs.

particle run

particle run <name> [--size <tier>] [--image <image>] [--port <port>] [--init <script>] [--ssh]

Create and start a new particle. If no account exists, one is auto-created from your SSH key.

terminal
$ particle run myapp --size p2
Creating particle 'myapp' (p2: 2 vCPUs, 4GB RAM, 20GB disk)...
✓ Particle 'myapp' is running
FlagDefaultDescription
--size <tier>p1VM size: p1, p2, p4, p8, p16. See Pricing.
--image <image>ubuntu-24.04Base OS image. Run particle images to list options.
--port <port>80HTTP port to expose.
--init <script>Shell script to run on first boot.
--sshSSH into the particle after creation.

particle list

particle list

List all particles on your account with their status, size, and URL.

terminal
$ particle list
NAME      SIZE   STATUS    URL
myapp     p2     running   myapp.runparticle.com
staging   p1     stopped   staging.runparticle.com

particle status

particle status <name>

Show detailed info about a particle: size, uptime, idle policy, internal IP, and more.

terminal
$ particle status myapp
Name:     myapp
Size:     p2 (2 vCPUs, 4GB RAM, 20GB disk)
Status:   running
Uptime:   3h 42m
Idle:     sleep
URL:      myapp.runparticle.com

particle stop

particle stop <name>

Stop a running particle. Disk is preserved — you're only charged the stopped storage rate.

terminal
$ particle stop myapp
✓ Particle 'myapp' stopped

particle start

particle start <name>

Start a stopped particle. Resumes with disk intact.

terminal
$ particle start myapp
✓ Particle 'myapp' is running

particle delete

particle delete <name>

Permanently delete a particle and its disk. Cannot be undone.

terminal
$ particle delete myapp
Deleted particle myapp

particle rename

particle rename <name> <new>

Rename a particle. Also updates the HTTP route to <new>.runparticle.com.

terminal
$ particle rename myapp production
✓ Renamed 'myapp' → 'production'

particle resize

particle resize <name> <size>

Change a particle's size tier. The particle must be stopped first.

terminal
$ particle resize myapp p4
Resized myapp to p4

particle duplicate

particle duplicate <src> <name>

Clone a stopped particle to a new one. Creates an exact copy of the disk.

terminal
$ particle duplicate myapp myapp-copy
Cloning 'myapp' → 'myapp-copy'...
✓ Particle 'myapp-copy' created (stopped)

particle rebuild

particle rebuild <name> [--image <image>] [-y]

Replace a particle's disk with a fresh image. Erases all data but keeps the name and configuration.

terminal
$ particle rebuild myapp -y
Rebuilt particle myapp
FlagDescription
--image <image>Switch to a different base image (e.g. debian-12).
-y, --yesSkip confirmation prompt.

particle images

particle images

List available OS images for particle run --image.

terminal
$ particle images
NAME            DESCRIPTION               DEFAULT
ubuntu-24.04    Ubuntu 24.04 LTS          *
debian-12       Debian 12 (Bookworm)

SSH & Access

Connect to your particles, run commands, transfer files, and forward ports.

particle ssh

particle ssh <name> [-p <port>]

Open an interactive SSH session. If the particle is stopped, it will be started automatically.

terminal
$ particle ssh myapp
Welcome to Ubuntu 24.04 LTS
root@myapp:~# 
FlagDefaultDescription
-p, --port <port>22SSH port on the server.

particle exec

particle exec <name> <command...>

Run a command on a particle via SSH and print the output. Use -- to separate flags from the command.

terminal
$ particle exec myapp -- uptime
 14:32:01 up 3:42, 0 users, load average: 0.00, 0.00, 0.00

particle cp

particle cp <src> <dst> [-r]

Copy files to or from a particle using SCP. Use <name>:<path> for remote paths.

terminal
$ particle cp ./app.tar.gz myapp:/tmp/
app.tar.gz                  100%  4.2MB  12.1MB/s   00:00
$ particle cp myapp:/var/log/app.log ./
app.log                     100%  128KB   8.5MB/s   00:00
FlagDescription
-r, --recursiveRecursively copy directories.

particle forward

particle forward <name> [local:]remote [...] [--bind <addr>]

Forward local ports to a particle via SSH. Great for accessing databases, dev servers, or any TCP service.

terminal
$ particle forward myapp 5432 8080
Forwarding 127.0.0.1:5432 → myapp:5432
Forwarding 127.0.0.1:8080 → myapp:8080
Press Ctrl+C to stop
FlagDefaultDescription
--bind <addr>127.0.0.1Bind address for local ports (e.g. 0.0.0.0 for all interfaces).

particle ssh-config

particle ssh-config [--write] [--prefix <pattern>]

Generate SSH config entries for your particles. Works with VS Code Remote-SSH, JetBrains Gateway, and other SSH tools.

terminal
$ particle ssh-config --write
  ✓ myapp.particle
Written to ~/.ssh/config
FlagDefaultDescription
--writeWrite entries to ~/.ssh/config (idempotent).
--prefix <pattern>%s.particleHost alias pattern (%s = particle name).

particle open

particle open <name> [--print]

Open a particle's HTTP URL in your default browser. Use --print to just print the URL.

terminal
$ particle open myapp
Opening https://myapp-a1b2c3d4.runparticle.com ...

particle logs

particle logs <name> [--follow] [--lines <n>]

View serial console output. Useful for debugging boot issues or watching startup scripts.

terminal
$ particle logs myapp -f
[    0.000000] Linux version 6.1.0 ...
[    2.345678] systemd[1]: Started OpenSSH server.
█ streaming...
FlagDescription
-f, --followStream logs in real-time (like tail -f).
--lines <n>Number of log lines to show (default: 100).

Configuration

Configure HTTP routing, idle behavior, environment variables, and custom domains.

particle port

particle port <name> <port>

Set the default HTTP port. Traffic to <name>.runparticle.com will be forwarded to this port inside the VM. Default is 80.

terminal
$ particle port myapp 3000
Set HTTP port for myapp to 3000

particle idle

particle idle <name> <policy>

Control what happens when a particle has no active connections.

sleep
Stop after 2 min idle, wake on connect. Default.
none
No auto-stop. Runs until you stop it manually.
on
Always running 24/7, never auto-stop.
schedule
Run during set hours, stop otherwise.
terminal
$ particle idle myapp on
✓ Idle policy for 'myapp' set to: on (always running)

particle env

particle env list|set|rm <particle> [KEY=value ...]

Manage environment variables for a particle. Changes take effect after restarting the particle.

terminal
$ particle env set myapp DATABASE_URL=postgres://localhost/mydb
Set DATABASE_URL
Restart the particle for changes to take effect.
$ particle env list myapp
DATABASE_URL  postgres://localhost/mydb
$ particle env rm myapp DATABASE_URL
Removed DATABASE_URL

particle domain

particle domain set|clear <name> [domain]

Use a custom domain instead of the default .runparticle.com subdomain. Point a CNAME record to runparticle.com.

terminal
$ particle domain set myapp app.example.com
✓ Custom domain set: app.example.com → myapp
$ particle domain clear myapp
✓ Custom domain removed from 'myapp'

Snapshots

Create point-in-time backups of your particle's disk. Restore anytime.

particle snapshot create

particle snapshot create <particle> <name>

Create a named snapshot of a particle's disk.

terminal
$ particle snapshot create myapp before-deploy
✓ Snapshot 'before-deploy' created

particle snapshot list

particle snapshot list <particle>

List all snapshots for a particle.

terminal
$ particle snapshot list myapp
NAME              SIZE      CREATED
before-deploy     2.1 GB    2026-03-07 10:30
initial-setup     1.8 GB    2026-03-05 14:00

particle snapshot restore

particle snapshot restore <particle> <name>

Restore a snapshot. The particle must be stopped.

terminal
$ particle snapshot restore myapp before-deploy
✓ Snapshot 'before-deploy' restored

particle snapshot delete

particle snapshot delete <particle> <name>

Delete a snapshot.

terminal
$ particle snapshot delete myapp before-deploy
✓ Snapshot 'before-deploy' deleted

Account & Billing

Manage your account, balance, SSH keys, and payment history.

particle account

particle account

Show your account info, balance, and burn rate.

terminal
$ particle account
Account:    SHA256:a1b2c3...
Balance:    $9.76
Particles:  1 running, 1 stopped
Burn rate:  $0.024/hr

You can also manage your recovery email and rotate your API key:

terminal
$ particle account email you@example.com
✓ Recovery email set
$ particle account rotate-key
New API key: rp_k1_n3w4k5e6y7...

particle topup

particle topup [amount]

Add funds to your account via Stripe. Opens a checkout page in your browser.

terminal
$ particle topup 25
Opening Stripe checkout...
✓ $25.00 added to your account
ArgumentDefaultDescription
[amount]10Amount in USD to add.

particle usage

particle usage [--period <period>]

Per-particle usage breakdown — compute hours and spend.

terminal
$ particle usage
PARTICLE     SIZE   STATUS     COMPUTE    TOTAL
myapp        p2     running       48.2h   $1.16
staging      p1     stopped       12.0h   $0.14
──────────────────────────────────────────────────
                                          $1.30
FlagDefaultDescription
--periodmonthday, week, month, or all

particle history

particle history

Transaction history — top-ups and usage charges.

terminal
$ particle history
DATE         TYPE      AMOUNT    BALANCE
2026-03-06   topup     +$25.00   $25.00
2026-03-06   usage     -$0.24    $24.76

particle key

particle key list|add|remove

Manage SSH keys on your account. Add keys to access particles from multiple machines.

terminal
$ particle key list
FINGERPRINT                    ADDED
SHA256:a1b2c3d4e5f6...         2026-03-01
$ particle key add ~/.ssh/id_ed25519.pub
✓ Key added: SHA256:x7y8z9...
$ particle key remove SHA256:x7y8z9
✓ Key removed

particle login

particle login

Recover access to your account from a new machine via your recovery email.

terminal
$ particle login
Enter your recovery email: user@example.com
Check your email for a verification link...
✓ Logged in. API key stored in ~/.config/particle/credentials

System

Update the CLI and configure shell completions.

particle upgrade

particle upgrade

Update the CLI to the latest version.

terminal
$ particle upgrade
Downloading particle v0.3.0...
✓ Updated to v0.3.0

particle completion

particle completion [bash|zsh|fish|powershell]

Generate shell completion scripts for tab-completion of particle names and commands.

terminal
# Bash
$ particle completion bash > /etc/bash_completion.d/particle

# Zsh
$ particle completion zsh > "${fpath[1]}/_particle"

# Fish
$ particle completion fish > ~/.config/fish/completions/particle.fish

More Resources

Building an integration? See the API Reference for all REST endpoints.

Having trouble? Check the Troubleshooting & FAQ.