quicklify 0.8.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/README.md +220 -32
  2. package/README.tr.md +800 -0
  3. package/dist/commands/add.d.ts +9 -0
  4. package/dist/commands/add.d.ts.map +1 -0
  5. package/dist/commands/add.js +151 -0
  6. package/dist/commands/add.js.map +1 -0
  7. package/dist/commands/backup.d.ts +1 -0
  8. package/dist/commands/backup.d.ts.map +1 -1
  9. package/dist/commands/backup.js +105 -6
  10. package/dist/commands/backup.js.map +1 -1
  11. package/dist/commands/config.d.ts.map +1 -1
  12. package/dist/commands/config.js +1 -1
  13. package/dist/commands/config.js.map +1 -1
  14. package/dist/commands/doctor.d.ts.map +1 -1
  15. package/dist/commands/doctor.js +5 -1
  16. package/dist/commands/doctor.js.map +1 -1
  17. package/dist/commands/init.d.ts.map +1 -1
  18. package/dist/commands/init.js +93 -12
  19. package/dist/commands/init.js.map +1 -1
  20. package/dist/commands/maintain.d.ts +8 -0
  21. package/dist/commands/maintain.d.ts.map +1 -0
  22. package/dist/commands/maintain.js +253 -0
  23. package/dist/commands/maintain.js.map +1 -0
  24. package/dist/commands/monitor.d.ts.map +1 -1
  25. package/dist/commands/monitor.js +2 -1
  26. package/dist/commands/monitor.js.map +1 -1
  27. package/dist/commands/remove.d.ts +2 -0
  28. package/dist/commands/remove.d.ts.map +1 -0
  29. package/dist/commands/remove.js +25 -0
  30. package/dist/commands/remove.js.map +1 -0
  31. package/dist/commands/restart.d.ts.map +1 -1
  32. package/dist/commands/restart.js +4 -0
  33. package/dist/commands/restart.js.map +1 -1
  34. package/dist/commands/restore.js +1 -1
  35. package/dist/commands/restore.js.map +1 -1
  36. package/dist/commands/secure.d.ts.map +1 -1
  37. package/dist/commands/secure.js +1 -1
  38. package/dist/commands/secure.js.map +1 -1
  39. package/dist/commands/status.d.ts +6 -1
  40. package/dist/commands/status.d.ts.map +1 -1
  41. package/dist/commands/status.js +120 -7
  42. package/dist/commands/status.js.map +1 -1
  43. package/dist/commands/transfer.d.ts.map +1 -1
  44. package/dist/commands/transfer.js +9 -1
  45. package/dist/commands/transfer.js.map +1 -1
  46. package/dist/commands/update.d.ts +5 -1
  47. package/dist/commands/update.d.ts.map +1 -1
  48. package/dist/commands/update.js +101 -14
  49. package/dist/commands/update.js.map +1 -1
  50. package/dist/index.js +36 -5
  51. package/dist/index.js.map +1 -1
  52. package/dist/providers/digitalocean.d.ts.map +1 -1
  53. package/dist/providers/digitalocean.js +4 -1
  54. package/dist/providers/digitalocean.js.map +1 -1
  55. package/dist/providers/hetzner.d.ts.map +1 -1
  56. package/dist/providers/hetzner.js +2 -2
  57. package/dist/providers/hetzner.js.map +1 -1
  58. package/dist/providers/linode.d.ts +21 -0
  59. package/dist/providers/linode.d.ts.map +1 -0
  60. package/dist/providers/linode.js +203 -0
  61. package/dist/providers/linode.js.map +1 -0
  62. package/dist/providers/vultr.d.ts +21 -0
  63. package/dist/providers/vultr.d.ts.map +1 -0
  64. package/dist/providers/vultr.js +183 -0
  65. package/dist/providers/vultr.js.map +1 -0
  66. package/dist/types/index.d.ts +22 -0
  67. package/dist/types/index.d.ts.map +1 -1
  68. package/dist/utils/config.d.ts +1 -0
  69. package/dist/utils/config.d.ts.map +1 -1
  70. package/dist/utils/config.js +7 -0
  71. package/dist/utils/config.js.map +1 -1
  72. package/dist/utils/configMerge.d.ts +16 -0
  73. package/dist/utils/configMerge.d.ts.map +1 -0
  74. package/dist/utils/configMerge.js +34 -0
  75. package/dist/utils/configMerge.js.map +1 -0
  76. package/dist/utils/prompts.d.ts.map +1 -1
  77. package/dist/utils/prompts.js +2 -0
  78. package/dist/utils/prompts.js.map +1 -1
  79. package/dist/utils/providerFactory.d.ts.map +1 -1
  80. package/dist/utils/providerFactory.js +10 -0
  81. package/dist/utils/providerFactory.js.map +1 -1
  82. package/dist/utils/serverSelect.d.ts +1 -0
  83. package/dist/utils/serverSelect.d.ts.map +1 -1
  84. package/dist/utils/serverSelect.js +37 -6
  85. package/dist/utils/serverSelect.js.map +1 -1
  86. package/dist/utils/ssh.d.ts.map +1 -1
  87. package/dist/utils/ssh.js +3 -1
  88. package/dist/utils/ssh.js.map +1 -1
  89. package/dist/utils/templates.d.ts +6 -0
  90. package/dist/utils/templates.d.ts.map +1 -0
  91. package/dist/utils/templates.js +49 -0
  92. package/dist/utils/templates.js.map +1 -0
  93. package/dist/utils/yamlConfig.d.ts +8 -0
  94. package/dist/utils/yamlConfig.d.ts.map +1 -0
  95. package/dist/utils/yamlConfig.js +136 -0
  96. package/dist/utils/yamlConfig.js.map +1 -0
  97. package/package.json +5 -1
package/README.md CHANGED
@@ -8,11 +8,11 @@
8
8
  ![GitHub stars](https://img.shields.io/github/stars/omrfc/quicklify?style=flat-square)
9
9
  [![Socket Badge](https://socket.dev/api/badge/npm/package/quicklify)](https://socket.dev/npm/package/quicklify)
10
10
 
11
- > Deploy Coolify to any cloud VPS with one command
11
+ > Deploy Coolify to a cloud VPS with one command
12
12
 
13
13
  ## 🚀 What is Quicklify?
14
14
 
15
- Quicklify is a CLI tool that automates Coolify installation on cloud VPS providers. One command to deploy your self-hosted PaaS platform.
15
+ Quicklify is a CLI tool that automates [Coolify](https://coolify.io/) deployment on cloud VPS providers. Coolify is an open-source, self-hosted alternative to Vercel/Netlify/Heroku — and Quicklify gets it running on your VPS with one command.
16
16
 
17
17
  **Before Quicklify:**
18
18
 
@@ -29,19 +29,19 @@ Total: ~30 minutes + manual work
29
29
 
30
30
  ```bash
31
31
  npx quicklify init
32
- # Hetzner: ~4 minutes | DigitalOcean: ~6 minutes
32
+ # Hetzner: ~4 min | DigitalOcean: ~6 min | Vultr: ~5 min | Linode: ~6 min
33
33
  # Zero manual work ✨
34
34
  ```
35
35
 
36
36
  ## ✨ Features
37
37
 
38
38
  - 🎯 **One Command Deploy** - VPS + Coolify with a single command
39
- - 💰 **Cost Savings** - $50-200/mo (Vercel/Netlify) → €3.49/mo
39
+ - 💰 **Cost Savings** - $50-200/mo (Vercel/Netlify) → €3.79/mo
40
40
  - 🔒 **Secure by Default** - Automated security setup
41
- - 🌍 **Multi-Cloud** - Hetzner Cloud + DigitalOcean
41
+ - 🌍 **Multi-Cloud** - Hetzner Cloud, DigitalOcean, Vultr, Linode
42
42
  - 💻 **Beautiful CLI** - Interactive prompts with validation
43
43
  - 🎨 **ARM64 Ready** - Support for cost-effective ARM servers
44
- - ⚡ **Fast Setup** - Hetzner ~4 min, DigitalOcean ~6 min
44
+ - ⚡ **Fast Setup** - Hetzner ~4 min, DigitalOcean ~6 min, Vultr ~5 min, Linode ~6 min
45
45
  - ✨ **Dynamic Server Types** - Only shows compatible types for selected location
46
46
  - 🔥 **Auto Firewall** - Ports 8000, 22, 80, 443 configured automatically
47
47
  - 🚀 **Zero SSH Required** - Opens directly in browser after deployment
@@ -61,7 +61,72 @@ npx quicklify init
61
61
  - 💾 **Backup & Restore** - Database + config backup with SCP download, restore with double confirmation
62
62
  - 📦 **Export/Import** - Transfer server list between machines as JSON
63
63
  - ⚡ **Full Setup** - `--full-setup` flag auto-configures firewall + SSH hardening after deploy
64
+ - 📄 **YAML Config** - `quicklify init --config quicklify.yml` for one-command deploy
65
+ - 📋 **Templates** - `--template starter|production|dev` with per-provider defaults
64
66
  - 🤖 **Non-Interactive Mode** - CI/CD friendly with `--provider --token --region --size --name` flags
67
+ - ➕ **Add Existing Servers** - `quicklify add` to register existing Coolify servers
68
+ - 🔄 **Bulk Operations** - `--all` flag for status, update, backup across all servers
69
+ - 🔁 **Auto-Restart** - `status --autostart` restarts Coolify if server is running but Coolify is down
70
+ - 🔧 **Full Maintenance** - `quicklify maintain` runs status, update, health check, reboot in sequence
71
+
72
+ ## 🎯 What Can You Do with Quicklify?
73
+
74
+ ### Deploy a Coolify Server in Minutes
75
+
76
+ ```bash
77
+ npx quicklify init # Interactive setup
78
+ npx quicklify init --provider hetzner --full-setup # With auto firewall + SSH hardening
79
+ npx quicklify init --template production # Production-ready defaults
80
+ npx quicklify init --config quicklify.yml # From YAML config file
81
+ ```
82
+
83
+ ### Manage Your Servers
84
+
85
+ ```bash
86
+ quicklify list # List all registered servers
87
+ quicklify status my-server # Check server + Coolify status
88
+ quicklify status --all # Check all servers at once
89
+ quicklify ssh my-server # SSH into a server
90
+ quicklify ssh my-server -c "uptime" # Run a remote command
91
+ ```
92
+
93
+ ### Keep Everything Updated & Healthy
94
+
95
+ ```bash
96
+ quicklify update my-server # Update Coolify to latest version
97
+ quicklify restart my-server # Reboot the server
98
+ quicklify maintain my-server # Full maintenance: status → update → health → reboot
99
+ quicklify maintain --all # Maintain all servers sequentially
100
+ quicklify health # Quick health check for all servers
101
+ ```
102
+
103
+ ### Backup & Restore
104
+
105
+ ```bash
106
+ quicklify backup my-server # Backup database + config files
107
+ quicklify backup --all # Backup all servers
108
+ quicklify restore my-server # Restore from a backup
109
+ quicklify export servers.json # Export server list
110
+ quicklify import servers.json # Import on another machine
111
+ ```
112
+
113
+ ### Security & Networking
114
+
115
+ ```bash
116
+ quicklify firewall setup my-server # Configure UFW with Coolify ports
117
+ quicklify domain add my-server --domain coolify.example.com # Bind domain + SSL
118
+ quicklify secure setup my-server # SSH hardening + fail2ban
119
+ quicklify secure audit my-server # Security audit with score (0-4)
120
+ ```
121
+
122
+ ### Monitoring & Diagnostics
123
+
124
+ ```bash
125
+ quicklify monitor my-server # Live CPU/RAM/Disk usage
126
+ quicklify logs my-server -f # Follow Coolify logs in real-time
127
+ quicklify doctor # Check local environment
128
+ quicklify status my-server --autostart # Auto-restart Coolify if down
129
+ ```
65
130
 
66
131
  ## 📦 Installation
67
132
 
@@ -97,6 +162,18 @@ quicklify init
97
162
  2. Generate New Token with **Read & Write** scope
98
163
  3. Copy the token
99
164
 
165
+ **Vultr:**
166
+
167
+ 1. Visit [Vultr API](https://my.vultr.com/settings/#settingsapi)
168
+ 2. Enable API and copy the API Key
169
+ 3. Whitelist your IP address
170
+
171
+ **Linode (Akamai):**
172
+
173
+ 1. Visit [Linode API Tokens](https://cloud.linode.com/profile/tokens)
174
+ 2. Create a Personal Access Token with **Read/Write** scope
175
+ 3. Copy the token
176
+
100
177
  ### Step 2: Deploy Coolify
101
178
 
102
179
  ```bash
@@ -112,7 +189,7 @@ You'll be prompted for:
112
189
 
113
190
  ### Step 3: Access Coolify
114
191
 
115
- After deployment (Hetzner ~4 min, DigitalOcean ~6 min):
192
+ After deployment (Hetzner ~4 min, DigitalOcean ~6 min, Vultr ~5 min, Linode ~6 min):
116
193
 
117
194
  ```
118
195
  ✅ Deployment Successful!
@@ -140,10 +217,10 @@ Visit the URL, create your admin account, and start deploying!
140
217
 
141
218
  | Provider | Status | Starting Price | Architecture |
142
219
  |----------|--------|----------------|--------------|
143
- | **Hetzner Cloud** | ✅ Available | €3.49/mo | ARM64 + x86 |
220
+ | **Hetzner Cloud** | ✅ Available | €3.79/mo | ARM64 + x86 |
144
221
  | **DigitalOcean** | ✅ Available | $12/mo | x86 |
145
- | **Vultr** | 📋 Planned | $2.50/mo | x86 |
146
- | **Linode** | 📋 Planned | $5/mo | x86 |
222
+ | **Vultr** | Available | $6/mo | x86 |
223
+ | **Linode (Akamai)** | Available | $12/mo | x86 |
147
224
 
148
225
  ## 💡 Use Cases
149
226
 
@@ -167,14 +244,32 @@ Visit the URL, create your admin account, and start deploying!
167
244
  | Vercel (Hobby) | $20+ | 5 min | Easy |
168
245
  | Vercel (Pro) | $50+ | 5 min | Easy |
169
246
  | Netlify (Pro) | $19+ | 5 min | Easy |
170
- | **Quicklify + Hetzner** | **€3.49** | **~4 min** | **Easy** |
247
+ | **Quicklify + Hetzner** | **€3.79** | **~4 min** | **Easy** |
171
248
  | **Quicklify + DigitalOcean** | **$12** | **~6 min** | **Easy** |
172
- | Manual VPS + Coolify | €3.49 | 30+ min | Hard |
249
+ | **Quicklify + Vultr** | **$6** | **~5 min** | **Easy** |
250
+ | **Quicklify + Linode** | **$12** | **~6 min** | **Easy** |
251
+ | Manual VPS + Coolify | €3.79 | 30+ min | Hard |
173
252
 
174
253
  **Savings: ~$180-240/year per project!** 💰
175
254
 
176
255
  ## 📋 Recent Updates
177
256
 
257
+ ### v1.0.0 (2026-02-23)
258
+ - **New providers:** Vultr and Linode (Akamai) — 4 cloud providers now supported
259
+ - **New command:** `quicklify add` — register existing Coolify servers to Quicklify management
260
+ - **New command:** `quicklify maintain` — full maintenance cycle (status, update, health, reboot)
261
+ - **Bulk operations:** `--all` flag on `status`, `update`, `backup` — operate on all servers at once
262
+ - **Auto-restart:** `status --autostart` — restarts Coolify if server is running but Coolify is down
263
+ - **`collectProviderTokens()`** — asks for each provider's token only once across all servers
264
+ - 937 tests across 44 suites with 98%+ statement coverage, zero new dependencies
265
+
266
+ ### v0.9.0 (2026-02-21)
267
+ - **YAML Config:** `quicklify init --config quicklify.yml` - deploy from a config file
268
+ - **Templates:** `--template starter|production|dev` - predefined server configurations per provider
269
+ - **Config merge:** Priority order: CLI flags > YAML config > template defaults > interactive prompts
270
+ - **Security:** Token fields in YAML are detected and warned (never store tokens in config files)
271
+ - 1 new dependency (js-yaml), 742 tests with 98%+ statement coverage
272
+
178
273
  ### v0.8.0 (2026-02-21)
179
274
  - **New commands:** `quicklify backup`, `quicklify restore`, `quicklify export`, `quicklify import`
180
275
  - **Backup:** pg_dump + config tarball, SCP download to `~/.quicklify/backups/`, manifest.json metadata
@@ -297,11 +392,24 @@ Visit the URL, create your admin account, and start deploying!
297
392
  - [x] Export/Import server list (`quicklify export`, `quicklify import`)
298
393
  - [x] `--full-setup` flag for auto firewall + SSH hardening on init
299
394
 
395
+ ### v0.9.0 (Completed)
396
+
397
+ - [x] YAML config file (`quicklify.yml`) for one-command deploy
398
+ - [x] Template system (`--template starter|production|dev`)
399
+ - [x] Config merge with priority: CLI > YAML > template > interactive
400
+
401
+ ### v1.0.0 (Completed)
402
+
403
+ - [x] Vultr provider support
404
+ - [x] Linode (Akamai) provider support
405
+ - [x] `quicklify add` — register existing Coolify servers
406
+ - [x] `quicklify maintain` — full maintenance cycle
407
+ - [x] `--all` flag for status, update, backup
408
+ - [x] `status --autostart` — auto-restart Coolify when down
409
+
300
410
  ### Future
301
- - [ ] Vultr support
302
- - [ ] Linode / AWS Lightsail support
303
- - [ ] Config file (`quicklify.yml`) for one-command full setup
304
- - [ ] Template system (`--template starter|production|dev`)
411
+ - [ ] `quicklify snapshot` — automated VPS snapshots before maintenance
412
+ - [ ] `init --mode production` 2 server deploy (Coolify + worker)
305
413
  - [ ] Interactive TUI dashboard
306
414
 
307
415
  ## 🛠️ Tech Stack
@@ -312,7 +420,8 @@ Visit the URL, create your admin account, and start deploying!
312
420
  - **Interactive Prompts:** Inquirer.js
313
421
  - **Styling:** Chalk (colors) + Ora (spinners)
314
422
  - **HTTP Client:** Axios
315
- - **Cloud APIs:** Hetzner Cloud API v1, DigitalOcean API v2
423
+ - **YAML Parser:** js-yaml
424
+ - **Cloud APIs:** Hetzner Cloud API v1, DigitalOcean API v2, Vultr API v2, Linode API v4
316
425
  - **Linting:** ESLint 10 + typescript-eslint
317
426
  - **Formatting:** Prettier
318
427
 
@@ -325,22 +434,35 @@ Visit the URL, create your admin account, and start deploying!
325
434
  quicklify init
326
435
 
327
436
  # Deploy non-interactively (CI/CD friendly)
328
- quicklify init --provider hetzner --token YOUR_TOKEN --region nbg1 --size cax11 --name my-server
437
+ export HETZNER_TOKEN="your-api-token"
438
+ quicklify init --provider hetzner --region nbg1 --size cax11 --name my-server
329
439
 
330
440
  # Deploy with auto firewall + SSH hardening
331
441
  quicklify init --full-setup
332
442
 
443
+ # Deploy from a YAML config file
444
+ quicklify init --config quicklify.yml
445
+
446
+ # Deploy using a template
447
+ quicklify init --template production --provider hetzner
448
+
333
449
  # List all registered servers
334
450
  quicklify list
335
451
 
336
452
  # Check server and Coolify status
337
453
  quicklify status 123.45.67.89
338
454
  quicklify status my-server
455
+ quicklify status --all # Check all servers at once
456
+ quicklify status my-server --autostart # Restart Coolify if it's down
339
457
 
340
458
  # Destroy a server (with double confirmation)
341
459
  quicklify destroy 123.45.67.89
342
460
  quicklify destroy my-server
343
461
 
462
+ # Remove a server from local config (without destroying cloud server)
463
+ quicklify remove my-server
464
+ quicklify remove 123.45.67.89
465
+
344
466
  # Manage default configuration
345
467
  quicklify config set provider hetzner
346
468
  quicklify config set region nbg1
@@ -354,6 +476,7 @@ quicklify ssh 123.45.67.89 -c "docker ps"
354
476
 
355
477
  # Update Coolify on a server
356
478
  quicklify update my-server
479
+ quicklify update --all # Update all servers sequentially
357
480
 
358
481
  # Restart a server
359
482
  quicklify restart my-server
@@ -406,6 +529,7 @@ quicklify secure setup my-server --dry-run # Preview without executing
406
529
 
407
530
  # Backup Coolify database and config
408
531
  quicklify backup my-server # Full backup (pg_dump + config)
532
+ quicklify backup --all # Backup all servers sequentially
409
533
  quicklify backup my-server --dry-run # Preview backup steps
410
534
 
411
535
  # Restore from a backup
@@ -418,6 +542,17 @@ quicklify export # Export to ./quicklify-export.json
418
542
  quicklify export /path/to/file.json # Export to custom path
419
543
  quicklify import /path/to/file.json # Import servers (skips duplicates)
420
544
 
545
+ # Add existing Coolify server to management
546
+ quicklify add # Interactive (provider, token, IP, verify)
547
+ quicklify add --provider hetzner --ip 1.2.3.4 --name my-server # Non-interactive
548
+ quicklify add --provider vultr --ip 1.2.3.4 --skip-verify # Skip Coolify check
549
+
550
+ # Run full maintenance cycle
551
+ quicklify maintain my-server # Status → Update → Health → Reboot
552
+ quicklify maintain my-server --skip-reboot # Skip the reboot step
553
+ quicklify maintain --all # Maintain all servers sequentially
554
+ quicklify maintain my-server --dry-run # Preview maintenance steps
555
+
421
556
  # Show version
422
557
  quicklify --version
423
558
 
@@ -427,36 +562,78 @@ quicklify --help
427
562
 
428
563
  ### Non-Interactive Mode
429
564
 
430
- Pass all options as flags to skip interactive prompts (useful for CI/CD pipelines):
565
+ Set your API token as an environment variable, then pass all options as flags:
431
566
 
432
567
  ```bash
568
+ # Set token (recommended - avoids shell history exposure)
569
+ export HETZNER_TOKEN="your-api-token"
570
+ # or
571
+ export DIGITALOCEAN_TOKEN="your-api-token"
572
+ # or
573
+ export VULTR_TOKEN="your-api-token"
574
+ # or
575
+ export LINODE_TOKEN="your-api-token"
576
+
577
+ # Deploy non-interactively
433
578
  quicklify init \
434
579
  --provider hetzner \
435
- --token $HETZNER_TOKEN \
436
580
  --region nbg1 \
437
581
  --size cax11 \
438
582
  --name production-coolify
439
583
  ```
440
584
 
441
- **Using environment variables (recommended for CI/CD):**
585
+ Token resolution order: environment variable > interactive prompt. The `--token` flag is available but **not recommended** as it exposes the token in shell history.
586
+
587
+ If some flags are missing, only the missing values will be prompted interactively.
588
+
589
+ ### YAML Config File
590
+
591
+ Create a `quicklify.yml` file for repeatable deployments:
592
+
593
+ ```yaml
594
+ # quicklify.yml
595
+ template: production
596
+ provider: hetzner
597
+ region: nbg1
598
+ size: cx33
599
+ name: my-coolify-prod
600
+ fullSetup: true
601
+ ```
602
+
603
+ Then deploy with:
442
604
 
443
605
  ```bash
444
- # Set token as environment variable (avoids shell history exposure)
445
606
  export HETZNER_TOKEN="your-api-token"
446
- # or
447
- export DIGITALOCEAN_TOKEN="your-api-token"
448
-
449
- # Token is read automatically from env var
450
- quicklify init --provider hetzner --region nbg1 --size cax11 --name my-server
607
+ quicklify init --config quicklify.yml
451
608
  ```
452
609
 
453
- Token resolution order: `--token` flag > environment variable > interactive prompt.
610
+ **Security:** Never store API tokens in config files. Use environment variables (`export HETZNER_TOKEN=...`).
454
611
 
455
- If some flags are missing, only the missing values will be prompted interactively.
612
+ **Config merge priority:** CLI flags > YAML values > template defaults > interactive prompts.
613
+
614
+ ### Templates
615
+
616
+ Templates provide sensible defaults per provider:
617
+
618
+ | Template | Hetzner | DigitalOcean | Vultr | Linode | Full Setup |
619
+ |----------|---------|--------------|-------|--------|------------|
620
+ | `starter` | nbg1 / cax11 (€3.79) | fra1 / s-2vcpu-2gb ($12) | ewr / vc2-2c-4gb ($24) | us-east / g6-standard-2 ($12) | No |
621
+ | `production` | nbg1 / cx33 (€5.49) | fra1 / s-2vcpu-4gb ($24) | ewr / vc2-4c-8gb ($48) | us-east / g6-standard-4 ($36) | Yes |
622
+ | `dev` | nbg1 / cax11 (€3.79) | fra1 / s-2vcpu-2gb ($12) | ewr / vc2-2c-4gb ($24) | us-east / g6-standard-2 ($12) | No |
623
+
624
+ ```bash
625
+ # Quick production deploy
626
+ export HETZNER_TOKEN="your-api-token"
627
+ quicklify init --template production --provider hetzner --name my-server
628
+
629
+ # Cheap starter for testing
630
+ export DIGITALOCEAN_TOKEN="your-api-token"
631
+ quicklify init --template starter --provider digitalocean --name test-server
632
+ ```
456
633
 
457
634
  ### Interactive Prompts
458
635
 
459
- 1. **Provider Selection** - Choose Hetzner Cloud or DigitalOcean
636
+ 1. **Provider Selection** - Choose Hetzner Cloud, DigitalOcean, Vultr, or Linode
460
637
  2. **API Token** - Validated before proceeding
461
638
  3. **Region Selection** - Choose your preferred datacenter
462
639
  4. **Server Size** - Filtered by Coolify requirements (2GB RAM, 2 vCPU)
@@ -515,19 +692,27 @@ tests/
515
692
  │ ├── backup.test.ts # Backup command tests
516
693
  │ ├── restore.test.ts # Restore command tests
517
694
  │ ├── transfer.test.ts # Export/Import command tests
695
+ │ ├── templates.test.ts # Template definitions tests
696
+ │ ├── yamlConfig.test.ts # YAML config loader tests
697
+ │ ├── configMerge.test.ts # Config merge logic tests
518
698
  │ ├── init-fullsetup.test.ts # Init --full-setup tests
519
699
  │ ├── serverSelect.test.ts # Server selection utility tests
520
700
  │ ├── ssh-command.test.ts # SSH command tests
521
701
  │ ├── ssh-utils.test.ts # SSH helper tests
522
702
  │ ├── status.test.ts # Status command unit tests
523
703
  │ ├── update.test.ts # Update command tests
704
+ │ ├── add.test.ts # Add command tests
705
+ │ ├── maintain.test.ts # Maintain command tests
524
706
  │ └── validators.test.ts
525
707
  ├── integration/ # Integration tests (provider API calls)
526
708
  │ ├── hetzner.test.ts # Including destroyServer tests
527
- └── digitalocean.test.ts # Including destroyServer tests
709
+ ├── digitalocean.test.ts # Including destroyServer tests
710
+ │ ├── vultr.test.ts # Vultr provider tests
711
+ │ └── linode.test.ts # Linode provider tests
528
712
  └── e2e/ # End-to-end tests (full command flows)
529
713
  ├── init.test.ts
530
714
  ├── init-noninteractive.test.ts # Non-interactive mode E2E
715
+ ├── init-config.test.ts # YAML config + template E2E
531
716
  ├── status.test.ts # Status command E2E
532
717
  └── destroy.test.ts # Destroy command E2E
533
718
  ```
@@ -541,7 +726,7 @@ Tests run automatically on every push/PR via GitHub Actions across:
541
726
 
542
727
  ### Coverage
543
728
 
544
- Current coverage: **98%+ statements/lines**, **90%+ branches**, **98%+ functions**. 636 tests across 36 test suites.
729
+ Current coverage: **98%+ statements/lines**, **91%+ branches**, **98%+ functions**. 937 tests across 44 test suites.
545
730
 
546
731
  ## 🔧 Troubleshooting
547
732
 
@@ -585,6 +770,9 @@ See [LICENSE](LICENSE) file for details.
585
770
 
586
771
  - [Coolify](https://coolify.io/) - The amazing open-source PaaS
587
772
  - [Hetzner](https://www.hetzner.com/) - Affordable, reliable cloud infrastructure
773
+ - [DigitalOcean](https://www.digitalocean.com/) - Developer-friendly cloud platform
774
+ - [Vultr](https://www.vultr.com/) - High-performance cloud compute
775
+ - [Linode](https://www.linode.com/) - Simple, affordable cloud computing
588
776
  - All contributors and users!
589
777
 
590
778
  ## 💬 Support & Community