howxranksby @SidneyCur

A reply is worth 5.
A report, −234.

Those are X's own weights, from the open-source code behind the For You feed. Run your own post through them and see the score it would get.

Created by @SidneyCur · Based on the repository at commit b220448 (2026-11-03)

Specimen — one viewer, one postFig. 0
Example +2.00

A reply on your original post, from a mutual follow

The reply weight is 5, plus a 15 boost for mutual follows on original posts: 20 in total. A 10% predicted chance of a reply adds 20 × 0.10.

20 × 0.10 = +2.00

What's new

X updated the open-source ranking code. Five scoring weights moved and four new signals appeared. Here is each change, what it actually means, and what it does to a post's score.

b412112 · 3 Oct 2026 → b220448 · 3 Nov 2026 20 commits · 5 weights changed

At a glance

The five weights that moved. Every number below is read from the repository; the chances in the examples are illustrative.

Revision ledger — five weights changedcommit b412112 → b220448
Weights that changed between commit b412112 and commit b220448
#ActionWasNowChange
01FavoriteFavoriteWeight0.50.66+32%Explain ↓
02Not interestedNotInterestedWeight−47.52−52.27210% harsherExplain ↓
03Video openVideoOpenWeight0.070.02−71%Explain ↓
04Dwell timeContDwellTimeWeight0.0040.006+50%Explain ↓
05Unexplored postPostUnexploredWeight0.020.015−25%Explain ↓

What each change means

Each weight multiplies the predicted chance of an action for one viewer, not a count of actions. A weight of 0.66 on favorites means a 10% predicted chance of a like adds 0.066 points — not 0.66, and not one point per like.

  • 01

    A like counts for a third more

    FavoriteWeight 0.5→0.66 +32%
    What it is
    Every time the ranker scores your post for one viewer, it predicts how likely that person is to like it. That chance is multiplied by the favorite weight and added to the score.
    What it changes for you
    Likes were the cheapest positive signal on the board and they still are — but the gap narrowed. At the chances this site uses, the copy-link term was about 20 times the favorite term; it is now about 15 times. Posts that earn a lot of likes and little else gained a little ground, though shares and replies still dominate.
    Example
    Now0.66 × 0.10+0.066

    A post a viewer is 10% likely to like adds 0.016 more than it did. Small per viewer, repeated across every viewer the post is scored for.

  • 02

    “Not interested” costs 10% more

    NotInterestedWeight −47.52→−52.272 10% harsher
    What it is
    When a viewer taps “Not interested” on a post, the ranker treats it as a strong negative. This is the penalty most ordinary posts actually risk — reports, blocks and mutes are far rarer.
    What it changes for you
    The absolute cost went up: the same 1% chance now removes 0.048 more from the score. Relative to a like it actually eased slightly — the penalty term is about 8 times the favorite term, down from about 9.5 — because favorites rose faster. The practical read is unchanged: posting off-topic for your audience, or hammering one theme until people tune out, is the most expensive ordinary mistake on this list.
    Example
    Now−52.272 × 0.01−0.523

    At a 1% chance of the viewer tapping “Not interested”, the post loses 0.048 more than before — which is roughly three-quarters of what a 10% like chance adds back.

  • 03

    Opening a video barely counts now

    VideoOpenWeight 0.07→0.02 −71%
    What it is
    The chance a viewer taps to open your video. It is a separate signal from watching it — video quality views have their own weight.
    What it changes for you
    This is the change with the sharpest edge. Video opens dropped to almost nothing, video quality views are weighted 0.0, and the four new watch-time signals are also 0.0. In this code, essentially nothing about playing a video raises its score. What still pays on a video post is what the video makes people do: reply, quote, share the link, follow you — and stay on the post, which is the one video-adjacent thing that went up.
    Example
    Now0.02 × 0.10+0.002

    A video a viewer is 10% likely to open contributes 0.002. One copy-link share at a 5% chance contributes 1.00 — five hundred times more.

  • 04

    Time spent reading matters more

    ContDwellTimeWeight 0.004→0.006 +50%
    What it is
    Unlike the rest of the table, this weight does not multiply a probability. It multiplies the predicted number of seconds a viewer will spend on the post, so it grows with how long you hold someone.
    What it changes for you
    Two upstream changes point the same way. This weight rose by half, and on 8 October X shipped a ranking model that predicts time spent much better — so the signal is both worth more and measured more accurately. Posts built to be read to the end gain: a thread opener that earns the tap, a post dense enough to re-read, a chart worth studying. One-line posts that are consumed in half a second gain nothing here.
    Example
    Now0.006 × 10 units+0.060

    For a post predicted to hold a viewer for 10 model units of time. The repository does not publish what one unit equals in seconds, so read the direction, not the absolute figure.

  • 05

    Smaller nudge for followers new to your topic

    PostUnexploredWeight 0.02→0.015 −25%
    What it is
    A small bonus applied when the post is something the viewer has not engaged with much before. It only applies to people who already follow you — though a new switch, PostUnexploredIncludeOutOfNetwork, can extend it to strangers. It is off by default.
    What it changes for you
    Honestly: almost nothing. The bonus was tiny and is now a quarter smaller. It is also not a lever you can pull — it depends on what the viewer has seen, not on what you write. Worth knowing it exists so you do not mistake it for a reward for posting about new topics.
    Example
    Now0.015 × 0.30+0.0045

    A difference of 0.0015 — about a fortieth of what a single like contributes.

  • 06

    A shared list of popular posts now feeds For You

    EnablePopularPostsSource false→true
    What it is
    A new source of candidate posts, switched on by default. Alongside the personalised retrieval that finds posts for you specifically, For You now also draws from one shared list of popular recent posts — seeded, in the repository, from the most-followed active accounts.
    What it changes for you
    Read this one carefully before celebrating. It is a further route into feeds of people who do not follow you — but because the list starts from the most-followed accounts, for most accounts it means more competition in the feed rather than a new door. The routes you can actually influence are unchanged: original posts reach strangers through retrieval; replies and reposts are still filtered out for people who do not follow you.
    What it looks like

    A stranger's For You feed can now contain your post by three routes: Phoenix retrieval matched you to their interests, SimClusters found you through who they engage with, or you landed on the shared popular list. The third is the one you are least likely to reach.

  • 07

    Four new signals, all switched off

    VideoContinuationWeight
    UserVideoContinuationWeight
    ProfileVisitSecsWeight
    PostVideoWeight
    new →0.0
    What it is
    Four measurements are now wired into the scoring function: how many seconds of your video a viewer watches, how long that viewer watches video generally, how many seconds they spend on your profile after the post, and whether the post carries video. All four are multiplied by a weight of 0.0.
    What it changes for you
    Today, nothing — a weight of zero contributes zero. What matters is that the plumbing now exists. These weights are feature switches, so any of them can be turned on in production without a code change, and the public repository would not necessarily show it. Three of the four concern watch time and profile attention, which is a fair signal of where ranking is heading.
    What it looks like
    Now0.0 × anything0.000

    A 40-second video watched to the end still adds nothing through any watch-time term. Treat this as a thing to watch, not a thing to act on.

  • 08

    Rules can now attach a notice

    visibility-filtering/rules/engine.rs 3 →4 outcomes
    What it is
    When a visibility rule matched a post, it could do one of three things: show it, filter it from a feed, or drop it. There is now a fourth — attach a notice to it.
    What it changes for you
    A middle path exists where there used to be a cliff. A post that trips a rule can stay in the feed, undownranked, carrying a notice, instead of quietly vanishing. The catch for anyone auditing this: nothing in the published repository draws the notice or says what it reads, so the visible effect cannot be traced from this code.
    What it looks like

    show — nothing happens · filter — gone from this feed · drop — gone everywhere · notice — stays, with a label attached

  • 09

    Smaller changes worth knowing

    constants.py
    Brazil2026ElectionFilter
    recsys_two_tower_model.py
    Reply-spam exemption got stricter
    Accounts above a PageRank score skip the risky-reply label. The bar rose from 62 to 66, so slightly fewer accounts are exempt. The grey-badge exemption is unchanged.
    Brazil election filter removed
    With the 2026 Brazilian election over, Brazil2026ElectionFilter is gone from For You. Posts from the accounts it covered are no longer filtered because of it.
    Retrieval favours posts people finish
    From 13 October, retrieval is also trained to surface posts that people read all the way through — the same direction as the dwell-time weight rising. Posts that hold attention to the last line are favoured twice over.

How a score is built

The ranker does not count likes. It predicts how likely each action is for each viewer, weights each prediction, and adds the results. The four steps below are the same ones the calculator runs.

Fig. 1 — Scoring pipeline, one post, one viewerScale: not to scale
How one post is scored for one viewer A candidate post enters the Phoenix model, which predicts the chance of each of twelve actions. Each chance is multiplied by a fixed weight, the results are summed, then three adjustments are applied: out-of-network posts are scaled by 0.75, repeat posts by a decay multiplier, and an offset of 0.001 is added. Posts older than 48 hours and out-of-network replies are dropped before any of this. CANDIDATEPOST PHOENIX MODELP(action | viewer) WEIGHTINGw × p SUMΣ FINAL SCOREΣ·0.75·m(k) + 0.001 1 12 PREDICTED ACTIONS reply · like · share · click · follow · mute · block · report 3 ADJUSTMENTS out-of-network × 0.75 · repeat-post m(k) offset + 0.001 DROPPED FIRST age > 48h · OON reply 2 + reply 20 (5 + 15 mutual boost) · copy-link 20 · quote 5 · dm 5 + follow 4 · share 2 · repost 1 · favorite 0.66 · click 0.3 − report 234 · mute 58.8 · not interested 52.3 · block 31.2 Weights are prices, not counts: w = 5 at p = 0.10 contributes 0.50, not five.
  1. 01Predict

    The Phoenix model estimates the chance a viewer will reply, like, share, follow, mute, or report a post.

  2. 02Weight

    Each chance is multiplied by a fixed weight. Copy-link shares carry 20, a report carries −234.

  3. 03Sum

    The weighted values are added. Positive actions push the score up and negative ones pull it down.

  4. 04Adjust

    An offset keeps scores non-negative. Out-of-network posts are scaled by 0.75, and each extra post from one author is scaled down.

Weights are not counts. A weight of 5 on replies means a 10% chance of a reply adds 0.5 points, not five.

Score calculator

Set the predicted chance of each action for one post. P, the chance, is a percentage from 0 to 100. The values are illustrative: start from a preset, then adjust. Results update as you type or drag.

NOTE — Estimates only. The chances and results are illustrative inputs, not measurements from X. howxranks cannot guarantee any score, reach or outcome for your posts.

Parameter run — predicted chance of each action, per viewer12 actions
Predicted chance of each action, per viewer
Ref Action parameter Weight P (%) Input Magnitude Contribution
Σ Positive
0.00
Σ Negative
0.00
Σ before adjustment
0.0000
Final score
0.000

offset = 0.001

Fig. 1a — largest contributionspoints
Adds points Subtracts points

Workingas the ranker runs it

          

The offset is a constant, 0.001, that the ranker adds so scores stay non-negative. A net total below zero is compressed toward zero, so the post ranks at the bottom.

Feed simulation

Two things the ranker does to your posts. First, it discounts repeat posts from one author. Second, one report can outweigh many good actions. Both use the code's own constants.

NOTE — Estimates only. The sliders show how the code's constants combine. They are not predictions for your account, and howxranks cannot guarantee any reach or outcome.

Fig. 2 — repeat-post decaym(k) = 0.75 · 0.5k−1 + 0.25

Your posts in one viewer's feed

Repeat-post decay curve The multiplier starts at 1.000 for your first post in a feed and falls toward a floor of 0.25, which it approaches but never reaches. floor 0.25 1.0 0
6
2.00

Kept by the postRemoved by repeat-post decay

Repeat-post decay in one feed
#PostMultiplierFactorScore

The multiplier for post k is (1 − 0.25) × 0.5k−1 + 0.25. It falls quickly, then levels off at 0.25 and never reaches zero.

Fig. 3 — report break-evensolve −234p + reply = 0

Break-even: how many reports cancel a reply?

Reports carry −234. A boosted reply carries +20 per unit of chance. Use the slider to test a report chance.

0.10%
Boosted reply, from the calculator+0.40
Report at this chance−0.23
Report chance that cancels one boosted reply0.17%

Worked examples

Each row is one calculation from the weights above, with illustrative chances. Read the result first, then the calculation and what it means for your posts.

Detail callouts — eight worked casesillustrative chances
Worked examples
#CaseResultCalculationWhat it means
01Boosted reply on your original postLargest gain+2.0020 × 0.10 = +2.00A mutual follow is 10% likely to reply to your original post. Only original posts from mutual follows get the boost.
02Copy-link shareLarge gain+1.0020 × 0.05 = +1.00Five in a hundred viewers copy the link to your post. Copy-link is the largest non-reply gain, so posts people want to pass on are worth designing for.
03One report, at a 1% chanceLargest loss−2.34−234 × 0.01 = −2.34A report weighs −234. A 1% chance of reporting cancels several good actions, which is why report rates matter most.
04A 2% mute chance against a 30% favorite chanceMute vs favorite−1.18−58.8 × 0.02 = −1.18 · 0.66 × 0.30 = +0.20A mute weighs −58.8, so a 2% chance costs about six favorites' worth of gain (+0.20 at 30%).
05The same boosted reply, for a viewer who doesn't follow youOut of network1.502.00 × 0.75 = 1.50An out-of-network post keeps 75% of its score. Replies and reposts from accounts a viewer doesn't follow are filtered by default.
06Your fourth post in one viewer's feedFourth post0.692.00 × 0.344 = 0.69Each later post from you is scaled down: the 4th keeps 34% of the starting score. Posting less often reduces how many of your posts compete in one feed.
07The tenth post and beyondFloor0.250.25 + 0.75 × 0.5⁹ = 0.2515The multiplier approaches 0.25 but never reaches zero, so a late post still scores a quarter of the starting value.
08Report chance that cancels one boosted replyBreak-even0.85%2.00 ÷ 234 ≈ 0.85%At a 10% reply chance, a boosted reply is worth +2.00. About one viewer in 117 reporting cancels it out.

Follower goal planner

The code ranks posts. It does not model how many people follow after reading one, so this planner needs your own rate. Start from your analytics: 60 new follows and 227 replies in a week gives about 0.26 follows per reply, counted gross.

NOTE — Estimates only. Your rate is an input, so the result is a projection, not a forecast. howxranks cannot guarantee follows, replies or reach.

Inputs — from your analytics
From your analytics.
The number you want to reach.
The time you have to reach it.
Your measured rate. Test it over a week before relying on it.
Used for the comparison below.

Do and don't

Each item links to a weight or a rule in the repository. Points are the change to a post's score. Labels are enforcement flags that last 30 days.

Raises the score

  • Post original posts to mutual followsReplies to them carry 20 instead of 5. reply + boost
  • Earn copy-link sharesWorth 20 per unit of chance, the largest non-reply gain. ShareViaCopyLinkWeight
  • Earn quotes and DM sharesEach worth 5. QuoteWeight, ShareViaDmWeight
  • Earn followsWorth 4 per unit of chance. Clear posts that show what you know help. FollowAuthorWeight
  • Reply to followers and mutualsTheir replies to you stay in the feed. Replies to strangers are filtered by default. OONRetweetReplyFilter
  • Write posts worth putting on a popular listA shared list of popular recent posts now feeds For You by default, a new route to people who do not follow you. EnablePopularPostsSource
  • Post regularly, within 48 hoursPosts older than 48 hours are removed before scoring. MAX_POST_AGE

Lowers the score or gets labelled

  • Trigger reports, mutes, blocksReports −234, mutes −58.8, blocks −31.2 per unit of chance. ReportWeight
  • Automate or burst repliesFlagged as fast-reply spam: a 30-day label that drops the post for people who don't follow you. fast_reply_spam_post
  • Post LLM-written or gibberish repliesFlagged as LLM text or gibberish. Gibberish gets a 30-day spam label. llm_slop_post, gibberish_post
  • Repeat near-identical repliesThe multi-step classifier flags them across threads. classifier_multi_step_reply_spam
  • Count on video views, watch seconds or profile clicksAll carry zero weight in this code, including the new watch-seconds and profile-visit terms. VqvWeight, ProfileClickWeight, VideoContinuationWeight, ProfileVisitSecsWeight
  • Post a fourth or later item in one feedScaled to about a third of its score. EnableAuthorDiversity

Questions

What is howxranks?

howxranks is an independent reference for X's For You feed. It explains the public ranking code, turns its scoring weights into a calculator and simulation, and lists the enforcement rules, with sources.

Is howxranks affiliated with X?

No. howxranks is independent and is not affiliated with, endorsed by, or sponsored by X Corp.

Where do the numbers come from?

Every weight comes from the public repository x-algorithm, commit b220448 (2026-11-03). The repository's parameters are mirrored from feature switches, so production values may differ. The probabilities in the calculator are illustrative.

How is a post's score calculated?

The ranker predicts how likely each action is, multiplies each prediction by its weight, and adds the results. An offset keeps scores non-negative. Out-of-network posts are scaled by 0.75, and each extra post from one author is scaled down.

Why do replies to strangers reach fewer people?

In the repository, out-of-network replies and reposts are filtered by default, so replies mostly reach your followers. Original posts are the route to new people.

Sources and limits

Weights and fusion: home-mixer/params/param.rs, vm-ranker/params.rs, xai-value-model/scoring.rs.

Filters: home-mixer/filters/. Enforcement: abuse-enforcement-service/service-lib/rules/, visibility-filtering/rules/, grox/flows/reply_spam/.

The repository's parameters are mirrored from feature switches, so production values may differ. The probabilities are illustrative, not measured for any account. Classifier thresholds are not published.

Design direction: an engineering drawing — graph-paper sheet, titleblock, numbered callouts and figure frames. Dark mode is a cyanotype. No assets were copied from anywhere.