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

SymbolMeaning
CPUNumber of vCPU cores.
RAMRAM in GB.
StorageUsable storage in GB, counted consistently across plans.
TransferIncluded monthly transfer in GB, capped at 1,000 for scoring. Unmetered transfer is scored at the 1,000 GB cap.
BandwidthPort speed in MiB/s. Mbps converts as MiB/s = Mbps / 8.388608.
Bad reportsNumber of distinct bad-reputation reports recorded in the tracker.
Monthly priceCurrent 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 periodFactor
Hourly1.05
Monthly1.00 (assumed neutral; no monthly factor was specified)
Quarterly0.95
Annual0.90

Only these four factors are recorded as scoring-rule records. Other terms (daily, semiannual, biennial, triennial) have no separately recorded factor; their stored scores keep whatever factor was used at the time.

Monthly-equivalent price

Use the current price after discount and convert it to a monthly equivalent:

QuoteConversion
Hourlyhourly price × 730 (estimated hours per month)
Monthlymonthly price
Quarterlyquarterly total ÷ 3
Annualannual 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

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.