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.
Install the CLI
Install the particle CLI with a single command. Works on macOS and Linux.
$ curl -fsSL https://runparticle.com/install.sh | sh ✓ particle installed successfully
Or install via Homebrew on macOS:
$ brew install mj1618/tap/particle
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.
$ 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.
SSH In
Connect to your particle with particle ssh. Full root shell, no key management needed.
$ particle ssh myapp Welcome to Ubuntu 24.04 LTS root@myapp:~#
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
Create and start a new particle. If no account exists, one is auto-created from your SSH key.
$ particle run myapp --size p2 Creating particle 'myapp' (p2: 2 vCPUs, 4GB RAM, 20GB disk)... ✓ Particle 'myapp' is running
| Flag | Default | Description |
|---|---|---|
--size <tier> | p1 | VM size: p1, p2, p4, p8, p16. See Pricing. |
--image <image> | ubuntu-24.04 | Base OS image. Run particle images to list options. |
--port <port> | 80 | HTTP port to expose. |
--init <script> | — | Shell script to run on first boot. |
--ssh | — | SSH into the particle after creation. |
particle list
List all particles on your account with their status, size, and URL.
$ particle list NAME SIZE STATUS URL myapp p2 running myapp.runparticle.com staging p1 stopped staging.runparticle.com
particle status
Show detailed info about a particle: size, uptime, idle policy, internal IP, and more.
$ 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
Stop a running particle. Disk is preserved — you're only charged the stopped storage rate.
$ particle stop myapp ✓ Particle 'myapp' stopped
particle start
Start a stopped particle. Resumes with disk intact.
$ particle start myapp ✓ Particle 'myapp' is running
particle delete
Permanently delete a particle and its disk. Cannot be undone.
$ particle delete myapp Deleted particle myapp
particle rename
Rename a particle. Also updates the HTTP route to <new>.runparticle.com.
$ particle rename myapp production ✓ Renamed 'myapp' → 'production'
particle resize
Change a particle's size tier. The particle must be stopped first.
$ particle resize myapp p4 Resized myapp to p4
particle duplicate
Clone a stopped particle to a new one. Creates an exact copy of the disk.
$ particle duplicate myapp myapp-copy Cloning 'myapp' → 'myapp-copy'... ✓ Particle 'myapp-copy' created (stopped)
particle rebuild
Replace a particle's disk with a fresh image. Erases all data but keeps the name and configuration.
$ particle rebuild myapp -y Rebuilt particle myapp
| Flag | Description |
|---|---|
--image <image> | Switch to a different base image (e.g. debian-12). |
-y, --yes | Skip confirmation prompt. |
particle images
List available OS images for particle run --image.
$ 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
Open an interactive SSH session. If the particle is stopped, it will be started automatically.
$ particle ssh myapp Welcome to Ubuntu 24.04 LTS root@myapp:~#
| Flag | Default | Description |
|---|---|---|
-p, --port <port> | 22 | SSH port on the server. |
particle exec
Run a command on a particle via SSH and print the output. Use -- to separate flags from the command.
$ particle exec myapp -- uptime 14:32:01 up 3:42, 0 users, load average: 0.00, 0.00, 0.00
particle cp
Copy files to or from a particle using SCP. Use <name>:<path> for remote paths.
$ 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
| Flag | Description |
|---|---|
-r, --recursive | Recursively copy directories. |
particle forward
Forward local ports to a particle via SSH. Great for accessing databases, dev servers, or any TCP service.
$ 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
| Flag | Default | Description |
|---|---|---|
--bind <addr> | 127.0.0.1 | Bind address for local ports (e.g. 0.0.0.0 for all interfaces). |
particle ssh-config
Generate SSH config entries for your particles. Works with VS Code Remote-SSH, JetBrains Gateway, and other SSH tools.
$ particle ssh-config --write ✓ myapp.particle Written to ~/.ssh/config
| Flag | Default | Description |
|---|---|---|
--write | — | Write entries to ~/.ssh/config (idempotent). |
--prefix <pattern> | %s.particle | Host alias pattern (%s = particle name). |
particle open
Open a particle's HTTP URL in your default browser. Use --print to just print the URL.
$ particle open myapp Opening https://myapp-a1b2c3d4.runparticle.com ...
particle logs
View serial console output. Useful for debugging boot issues or watching startup scripts.
$ particle logs myapp -f [ 0.000000] Linux version 6.1.0 ... [ 2.345678] systemd[1]: Started OpenSSH server. █ streaming...
| Flag | Description |
|---|---|
-f, --follow | Stream 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
Set the default HTTP port. Traffic to <name>.runparticle.com will be forwarded to this port inside the VM. Default is 80.
$ particle port myapp 3000 Set HTTP port for myapp to 3000
particle idle
Control what happens when a particle has no active connections.
$ particle idle myapp on ✓ Idle policy for 'myapp' set to: on (always running)
particle env
Manage environment variables for a particle. Changes take effect after restarting the particle.
$ 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
Use a custom domain instead of the default .runparticle.com subdomain. Point a CNAME record to runparticle.com.
$ 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
Create a named snapshot of a particle's disk.
$ particle snapshot create myapp before-deploy ✓ Snapshot 'before-deploy' created
particle snapshot list
List all snapshots for a particle.
$ 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
Restore a snapshot. The particle must be stopped.
$ particle snapshot restore myapp before-deploy ✓ Snapshot 'before-deploy' restored
particle snapshot delete
Delete a snapshot.
$ particle snapshot delete myapp before-deploy ✓ Snapshot 'before-deploy' deleted
Account & Billing
Manage your account, balance, SSH keys, and payment history.
particle account
Show your account info, balance, and burn rate.
$ 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:
$ particle account email you@example.com ✓ Recovery email set $ particle account rotate-key New API key: rp_k1_n3w4k5e6y7...
particle topup
Add funds to your account via Stripe. Opens a checkout page in your browser.
$ particle topup 25 Opening Stripe checkout... ✓ $25.00 added to your account
| Argument | Default | Description |
|---|---|---|
[amount] | 10 | Amount in USD to add. |
particle usage
Per-particle usage breakdown — compute hours and spend.
$ particle usage PARTICLE SIZE STATUS COMPUTE TOTAL myapp p2 running 48.2h $1.16 staging p1 stopped 12.0h $0.14 ────────────────────────────────────────────────── $1.30
| Flag | Default | Description |
|---|---|---|
--period | month | day, week, month, or all |
particle history
Transaction history — top-ups and usage charges.
$ particle history DATE TYPE AMOUNT BALANCE 2026-03-06 topup +$25.00 $25.00 2026-03-06 usage -$0.24 $24.76
particle key
Manage SSH keys on your account. Add keys to access particles from multiple machines.
$ 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
Recover access to your account from a new machine via your recovery email.
$ 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
Update the CLI to the latest version.
$ particle upgrade Downloading particle v0.3.0... ✓ Updated to v0.3.0
particle completion
Generate shell completion scripts for tab-completion of particle names and commands.
# 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.