Deploy apps to your own servers from the command line. Zero DevOps, full control.
The DollarDeploy CLI (ddc) lets you manage servers, deploy applications, and control your infrastructure — all from the terminal. Designed for CI/CD pipelines, AI agents, and developers who prefer the command line.
npm install -g @dollardeploy/cliOr use npx:
npx @dollardeploy/cli help- Sign in at dollardeploy.com
- Go to Settings → API Keys
- Click Create API Key and copy it
# Interactive
ddc auth
# Non-interactive
ddc auth --api-key <your-api-key>Your API key is saved to ~/.dollardeploy/auth and can be overridden with the --api-key flag or DOLLARDEPLOY_API_KEY environment variable.
# Deploy from GitHub to an existing host
ddc deploy --url https://github.com/your-org/your-app --hostId <host-id>
# Deploy and auto-create a host
ddc deploy --url https://github.com/your-org/your-app --create-host
# Deploy from a template
ddc deploy --template nextjs-boilerplate --hostId <host-id>Save your API key for future commands.
ddc auth # Interactive prompt
ddc auth --api-key <key> # Non-interactiveAPI key resolution order: --api-key flag > DOLLARDEPLOY_API_KEY env var > ~/.dollardeploy/auth file.
Show current user information.
ddc userList all hosts in your account.
ddc host list
ddc host list --status active
ddc host list --json # Machine-readable outputCreate and provision a new host. You need to set the integration with your cloud provider first in the DollarDeploy Settings => Integrations.
# Just create a host entry
ddc host create --name my-server
# Create a host on Hetzner
ddc host create --name my-server --provider hetzner --type cpx31 --region fsn1
# Create a host on DigitalOcean
ddc host create --name my-server --provider do --type s-2vcpu-4gb --region fra1
# Create a host on Verda Cloud (formerly DataCrunch)
ddc host create --name my-server --provider verda --type CPU.4V.16G --region FIN-01
# Create a host with Docker and PostgreSQL
ddc host create --name my-server --services docker,postgres| Option | Description | Default |
|---|---|---|
--name |
Host name | auto-generated |
--provider |
Cloud provider: hetzner, do, datacrunch |
hetzner |
--type |
Instance type | cax11 |
--region |
Provider region | fsn1 |
--image |
OS image | ubuntu-24.04 |
--services |
Comma-separated services to install | docker |
--skip-prepare |
Skip host preparation step | false |
--timeout |
Timeout in milliseconds | 600000 |
Prepare a host for deployment. This will install the necessary services and configure the host for deployment.
ddc host prepare <host-id>Deprovision and permanently delete a host. This removes the VM from your cloud provider.
ddc host destroy <host-id>
ddc host destroy <host-id> --yes # DANGEROUS: Skip confirmationRemove a host from DollarDeploy without deprovisioning. The server continues running but is no longer managed.
ddc host remove <host-id>
ddc host remove <host-id> --yes # DANGEROUS: Skip confirmationDeploy an application to a host. Supports GitHub repos, templates, and redeployment of existing apps.
Also available as ddc app deploy.
# Deploy from GitHub (will redeploy existing app if URL matches)
ddc deploy --url https://github.com/org/repo --hostId <host-id>
# Deploy with a new host
ddc deploy --url https://github.com/org/repo --create-host
# Deploy a template
ddc deploy --template twenty-crm --hostId <host-id>
# Redeploy an existing app
ddc deploy --appId <app-id>
# Deploy with environment variables
ddc deploy --url https://github.com/org/repo --hostId <host-id> --env:DATABASE_URL postgres://...
# Deploy with app property overrides
ddc deploy --url https://github.com/org/repo --hostId <host-id> --set:mainPort 8080The deploy command is smart about redeployment — if you deploy the same GitHub URL to the same host, it will detect the existing app and redeploy it instead of creating a duplicate.
| Option | Description |
|---|---|
--url |
GitHub repository URL |
--template |
Template ID to deploy |
--appId |
Existing app ID to redeploy |
--hostId |
Target host ID |
--create-host |
Create a new host for deployment |
--name |
App name |
--env NAME=VALUE |
Set environment variable |
--set:<key> |
Set app property (mainPort, env:PROPERTY_NAME, etc.) |
--provider |
Provider for --create-host |
--type |
Instance type for --create-host |
--region |
Region for --create-host |
--services |
Services for --create-host |
--timeout |
Timeout in milliseconds (default: 600000) |
Build an app, optionally deploying it after build.
Also available as ddc app build.
ddc build <app-id>
ddc build <app-id> --deploy| Option | Description |
|---|---|
--deploy |
Deploy after building |
--timeout |
Timeout in milliseconds (default: 600000) |
List all apps in your account.
ddc app list
ddc app list --jsonList all templates.
ddc template list
ddc template list <search>
ddc template list --jsonAdd an SSH public key to your DollarDeploy account.
ddc ssh add ${HOME}/.ssh/id_rsa --name my-key| Option | Description |
|---|---|
--name |
Key name (default: cli-added-key) |
List all SSH keys in your account.
ddc ssh list
ddc ssh list --name my-key| Option | Description |
|---|---|
--api-key <key> |
API key (overrides stored auth and env var) |
--base-url <url> |
API base URL (default: https://dollardeploy.com) |
--json |
Output as JSON (machine-readable) |
--verbose, -v |
Enable verbose logging |
--help, -h |
Show help |
--version, -V |
Show version |
All commands support --json for structured, machine-readable output:
ddc host list --json
ddc deploy --url https://github.com/org/repo --hostId <id> --jsonJSON output goes to stdout, while progress/status messages go to stderr, making it easy to pipe results into other tools.
| Variable | Description | Default |
|---|---|---|
DOLLARDEPLOY_API_KEY |
Your API key | — |
DOLLARDEPLOY_BASE_URL |
API base URL | https://dollardeploy.com |
| Provider | Type | Region | Image |
|---|---|---|---|
| Hetzner | cax11 |
fsn1 |
ubuntu-24.04 |
| DigitalOcean | s-2vcpu-4gb |
fra1 |
ubuntu-24-04 |
| Verda Cloud | CPU.4V.16G |
FIN-01 |
ubuntu-24.04 |
name: Deploy my app
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "22"
- name: Deploy
env:
DOLLARDEPLOY_API_KEY: ${{ secrets.DOLLARDEPLOY_API_KEY }}
run: |
npm install -g @dollardeploy/cli
ddc deploy --url ${{ github.server_url }}/${{ github.repository }}Use the CLI as a Node.js library:
const { createApiClient, waitForTask, checkUrl } = require("@dollardeploy/cli");
const api = createApiClient("https://dollardeploy.com", process.env.DOLLARDEPLOY_API_KEY);
// List all hosts
const hosts = await api.listHosts();
// Create and provision a host
const host = await api.createHost("my-server");
await api.saveProvision(host.id, {
provider: "hetzner",
providerType: "cax11",
providerRegion: "fsn1",
image: "ubuntu-24.04"
});
const task = await api.startProvision(host.id);
await waitForTask(api, task.id);
// Deploy an app
const app = await api.createApp({
repositoryUrl: "https://github.com/org/repo",
hostId: host.id,
name: "my-app"
});
const buildTask = await api.buildApp(app.id, { deploy: true });
await waitForTask(api, buildTask.id);
// Verify deployment
await checkUrl(`https://${app.hostname}`);| Method | Description |
|---|---|
createHost(name?) |
Create a new host |
getHost(id) |
Get host details |
listHosts(status?) |
List all hosts |
updateHost(id, data) |
Update host configuration |
deleteHost(id) |
Delete a host |
testConnection(hostId) |
Test SSH connection |
prepareHost(hostId) |
Prepare host for deployments |
| Method | Description |
|---|---|
getProvision(hostId) |
Get provision config |
saveProvision(hostId, data) |
Save provision config |
provisionHost(hostId) |
Start provisioning |
startProvision(hostId) |
Alias for provisionHost |
deprovisionHost(hostId) |
Deprovision and delete |
| Method | Description |
|---|---|
listServices(hostId) |
List installed services |
createService(hostId, type) |
Install a service |
| Method | Description |
|---|---|
createApp(config) |
Create a new app |
getApp(id) |
Get app details |
listApps() |
List all apps |
updateApp(id, data) |
Update app configuration |
suggestApp(app) |
Get AI configuration suggestions |
buildApp(id, options?) |
Build app (optionally deploy) |
deployApp(id) |
Deploy built app |
deleteApp(id) |
Delete an app |
removeApp(id, options?) |
Remove app from host |
| Method | Description |
|---|---|
listSshKeys() |
List all SSH keys |
createSshKey(data) |
Create an SSH key |
| Method | Description |
|---|---|
getTemplates() |
List all templates |
getTemplate(id) |
Get template details |
launchTemplate(config) |
Launch from template |
| Method | Description |
|---|---|
getTask(id) |
Get task status |
getTaskJournal(id) |
Get task logs |
| Method | Description |
|---|---|
getUser() |
Get current user info |
- Website: dollardeploy.com
- CLI Docs: docs.dollardeploy.com
- API Reference: dollardeploy.com/apidocs
- GitHub: github.com/dollardeploy
- Discord: Join our community
CLI is licensed under MIT © DollarDeploy