Hand-drawn laptop showing the X bird with gears and a magnifying glass spilling out of the screen — the X algorithm cracked open
May 16, 2026·12 min read

The X Algorithm in 2026: What xAI Just Open-Sourced, and How to Actually Grow on X

Vadym Petryshyn
Vadym PetryshynFounder of Postory, 15 years building AI tech products
Key Takeaway

The new X algorithm is one Grok-1 transformer scoring ~15 engagement actions per post. Follows are the strongest positive. Replies the author engages with come second. Small accounts (under 1K followers) get extra spam screening on replies — by name, in the code. Video over a duration threshold and a passing "banger" score unlock the rest. No tweepcred, no SimClusters, no link penalty in the open source — but every new post starts at MediumRisk until Grok safety-clears it. Below: the code receipts, plus a weekly playbook.

On May 15, 2026, xAI pushed the full source of X's For You algorithm to GitHub. The 2023 dump was a partial photo of a dying system. This one is the live engine — Rust, Python, a Grok-1 transformer, and a content-understanding service called Grox.

What did xAI actually open-source on May 15, 2026?

The release contains the end-to-end For You pipeline. Thunder (thunder/) serves recent posts from accounts you follow via in-memory gRPC. Phoenix Retrieval (phoenix/) is a two-tower model that pulls out-of-network candidates by embedding similarity. Both feed Home Mixer (home-mixer/) — the Rust orchestrator that filters, hydrates context, and scores everything with a Grok-architecture transformer predicting ~15 engagement actions per candidate. A new Python service called Grox (grox/) runs Vision-Language Models over every post for spam, safety, "banger" quality, and reply ranking. The README is blunt: "We have eliminated every single hand-engineered feature and most heuristics from the system." One thing is missing — the exact weight values live in a crate::params module that wasn't shipped. We know the signs and order of the signals, not the precise ratios. Every "reply is worth 150 likes" quote going around right now is reverse-engineered, not from the OSS release.

How does the For You feed score your post?

Every candidate runs through one formula in weighted_scorer.rs: Final Score = Σ (weight_i × P(action_i)) + NEGATIVE_SCORES_OFFSET. The Phoenix Ranker — a Grok-architecture transformer — predicts the probability you'll perform each of ~15 actions on a given post. Each predicted probability is multiplied by a weight, then summed. After that, the author diversity scorer attenuates repeat-author posts, and the OON scorer down-weights out-of-network candidates. There's no separate tweepcred, no SimClusters bucket, no hand-tuned topic affinity — the transformer reads your action history and the post content directly. The strongest positive predictions are follow-from-feed, author-engaged replies, and reposts; the strongest negatives are predicted "Not Interested" and block/mute/report. Likes sit at the bottom of the positive stack, so a post that earns hearts but no follows, replies, or shares is engineering itself into the floor. Here are the signals the ranker predicts:

SignalSignNotes
Follow author from feed+++Strongest single positive — rarest action
Reply++Author-replied replies scored separately by Grok
Retweet / repost++
Quote post+
Profile click+Separate from link click
Share via DM+First-class signal
Share via copy link+Separate from DM share
Photo expand+
Click (link)+No hard-coded link penalty in the OSS
Video Quality View (VQV)+Gated by MIN_VIDEO_DURATION_MS
Dwell binary + continuous+Stacked
Favorite / like+Lowest-tier positive
Not InterestedPredicted "Not Interested" actively subtracts
Block / mute / report−−

Reverse-engineering during the release window cited rough ratios — author-replied reply ~150× like, repost ~20×, generic reply ~13.5× like, bookmark ~10× (source) — but these are external estimates, not from the OSS. Treat them as directional, not literal.

A hand-drawn balance scale weighing strong positive signals like follows and replies against weak signals like likes, with a transformer-brain feeding both sides

What does the algorithm actually reward?

Here are the code receipts. A few things are unambiguous in the source, with or without exact weights.

  • Follows from the feed dominate. FOLLOW_AUTHOR_WEIGHT is the rarest positive — exactly why a single new follow off a post outranks dozens of likes.
  • Replies the author engages with carry extra weight. Reply quality is independently scored by Grok in reply_ranking.py on a 0–3 scale, with a separate prompt for replies to large accounts. Low-effort "this" or emoji-only replies score near zero regardless of likes.
  • Video above the duration threshold. VQV_WEIGHT only fires above MIN_VIDEO_DURATION_MS; sub-threshold video earns zero on that signal.
  • The "banger" screen. Every post runs through banger_initial_screen.py, which returns a quality_score (0–1), a slop_score, and an is_image_editable_by_grok flag. Pass threshold is score >= 0.4; below that, your post is treated as screen-fodder.
  • Profile clicks, DM shares, and copy-link shares are first-class signals. Each has its own weight. A bio that earns curiosity clicks is a ranking input, not vanity.
  • The face-pile has a 1K floor. following_replied_users_hydrator.rs gates the "people you follow replied to this" social-proof badge with VIEWER_FOLLOWERS_THRESHOLD: i64 = 1000 — if you're under 1K followers, that boost is invisible to your audience.

What kills your reach in the new algorithm?

Suppression isn't one button. It's a stack of filters, demotions, and learned negative predictions — and a few fire silently on every fresh post.

A hand-drawn funnel with multi-layer sieves filtering an X post — ghosts, do-not-enter signs, and muted-speaker icons spill out the sides while a few posts reach the feed

Predicted negative actions subtract. If the transformer predicts you'll get "Not Interested"-ed, blocked, muted, or reported, those probabilities multiply by negative weights and subtract before sorting. Silent, probabilistic — the closest thing to a learned shadow ban in the codebase.

The VFFilter. vf_filter.rs drops any candidate carrying a SafetyResult(action: Drop). No notification — the post is just gone for that viewer.

Brand-safety MediumRisk labels. brand_safety.rs is the explicit "freedom of reach" demotion list: NSFW_HIGH_PRECISION, NSFW_TEXT, NSFA_KEYWORDS_HIGH_PRECISION, NSFA_COMMUNITY_NOTE, GROK_NSFA, GORE_AND_VIOLENCE_HIGH_PRECISION, and a flat DO_NOT_AMPLIFY. Anything tagged here keeps in-network reach but loses out-of-network distribution.

Cold-start suppression. Per the PTOS_CUTOFF_TWEET_ID rule (L51–54 of brand_safety.rs), new posts default to MediumRisk until Grok safety-clears them. Every fresh post pays a "prove you're safe" tax in the first few minutes.

Author diversity decay. author_diversity_scorer.rs applies multiplier = (1-floor) * decay^position + floor (L36-38). Your second post in a viewer's session gets exponentially attenuated. Your third gets crushed.

Out-of-network handicap. OON candidates are multiplied by OON_WEIGHT_FACTOR < 1. Reach starts in the follower pool — breaking out requires overpowering that fractional handicap.

A hand-drawn velvet-rope gate with a "1,000" sign separating small lavender figures (held back, magnifying glass labeled "spam check" hovering over them) from larger salmon figures passing freely with reply bubbles

Why does the algorithm treat small accounts differently?

This is the most explicit "small account penalty" code in the repo. In task_spam_detection.py, users in reply trees are bucketed by follower count: lte_100, lte_500, lte_1000, gt_1000. The spam VLM runs separately on the lte_1000 bucket, and when it flags a reply, the code literally logs "Reply Spam Found for lower than 1000 follower bucket." There's a dedicated metric counter for it. Replies from accounts under 1,000 followers face an extra spam screen bigger accounts don't get — mass-replying from a fresh account runs straight into a filter that's named after you in the code. Combined with the 1K viewer threshold on the face-pile, the gap between sub-1K and post-1K reach is larger than most creators realize. The fix isn't to stop replying — it's to make every reply count. Grok's 0–3 scale rewards substance and additivity, so a handful of high-effort replies under a big account beats a hundred drive-by ones.

What's new in 2026 vs. the 2023 algorithm?

The biggest shift: ranking is now a single Grok-1 transformer instead of a stack of hand-engineered features. No tweepcred scalar, no SimClusters, no explicit topic affinity — the transformer learns it all from your action history. All media (video, audio, image) gets multimodal embeddings (v5), so visual content has parity with text in candidate generation. Grox is new — VLM-based spam, safety, banger quality, and reply ranking with a dedicated prompt for replies to large accounts. Community Notes is now a ranking signalNSFA_COMMUNITY_NOTE is in the MediumRisk list. There's a new "Safe Gap" ads blender, a new-user cluster for cold-start, and an is_image_editable_by_grok flag on every post. One counter-intuitive finding: there's no hard-coded link penalty in the open code. Legacy 2023 advice that "links kill reach" is unverified by this release.

Jacob C. Edmunds gave a creator-side read on what the new system feels like in practice — useful contrast to the code view:

Your 2026 growth playbook for X

Translate the code into weekly action. Every point maps to a specific signal or filter above — push positive predictions higher (follows, author-engaged replies, DM shares, VQV) while staying clear of the gates that drain reach (author-diversity decay, the lte_1000 spam screen, MediumRisk, the already-seen bloom).

  1. Post 3–5 standalone posts per day, no more. Author-diversity decay punishes burst-posting in any single viewer session. Spread posts so different sessions catch different posts.
  2. Reply substantively to 5–10 larger accounts in your niche. Aim for replies that earn a like or reply back from the author — those carry weight under the 0–3 reply-ranker. If you're under 1K followers, quality is the entire game.
  3. Ship one video per week longer than MIN_VIDEO_DURATION_MS (treat ~60 seconds as a conservative guess until xAI ships the constant). VQV only fires above the threshold.
  4. Treat your bio as a ranking input. Profile clicks are a first-class signal. A bio that promises something specific earns them.
  5. Optimize for follow-from-feed. Pin your strongest post. Make the next step clear. A single new follow outweighs dozens of likes.
  6. Track DM shares and copy-link shares as KPIs, not likes. They're separate, higher-weight signals.
  7. Engage with replies on your own posts in the first hour. Author-replied replies get separate Grok scoring.

What should you stop doing immediately?

Each of these maps to a specific filter or decay function in the code — not stylistic preferences, but things the ranker actively penalizes or ignores. Most are residue from old 2023-era growth advice.

  • Stop burst-posting in a single hour. Diversity decay halves your second post and crushes the third in the same viewer session.
  • Stop reply-guy spam from a small account. The lte_1000 bucket is named in code, runs an extra VLM screen, and tracks a metric counter every time it flags one of your replies.
  • Stop using engagement pods. The transformer reads post content, not just early engagement. Old "first 30 minutes" pod boosts don't translate.
  • Stop reposting your own content within hours. The already-seen bloom filter delivers one impression per user, ever. Mass-RTs are a no-op.
  • Stop chasing likes. Likes are the lowest-tier positive. Track follows, replies, DM shares, and profile clicks instead.
  • Stop assuming links tank reach. Nothing in the open code penalizes a link. Click is positive. If your link posts underperform, it's the post — not the URL.

Start writing for the new X ranker with Postory

Want every post optimized for the new X ranker before you hit publish? Postory's AI writes for X's exact scoring signals — reply-bait, video length thresholds, mutual-follow context, the works. It reads your account's recent performance and adapts each draft to the post types that actually earn follows and DM shares for you specifically. To go deeper on what's making it through the ranker right now, Postory's social media analyzer breaks down which of your past posts hit on the signals the new algorithm rewards.

Try Postory free — write posts the new X algorithm actually wants to surface.

FAQ

Q: Is the May 2026 release the complete X algorithm?

Mostly, but not entirely. The full pipeline (Thunder, Phoenix Retrieval, Home Mixer, Grox) is shipped, along with a downloadable mini Phoenix model checkpoint. The exact weight values used in production live in a crate::params module that wasn't included, and the trained Phoenix coefficients aren't public. You can see the architecture, the signals, and the filters — but not the precise scoring multipliers.

Q: Do links still hurt reach on X in 2026?

There is no hard-coded link penalty anywhere in the open-source release. CLICK_WEIGHT is positive. If a link demotion exists, it was learned by the transformer rather than written as a rule. Posts with links can absolutely perform — the issue is almost always the post itself, not the URL.

Q: How do I know if I'm shadow-banned on X?

The closest thing to shadow-banning in the code is the Visibility Filter (VFFilter) dropping anything tagged SafetyResult(action: Drop), plus the MediumRisk label list demoting reach for NSFW, NSFA, gore, or DO_NOT_AMPLIFY tags. If your impressions collapsed without an obvious cause, check whether recent posts could trip those classifiers. Our shadow-ban recovery guide walks through the diagnostics.

Q: Does posting time still matter on X in 2026?

Less than it used to. Posts now keep getting distribution for up to ~24 hours after publish, instead of the old "first 30 minutes decide everything" model. Time still matters for news-driven niches, but for evergreen content the timing premium has shrunk meaningfully — author-diversity decay matters more than clock time now.

Q: How is the 2026 X algorithm different from the 2023 leak?

The 2023 dump described hand-engineered features, tweepcred, and SimClusters heuristics. The 2026 release replaces all of that with a single Grok-1 transformer predicting engagement probabilities across ~15 actions per post. Grox is new, multimodal embeddings v5 cover all media, Community Notes is now a reach-demoting label, and there's an explicit "banger" quality screen. Our Twitter algorithm guide covers the older architecture in detail.

Share: