Free Chrome extension · Open source · MIT

Score any tweet, or your draft, with X's own algorithm.

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
MIT open source0 network requests112/112 weight tests
Bangermeter running on an X feed: a post carries a score badge, and the breakdown panel shows Content Appeal 69 and Earned Engagement 58 with the detected signals and the real counts behind each. The callout reads scrolling past you is a scored penalty.

The live UI: badges in the feed, breakdown on click.

20
The largest positive coefficient X publishes. Copying your link. Bigger than reply, quote and DM share put together.
-234
The coefficient on a report. It multiplies how likely a viewer is to report you.
0
Network requests. Zero data collected, no analytics, no account. It all runs in your browser.
112/112
Self-tests passing, each asserting a weight against X's param.rs line by line.

What you get

A score badge on every tweet

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.

Click for the plain-English breakdown

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.

A live draft meter while you write

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 ▼.

All 26 heads in the popup

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.

Special detections

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.

A mutual-follow toggle

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.

How the score is built

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
All 26 weights X published
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.

What changed on August 13

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:

"To help people understand the production defaults, we run cron scripts that set the defaults in this repository's code to be the primary production values, for example in home-mixer/params/param.rs."

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.

How it works
  • The engine is a faithful port of X's current ranking_scorer.rs: Σ(weight × P(action)) across 26 heads, then the negative-compression step, then author-diversity and out-of-network factors.
  • The weights are X's production defaults, published August 13, 2026 and synced from X's own feature-switch configuration by cron. They are not a leak, and they are not the 2023 snapshot. An experiment bucket can be served an override, so treat them as the default configuration.
  • Where the estimate enters. Phoenix is X's ranking model, and it predicts the probabilities. X ships phoenix/ in the repository, with the code that trains and runs the model plus synthetic data generation. What X does not ship is its trained model. Bangermeter estimates the probabilities instead: from real counts for likes, replies and reposts, and from content signals for everything else. The weights are X's. The probabilities are ours. The table above labels which is which, and so does every screen in the tool.
  • Baseline probabilities are calibrated so that weight × P lands in a comparable band across heads, which is the balance X's own code comment implies. That is why the engine does not treat a 20.0 coefficient as forty times a 0.5 coefficient.
  • Observed engagement rates get empirical-Bayes shrinkage, so a post with 1 reply in 19 views can't fake a viral score.
  • Everything runs locally in your browser: zero network requests, no analytics, no account. MIT licensed, open source, 112 self-tests, X-DOM test suite in the repo.
We read the code so you don't have to trust screenshots

Bangermeter sits on four research passes, all documented in the repo's RESEARCH.md:

  1. Validation pass. Confirmed the 2023 weight table was the last sourced set X had released, and that the weighted-sum skeleton survived into X's 2026 open-source release.
  2. The folklore hunt. Every viral "leaked weight" was traced to its origin and debunked: "bookmark = 20× a like," "a link costs you 30 to 50 percent," "3+ hashtags = minus 40 percent," "block is minus 120, mute is minus 100." None survived source-tracing, and when the real values arrived on August 13 they matched none of it.
  3. The leak hunt. Swept court records, EU DSA proceedings, patents, scrubbed git history, and ex-employee disclosures. Found the two-snapshot weight history, the archived 2023 verified-author multipliers, a granted Twitter patent with a fitted engagement-vs-followers power law, and the fully open Community Notes algorithm with three causal studies. It found no third weight table, which is why folklore filled the gap.
  4. Same-day ingest, August 13, 2026. X published the production weights; Bangermeter shipped them the same day, with 112 tests asserting each value against param.rs line by line. The three earlier sweeps are what made that possible in hours instead of another year of guessing.

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.

The trap: a big coefficient means the action is rare

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.

Receipts

Copy link carries 20. It is also one of the rarest things a reader does, which is why the coefficient is big.
Muting carries nearly twice the coefficient of blocking. −58.8 against −31.2. Almost everyone has that backwards.
Profile clicks used to be worth 12. X zeroed them. Nobody announced it.
Five of the 26 heads are switched off entirely. X pays nothing for them.
The biggest term on an ordinary post is people scrolling past it.
Links do get credit. 0.2 for an open. The link penalty was always folklore.

Who it's for

Creators and marketers

Who want to understand why posts perform instead of chasing folklore.

The algorithm-curious

Who will open "Show the math" and check the weight table themselves.

Anyone tired of the threads

The "I reverse-engineered the algorithm" ones. Now with a source you can check.

Get it

Bangermeter marquee banner: score any tweet with X's own algorithm. The callout reads every weight is a coefficient, not a point total. A panel lists X's weights as published on August 13, 2026: copy link 20, replies 5, likes 0.5, reports minus 234.

Chrome Web Store

One click, free.

Add to Chrome

Tampermonkey userscript

Same tool, single file, for people who don't install extensions: extension/bangermeter.user.js in the repo.

Get the script

Load it yourself

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.

GitHub repo

Score the next draft before it ships.

Free Chrome extension. MIT. Runs locally on x.com. Not affiliated with X Corp or xAI.

Add to Chrome GitHub

FAQ

Is a copy-link really worth forty likes?
No, and this page used to say so. 20.0 divided by 0.5 is 40, and that is a ratio of coefficients with the probabilities divided out. Copying a link is far rarer than tapping like, which is part of why its coefficient is large. Multiply each coefficient by its own rate and a like contributes more expected score on a median post. X publishes what one event is worth to the ranker, which is a different question from which events are worth asking for.
Does a report really cost 234 points?
No, and this is the most common mistake in the threads going around. Every weight multiplies a predicted probability. −234 is the coefficient on "how likely is a viewer to report this," and X's own code comment says the number is that large partly because reports are rare. Nobody is subtracting 234 from you. What a report really does is push the weighted sum net-negative, and the scorer compresses any net-negative post beneath every positive-scoring post in the feed.
Is this the current algorithm?
The weights and the scoring arithmetic, yes, with one qualifier: they are feature-switch defaults that a cron job syncs to X's primary production values, so an experiment bucket can be served an override. What we can't replicate is Phoenix, X's ranking model. X ships the code that trains and runs it. X does not ship its trained model, so Bangermeter estimates those probabilities from what a browser can see. The score is a relative read against a typical post.
Does it predict how many views I'll get?
No. It's a relative score against a typical post. The weights are X's real production defaults, and the probabilities they multiply come from Bangermeter's estimates. Anyone promising reach prediction is guessing.
What data do you collect?
None. No network requests, no analytics, no account. Settings sync via Chrome's own storage. The code is public and reviewable.
Why do some huge accounts outperform their scores?
Account-level factors the scorer can't see: X's roughly 10× empirical Premium reach advantage, and historical account-level interventions documented in RESEARCH.md. Bangermeter scores the post in front of you; account-level advantage sits outside the published weights.
Is it free?
Yes. MIT-licensed open source.

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.