Bangermeter is a free Chrome extension. It puts a 0 to 100 score on every post in your X feed, and on your draft while you write it, using the real production weights X published on August 13, 2026. Every factor is cited to the line of source code. No folklore, no data collection, no server.
Add to Chrome · Free Read the code
The live UI: badges in the feed, breakdown on click.
As you scroll x.com, each post gets a badge with up to two 0 to 100 scores (50 = a typical median post). C is Content Appeal: what the algorithm would predict from the content alone. E is Earned Engagement: how X's weights value what the post actually earned per view. A ~ marks low-view posts where rates are statistically smoothed.
Big score chips, human explanations, detected content signals with ▲/▼ direction, rescoring factors, freshness decay, and a collapsible "Show the math" with the full weight × probability table.
The compose box gets a meter that scores your draft in real time with ▲/▼ hints: asks a question ▲, three or more hashtags ▼, "like if" bait ▼.
Every head with X's published value, its param.rs key, and whether Bangermeter measures it or estimates it. The same table as further down this page, one click away while you browse.
Community-Noted posts (score suppressed ×0.5, per three causal studies), visibility-limited posts flagged qualitatively, and quote-tweets handled correctly: embedded media is not counted as the quoting post's own.
Scores the post as if the viewer mutually follows the author, which lifts the reply coefficient from 5 to 20. It is the most interesting switch in the popup, and it shows how much of the algorithm is about who is reading. Plus badge, draft-meter and out-of-network toggles. Settings sync through Chrome's own storage. That is the only permission it wants.
Every weight below is X's, read from home-mixer/params/param.rs. A weight is a coefficient on a predicted probability, so a big number usually means a rare action. The eight that matter most:
| Action | Weight | What it means | In Bangermeter |
|---|---|---|---|
| Share via copy link | 20 | The largest positive coefficient X publishes. Also one of the rarest actions. | Estimated |
| Reply | 5 | Rises to 20 on an original post from someone you mutually follow. | Measured |
| Quote | 5 | The same coefficient as a reply. | Estimated |
| Follow author | 4 | Gaining a follower off the post. | Estimated |
| Like | 0.5 | Small coefficient, by far the most common action. More expected score on a median post than anything above it. | Measured |
| Profile click | 0.0 | Zeroed by X. The 2023 table paid 12 for this. | Zeroed by X |
| Mute author | −58.8 | Nearly twice the coefficient of a block (−31.2). | Estimated |
| Report | −234 | The heaviest coefficient in the system. It pushes a post beneath every positive-scoring post in the feed. | Estimated |
| Action | Weight | What it means | In Bangermeter |
|---|---|---|---|
| Report | −234 | The heaviest coefficient in the system, in either direction. | Estimated |
| Mute author | −58.8 | Muting carries nearly twice the coefficient of blocking. Most people assume the reverse. | Estimated |
| Not interested | −43.2 | The "show less often" menu item, in X's own words. | Estimated |
| Block author | −31.2 | Milder than a mute, and milder than most people expect. | Estimated |
| Share via copy link | 20 | The largest positive coefficient X publishes. Also one of the rarest actions, so read the trap below before converting it. | Estimated |
| Reply | 5 | Rises to 20 on an original post from someone you mutually follow. | Measured |
| Quote | 5 | The same coefficient as a reply. | Estimated |
| Share via DM | 5 | Forwarding to a friend. | Estimated |
| Follow author | 4 | Gaining a follower off the post. | Estimated |
| Share | 2 | Opening the share sheet and sharing. | Estimated |
| Repost | 1 | Twice the coefficient of a like, and about as common. | Measured |
| Like | 0.5 | Small coefficient, by far the most common action. It carries more expected score on a median post than anything above it. | Measured |
| Post click | 0.4 | Opening the post itself. | Estimated |
| Open link | 0.2 | Links ARE rewarded. Small, and the "link penalty" story is wrong. | Estimated |
| Photo expand | 0.05 | Tapping an image to full size. | Estimated |
| Video open | 0.05 | Starting the video. | Estimated |
| Video quality view | 0.05 | Needs over 10 seconds. GIFs and short clips earn none of it. | Estimated |
| Quoted-post click | 0.05 | Clicking through to the post being quoted. | Estimated |
| Post unexplored | 0.02 | A novelty term, in-network posts only. | Viewer-specific |
| Not dwelled | −0.02 | The largest term on an ordinary post. Tiny coefficient, and it fires on most impressions. | Estimated |
| Dwell time | 0.004 | Paid per second of dwell. One of the largest terms an ordinary post earns. | Estimated |
| Profile click | 0.0 | Zeroed by X. The 2023 table paid 12 for this. It is now worth nothing. | Zeroed by X |
| Dwell (binary) | 0.0 | Zeroed by X. Only dwell time pays. | Zeroed by X |
| Quoted video quality view | 0.0 | Zeroed by X. | Zeroed by X |
| Click dwell time | 0.0 | Zeroed by X. | Zeroed by X |
| Active seconds (5m residual) | 0.0 | Zeroed by X. | Zeroed by X |
All 26 scoring heads, sorted by absolute weight. Every value is X's, read from home-mixer/params/param.rs and asserted line by line by 112 passing tests. Measured means Bangermeter reads the real count off the post. Estimated means the weight is X's and the probability is ours.
What happens after the weighted sum. A mutual-follow reply adds +15, on original posts only, never on replies or reposts. Out-of-network multiplies by ×0.75, applied exactly once, including to in-network replies and reposts. Author diversity applies (1 − 0.25) × 0.5k + 0.25 for the k-th post from the same author. The second post from an author keeps 62.5% of its score. The third keeps 43.75%.
How the scale is built. The scorer adds an offset of 0.001 to the weighted sum, then runs offset_score(), which compresses any net-negative combined score into a band strictly below every net-positive post. Sum the published constants and the positives come to 43.32 against 367.22 of negatives, a total range of 410.54. Those three totals are my arithmetic on X's constants. The offset and the compression step live in the scorer (ranking_scorer.rs), not in param.rs.
That is the real cost of a report. A reported post falls beneath every positive-scoring post in the feed, whatever else it earned.
Until that morning the only ranking weights anyone had were a snapshot from March 2023, and roughly a third of the ranking heads had never been given a number at all. Then X published the live production values.
They are not a leak and not a snapshot. X's own README says it plainly:
The header of param.rs carries the sync stamp: last sync 2026-08-12T04:09:22Z.
One qualifier most coverage will drop. Every constant is declared as a feature-switch default, like param!(FavoriteWeight, f64, "rust_home_mixer_favorite_weight", 0.5);. X calls these the primary production values. A feature switch exists so some users can be served something else, so a reader inside an experiment bucket may have a different number applied to their feed. Read the file as the default configuration, captured on August 13.
The catch most of the internet is about to get wrong: every weight is a coefficient on a predicted probability. A report does not cost "minus 234 points." It contributes −234 × the model's predicted probability that a viewer reports the post. X's own code comment says the values are that large partly because the actions are rare.
Bangermeter sits on four research passes, all documented in the repo's RESEARCH.md:
And the punchline that aged well: those viral Grok "algorithm reveal" screenshots were confabulations by construction. The weights were redacted from everything Grok could read. Now they aren't, and you can check every one yourself.
Copy link is 20.0. A like is 0.5. Divide them and you get 40, and the sentence writes itself: a copy-link is worth forty likes.
I wrote that sentence, shipped it on this page, and my own red-team pass took it apart. Here is the correction, because it is the most useful thing on this page.
A weight is a coefficient. What a post earns from a head is weight × P(action), and X's code comment says the coefficient is partly a function of how rare the action is. Copying a link is far rarer than tapping like. Multiply each coefficient by its own probability and the order can flip.
Worked example, using Bangermeter's own estimated rates for a median post. On 10,000 impressions: about 50 likes and about half a copy-link.
Likes: 50 × 0.5 = 25.0
Copy links: 0.5 × 20.0 = 10.0
The like column wins by 2.5×. The probabilities in that example are ours, and they are estimates. The weights are X's.
"A copy-link is worth 40 likes" is the same sentence as "a reply is worth 27 likes," which is the folklore this release kills. Same arithmetic error, newer numbers.
The published weights tell you what X values per event. They do not tell you what to chase, because the probability half of the product lives in a model nobody outside X can run.
The largest single term on an ordinary post is not in the top of the table at all. NotDwelledWeight is −0.02, near the bottom by coefficient, and it fires on most impressions you get. Stopping the scroll moves more score than any engagement you can ask for.
Who want to understand why posts perform instead of chasing folklore.
Who will open "Show the math" and check the weight table themselves.
The "I reverse-engineered the algorithm" ones. Now with a source you can check.
Same tool, single file, for people who don't install extensions: extension/bangermeter.user.js in the repo.
Clone the repo, open chrome://extensions, enable Developer mode, Load unpacked, pick the extension/ folder. Read the code before you run it. That's the point of it being open.
Free Chrome extension. MIT. Runs locally on x.com. Not affiliated with X Corp or xAI.
Bangermeter is an independent open-source project. Not affiliated with, endorsed by, or sponsored by X Corp or xAI. Scores are relative estimates: the weights are X's published production defaults, the probabilities they multiply are Bangermeter's own estimates. They are not predictions of reach.
Built by Ryan Lenk. More projects on the Side Projects page.