MLX Score
The MLX Score rates a listing from 1 to 5 using only public data (App Store ratings, Homebrew installs, GitHub stars, Hugging Face downloads, npm and PyPI downloads), ranked against the other listings in its category. It is never a user rating and never paid for.
The code is lib/store/score.ts (scoreAll); the signals are read by lib/store/signals.ts. Every listing page shows the score's parts: each signal, its value and when it was read. The method in words is on apps.mlx.app/score.
The signals
A listing names where its signals live (signals in its entry). Each one becomes a single number, bigger is better:
| Signal | Source | The number | Weight |
|---|---|---|---|
| Rating | App Store and Mac App Store, as Apple reports them | The average rating, shrunk toward 3.5 as if there were 50 more ratings of 3.5: (avg × n + 3.5 × 50) / (n + 50). Ten ratings say less than ten thousand. | 0.35 |
| Homebrew | formulae.brew.sh install counts | log₁₀(1 + installs in the last 90 days) | 0.20 |
| GitHub | the repository | log₁₀(1 + stars), with stars counted at half when the repository has had no push for a year | 0.20 |
| Hugging Face | the model or organisation | log₁₀(1 + downloads) + ½ · log₁₀(1 + likes) | 0.15 |
| Packages | npm and PyPI | log₁₀(1 + monthly downloads of both) | 0.10 |
A signal a listing doesn't have, or that reads zero, is left out. It is never guessed.
From signals to a score
Rank each signal
Each of the listing's numbers is ranked against the same signal of the other listings in its category, as a percentile from 0 to 1 (ties count half). When fewer than four listings in the category have that signal, it is ranked against every listing in the store that has it.
Weigh them
The percentiles are averaged with the weights above, over the signals the listing actually has. A listing with only GitHub stars is scored on its stars alone.
Map to 1–5
Score = 1 + 4 × the weighted percentile, rounded to one decimal. A listing with no signal at all has no score.
Because the score is a rank within a category, it says how a listing compares with the alternatives next to it, not how good it is in absolute terms. A 4.5 among coding agents and a 4.5 among voice apps are each near the top of their own shelf.
What never goes into it
- No paid placement and no paid ratings. If paid placement ever exists, it will be labelled "Sponsored" and will not change the score or the rankings.
- No affiliate links.
- No user ratings, no reviews written by us or by an AI, no "estimated users", and no rating count we didn't read.
Freshness
The produce cron reads the oldest signals first, four listings every five minutes, and a signal older than six hours is due again; a view of a store page can also queue a refresh. The catalogue API carries the current scores.