
Research
SANDWORM_MODE: Shai-Hulud-Style npm Worm Hijacks CI Workflows and Poisons AI Toolchains
An emerging npm supply chain attack that infects repos, steals CI secrets, and targets developer AI toolchains for further compromise.
Deploy Coolify to any cloud VPS with one command
Quicklify is a CLI tool that automates Coolify installation on cloud VPS providers. One command to deploy your self-hosted PaaS platform.
Before Quicklify:
Create VPS manually (5 min)
SSH into server (2 min)
Install Docker (10 min)
Configure firewall (5 min)
Install Coolify (10 min)
Total: ~30 minutes + manual work
With Quicklify:
npx quicklify init
# Hetzner: ~4 minutes | DigitalOcean: ~6 minutes
# Zero manual work β¨
--full-setup flag auto-configures firewall + SSH hardening after deployquicklify init --config quicklify.yml for one-command deploy--template starter|production|dev with per-provider defaults--provider --token --region --size --name flagsnpx quicklify init
npm install -g quicklify
quicklify init
Hetzner Cloud:
DigitalOcean:
npx quicklify init
You'll be prompted for:
After deployment (Hetzner ~4 min, DigitalOcean ~6 min):
β
Deployment Successful!
Server IP: 123.45.67.89
Access Coolify: http://123.45.67.89:8000
Visit the URL, create your admin account, and start deploying!
Important: Port 8000 is publicly accessible after deployment.
Recommended next steps:
quicklify init --full-setup (auto-configures firewall + SSH hardening)quicklify firewall setup my-serverquicklify domain add my-server --domain example.comquicklify secure setup my-serverquicklify secure audit my-serverquicklify backup my-server| Provider | Status | Starting Price | Architecture |
|---|---|---|---|
| Hetzner Cloud | β Available | β¬3.79/mo | ARM64 + x86 |
| DigitalOcean | β Available | $12/mo | x86 |
| Vultr | π Planned | $2.50/mo | x86 |
| Linode | π Planned | $5/mo | x86 |
Perfect for:
When to use alternatives:
| Solution | Monthly Cost | Setup Time | Management |
|---|---|---|---|
| Vercel (Hobby) | $20+ | 5 min | Easy |
| Vercel (Pro) | $50+ | 5 min | Easy |
| Netlify (Pro) | $19+ | 5 min | Easy |
| Quicklify + Hetzner | β¬3.79 | ~4 min | Easy |
| Quicklify + DigitalOcean | $12 | ~6 min | Easy |
| Manual VPS + Coolify | β¬3.79 | 30+ min | Hard |
Savings: ~$180-240/year per project! π°
quicklify init --config quicklify.yml - deploy from a config file--template starter|production|dev - predefined server configurations per providerquicklify backup, quicklify restore, quicklify export, quicklify import~/.quicklify/backups/, manifest.json metadataservers.json between machines, duplicate detection, format validation--full-setup flag: quicklify init --full-setup auto-configures firewall + SSH hardening after deployquicklify firewall, quicklify domain, quicklify secure--dry-run flag previews all commands without executingquicklify logs, quicklify monitor, quicklify health, quicklify doctor--follow real-time streamingquicklify config, quicklify ssh, quicklify update, quicklify restartquicklify config setquicklify ssh or run commands with --commandquicklify updatequicklify restartquicklify list, quicklify status [query], quicklify destroy [query]quicklify init --provider --token --region --size --name for CI/CD/datacenters API for real availability per locationany types - full type safety~/.quicklify/servers.json)destroyServer() on provider interfacequicklify config)quicklify ssh)quicklify update)quicklify restart)quicklify monitor)quicklify logs)quicklify health)quicklify doctor)quicklify firewall)quicklify domain)quicklify secure)quicklify backup)quicklify restore)quicklify export, quicklify import)--full-setup flag for auto firewall + SSH hardening on initquicklify.yml) for one-command deploy--template starter|production|dev)# Deploy new Coolify instance (interactive)
quicklify init
# Deploy non-interactively (CI/CD friendly)
export HETZNER_TOKEN="your-api-token"
quicklify init --provider hetzner --region nbg1 --size cax11 --name my-server
# Deploy with auto firewall + SSH hardening
quicklify init --full-setup
# Deploy from a YAML config file
quicklify init --config quicklify.yml
# Deploy using a template
quicklify init --template production --provider hetzner
# List all registered servers
quicklify list
# Check server and Coolify status
quicklify status 123.45.67.89
quicklify status my-server
# Destroy a server (with double confirmation)
quicklify destroy 123.45.67.89
quicklify destroy my-server
# Manage default configuration
quicklify config set provider hetzner
quicklify config set region nbg1
quicklify config get provider
quicklify config list
quicklify config reset
# SSH into a server
quicklify ssh my-server
quicklify ssh 123.45.67.89 -c "docker ps"
# Update Coolify on a server
quicklify update my-server
# Restart a server
quicklify restart my-server
# View Coolify logs (last 50 lines)
quicklify logs my-server
# Follow Coolify logs in real-time
quicklify logs my-server --follow
# View Docker or system logs
quicklify logs my-server --service docker --lines 100
quicklify logs my-server --service system
# Show CPU/RAM/Disk usage
quicklify monitor my-server
# Show usage with Docker containers
quicklify monitor my-server --containers
# Check health of all servers
quicklify health
# Run environment diagnostics
quicklify doctor
# Firewall management
quicklify firewall setup my-server # Install UFW + Coolify ports
quicklify firewall add my-server --port 3000 # Open port 3000/tcp
quicklify firewall add my-server --port 53 --protocol udp # Open port 53/udp
quicklify firewall remove my-server --port 3000 # Close port 3000
quicklify firewall list my-server # Show firewall rules
quicklify firewall status my-server # Check UFW active/inactive
quicklify firewall setup my-server --dry-run # Preview without executing
# Domain management
quicklify domain add my-server --domain example.com # Bind domain + HTTPS
quicklify domain add my-server --domain example.com --no-ssl # HTTP only
quicklify domain remove my-server # Revert to IP:8000
quicklify domain check my-server --domain example.com # Verify DNS
quicklify domain list my-server # Show current domain
quicklify domain add my-server --domain example.com --dry-run # Preview
# SSH hardening & security
quicklify secure status my-server # Show security settings
quicklify secure audit my-server # Security score (0-4)
quicklify secure setup my-server # Harden SSH + install fail2ban
quicklify secure setup my-server --port 2222 # Change SSH port
quicklify secure setup my-server --dry-run # Preview without executing
# Backup Coolify database and config
quicklify backup my-server # Full backup (pg_dump + config)
quicklify backup my-server --dry-run # Preview backup steps
# Restore from a backup
quicklify restore my-server # Interactive backup selection
quicklify restore my-server --backup 2026-02-21_15-30-45-123 # Specific backup
quicklify restore my-server --dry-run # Preview restore steps
# Export/Import server list
quicklify export # Export to ./quicklify-export.json
quicklify export /path/to/file.json # Export to custom path
quicklify import /path/to/file.json # Import servers (skips duplicates)
# Show version
quicklify --version
# Show help
quicklify --help
Set your API token as an environment variable, then pass all options as flags:
# Set token (recommended - avoids shell history exposure)
export HETZNER_TOKEN="your-api-token"
# or
export DIGITALOCEAN_TOKEN="your-api-token"
# Deploy non-interactively
quicklify init \
--provider hetzner \
--region nbg1 \
--size cax11 \
--name production-coolify
Token resolution order: environment variable > interactive prompt. The --token flag is available but not recommended as it exposes the token in shell history.
If some flags are missing, only the missing values will be prompted interactively.
Create a quicklify.yml file for repeatable deployments:
# quicklify.yml
template: production
provider: hetzner
region: nbg1
size: cx33
name: my-coolify-prod
fullSetup: true
Then deploy with:
export HETZNER_TOKEN="your-api-token"
quicklify init --config quicklify.yml
Security: Never store API tokens in config files. Use environment variables (export HETZNER_TOKEN=...).
Config merge priority: CLI flags > YAML values > template defaults > interactive prompts.
Templates provide sensible defaults per provider:
| Template | Hetzner | DigitalOcean | Full Setup |
|---|---|---|---|
starter | nbg1 / cax11 (β¬3.79) | fra1 / s-2vcpu-2gb ($12) | No |
production | nbg1 / cx33 (β¬5.49) | fra1 / s-2vcpu-4gb ($24) | Yes |
dev | nbg1 / cax11 (β¬3.79) | fra1 / s-2vcpu-2gb ($12) | No |
# Quick production deploy
export HETZNER_TOKEN="your-api-token"
quicklify init --template production --provider hetzner --name my-server
# Cheap starter for testing
export DIGITALOCEAN_TOKEN="your-api-token"
quicklify init --template starter --provider digitalocean --name test-server
All steps support β Back navigation to return to the previous step.
# Run all tests
npm test
# Run tests in watch mode
npm run test:watch
# Run tests with coverage report
npm run test:coverage
# Lint code
npm run lint
# Format code
npm run format
tests/
βββ __mocks__/ # Mock modules (axios, inquirer, ora, chalk)
βββ unit/ # Unit tests
β βββ cloudInit.test.ts
β βββ config.test.ts # Config CRUD operations
β βββ config-edge.test.ts # Config edge cases (corruption, empty files)
β βββ config-command.test.ts # Config command subcommands
β βββ defaults.test.ts # Default config CRUD
β βββ destroy.test.ts # Destroy command unit tests
β βββ doctor.test.ts # Doctor command tests
β βββ domain.test.ts # Domain command tests
β βββ firewall.test.ts # Firewall command tests
β βββ health-command.test.ts # Health command tests
β βββ healthCheck.test.ts # Health check polling tests
β βββ healthCheck-edge.test.ts # Health check edge cases (302, 401, 500)
β βββ list.test.ts # List command unit tests
β βββ logger.test.ts
β βββ logs.test.ts # Logs command tests
β βββ monitor.test.ts # Monitor command tests
β βββ prompts.test.ts
β βββ providerFactory.test.ts # Provider factory tests
β βββ restart.test.ts # Restart command tests
β βββ secure.test.ts # Secure command tests
β βββ backup.test.ts # Backup command tests
β βββ restore.test.ts # Restore command tests
β βββ transfer.test.ts # Export/Import command tests
β βββ templates.test.ts # Template definitions tests
β βββ yamlConfig.test.ts # YAML config loader tests
β βββ configMerge.test.ts # Config merge logic tests
β βββ init-fullsetup.test.ts # Init --full-setup tests
β βββ serverSelect.test.ts # Server selection utility tests
β βββ ssh-command.test.ts # SSH command tests
β βββ ssh-utils.test.ts # SSH helper tests
β βββ status.test.ts # Status command unit tests
β βββ update.test.ts # Update command tests
β βββ validators.test.ts
βββ integration/ # Integration tests (provider API calls)
β βββ hetzner.test.ts # Including destroyServer tests
β βββ digitalocean.test.ts # Including destroyServer tests
βββ e2e/ # End-to-end tests (full command flows)
βββ init.test.ts
βββ init-noninteractive.test.ts # Non-interactive mode E2E
βββ init-config.test.ts # YAML config + template E2E
βββ status.test.ts # Status command E2E
βββ destroy.test.ts # Destroy command E2E
Tests run automatically on every push/PR via GitHub Actions across:
Current coverage: 98%+ statements/lines, 91%+ branches, 98%+ functions. 742 tests across 40 test suites.
"Invalid API token"
"Server creation failed"
"Cannot access Coolify UI"
ssh root@YOUR_IP "cat /var/log/quicklify-install.log | tail -20"Contributions are welcome! See CONTRIBUTING.md for development setup, code guidelines, and PR process.
Areas for contribution:
MIT Β© 2026 Γmer FC
See LICENSE file for details.
If Quicklify helped you, please:
Made with β€οΈ by @omrfc
Saving developers time, one deployment at a time. β‘
FAQs
Automate Coolify deployment on cloud providers
The npm package quicklify receives a total of 260 weekly downloads. As such, quicklify popularity was classified as not popular.
We found that quicklify demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.Β It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
An emerging npm supply chain attack that infects repos, steals CI secrets, and targets developer AI toolchains for further compromise.

Company News
Socket is proud to join the OpenJS Foundation as a Silver Member, deepening our commitment to the long-term health and security of the JavaScript ecosystem.

Security News
npm now links to Socket's security analysis on every package page. Here's what you'll find when you click through.