X Published Its Real Ranking Weights on August 13. Every Viral Number Was Wrong.
Update, 14 August 2026. The section below called The trap takes apart a sentence I wrote and shipped: that a copy-link is worth forty likes. I had to correct that one against myself. On 14 August, X added a comment block to home-mixer/params/param.rs and home-mixer/scorers/ranking_scorer.rs making the same argument, and the example they picked is the statement "one report cancels 468 likes." That 468 is 234.0 divided by 0.5, the report weight over the like weight.
The timing is checkable, so here it is. This piece published at 16:04 UTC on 14 August. X's comment commit, c65aa17, is stamped 20:55 UTC the same day. The release commit that started all of this, a389166, is stamped 17:23 UTC on 13 August and carries none of those comments. Three more facts arrived with them, and they have their own section near the end.
On August 13, 2026, xAI put the production ranking parameters for the X For You timeline into its public x-algorithm repository. The file is home-mixer/params/param.rs. Its header carries a sync stamp: last sync 2026-08-12T04:09:22Z.
X Open Source @XOpenSource · August 13, 2026 · Open-sourcing the For You timeline. Today, we are taking another major step in our ongoing efforts to increase transparency. We are open-sourcing the code that affects a post's visibility in the For You timeline, and releasing a new...
The repository README explains why that stamp is there:
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.
A scheduled job copies live serving values into a public file. These are not the March 2023 snapshot that has been recycled since.
The file
The For You timeline is the default feed on x.com. It is ranked, so the order is computed for each viewer and it changes by the second.
x-algorithm is the public GitHub repository xAI maintains for that ranking code. home-mixer is the service inside it that assembles a timeline. params/param.rs is one Rust source file in that service, and it holds the tunable constants. A "head" is one user action the model predicts and scores: a like, a reply, a mute, a report.
Nobody at X edits param.rs by hand to change your feed. A cron job, which is a scheduled task that runs with no person involved, writes the values into the file.
One qualifier. Every constant is declared as a feature-switch default:
param!(FavoriteWeight, f64, "rust_home_mixer_favorite_weight", 0.5);
The README calls these the primary production values. Primary is doing work in that sentence. A feature switch exists so that some users can be served something else, so a reader in an experiment bucket may have a different number applied to their feed. Treat the file as the default configuration, captured on August 13.
The arithmetic
For You ranking computes a weighted sum:
score = Σ (weight × P(action))
across 26 ranking heads. Phoenix, X's ranking model, predicts P(action) for each head. The published values are the coefficients on those predictions.
So a weight of −234 on a report does not subtract 234 points from your post. It multiplies the model's predicted probability that a viewer reports it. X's code comment says why the number is so large:
These weights reflect a combination of how much an action is valued in ranking and typical propensities of these actions across the X network (e.g. negative feedback is overall rare).
The trap: a big coefficient is evidence the action is rare
ShareViaCopyLinkWeight is 20.0. FavoriteWeight is 0.5. The ratio is 40.
It is tempting to write "a copy-link is worth forty likes." I wrote that sentence, published it, and had it taken apart by my own red-team pass, so let me take it apart here.
A weight is a coefficient on a probability. What a post actually earns from a head is weight × P(action), and the code comment above says the coefficient is partly a function of how rare the action is. On a typical post, someone hitting like is on the order of a percent of viewers. Someone copying the link is orders of magnitude rarer. Multiply each coefficient by its own probability and the ordering can invert: likes are common enough that their small coefficient still contributes more expected score than a copy-link's large one.
"A copy-link is worth 40 likes" is the same sentence as "a reply is worth 27 likes," which is the folklore this whole 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.
Six things the numbers say
Copying your link carries the heaviest positive coefficient, and one thing ties it. ShareViaCopyLinkWeight is 20.0, ahead of reply, quote and DM share at 5.0. The match is a reply on an original post from a mutual follow, where the 15.0 boost below takes reply to 20.0 as well.
Muting carries about twice the coefficient of blocking. MuteAuthorWeight is −58.8. BlockAuthorWeight is −31.2. Most threads have that pair reversed.
Profile clicks pay nothing now. ProfileClickWeight is 0.0. The 2023 table paid 12.0 for the same action. The change was never announced.
Five heads are switched off entirely. Profile click, dwell, quoted video quality view, click dwell time, and the five-minute active-seconds residual all sit at 0.0.
Scrolling straight past you is a scored penalty. NotDwelledWeight is −0.02. Like every other head it multiplies a prediction rather than counting events, and it is the one negative head carrying a high predicted probability on an ordinary post.
Links do get paid. OpenLinkWeight is 0.2. Small, and above zero.
The folklore autopsy
Before the release, I traced every viral weight claim I could find back to its origin.
| The viral claim | What the source trace found |
|---|---|
| "Block −120, mute −100" | An unaffiliated fan site publishing invented values. Real: block −31.2, mute −58.8. |
| "A reply is worth 27 likes" | Arithmetic from the March 2023 README. X revised the reply weight to 13.5 within five days of open-sourcing. It is 5.0 today. |
| "A bookmark is 20× a like" | Describes a head that does not exist. Musk called bookmarks a "de facto silent like" in January 2023. There is no bookmark head in the 2026 roster. |
| "Video gets a 10× boost" | No source trace. VideoOpenWeight and VqvWeight are both 0.05. |
| "Quality score under 0.4 and Grok gates you" | Invented. There is no 0.4 score gate anywhere in grox/. The banger_initial_screen.py the claim names is not in the repository either, and the similarly named files that are there hold no threshold. |
| "Links cost you 30 to 50 percent" | No line of code behind it, in 2023 or in 2026. OpenLinkWeight is 0.2. |
| "Three or more hashtags, minus 40 percent" | No hashtag head exists in the 2026 roster. Earlybird carried a multiple-hashtag penalty, but its magnitude was never published, so the 40 percent is folklore either way. |
None of them matched the published file.
What changed since 2023
| Head | 2023 | 2026 |
|---|---|---|
| Reply | 13.5 | 5.0, plus a 15.0 boost on an original post from a mutual follow |
| Profile click | 12.0 | 0.0 |
| Report | −369.0 | −234.0 |
| Reply engaged by author | 75.0 | Dropped as a named head |
| Bookmark | Never a head | Still not a head |
The reply coefficient fell by a factor of 2.7 and then got a conditional path back up. BidirectionalFollowReplyWeightBoost adds 15.0 when the viewer and the author mutually follow each other, and it applies to original posts only.
The multipliers which used to exist
Archived code carried author-level multipliers. At commit ec83d01dca a blue-verified author got ×4.0 in-network and ×2.0 out-of-network. Creator multipliers of 1.1 and 1.3 arrived later, at commit 72eda9a. By the September 2025 re-release the blue-verified pair was deleted outright, and the creator pair had been reset to 1.0, which multiplies nothing. They are the only hard numeric author multipliers that ever appeared in serving code, and neither one is doing anything now.
What happens around the weighted sum
Three adjustments matter, and one of them is not applied on top of the sum at all.
Mutual-follow reply boost, and it lives inside the sum. BidirectionalFollowReplyWeightBoost adds 15.0 to the reply coefficient before the sum is taken. ranking_scorer.rs calls reply_weight_for() from inside the list of terms, so the boost changes a weight rather than adjusting a finished score. Original posts only. It never fires on replies or reposts.
The boost also reads the viewer's follow graph, not the replier's. It fires when the post's author is someone the viewer mutually follows, and it raises the coefficient on the model's prediction that the viewer replies. It says nothing about who replies to you.
Out-of-network factor. A post from someone you do not follow is multiplied by 0.75. The shipped default applies that same 0.75 to replies and reposts even when they are in-network, so your reply takes the discount in front of people who already follow you. Topic requests use 0.5 instead of 0.75.
Author diversity. The k-th post from the same author in one timeline build is multiplied by (1 − 0.25) × 0.5^k + 0.25. The second post from an author keeps 62.5% of its score. The third keeps 43.75%.
The real cost of a report
offset_score() is one function and it branches on the sign of the combined score. A post at or above zero gets 0.001 added to it. A post below zero is rescaled by (combined + 367.22) / 410.54 × 0.001, which lands it somewhere between 0 and 0.001, underneath everything in the other branch.
So a reported post does not lose 234 points. The report prediction pulls the combined score toward zero, and a post that crosses into negative territory drops below the entire positive-scoring field in one move. A post carrying a report prediction alongside larger positive terms never crosses, and it sorts normally.
The positives come to 43.32 against 367.22 of negatives, a total range of 410.54. Those are not my addition: they are the three sums ScoringWeights::new builds at ranking_scorer.rs:105, and they deliberately leave out the three continuous cont_* weights and the 15.0 boost. Add all 26 head weights by hand and you get 43.324 instead, which is the right answer to a different question. The branching itself is in ranking_scorer.rs and the 0.001 constant is in home-mixer/params/config.rs, neither of them in param.rs.
Why the 2023 numbers survived for so long
Before the release I ran a leak hunt across court records, European Digital Services Act proceedings, granted patents, scrubbed git history and ex-employee disclosures. The hunt produced the two-snapshot weight history, the archived verified-author multipliers above, a granted Twitter patent with a fitted engagement-versus-followers power law, and the fully open Community Notes algorithm with three causal studies behind it.
It produced no third weight table. I found nothing between March 2023 and August 2026 to find.
What X added on August 14
Three facts came with the comment blocks. All three are quoted below from the source, and none of them changed a single number.
Engagement counts only when the reader was served the post
"For an account to count in the algorithms recommendation system, it must take place on a post served in Home Timeline. Directly navigating to a post (i.e., coordinating via groupchat) has no ranking impact. And users cannot manufacture a post to show up in their Timeline in any consistently reproducible way."
The typo in "algorithms" is X's.
home-mixer/scorers/ranking_scorer.rs, added 14 August 2026.This is the one item on this page you can act on, and it runs the opposite way from what people did with it. ShareViaCopyLinkWeight is 20.0, the heaviest positive coefficient X publishes. It pays when a viewer who was served your post in their feed copies the link. It pays nothing for the visits that follow. Anyone who read "copy-link is the big one" and started dropping their own links into group chats was optimising for a head that never fired.
The rarity is already inside the number
X's comment gives the base rate:
"the baseline probability of a Report is more than 1000x lower than a Like"
The coefficient has to be that large for a rare prediction to move the ranking at all. That is the clearest statement of the ratio problem I have seen anywhere, and it comes from X. The rarity is already inside the number, which is why dividing report by like recovers nothing: both figures already carry their own base rate.
Mass reporting does not straightforwardly bury a post
"reports from bad actors will primarily affect recommendations for users who are similar to the bad actors, rather than having the same effect on the post's ranking to everyone."
Predictions are computed per viewer. A brigade mostly shifts what gets recommended to people who resemble the brigade. "The algorithm hates me" is the most common thing I hear about X, and the mechanism people picture behind it works differently in X's own code.
Nothing in the table moved
All 26 weights were re-read against the file after the comments landed. Every value is identical to the figures above, and no new weight-shaped parameter appeared. What arrived on 14 August is documentation, plus one filter.
One filter that sits outside the arithmetic
Brazil2026ElectionFilter removes 665 accounts from the For You timeline. The list is the profiles reported to Brazil's Electoral Court for the 2026 election, and X quotes the legal requirement in a comment above the code. It exempts any account you already follow, and it also drops reposts, quotes and reply ancestors that would surface a listed author. The user IDs in the source are obfuscated and the usernames are left in the clear, which X says is for transparency.
The filter runs in the candidate pipeline's filter list, ahead of the scorers. No weight offsets it, and no amount of predicted engagement brings a filtered post back. The weighted sum is one stage of a longer pipeline.
What is still unknown
Phoenix is X's ranking model. The repository ships phoenix/, with the code that trains and runs it and a synthetic data generator, so you can train a small one end to end. X's own trained model is not in there.
The weights are public. The probabilities they multiply come out of a model you would have to train yourself, on data you do not have. Anyone scoring posts from outside X, including me, is estimating those probabilities from what a browser can read.
Run the numbers for yourself
Every 2026 weight above is in one file: home-mixer/params/param.rs in xai-org/x-algorithm. Open it and read the constants. The 14 August comments are in that file and in home-mixer/scorers/ranking_scorer.rs. The 2023 comparisons come from the heavy-ranker README in twitter/the-algorithm-ml, at the March 31 and April 5, 2023 revisions.
I also ship a free Chrome extension called Bangermeter that applies the weights to posts as you scroll. It badges each post with the weighted-sum score, and clicking the badge opens the breakdown with the full weight × probability table.
It runs entirely in your browser: no network requests, no analytics, no account. Version 0.9.4, tagged 14 August 2026, carries 120 self-tests asserting each weight against param.rs line by line, and the arithmetic was swept across roughly 654,000 generated inputs for NaN, out-of-range and non-monotonic scores in the v0.9.0 adversarial review.
The weights are X's. The probabilities are ours. Bangermeter reads real counts for likes, replies and reposts, and estimates the rest from content signals. It scores a post against a typical post. It does not predict reach.
Disclaimer
Bangermeter is an independent open-source project under the MIT license. It is not affiliated with, endorsed by, or sponsored by X Corp or xAI. I sell SEO, GEO and AEO services, and this article recommends a free tool I wrote.
Learn more on the side projects page. Skip the website and download the extension from the repository directly.
v0.9.4, tagged 14 August 2026 in the repository. The Chrome Web Store listing can lag behind it.
Run the free AI Readiness Scanner: paste in your robots.txt and your homepage source, get a scored report on whether ChatGPT, Perplexity, and Google AI can actually read your business. About two minutes, no signup, and nothing you paste ever leaves your browser.
Run the free scan → Get The Receipts free ▸
I run the SEO and AI visibility for my family's Shopify shop and publish the receipts, good and bad. Every number on this site comes from a named tool export, and corrections get published rather than edited away.