How the index is calculated
The index is a cost-effectiveness score: resources per unit of price.
A higher index is better. It is a comparison tool for this tracker, not a benchmark of
real-world performance. All rules below come from the scoring section of
vps/vps_tracker.md.
Inputs
| Symbol | Meaning |
|---|---|
CPU | Number of vCPU cores. |
RAM | RAM in GB. |
Storage | Usable storage in GB, counted consistently across plans. |
Transfer | Included monthly transfer in GB, capped at 1,000 for scoring. Unmetered transfer is scored at the 1,000 GB cap. |
Bandwidth | Port speed in MiB/s. Mbps converts as MiB/s = Mbps / 8.388608. |
Bad reports | Number of distinct bad-reputation reports recorded in the tracker. |
Monthly price | Current discounted monthly-equivalent price in one consistent currency. |
General VPS cost-effectiveness index
(CPU × 10 + RAM × 20 + max(0, 5 × ln(Storage / 10)) + min(Transfer, 1000) / 100) × billing factor × 0.90 ^ (Bad reports) × min(100, Bandwidth) / 100 ÷ Monthly price
China-optimized-route index
Transfer has greater weight here; every other term is identical:
(CPU × 10 + RAM × 20 + max(0, 5 × ln(Storage / 10)) + min(Transfer, 1000) / 50) × billing factor × 0.90 ^ (Bad reports) × min(100, Bandwidth) / 100 ÷ Monthly price
Scores are rounded to 3 decimals. The only difference between the two formulas is the transfer divisor:
/ 100 for general plans, / 50 for China-optimized routes, so transfer contributes twice as much there.
Why the terms look like this
Logarithmic storage
The former linear Storage term let HDD-heavy storage plans dominate the ranking.
It is now max(0, 5 × ln(Storage / 10)), where ln is the natural logarithm and storage is in GB.
Plans below 10 GB get no storage bonus instead of a negative one, and the bonus grows slowly above 10 GB.
This is a provisional model choice and it does not distinguish HDD from SSD or NVMe.
Bandwidth factor
min(100, Bandwidth) / 100 ranges from 0 to 1. Bandwidth at or above 100 MiB/s gets a factor of 1.0.
Faster ports do not improve the score any further.
Bad reports
Each distinct bad-reputation report multiplies the score by 0.90.
DeluxHost counts as one such report (× 0.90) on all of that provider's scores, based on a
2026-10-18 observation of slow storage I/O and an unanswered support ticket.
Billing factor
Hourly billing is the tracker's preference, so it gets a bonus. The factor is a score adjustment, not a claim that hourly billing is always cheaper.
| Billing period | Factor |
|---|---|
| Hourly | 1.05 |
| Monthly | 1.00 (assumed neutral; no monthly factor was specified) |
| Quarterly | 0.95 |
| Annual | 0.90 |
Monthly-equivalent price
Use the current price after discount and convert it to a monthly equivalent:
| Quote | Conversion |
|---|---|
| Hourly | hourly price × 730 (estimated hours per month) |
| Monthly | monthly price |
| Quarterly | quarterly total ÷ 3 |
| Annual | annual total ÷ 12 |
If prices are in different currencies, convert them to one common currency before comparing, and record the currency plus the conversion date and rate in the notes.
How this website uses the scores
- Scores are stored observations, not recomputed here. The site reads the index values already
in
vps/plans.jsonl; it never recalculates a formula in the browser. - A row's index is used only when there is exactly one compatible score: the right kind
(
generalorchina),USDbasis,log_storage_v1formula, and statussnapshotorestimated. Archived, superseded, reference, conditional and expired scores stay in the record but are excluded from the view. Otherwise the row shows unscored. - The general page lists every plan record and uses the general index.
The China-optimized page lists plans with a
cn_optimized_claimor a China index, and uses the China index. - Sold-out and discontinued offers stay in the rankings when they can be scored. Stock is a dated note, not a criterion for inclusion.
- A China-optimization claim is seller marketing. It does not imply independent verification; open the row to see the verification flag and route evidence.
- Price filtering and sorting are per currency, with no exchange-rate conversion. The table shows the lowest recorded monthly-equivalent price in the selected currency.
Known data limits. Payment method is not a structured field in the schema. The "billing method" filter recovers Alipay, WeChat Pay, PayPal, card and similar methods from note text, so most records are "Not stated" and Visa / Mastercard are usually only implied by generic card acceptance. Historical offers are snapshots: prices, promotions, availability and route claims require rechecking before purchase.
Source and refresh
Plan data lives in vps/plans.jsonl (one JSON object per line,
validated against vps/schema.json). Scoring rules and dated research notes
live in vps/vps_tracker.md; the command-line view is
vps/tools/query.py.
After a tracker edit, regenerate the site's data snapshot from the workspace root:
python3 vps/site/build.py
That writes vps/site/data/plans.js. The pages are plain HTML, CSS and JavaScript and open directly
from disk; no server or build framework is needed.