The X algorithm
How the X algorithm actually ranks your posts
Last reviewed · read from xai-org/x-algorithm, Apache 2.0
In August 2026, X published the source for the For You timeline under the Apache 2.0 licence. That means the ranking is no longer something to infer from screenshots and folklore — you can open the parameter file and read the numbers. This is what is actually in there, what it means for a founder posting to find customers, and which popular claims about it do not survive contact with the code.
Everything below is quoted from the repository xai-org/x-algorithm as read on 13 August 2026. Where a number appears, the file it came from is named so you can check it yourself. Where a claim is commonly repeated but the code did not support it, that is said plainly instead of being passed along.
The timeline is scored in two stages
Ranking is not one model with one output. It is a prediction stage and a combination stage, and confusing the two is the source of most bad advice about the algorithm.
The first stage is a model called Phoenix (home-mixer/scorers/phoenix_scorer.rs). For one specific viewer and one candidate post, it predicts a probability for each action that viewer might take. Its main input is that viewer's own recent behaviour — the code passes their action history in as the scoring sequence — so the same post genuinely does score differently for two different people.
The second stage is RankingScorer (home-mixer/scorers/ranking_scorer.rs). It collapses those probabilities into one number with a weighted sum: final score equals the sum of each weight multiplied by the predicted probability of that action.
One detail in the model is worth knowing because it kills a common worry: candidates are isolated during inference. Posts in the same batch cannot attend to each other, so your post's score does not depend on which other posts happen to be scored alongside it. You are not competing with a specific set of rivals in a given pass.
What the model actually predicts
Phoenix predicts far more than likes and reposts. The action list groups into five families, and three of them have nothing to do with visible engagement:
- Engagement: favourite, reply, repost, quote, share, share via DM, share via copy link.
- Clicks: opening the post, the profile, a link, expanding a photo, opening a video, opening a quoted post.
- Attention: video quality view, dwell, dwell time, click dwell time, active seconds.
- Author: following the author.
- Negative: not interested, mute author, block author, report, and not dwelled.
The attention family is the one most people never optimise for, and it is the one a post can earn without anybody touching a button. Someone stopping to read is a predicted action with a price on it.
The real weights, from the parameter file
These are the values in home-mixer/params/param.rs. Positive first:
- Reply — 5.0, rising to 20.0 when the two accounts follow each other.
- Share via copy link — 20.0.
- Quote — 5.0. Share via DM — 5.0.
- Follow author — 4.0. Share — 2.0.
- Repost — 1.0. Favourite — 0.5. Click — 0.4.
And the negative ones: report −234.0, mute author −58.8, not interested −43.2, block author −31.2, not dwelled −0.02.
Read the top of that list again. A reply is priced at ten times a favourite, and a reply between two accounts that already follow each other is priced at forty times one. The single most expensive positive action in the file is somebody copying your link to send it somewhere else.
The mistake almost everyone makes with these numbers
Report carries a weight of −234 and a favourite carries 0.5, so the ratio is roughly 468 to one. You will read that this means one report cancels 468 likes. It does not, and the code's own comments say so.
The weights multiply predicted probabilities, not counts. A report is an extraordinarily rare action — its baseline probability is orders of magnitude below a like's. The large weight exists so that a signal that rare still moves the result at all. It is a scaling factor against a tiny number, not an exchange rate against your real likes.
A weight only means something next to the baseline probability of the action it prices. Read one without the other and you will get the conversion rate exactly backwards.
The same caution applies upward. Reply at 5.0 does not mean one reply equals ten likes in your notifications. It means that when the model thinks a viewer is likely to reply, that prediction carries ten times the pull of an equally likely favourite. The direction of the advice survives — conversation is worth more than approval — but the arithmetic does not transfer to raw counts.
Xpush scores your posts against these signals automatically — see how the X-Algo Score ranks your week, or start with what Xpush does.
Three adjustments applied after scoring
A raw score is not the final order. Three corrections run on top of it, and each one changes what a sensible posting strategy looks like.
Author diversity decay
The k-th post from the same author in one slate is multiplied by a decaying factor, with a floor so it never reaches zero. Posting six times in an hour does not give you six independent chances at one viewer's feed; it gives you one good chance and five discounted ones.
Out-of-network discount
Posts from accounts the viewer does not follow are multiplied by a factor below one, and so are replies and reposts surfaced through someone they do follow. Reaching strangers is possible and is priced as harder — which is the mathematical version of the advice that the people already near you are the cheapest audience you have.
New-author boost
Posts from authors with low impressions are pushed toward a target position, explicitly to break the loop where a new account is never seen because it has never been seen. If you are small, the system is not neutral toward you; it is mildly on your side.
After all that, a separate reranking service trades a little score for variety between adjacent posts, so a feed does not serve five near-identical items in a row.
What this changes about how you post
None of this is a trick, and nothing in the file rewards volume for its own sake. Four things follow directly from the weights and the adjustments above.
- Write posts that invite a reply, not posts that invite agreement. Reply is priced at ten favourites, and at forty between mutuals.
- Reply to people you already have a relationship with. The mutual-follow multiplier is the largest conditional bonus in the file, and it is the one you can deliberately build toward.
- Write something worth sending to one person. Share via copy link is the highest-weighted positive action there is, and it is what happens when a post is useful enough to forward.
- Give people a reason to stop. Dwell and active seconds are predicted actions with weights attached; a post that is read slowly is being scored while it is read.
And the negative list is short and unsurprising: do not be the account people mute. The four negative weights are all forms of a viewer asking to see less of you, and they are priced far above any single positive action for exactly that reason.
What was opened, and what was not
The repository contains the ranking pipeline: the scorer that combines predictions, the parameter file holding the weights, the diversity and boost adjustments, and the service that reranks for variety. That is enough to read the shape of the system and the price it puts on each action, which is what the rest of this page is built on.
What it does not hand you is a working timeline. The prediction stage is a trained transformer, and a model's architecture is not its learned parameters — the numbers that make Phoenix good at guessing what you will do are the product of X's training data, not something in a public repository. Nor do you get the candidate sourcing that decides which posts are considered in the first place, or the feature store the model reads from.
This matters for reading any tool built on it, including ours. A weight file tells you what the system values. It does not let anyone run the system, and a product claiming to predict your reach is not doing what the name suggests.
Three claims about this file the code does not support
Since the release, three numbers have circulated widely enough to be treated as settled. The reading behind this page did not find any of them, and saying so is more useful than repeating them.
- That an author replying inside their own thread is worth 75 times a like. The parameter file prices Reply at 5.0, rising to 20.0 between mutual follows — forty times a favourite at the very top, and it is priced as a viewer's action, not the author's.
- That bookmarks are worth ten times a repost. There is no bookmark weight in the parameters read. It may be priced elsewhere in the pipeline; we did not see it, so we do not claim it.
- The throughput figures — hundreds of millions of posts narrowed to roughly 1,500 candidates in under 200 milliseconds. Widely reported, plausible, and not something this reading verified.
None of those three would change the advice on this page if they turned out to be true. That is the point: a strategy that only works if a specific unverified number is right was never a strategy.
How Xpush uses these numbers
Xpush scores your own published posts with these exact weights, applied to your real counts, and ranks them against each other so you can see which one actually earned something. It names the best and the worst post of your week rather than producing an index number you have to interpret.
One disclosure, because it follows from everything above: running real counts through weights designed for predicted probabilities is a deliberate simplification. It is sound for comparing your own posts to each other, which is what a repurpose decision needs. It is not a prediction of how X will rank a post you have not written yet, and no honest tool can offer you that — the score depends on a viewer the post has not met.
The negative weights are reference only and are never subtracted from anything. No API tier, including X's own analytics, tells an author how many times a post was reported or muted, so any tool showing you that number is showing you a guess.
Score a post against these weights
A free scorer that runs any post through the weights on this page is being built. It will live here.
Get told when the scorer is live →