The Feed, Explained
read the real code →

Why am I
seeing this?

In August 2026, xAI published the code behind X's For You feed. This is the short version — what actually happens between your refresh and a post reaching your eyes.

Not made by X or xAI. Just a reader's guide to their open-source repo.

ranking_scorer.rs
// every action you might take, weighted
score = Σ ( weighti × P(actioni) )

// e.g.
  reply    →   +5.0
  like     →   +0.5
  report   →  -234.0

↑ that's the whole ranking idea, honestly

Those three numbers are real. They are sitting in a file you can open right now.

The whole thing in sixty seconds

Four things happen. If you only read one section, read this one.

  1. Posts get gathered

    From accounts you follow, and from accounts you don't. Two piles, thrown together.

  2. A model guesses

    For every single post it predicts: will you like this? reply? share it? mute them?

  3. Guesses become one number

    Each guess is multiplied by a weight and added up. Highest number goes to the top.

  4. Separately, some get hidden

    A different system decides whether a post is allowed to be shown to you at all.

The one thing people get wrong:ranking and hiding are two different systems. One decides the order. The other decides whether a post is allowed on your screen at all. They run separately, on different inputs, with different rules.

Where the posts come from

Every refresh pulls from two pools at once.

People you follow

in-network

A service called Thunder keeps recent posts sitting in memory as they're published, so it can hand over your follows' latest posts immediately.

Total strangers

out-of-network

Phoenix turns you and every post into vectors and finds the closest ones. SimClusters groups accounts by who engages with what, then pulls from your clusters.

…and then both piles get ranked by the same model, together, in one list.

What happens when you refresh

Seven steps, in this order, every single time you refresh. The repo calls it the Post Pipeline.

  1. 1

    It looks you up

    query hydration

    What you recently engaged with, who you follow, who you block and mute, your muted words, what you've already been shown.

  2. 2

    It fetches candidates

    candidate sources

    Thunder grabs recent posts from your follows. Phoenix and SimClusters go find posts from strangers. Both run at the same time.

  3. 3

    It fills in the details

    candidate hydration

    Text, images, who wrote it, what language, engagement counts, whether it's subscriber-only.

  4. 4

    It throws a lot away

    pre-scoring filters

    Duplicates. Anything older than 48 hours. Your own posts. People you blocked. Words you muted. Posts you've already seen.

  5. 5

    It scores what's left

    scoring

    The model predicts every action you might take, and those predictions get combined into one number per post.

  6. 6

    It keeps the best ones

    selection

    Sort by score. Keep the top handful. Everything else is gone.

  7. 7

    It checks what's allowed

    post-selection filters

    Only now does it ask, post by post: is this one even allowed to be shown to you? Anything it says no to is dropped.

The part that decides the order

The model predicts a probability for roughly twenty different actions. Each one is multiplied by a weight, and the results are added together. That sum is the post's score — and you can play with the weights yourself.

The dials

Every number starts at the real production default from param.rs. Drag one and the feed on the right re-sorts as you drag.

Your feed

made-up posts, real arithmetic
  1. @stranger_who_writes · someone you don't follow

    I spent six months rebuilding our deploy pipeline. Here is everything that broke, in order.

    0.32
  2. @wire_service · a link post

    Court filing lands in the case everyone has been arguing about all week. Full document attached.

    0.21
  3. @posting_hours · a meme

    nobody: / absolutely nobody: / my code at 4am:

    0.16
  4. @your_actual_friend · someone you follow

    she found the one warm square of sun in the entire flat

    0.13
  5. @framework_wars · a spicy take

    Unpopular opinion: the framework you like is actually bad and the one you hate is fine.

    -0.40
  6. @reply_farm · engagement bait

    Reply with your city and I'll tell you something about you. Only 1% will be brave enough.

    -1.55

Drag Not interested up to zero and watch the reply farm climb straight to the top. The negative weights are most of what keeps bait out of your feed.

The weights are just… sitting there

They're plain numbers in a file anyone can read. A few of them say a lot about what the feed is built to want:

  • A reply is worth 10 likes. 5.0 against 0.5. Conversation beats approval.

  • Copying a link to send someone is worth the most. 20.0 — more than a reply, a repost and a like combined.

  • Muting hurts more than blocking. −58.8 against −31.2. Quietly walking away is the stronger signal.

  • Plain dwell time is switched off. 0.0. Time-on-post, on its own, counts for nothing.

home-mixer/params/param.rs
reply                5.0
quote                5.0
share via DM         5.0
share via link      20.0
follow author        4.0
share                2.0
repost               1.0
like                 0.5
dwell                0.0

not interested    -43.2
block author      -31.2
mute author       -58.8
report           -234.0

↑ real defaults, straight out of the repo

Then three thumbs on the scale

After the sum, the score gets adjusted. Same author twice? Each extra post from them is worth less than the last. From a stranger? Multiplied down a little. A brand-new author? Given a lift, so new accounts aren't invisible forever.

The other system: what gets hidden

A separate service is asked about every surviving post: can this be shown to this person? It answers one of three ways.

Allow

Show it normally. Most posts, most of the time.

Interstitial

Show it, but behind a cover you have to tap through first.

Drop

Don't show it. You never learn it existed. So does anything replying to it, quoting it, or reposting it.

Where the labels come from

That decision reads labels — tags attached to posts and accounts by a whole separate set of systems running continuously in the background, nowhere near your refresh:

  • Classifiers read posts, images and video as they're published.
  • Account models score accounts on how others respond to them, on patterns of behaviour over time, and on their position in the follow graph.
  • Rules react to events as they happen and stick labels on.

Plus your own settings: who you block, who you mute, words you've muted, your country, whether you've asked to see sensitive media.

The same post can go both ways

Some rules only fire when a post is being recommended to a stranger. If you follow the author, that same post comes through fine. Suspected spam gets caught aggressively on the recommendation path and left alone on the follow path.

Now go read
the real thing

Everything on this page is a simplification of code you can open yourself. The filters have names. The weights are numbers in a file. You can disagree with any of it — but now you know where to look.

It only looks like a black box from the outside.