Research / Service canon
Summary
As of the 2026-10-28 revision, the Reddit help page describes home feed recommendation in four stages: candidate generation, filters, prediction-model scoring, and diversity-aware ordering verified(candidate generation section, home feed filter section). As of the 2026-09 engineering post, candidate generation includes SnooRec, a multi-task two-tower model (a structure that embeds users and posts separately and matches them) shared by the home feed and notifications, but the home ranker's current prediction targets and weights are not public observed 2026-11-01(ranking section). Sort formulas such as Hot and comment Best (confidence) are confirmed only in the 2017 published code, and the ranking approaches of the home feed Best introduced in 2018-01 and of For You and Following announced on 2026-10-28 are not public observed 2026-11-01(history section, For You and Following section).
Feed surfaces
As of the 2026-10-28 help page, the default feed for logged-in users is the home feed, which mixes posts from joined communities with recommendations in a personalized order, and the default feed for logged-out users is Popular, chosen by net upvotes verified (table below). On 2026-10-28 Reddit announced a new feed experience in which users choose between two feeds, For You and Following, rolling out worldwide over several weeks verified (For You and Following section). r/all was retired effective 2026-04-02 and redirects to the home feed verified (table below).
| Surface | What it shows | How order is decided | Basis |
|---|---|---|---|
| Home feed (logged-in default) | Posts from joined communities, plus recommended content and communities not joined | Personalized Best sort | Recommendations help page 2026-10-28, home recommendations help page 2026-10-05 |
| For You | Posts from joined communities and interest-based recommendations | Not public | Newsroom 2026-10-28 |
| Following | Posts from joined communities | Not public | Newsroom 2026-10-28 |
| Popular (logged-out default) | Recent popular posts | Net upvotes, location-tailored in some countries | Recommendations help page 2026-10-28 |
| r/all | Redirects to the home feed (old.reddit keeps it) | Not applicable | Change log 2026-04-02 |
| Community page | Posts in that community | Default sort is an open question | Two help pages |
| Trending notification | Popular posts from recently visited communities | Notification recommendation pipeline | Help page 2026-02-26, blog post 2026-10 |
The default feed for logged-in users is the home feed; by default it mixes in content from communities not joined and community recommendations, and posts from joined communities also appear in a personalized order verified — Recommendations help page 2026.
- This page was written on 2024-02-06 and revised on 2026-10-28, the same day as the For You and Following announcement, but its text is written around the home feed.
"The main, default feed on Reddit for logged-in users is the home feed" — Reddit’s Approach to Content Recommendations, revised 2026-10-28
Best sort in the home feed is a personalized sort, and home feed recommendation is part of the effort to personalize and rank Best sort with ML verified — Home recommendations help page 2026.
- The page was written on 2021-06-15 and last revised on 2026-10-05, so it describes the state before the 2026-10-28 overhaul.
- Recommended posts are shown with the post itself, not the community, in front (→ Personalization inputs section).
The default feed for logged-out users is Popular, which picks recent popular posts by net upvotes verified — Recommendations help page 2026.
- In some countries Popular is tailored to location. It uses IP when logged out and the Location Setting when logged in.
The last stage of the r/all retirement took effect on 2026-04-02, and all r/all links redirect to the home feed verified — Change log 2026-04-02.
- It applied to the app immediately, and the post says desktop rolls out that week. Trending content remains in r/popular.
- Users of old.reddit.com or the old Reddit default setting can still reach r/all.
The 2025-03-06 change log said, in its list of moderator-facing fixes, that a sort changed in a community no longer reverts to Best and persists on desktop and mobile verified — Change log 2025-03-06.
- The item concerns changing the sort in a community and ends with "the feed you intended"; it does not mention comment sorting.
A Trending notification is a notification about popular posts from recently visited communities verified — Trending notifications help page 2026.
- The Trending posts toggle in notification settings turns off all of them, but specific communities cannot be turned off alone. This page was last revised on 2026-02-26.
The 2026-10-08 change log announced a small experiment, starting in October, that adds a trending label to feed posts verified — Change log 2026-10-08.
- Tapping the label opens a detail page that gathers an AI summary of the trend and related communities and conversations.
- It targets some users on reddit.com, iOS, and Android, and does not state how the posts to label are chosen.
For You and Following
On 2026-10-28 the Reddit newsroom announced a new feed experience in which users choose between two feeds, For You and Following verified — Feed overhaul announcement 2026.
For You mixes posts from joined communities with interest-based recommendations, and Following shows only posts from joined communities verified — Feed overhaul announcement 2026.
"For You combines posts from communities you have joined with recommendations related to your interests." — Explore More Communities with Reddit’s New Feed Updates, 2026-10-28
The worldwide rollout takes place over several weeks, and the next launch reopens the feed last viewed verified — same announcement.
- The same announcement said it will keep experimenting with controls such as hiding posts and seeing less.
The announcement does not use the term 'home feed' and does not state how the two feeds are ordered verified — same announcement.
The description of splitting the home feed in two is in the Help Center change log, and this experiment reopened to a small number of users from 2026-09-02 verified — Change log 2026-09-10.
- The change log says only that there was a first experiment and does not give when.
- The change log says Following also includes posts from users you follow, which differs from the newsroom definition (only posts from joined communities).
- The 2026-10-08 change log said this experiment is testing swiping and sorting options verified — Change log 2026-10-08.
The body of the recommendations help page revised on 2026-10-28 does not mention For You or Following verified — Recommendations help page 2026.
Comment sorting
As of the AutoModerator documentation revised on 2026-09-30, the comment suggested sort values are best, new, qa, top, controversial, and old, and confidence is accepted as an alias of best verified — AutoModerator documentation 2026. The moderator permissions help page (revised 2026-04-02) lists Live instead of Top, so the lists in the two documents differ verified — Moderator permissions help page 2026.
- The AutoModerator documentation lists the six above and blank as
set_suggested_sortvalues verified — AutoModerator documentation 2026.- The documentation was last revised on 2026-09-30.
- The moderator permissions help page lists Best, New, Controversial, Old, Q&A, and Live as community suggested sorts verified — Moderator permissions help page 2026.
- The page was last revised on 2026-04-02, and Top is not in this list.
- The 2017 code's comment sort options have no live, while the comment sort menu HTML in the 2018-01 and 2018-02 Wayback copies contains live (beta) as a hidden option, like random verified —
r2/r2/lib/menus.py:579-588, Wayback 2018-01-25, Wayback 2018-02-02.
- The help pages do not give how these options are computed, and the only published formula is the 2017 code observed 2026-11-01(open question, 2017 sort formulas section).
Candidate generation (retrieval)
As of the 2026-10-28 revision, the Reddit help page describes the first stage of recommendation as candidate generation but does not disclose the kinds or number of candidate sources verified(home feed candidates section). As of the 2025-11 engineering post, the home feed gathers thousands of candidates, and as of the 2026-09 post that candidate generation uses SnooRec, which has handled all production traffic since early 2025 verified(home feed candidates section, SnooRec section). As of a 2025 engineering post, notifications use both rule-based and model-based candidate sources, and breaking-news push uses a content-first approach that picks the post first verified(notification candidates section).
Home feed candidates
The home feed candidate sources were published as a list in the 2021 post; what has been published since is the 2025 post saying thousands are gathered, and SnooRec, and we could not find the current source list or per-stage candidate counts observed 2026-11-01 — r/blog 2021-06-22, GPU blog post 2025.
When a user opens Reddit, the system gathers thousands of candidate posts, filters them with heuristics, and has a model score potential engagement, then sends the top to the home feed verified — GPU blog post 2025.
"we gather thousands of candidate posts, filter them using heuristics, and use a model to score potential engagement" — Reddit's Home Feed on GPU (blog post), 2025-11-10
As of the 2021-06 post, opening Home builds a candidate post list from several sources, passes it through several filter stages, and ranks it with the chosen sort verified — r/blog 2021-06-22.
- The same post listed subscriptions, similar communities, onboarding categories, recently visited communities, and popular and regional popular posts from the past 24 hours as candidate sources. The post was read from a Wayback copy.
"Reddit’s systems build a list of potential candidate posts from multiple sources, pass the posts through multiple filtering steps" — Evolving the Best Sort for Reddit’s Home Feed (r/blog, Wayback copy), 2021-06-22
The help page calls the first stage candidate generation, which builds an initial list of content the user may be interested in, but does not state the kinds, number, or approach of the sources verified — Recommendations help page 2026.
Recommended posts carry a recommendation reason, and the help page gives 'Popular on Reddit right now' and 'Similar to content you interacted with' as examples of such reasons verified — Recommendations help page 2026.
- The document does not say whether these two are the only candidate sources.
The 10-K FY2025 states that AI recommends posts and communities using factors such as search queries, post topics, and engagement by similar users verified — 10-K FY2025, filed 2026-02-06.
SnooRec
SnooRec is Reddit's multi-task retrieval model; it has handled all production traffic since early 2025 and is used for candidate generation in the home feed and notifications verified — SnooRec blog post 2026.
The user tower has per-task experts (sub-networks kept separately for each task) such as click, upvote, and good visit, and the item tower is shared verified — SnooRec blog post 2026.
- Because there is one item tower, all candidates go into a single ANN (approximate nearest neighbor search) index.
"task-specific capacity lives in the user tower, while the item tower remains shared" — SnooRec: A Shared Retrieval Foundation (blog), 2026-09-15
At serving time, per-task user embeddings are combined as a weighted sum using the task weights set by the surface and then normalized, and only one query is sent to the shared index verified — SnooRec blog post.
- So changing the retrieval objective requires no model retraining or index rebuild.
Training uses an InfoNCE loss with in-batch negatives (a contrastive loss that separates the correct pair from the other pairs in the batch) and dot product similarity verified — SnooRec blog post.
- 10% of the input features are randomly dropped out.
Notification candidates
Notification recommendation candidate sources split into rule-based and model-based, and breaking-news push picks the post first, separately from these verified — Notification recommendation blog post 2025, Breaking-news push blog post 2025.
- The rule-based source Subscribed picks the top X subscribed subreddits, takes the top Y posts by score from each subreddit's posts of the last few days, and fills the list in round-robin verified — Notification recommendation blog post 2025.
- The score is computed from upvotes, downvotes, and post time.
- The model-based source, a user-post two-tower, is trained on labels such as push notification (PN) clicks verified — Notification recommendation blog post.
- Post embeddings for hundreds of thousands of recent posts are precomputed by an indexing job, and only the user embedding is computed in real time for nearest-neighbour search.
- Breaking-news push picks candidates with a content-first approach that picks the post first and decides the interested users afterward verified — Breaking-news push blog post 2025.
- It was introduced to complement the existing user-first recommendation, which tends to pick older posts with accumulated engagement signals and adds latency.
- As of the 2025-11-25 post, it is used for Breaking News push (→ Breaking-news push section).
Community recommendations
As of the 2026-10-28 help page, community recommendations are decided by regional and global activity and relevance to trending topics verified — Recommendations help page 2026.
- The surfaces for this description are the mobile Explore Communities page and trending in search, among others verified — Recommendations help page.
- For logged-in users, similarity to communities already joined or interacted with is also used verified — Recommendations help page.
Ranking
As of the 2025-11 engineering post, the home feed ranker is a DNN built in PyTorch and served on GPU, but its prediction targets, objective function, and weights are not public observed 2026-11-01(home feed ranker section). The help page lists personalization inputs only at the category level and says the importance of each factor changes dynamically with user activity verified(personalization inputs section). By contrast, Reddit published that the notification ranker produces its final score as a weighted sum of per-action predicted probabilities verified(notification ranking section).
Home feed ranker
As of the 2025-11 post, the home feed ranking model is a DNN written in PyTorch and served with ONNX Runtime verified — GPU blog post 2025.
String features are tokenized and categorical features are embedded and concatenated, then passed through shared layers and target layers verified — GPU blog post 2025.
With architectures such as DCNv2 (a recommendation model structure that learns feature crosses explicitly), the layers grew and CPU serving hit its limit, so serving moved to GPU and cut serving cost 10× verified — GPU blog post (→ model serving section).
"Outcomes include a 10x reduction in serving costs." — Reddit's Home Feed on GPU (blog post), 2025-11-10
The 2026 Q3 shareholder letter said that a new model architecture, trained with 20× more Reddit data, was launched in Q3 along with ranking improvements verified — Q3 2026 shareholder letter.
- The letter said this change broadened the signals used for personalization and sped up model releases.
- The same letter said feed model freshness fell from 9 days to 4 days.
- In the paragraph on the video experience, the letter said vertical chaining and a modernized ranking pipeline launched in Q3, but it did not explain what the two terms mean.
- The letter does not say whether that pipeline refers to the home feed ranker or is limited to the video surface.
The S-1 said New Home Feed ranking was retrained on much more data and user signals, and cited as a result that Good Visits (visits in which a post is consumed for more than 30 seconds) rose by more than 30% verified — S-1 2024.
- The comparison period is the quarter ended 2023-12-31 versus the quarter ended 2023-06-30.
- The S-1 does not give when the retraining happened and only places the retraining and the figure side by side under 'For example', without stating causation.
- The 10-K FY2024 keeps the same sentence but changed the figure to +30% for 2024-Q4 versus 2023-Q4 verified — 10-K FY2024.
- The same paragraph of the 10-K FY2025 has neither this example nor the figure verified — 10-K FY2025.
The S-1 described an AI-based recommendation engine that selects and ranks content in the home feed, post detail pages, inside communities, and notifications and emails verified — S-1 2024.
- This sentence appears only in the S-1 Business section and not in the body of the 10-K FY2024 or FY2025.
- The statement does not say whether it is a single model or a collective name for several systems.
Personalization inputs
As of the 2026-10-28 revision, the Reddit help page lists personalization inputs in the categories of post information, user activity, account age, and location setting, and does not disclose the model structure or weights verified — Recommendations help page 2026.
Post-side inputs are upvotes and downvotes, the community posted in, comment history, post type, post age, and flair (a tag a community attaches to a post) verified — Recommendations help page 2026.
User-activity inputs are content and communities interacted with during visits, votes, dwell time, subscriptions, topics of interest, and requests to see less verified — Recommendations help page.
- The interaction record covers both the current visit and past visits.
- Dwell time is measured per community, and recently visited communities are also considered separately.
- Topics of interest are those chosen at sign-up, and see-less refers to the post types for which the user requested "show less".
"the time you’ve spent on specific communities, the communities you’ve visited recently, your community subscriptions" — Reddit’s Approach to Content Recommendations, revised 2026-10-28
After the filter stage, predictive models predict whether the user will like the content or not, and content is ordered by that prediction verified — Recommendations help page.
- The document does not give the model type or the prediction target, that is, what counts as positive.
The importance of each factor is said to change dynamically with the user's activity, reactions to recommended content, and feedback verified — Recommendations help page.
- This appears to mean that weights differ per person rather than being global constants inferred. The basis is that the document says it changes with 'your activity'; the implementation is not public.
Best in the home feed takes into account a preference for new communities, account age, and the types of posts the user previously upvoted or commented on verified — Home recommendations help page 2026.
The default for location personalization is approximate location based on IP, and choosing No location specified turns off only the location tailoring of the feed and recommendations verified — Location setting help page 2026.
- Location inferred from IP is still used for ads and for deciding which terms apply. This page was last revised on 2026-03-29.
- A separate document states that precise location, meaning latitude and longitude, is not collected, stored, or used verified — Location data help page 2026.
Notification ranking and send volume
As of the 2025-05 post, notification post recommendation narrows candidates in the order Budgeter, which sets the number of sends per user, then Retrieval, ML scoring, and Reranking, which applies rules verified — Notification recommendation blog post 2025.
- It recommends from millions of posts to tens of millions of users every day, and is a near-real-time pipeline run with queues and asynchronous workers verified — Notification recommendation blog post 2025.
- The ranking model is a multi-task DNN with a block of shared layers and per-label target layers, and the final score is the sum of per-action predicted probabilities multiplied by weights verified — Notification recommendation blog post.
The post calls this model the SPR model.
Training data is collected from the prediction log to eliminate train-serve skew (the problem of feature values differing between training and serving), and only the last few weeks are used.
score = Wclick×P(click) + Wupvote×P(upvote) + … + Wdownvote×P(downvote)
- SnooRec's user and item embeddings are also used as input features of the notification light ranker (a front-stage ranker that first narrows candidates with a lightweight model) and the ads ranking model verified — SnooRec blog post 2026.
- In notifications they are also used as dense features, along with derived similarities such as per-task dot products.
- Thanks to Matryoshka training (training that keeps the leading part of an embedding usable on its own), the ANN index can use the full 256 dimensions and the ranker can use a 32- or 64-dimension prefix.
- Whether these embeddings are used in the final home feed ranker is not in the post's surface table.
- The Budgeter sets the daily budget per user by causal modeling verified — Notification recommendation blog post 2025, Causal budget blog post 2026.
- The 2026-10 post describes that approach only for the Trending Budgeting system that sets the budget for trending recommendation push. The details below are from that post.
- An S-learner (an approach that estimates effect with one model that takes the treatment variable as a feature) model is trained on experiment data in which users were randomly assigned to fixed daily budgets.
- The model takes the budget as input and predicts future active days and the probability of turning off notifications.
- The policy score is a simplified form of activity weight × E[active days] − disable weight × P(disable).
- The budget model runs inference in a daily batch and keeps per-user predictions in a KV store, and when a notification opportunity arrives, the ranking service applies the policy at request time verified — Causal budget blog post.
- So policy weights and thresholds can be changed without retraining the model.
- New policies are first examined with off-policy evaluation (evaluation that estimates a new policy's performance from the logs of an existing policy). The approaches are direct matching and doubly robust.
- Then they are confirmed with online experiments and a long-term holdout (a control group left without the change).
Breaking-news push and trending verdict
As of the 2025-11 post, breaking-news push picks posts by a score that multiplies an Engagement Score predicted from first-hour engagement by an LLM-assigned Breakingness Score verified — Breaking-news push blog 2025.
The Engagement Score is the value XGBoost predicts for 24-hour consume from a post's first-hour comments, shares, upvotes, and consume verified — Breaking-news push blog 2025.
The LLM scores urgency, source credibility, and newsworthiness against an editorial rubric and gives sensitive content a 0 verified — Breaking-news push blog.
- A post about the same story as a high-scoring post from the last 24 hours is penalized as a semantic duplicate.
- Only posts at or above the 99.8th percentile of candidate scores from the last 7 days are sent.
COPTER v1 (Reddit's trending content detection system) treats a post as trending when its engagement, projected to a comparison age, is exceptional relative to recent posts in the same context verified — COPTER blog 2026.
- A context is split by subreddit or linked Wikidata topic, age bucket, metric, and growth-trajectory bucket.
- views, upvotes, and comments trigger the verdict, and downvotes are used only for diagnostics.
- It runs on three cycles: hourly observation, daily modeling, and hourly detection.
"trendingness measures whether attention to a post is unusual for its context and moment" — Contextual Popularity Trending Content Detection (blog), 2026-09-23
COPTER's first consumer is search, and the post says only that it intends this signal as a common layer that feed candidate generation, ranking, and notifications could also use verified — COPTER blog.
- In search, trending_level is indexed as a Milvus corpus field and used as a filter for semantic search. The semantic search model is a query-to-post two-tower distilled from an LLM.
- The latest value is rechecked in Redis, and a trendingness dimension is added to the value model (a score formula that weights and combines several predictions).
- The post does not state whether this was applied to the feed.
- The feed trending label experiment in the 2026-10-08 change log (→ Feed surface) also does not say which detection signal it uses verified — Change log 2026-10-08.
Re-ranking, diversity, and filters
As of the 2026-10-28 revision, the Reddit help page explains that after candidate generation it filters out spam, already-seen content, and blocked content, and that the final sort tries to keep too many similar posts from appearing in a row verified (Home feed filters and diversity). The name and approach of the diversity algorithm currently in use are not public observed 2026-11-01 (Home feed filters and diversity). Notifications adjust model scores with rules at the re-ranking stage, and SnooRec explores with temperature sampling after retrieval verified (Notification re-ranking and SnooRec exploration).
Home feed filters and diversity
The filter and diversity rules of the home feed are public only at the level of sentences in the help page and engineering posts observed 2026-11-01 — Recommendation help 2026.
There is a filter stage after candidate generation that removes spam, already-seen content, and blocked content verified — Recommendation help 2026.
It says it tries to ensure diversity at the final sorting stage so that too many similar posts do not appear in a row, and does not disclose the approach verified — Recommendation help.
"we aim to avoid showing you too many similar posts in a row in the feed" — Reddit’s Approach to Content Recommendations, revised 2026-10-28
It tries to keep adult and sensitive-topic content out of recommendations unless the user subscribed to that community or showed interest verified — Recommendation help.
- It adds that this type of recommendation may be limited even for subscribers.
Community muting removes the community from notifications, the home feed (including recommendations), and Popular, and up to 1,000 communities can be muted verified — Muting help 2026.
- Another sentence says the scope will be expanded to other mixed feeds and recommendations, but it is not possible to tell when that sentence was written.
Since 2026-09, posts and comments from accounts that received a human verification or automation registration requirement and completed neither are removed from recommendations verified — Change log 2026-09-10.
- It applies first to some rule-violating content and accounts with high confidence and will widen gradually.
REV2, the real-time rules engine of Reddit's Safety team, receives slow ML signals through a Flink-based Signals-Joiner, but the source does not disclose whether it connects to feed filters verified — Current 2025 session abstract.
- The talk was given on 2025-10-29, and the speaker is affiliated with Reddit, Inc.
Notification re-ranking and SnooRec exploration
Notifications adjust scores with rules in re-ranking, and SnooRec widens exploration with temperature sampling after ANN search verified — Notification recommendation blog 2025, SnooRec blog 2026.
The Reranking stage of notifications adjusts the model's final probability score with rules, for example placing subscription-based recommendations ahead of non-personalized content verified — Notification recommendation blog 2025.
- The post gives adding more diversity as an example of what re-ranking can do.
- What it says is under experiment is dynamically changing per-head weights according to product insights.
- Raising the comment head score of posts with few comments for users likely to react to comments is given as an example of what that approach makes possible.
SnooRec has an exploration mechanism that, after ANN search, samples from the top-k candidates with temperature softmax (softmax probabilities of scores divided by a temperature) verified — SnooRec blog 2026.
- The temperature is calibrated by the standard deviation of search scores, and because per-request calibration was not better than global calibration, production uses global calibration.
- Temperature sampling gave Days Active +0.236% and subreddit diversity +1.066%, but Show Less clicks, a negative feedback signal, also increased by +6.145%.
- This table bolds everything, including row names and headers, so it does not distinguish significance. It also does not distinguish which of the two temperatures (τ=0.0022, τ=0.0032) a value belongs to.
"exploration can improve discovery, but the temperature needs to be tuned per surface and monitored with guardrail metrics." — SnooRec: A Shared Retrieval Foundation (blog), 2026-09-15
Cold start
As of the 2026-10-28 revision, the Reddit help page says that for users with new accounts or few subscriptions, the model may emphasize recommendations over subscribed content verified (New users). A 2025-05 post said that in notifications, users with few signals are receiving more generic content verified (New users). As of 2026 Q3, logged-out DAUq is 76.8M of 130.3M total, and Reddit will test a logged-in-only experience in some markets outside the U.S. starting in 2026 Q4 verified (Logged-out users).
New users
Public material on new users includes a help-page sentence saying the share of recommendations may increase, a 2025-05 engineering post saying users with few signals get more generic content in notifications, and filing sentences saying AI is used for onboarding and personalization verified — Recommendation help 2026, Notification recommendation blog 2025, Q4 2025 shareholder letter, 10-K FY2025.
For users with new accounts or few subscribed communities, the model may emphasize recommendations over subscribed content verified — Recommendation help 2026.
- Interest topics chosen at sign-up are also used as a recommendation factor.
- This is not a statement that a separate model exists for new users.
"For users with newer accounts or fewer community subscriptions, our models may emphasize recommendations over subscriptions." — Reddit’s Approach to Content Recommendations, revised 2026-10-28
As of the 2025-05 post, in notifications users with few signals are receiving more generic content, and improving this is a future plan verified — Notification recommendation blog 2025.
- The post does not state how it will be improved.
The Q4 2025 shareholder letter said Reddit is increasing LLM use to improve content understanding and bring personalization forward verified — Q4 2025 shareholder letter.
- The CEO wrote that Reddit uses AI and ML to make Reddit feel personalized and useful from the moment the app is opened.
The 10-K FY2025 said Reddit believes AI investment improved new-user onboarding and drove engagement of existing users verified — 10-K FY2025.
Logged-out users
As of 2026 Q3, logged-out DAUq is 76.8M of 130.3M total (about 59%), and Reddit will test a logged-in-only experience starting in 2026 Q4 verified — Q3 2026 shareholder letter.
In 2026 Q3, logged-out DAUq (the daily unique visitors metric Reddit uses in its earnings reporting) was 76.8M, logged-in DAUq was 53.5M, and total DAUq was 130.3M verified — Q3 2026 shareholder letter.
- The figures are in the regional key metrics table in the letter's appendix. Year over year, logged-out grew 17% from 65.8M and logged-in grew 7% from 50.2M.
- The letter said Q3 search traffic fell sharply and the effect was largest on logged-out and web traffic.
The 10-Q Q3 2026 says visitors arriving from search engines are mostly not logged in, and their monetization comes mainly through conversation pages and feed ads verified — 10-Q Q3 2026.
- The 10-K FY2025 used the same sentence.
The 10-K FY2025 said Reddit would stop reporting logged-in and logged-out DAUq separately from the quarter ending 2026-09-30, but the 10-Q Q3 2026 reversed this plan verified — 10-Q Q3 2026.
- The notice of discontinuation is in the user metrics description of the 10-K FY2025.
- The 10-Q gave as the reason that search traffic has become more volatile because of the spread of AI summaries and other factors, so the two metrics are useful for understanding user trends.
"Accordingly, we are continuing to report these metrics for the quarter ended September 30, 2026." — 10-Q Q3 2026, 2026-10-30
In 2024-Q4, logged-out DAUq was 55% of total DAUq verified — 10-K FY2024.
- The 10-K FY2024 said logged-out users mainly arrive from search engines, dwell briefly, and have a low monetization ratio.
The CEO letter in the Q3 2026 shareholder letter announced the shift to a logged-in-only experience and said full testing begins in select markets outside the U.S. in 2026 Q4 verified — Q3 2026 shareholder letter.
- It did not name the markets, and the test results will be used to design the global logged-in-only version.
- The CEO gave as business reasons the growth in ad-targeting signals and generally higher engagement when users are logged in.
"In Q4 we’ll begin fully testing this in select markets outside the U.S." — Q3 2026 shareholder letter, 2026-10-29
Feedback signals
The Reddit help page describes upvotes and downvotes as the basic signals that decide what is shown in communities and conversations verified (Explicit signals and controls). The 2026-10-28 help page says that tapping show fewer on a recommended post takes effect at the community level, not the post level verified (Explicit signals and controls). Dwell-based metrics are defined differently in each document: Good Visits in the S-1 is consumption over 30 seconds, and a good visit in the SnooRec post is dwell over 15 seconds verified (Dwell and implicit signals).
Explicit signals and controls
Explicit signals and controls that are public include voting, community-level show fewer, the X icon experiment that began 2026-08-10, and incognito sessions that are excluded from personalization verified — Voting help 2026.
Reddit explains that upvotes and downvotes are the basic signals that decide what is exposed across communities and conversations verified — Voting help 2026.
- This document was last modified on 2026-10-05.
Tapping show fewer posts like this on a recommended post stops recommendations from that community and also tries to show fewer posts from similar communities verified — Recommendation help 2026.
"Once we receive this feedback, we’ll stop showing you recommendations from the community that the post came from" — Reddit’s Approach to Content Recommendations, revised 2026-10-28
Since 2026-08-10, in an experiment with a small number of users, an X icon is attached to every post in the home feed and some ads, and tapping it is also used as a signal to show less similar content verified — Change log 2026-08-12.
- In the experiment group the existing Hide option is removed, and show fewer posts like this is kept as is.
Activity in an incognito session is not reflected in feed, recommendation, notification, or ad personalization verified — Incognito help 2026.
- It is available only in the app, not in the logged-in home feed.
- It ends after 5 minutes of inactivity, but for some users this time differs because of experiments.
- It is not offered in some regions with age verification requirements. This document was last modified on 2026-10-27.
Dwell and implicit signals
Dwell-based signals appear in filings and engineering posts but are defined differently, and neither says whether they are training labels for the home ranker verified — S-1 2024, SnooRec blog 2026.
The S-1 defines Good Visits as visits that consume a post for more than 30 seconds and used it as a performance metric for home feed ranking improvements verified — S-1 2024.
- The 10-K FY2024 used the same definition, and this metric was dropped from the 10-K FY2025.
"“Good Visits,” defined as a user consuming a post for more than 30 seconds" — S-1, 2024-02-22
The A/B table in the SnooRec post defines a good visit as post dwell over 15 seconds verified — SnooRec blog 2026.
- The post does not say whether this good visit is a training label for the home feed ranker.
In SnooRec's home feed A/B, the setting with only the good visit expert on gave user sessions +0.28% and visits over 15 seconds +1.21% verified — SnooRec blog.
- The comparison baseline is the previous multi-task setup that used a shared encoder with no task distinction.
- The upvote expert gave upvotes +0.91%, and the click expert gave clicks +0.74%.
- The post interprets the enabled task and the metric that rose as matching, but in the same table clicks rose more with the good visit expert (+0.90%, significant) than with the click expert.
- Only values in bold in the table (p<0.05) are significant.
As of the 2024-04 post, client telemetry logs a post-consume event when a post stays on screen for 2 seconds or more, distinguishing it from fast scrolling verified — Home feed instrumentation blog 2024.
- It logs
post-viewwhen a post appears on screen,post-clickon tap,post-voteon vote, andfeed-load-successandfeed-load-failfor feed loads. - The post describes these events as health and guardrail metrics for the feed rewrite experiment and does not state whether they are used as ranking training labels.
- It logs
Ads
As of the 2023-08 and 2024-05 posts, the Reddit ads funnel runs in the order of an eligibility filter, a trimmer that reduces the number of ads, a heavy prediction model, and the auction, and the 2023-08 post wrote the auction score as the bid times the probability of a charging event verified (Ads funnel). As of the 2025-02 post, the trimmer is the two-tower that the 2024-05 post described as multi-task, with a Neural Linear Bandit (a method that places a linear bandit on top of embeddings and explores in proportion to uncertainty) layer added verified (Ads funnel). Reddit explains that Max campaigns automate targeting and budget allocation with AI that predicts value per impression, and opened them to all advertisers on 2026-09-03 verified (Filings and automated campaigns).
Ads funnel
The stages of the ads funnel and the trimmer structure were published in 2023–2026 engineering posts verified — FPR blog 2023. The 2026-02 post describes the heavy ranker as the stage that predicts calibrated probabilities of CTR and conversion rate and links the 2023-09 click prediction DNN post as an example, and some of its features are covered by the 2024-02 and 2026-02 posts verified — Ads contextual relevance blog 2026.
As of the 2023-08 post, ads ranking has four stages: eligibility filter, First Pass Ranker, heavy prediction model, and auction verified — FPR blog 2023.
- The eligibility filter looks at targeting, brand safety, budget pacing (adjusting spend speed so the budget is used evenly over the period), and so on.
- The First Pass Ranker uses lightweight ML to reduce candidates from millions to hundreds.
- The auction score eCPM (a score converted to expected revenue per impression) is bid × P(charging event | user), and the bid can be adjusted by pacing and campaign type.
"Compute the final ad ranking score (eCPM) by multiplying bid value and P(Charging Event|user)." — First Pass Ranker and Ad Retrieval (blog), 2023-08-08
The 2023-08 First Pass Ranker chose the top K with a utility function that takes the cosine similarity of user and ad flight embeddings as input verified — FPR blog.
- One of the several models tried as the embedding model was the two-tower sparse network (TTSN).
As of the 2024-05 post, the Global Auction Trimmer reduces millions of ads to thousands with a multi-task two-tower sparse network, and the heavy ranker then ranks them verified — Ads retrieval blog 2024.
- It has ad embeddings per campaign objective (click, video view, conversion) and a single user embedding.
- The model is updated daily, user embeddings are cached for 24 hours, and ad embeddings are updated about every 5 minutes.
- The two towers are deployed separately on Gazette model servers. The scale is described differently from the hundreds stated in the 2023 post.
The 2025-02 post says the trimmer score is eCPM, the two-tower cosine similarity multiplied by the bid verified — Ads exploration blog 2025.
- A separate bid modifier applies to conversion- and install-oriented flights.
The same post stated that a Neural Linear Bandit layer is added on top of the two-tower to explore at the trimming stage verified — Ads exploration blog.
- Noise proportional to uncertainty is added to the cosine similarity so that new or low-impression ads are not eliminated early.
- ALO (Ad Level Optimization), which handled downstream exploration, is deprecated.
- The post said CTR and conversion rate improved significantly in online experiments, and the size of the improvement was given in an image table, not in the body text.
The ad click probability (pCTR) prediction model moved from logistic regression and GBDT to a DNN, and as of the 2023-09 post gave CTR +2–4% and CPC −2–3% in online experiments verified — Ads CTR DNN blog 2023.
- The post says ads ranking depends heavily on real-time engagement prediction and real-time bids.
- The DNN has the advantage of handling sparse string and ID features as embeddings.
- Serving latency rose by 50–100%, but fixing other bottlenecks in the inference service let it serve at lower latency and cost than GBDT.
As of the 2024-02 post, the CTR prediction DNN takes as input user and ad embeddings pooled from Knowledge Graph entity embeddings and user-ad similarity features verified — Ads content understanding blog 2024.
- In v2 these embeddings were made trainable.
The 2026-02 post defined contextual relevance of posts and ads with LLM labels and said it integrated embeddings fine-tuned on these labels into the main stages of the funnel verified — Ads contextual relevance blog 2026.
- The label model was Gemini 1.5 Flash, and at the time of publication it was Gemini 2.5 Flash Lite, and SFT (supervised fine-tuning on correct examples) was also done with golden data.
- The fine-tuned embedding reached 3.2× the IAB category (industry-standard content classification for ads) match in normalized PR AUC, and pretrained Stella reached 2.08×.
- The integration targets are features for targeting, retrieval, and the light ranker and heavy ranker.
As of the 2024-07 post, pacing computes spend-rate control signals from per-campaign budget, remaining period, and past spend, and recomputes the signals of all campaigns at least once a minute verified — Ads pacing blog 2024.
- Probability thresholds and bid modification are given as representative control means.
As of the 2024-11 post, the Dynamic Product Ads funnel runs in the order of Targeting, product candidate generation, product selection (light ranking), and auction verified — DPA blog 2024.
- The auction decides the products shown by bid, ad relevance, and other factors.
- Rule-based candidates such as popular and trending are mixed in to ease cold start.
- The behavior-based two-tower is trained on past conversion events and retrained daily on Ray.
Filings and automated campaigns
SEC filings describe the ad auction and ML ranking without model structure, and the 2025–2026 shareholder letters report model improvements together with ad performance figures verified — 10-K FY2025.
- The S-1 stated that the Ad Server runs a second price auction that takes into account bid type, bid amount, remaining budget, engagement probability, and user experience quality factors verified — S-1 2024.
- About 88% of 2023-Q4 ad revenue was purchased through the auction.
- The second price auction statement is not in the 10-K FY2024 or FY2025.
- The S-1 stated that its ad ranking and click prediction models use deep learning to maximize clicks and conversions and reduce advertiser cost verified — S-1 2024.
- This deep learning sentence is not in the 10-K FY2024 or FY2025.
- The 10-K FY2025 states that ads are ranked by brand fit and ML-predicted user engagement, and the same wording appears in the 2024-02 S-1 verified — 10-K FY2025.
- The 10-K FY2025 states that using ML and predictive models to match supply and demand is at an early stage verified — 10-K FY2025.
- It states that the company is now focused on making the predictive models work across campaign objectives, placements, and formats, and that this helps them better predict ad conversion rates such as installs or purchases.
- The advertiser help page describes Reddit Ads as an auction-based platform where ads compete with each other, and states that the default bidding strategy is Lowest cost observed 2026-11-01 — Ad cost help page.
- It states that ad group spend can exceed the budget by up to 20%. The page has no date, so the grade uses the access date.
- Winning and pricing rules such as second price are not on this page.
- Reddit describes Max campaigns as a campaign type that uses AI predicting value per impression to automate targeting, creative selection and rotation, placement, and budget allocation verified — Max full release 2026.
- It started on 2026-01-05 as a beta for some advertisers with traffic and conversion objectives verified — Max beta 2026.
- It opened to all advertisers on 2026-09-03, and the 10-K FY2025 also describes the 2026-01 beta in the same wording.
- The advertiser help page states that it predicts the best creative combination per impression and adjusts budget and bids to minimize CPA observed 2026-11-01 — Max help page.
- The same help page states that at least one audience hint must be set and that there is a calibration period after creation or edits, and it does not disclose the model structure.
- It states that when ad personalization is on, ads can use activity within Reddit, inferred interests and demographic information, external activity shared by advertisers, and customer lists matched by email verified — Ad controls help page 2026.
- The usable information is within the settings scope by region. Demographic information is inference of age range, gender, and language, and external activity is received through Business Tools such as the Reddit Pixel.
- Even when it is off, ads are served based on content viewed in the current session, ad clicks in the same session, joined communities, account information, and general location based on IP.
- Reddit stated that conversion revenue covered by CAPI (an integration where the advertiser's server sends conversion events directly) rose 3× year over year in the second half of 2024 verified — Q4 2024 shareholder letter.
The shareholder letters reported ad metrics together with model improvements, and the 10-Q reported price and impression metrics without mentioning models verified. The 2026 Q3 10-Q attributes the price increase to improved performance across all funnel ad objectives and higher advertiser demand, and part of the impression increase to ad load optimization including new ad surfaces verified — 10-Q Q3 2026.
| Source | Metric | Change | Basis of comparison |
|---|---|---|---|
| Q3 2025 shareholder letter | Lower-funnel conversion objective performance | +20% or more | Not disclosed |
| Q2 2026 shareholder letter | 6-second Engaged Video View-through | +130% | Not disclosed |
| Same letter | Video completion rate | +71% | Not disclosed |
| Same letter | CTR | +40% or more | Year over year |
| 10-Q Q3 2026 | Ad price | about +34% | Same period last year |
| Same 10-Q | Impressions | about +15% | Same period last year |
- The Q3 2025 letter attributed the 20% improvement to optimized ML models, and also reported double-digit percent improvement in App Ads objectives from model and optimization improvements verified — Q3 2025 shareholder letter.
- The Q2 2026 letter attributed the 130% and 71% to improved models, but did not quantify the 40% CTR as a model contribution verified — Q2 2026 shareholder letter.
Infrastructure and platform
As of the 2026-06 engineering post, the Ranking Platform is a set of gRPC services that serves personalization for the home feed, search ranking, and notifications and handles tens of thousands of requests per second verified(Ranking Platform section). As of the 2025-11 post, the home feed ranker is served on GPUs with Triton verified(Model serving and vector search section). On 2026-08-31 the European Commission designated Reddit a very large online platform (VLOP) under the Digital Services Act (DSA), so Reddit must meet additional obligations such as systemic risk assessment by 2027-01 verified(Regulation and experiments section).
Ranking Platform
As of the 2026-06 post, the Ranking Platform serves the home feed, search ranking, and notifications together, and a 2022 post introduced the ML Ranking Platform as Pipedream, a stage graph service verified — Proxyless blog post 2026.
- The Ranking Platform is a set of gRPC services handling tens of thousands of requests per second across several Kubernetes namespaces and clusters verified — Proxyless blog post 2026.
- Traffic comes from GraphQL, Notification Platform, Answers, and others.
- As of the 2026-06-01 post, it removed the front-end Envoy Gateway and moved to an xDS-based proxyless service mesh.
- It applied ORCA, where the server reports CPU utilization in a response trailer so clients adjust weights, and saved hundreds of CPU cores.
- As of the 2022 post, the ML Ranking Platform (prototype name Pipedream) was a Go service that expresses ranking as an acyclic graph of stages verified — Pipedream blog post 2022.
- A stage does a single action such as adding candidates, adding features, filtering candidates, or scoring, and stages are grouped with series and parallel meta stages.
- The post described the ranking system in three stages: candidate generation, filtering, and scoring, and the RPAN live stream feed was the first prototype.
- Another post that year stated that this platform handled ranking for the discover tab, new-user onboarding, and the video surface verified — MLRP blog post 2022.
- At TWIMLcon 2022, Reddit presented a 'platform first' approach to expanding recommendation and personalization onto the Ranking Platform verified — TWIMLcon 2022 session.
- The session page has a talk video of about 30 minutes, but these notes did not watch the video, so this source is not used to state the structure or models.
Model serving and vector search
As of the 2025-11 post, the home feed model is served on GPUs, and a 2021 post stated that Gazette, which served feed models, was redesigned as a separate inference service verified — GPU blog post 2025.
- Moving the home feed model to GPUs involved reworking the entire serving path verified — GPU blog post 2025.
- On CPUs, thousands of pods received about 80 GB/s of feature data.
- Large embedding features were reduced from FP64 to FP32, and user features were sent once rather than per candidate, with the model server spreading them across the batch.
- Message size fell 5× and Inference Service latency fell by more than 2×. Triton's dynamic batching and queue policy control overload.
- As of the 2021 post, ML inference was served by Gazette inside Minsky to Popular, Home Feed, Video, Push Notifications, and Email, and all models were embedded in the app server verified — GIS blog post 2021.
- It was redesigned as the Gazette Inference Service, a Go (baseplate.go) service with a single Predict endpoint.
- Each model runs in its own model server pool. A pool is a baseplate.py service wrapping a TensorFlow SavedModel and is deployed on Kubernetes.
- A 2024-05 ads post also calls this service Reddit's ML model hosting platform verified — Ads retrieval blog post 2024.
- In 2024, Reddit teams used Vertex AI Vector Search, Solr ANN, and FAISS separately for ANN search verified — Vector DB blog post 2025.
- Solr ANN was being tested for large datasets, and FAISS was used as a sidecar for small datasets.
- In 2025, after comparing Qdrant and Milvus on about 340 million 384-dimension post vectors with HNSW (a graph-based ANN index), it judged that Milvus fit the organization better.
- This post has no sentence saying deployment was completed, and a 2026-09 COPTER post says search's semantic search uses a Milvus corpus verified — COPTER blog post 2026.
- As of the 2023-07 post, Reddit rewrote Home and Popular on a new feeds platform based on SDUI (an approach where the server decides and sends the types and order of screen elements) verified — Feed architecture blog post 2023.
- It newly released the Watch and Latest feeds, and the post unit the server sends is a Group object holding an array of Cells.
- Home feed loading became 12% faster.
- The 2024-04-02 post stated that the new Home, Popular, News, Watch, and Latest feeds were rolled out to Android and iOS worldwide verified — Home feed rewrite blog post 2024.
- The experiment ran for 8 months, and TTI (time from the splash screen until the home feed renders) improved by 10–12%.
- As of the 2026-11-01 lookup, the 178 public repositories in the github.com/reddit organization contain no recommendation, ranking, feature store, or ML serving code observed 2026-11-01 — github.com/reddit.
- The repositories are service frameworks such as baseplate, experiments.py, and decider, Devvit templates and games, tutorials, and so on.
- milvus, knowhere, and VectorDBBench are only forks of Zilliz projects and are not evidence of production use.
Points of contact with search ranking
As of the 2026-06 post, search is served from the same Ranking Platform as feeds and notifications, but the 2024 search LTR (a method that orders results by learning) ran on Solr verified — Proxyless blog post 2026, BBuzz 2024 abstract.
- In 2024, the site search team computed features with a Solr LTR plugin to re-rank the top-N, and presented lessons from scaling this to thousands of queries per second verified — BBuzz 2024 abstract.
- The top-N re-ranking is on slide 34. The team also gave a talk with the same content, "Learning to Rank at Reddit: A Project Retro", at Haystack US 2024 (2024-04).
- The search LTR chose LambdaMART loss (a training loss that directly targets ranking metrics) as the loss and a deep learning model as the model verified — BBuzz 2024 slides.
- The first training data was about 1000 head and tail queries with 20 results per query labeled by humans.
- The engagement verdict built from click logs gave relative weights to position, click, and post-click dwell, and was applied to 30-day and 60-day sums verified — BBuzz 2024 slides.
- The weights are
Position 0.05,Click 0.05, andClick+dwell 0.9. It cited agreement between human labelers' verdicts and post-click dwell as a good signal. - Irrelevant documents are also somewhat related to the query, so there were no true negative examples; therefore documents from other queries were picked at random and added as negative labels.
- The weights are
- The slides' comparison table lists the content period covered as about 19 years for Solr LTR and 90 days for Reddit's existing ML infrastructure verified — BBuzz 2024 slides.
- It states that the existing infrastructure has rich features and model types, but has multiple network hops and makes query-dependent features difficult.
- This existing infrastructure may be the Ranking Platform for feeds inferred. The evidence is only that the comparison table calls it 'existing ML infra' without a name, and there is no evidence that 90 days is the feed candidate window.
- The 2024 search roadmap is a hybrid structure that runs LTR and embedding vector search together over lexical candidates and merges the two results by interleaving or rank fusion verified — BBuzz 2024 slides.
- The search team judged that signals, which boost posts with high recent engagement per query, cover far more search traffic than expected and said they should be added as LTR features, and the last-updated slide shows a variant with signals added.
- Hot, Top, New, and Relevance, whose definitions the help page gives, are search sorts verified — Search sort help page 2026.
- Hot prioritizes posts that recently receive upvotes and comments, and Relevance, the default, reflects term rarity, post age, votes, and comments.
- The document does not say whether the feed's Hot has the same definition. This document was last modified on 2026-03-27.
- Because Hot in the 2017 code used only net votes and posting time, the current Hot may have changed to reflect comment activity too inferred. The evidence is only this one-line description, and the same document also describes Top loosely, so it is weak.
- Reddit Answers was integrated into Reddit search on 2026-05-26 verified — Reddit Answers newsroom post 2026.
- The Q4 2025 letter said that in Q4 more than 80 million people searched directly on Reddit every week, versus 60 million one year earlier verified — Q4 2025 shareholder letter.
Regulation and experiments
Reddit has been a DSA VLOP since 2026-08-31 verified — EU designation press release 2026. The recommendation system description appears to be handled by the recommendation help page that the DSA information page links to under 'Other Information' inferred. The evidence is only that link; the page does not call it a recommendation system disclosure, and the help page does not mention the DSA.
- On 2026-08-31 the European Commission designated Reddit a VLOP under the DSA verified — EU designation press release 2026.
- A VLOP is a very large online platform that the DSA designates and subjects to separate obligations.
- Reddit must meet additional obligations such as systemic risk assessment and mitigation by 2027-01. The press release was modified on 2026-09-04.
- The designation list gives 57.2M monthly EU users, main establishment Reddit Netherlands B.V., and supervising DSC the Netherlands, and marks the decision text as not yet public verified — VLOP designation list 2026.
- Reddit's DSA information page explains that the annual transparency report covers EU content moderation and links the recommendation help page (Reddit's Approach to Content Recommendations) from the 'Other Information' list verified — DSA information help page 2026.
- That recommendation help page does not give DSA article numbers.
- Reddit states that if you are in an experiment, things may look different from usual or from what you see on an alt account, and that experiments cannot be opted out of verified — Experiments help page 2026.
- So it is hard to generalize behavior observed on a single account.
History
Reddit released its site code on 2008-06-17 and archived the repositories after the 2017-09-01 announcement, so the 2017-10-14 commit is the last public code verified(Public code and archive section). The Hot in that code is a score that adds a posting-time term to the logarithm of net votes, and it had no personalization signal verified(Sort formulas in the 2017 code section). The home feed went through a personalization experiment in 2017-12 and introduced Best as the new default sort on 2018-01-24, and personalization and removal of already-seen posts were to be turned back on after the Best rollout verified(Personalization timeline section).
Public code and archive
The public code runs from the first commit on 2008-06-18 UTC (06-17 US West) to the 2017-10-14 commit, and this canon cites the last commit 753b174 as the reference verified — reddit-archive/reddit@753b174.
- Reddit released the code on its blog on 2008-06-17, and the repository's first commit is 2008-06-18 UTC (06-17 US West) verified — Open source announcement 2008, commit 4778b17e.
- The license is CPAL, and part of the anti-spam code was not released. The blog was read from a Wayback copy.
- The code that divides each subreddit's hot by its top score and merges them, and the Rising code, exist from the first commit verified —
normalized_hot.py@4778b17e,rising.py@4778b17e. - However, the 2008 Rising formula was
ups/(count*hours)and differs from the 2017 formula in that it excluded posts whose count was at least half the average of the top 10 verified —r2/r2/lib/rising.py:31-51.
- The 2017-09-01 r/changelog announcement stated that the reddit and reddit-mobile repositories would be archived verified — Archive announcement 2017.
- The reason is that the internal branch had drifted from the public repository and, with the move to a service-oriented architecture underway, it was no longer a standalone runnable Reddit.
- The last commit in the public repository is 'Update README for archival', authored 2017-10-14, and the repository is in archived state verified — commit 753b174.
- The committer date is 2017-10-16 and GitHub pushed_at is 2017-10-17. There are no tags or releases.
Sort formulas in the 2017 code
The sort formulas in the 2017 archived code mainly use vote counts and posting time (Q&A also uses comment length and OP replies, and Rising also uses count) and have no personalization signal, and no primary source was found for post-2017 production formulas observed 2026-11-01 — Sort code 2017.
| Sort | Formula in the 2017 code (753b174) | Author date of the commit that introduced the 753b174 formula |
|---|---|---|
| Hot | sign(s) × log10(max(abs(s), 1)) + (t − 1134028003) / 45000, where s is net votes | 2014-01-12 |
| Comment Best (confidence) | Lower bound of the Wilson interval (a proportion estimate cut more conservatively the fewer the samples), z = 1.281551565545 | 2011-04-14 |
| Controversial | (ups + downs) ^ (smaller / larger), 0 if either is 0 or less | 2014-05-08 |
| Top | ups − downs descending | — |
| Rising | ups / max(count, 1), ups ≤ 1 excluded | — |
| Comment Q&A | sum of confidence and the highest OP-reply confidence, plus log10(sum of lengths) / 5 | 2015-02-10 |
For Top and Rising, the commits that introduced the formula were not traced, so the date cell is left blank.
Hot is a score that treats a 10× increase in net votes as equal to being posted 12.5 hours more recently verified —
_sorts.pyx:44-58.- 45000 seconds is 12.5 hours. Besides vote counts, no comment count or personalization signal is included.
- A Reddit employee stated on 2017-12-11 that this decay rate was chosen so the site turns over about twice a day and had stayed the same for 10 years verified — r/changelog 2017-12-11.
- The same post said that experiments with increasing the decay or setting an age cap gave mixed results.
"ranks posts roughly by vote score decaying over time at a rate we chose to turn the site over roughly twice a day" — Keeping the home feed fresh (r/changelog, Wayback copy), 2017-12-11
The 2014-01-12 commit changed the Hot formula from order + sign·seconds/45000 to sign·order + seconds/45000, making it continuous verified — commit 50d35de0.
- Deriving from the diff, the earlier formula had discontinuities: the time term vanished when the score was 0, and for negative scores a larger magnitude actually ranked higher.
- This commit was published (committer date) on 2014-01-13.
Comment Best (confidence) is the lower bound of the Wilson interval of the upvote ratio verified —
_sorts.pyx:70-99.- z is 1.281551565545, and the code comment says 80% confidence. If votes are 0, the score is 0.
- If ups is below 400 and downs is below 100, a precomputed table is used.
The 2009-10-15 Reddit blog post introduced Best as a new default sort applied only to comments verified — Best comment sort announcement 2009.
- The post describes it as a '95% confidence score', but z in the public code was 1.0 when introduced in 2009-12 and has been 1.281551565545 since 2011-04 verified — commit bf9f43cc, commit 68a06c56.
- The formula in the 2009-12-01 merge (bf9f43cc) was a wrong form in which sqrt wrapped the entire numerator, and the 'April 2011 Merge' (68a06c56, published 2011-04-18), authored 2011-04-14, fixed it.
Controversial scores 0 if ups or downs is 0 or less, and otherwise raises total votes to the power of the smaller/larger ratio verified —
_sorts.pyx:60-68.- The score grows as for and against votes are closer and total votes are higher.
- The commit authored 2014-05-08 introduced this formula in place of
(ups+downs)/max(abs(score),1)verified — commit 6ced69c7. It was published 2014-06-18. - Initially the score was 0 only when one side was 0, and the guard widening it to 0 or less was added by a commit authored 2014-05-31 verified — commit 95be3639.
Top is net votes descending, and the time windows for top and controversial are computed by an offline MapReduce job verified —
r2/r2/lib/db/queries.py:81-103.- The time windows are hour, day, week, month, year, and the job name is
mr_top. The cron in the example install runs every 15 minutes. - The hot, new, top, and controversial lists are precomputed and cached up to the top 1000 (
precompute_limit). - The 'all' list is a cached query that is updated incrementally on votes or recovery.
- The time windows are hour, day, week, month, year, and the job name is
The Rising score is ups divided by count, and posts with ups of 1 or less are excluded verified —
r2/r2/lib/rising.py:33-48.- Per the public stub, candidates are posts within
rising_period(12 hours in the example config). - On home and multireddits, it normalizes by each subreddit's top score and merges, and for a single subreddit it filters the full rising list down to that subreddit.
get_link_countsin the public repository is a stub that returns count 0, and the real implementation is in the private r2admin verified —r2/r2/lib/count.py:37-49.- So the public code's rising is effectively ordering by votes, and whether 2017 production rising normalized by impressions cannot be confirmed from the code.
- Per the public stub, candidates are posts within
Q&A sort adds the highest OP-reply confidence among a comment's replies to the comment's confidence, and adds log10 of the sum of comment and answer lengths divided by 5 verified —
_sorts.pyx:101-132.- If there is no OP reply, the answer length counts as 1.
- If a comment written by the OP has no OP reply, its score is counted at 2× verified —
r2/r2/models/link.py:1572-1577. - In the 2017 code, the only responder is the OP verified —
r2/r2/models/link.py:1009-1016. - This sort came in with a commit authored 2015-02-10 and was published 2015-03-17 verified — commit 62db2373.
In the 2017 code, the default comment sort is an account setting and the default is confidence (displayed as best) verified —
r2/r2/controllers/front.py:249-253.- The old hot comment sort is gone and replaced by confidence.
- contest_mode posts force random for non-moderators and give top as the default to moderators.
- A post or subreddit can specify a suggested sort, and users can set it to be ignored.
The upvote an author automatically casts on their own post is already created with a score of 1, so it is not counted again in the score verified —
r2/r2/models/vote.py:235-241.- Whether other votes are counted in the score can be decided by the
vote.get_validatorhook, whose implementation is not in the public repository.
- Whether other votes are counted in the score can be decided by the
The example config changes posts and comments older than 180 days to archived so they accept no votes, replies, or reports verified —
r2/example.ini:453-458.- These are example config values, so there is no guarantee they match production. The memcache grace that covers the latency of asynchronous vote processing is at most 1 hour.
Home composition and recommendations in the 2017 code
In the 2017 code, home fetched the top hot posts from each subscribed subreddit, normalized them by the score of each subreddit's #1 post, and then mixed them verified — home aggregation code 2017.
- It fetches the top 150 hot posts per subreddit, divides by the hot score of the #1 post (minimum 1), mixes them, and keeps at most 1,000 overall verified —
normalized_hot.py:34-103.- The mixing function is
heapq.merge. With no subscriptions, the same path runs on the default subreddits. - The post age cap is
HOT_PAGE_AGE(1,000 days in the example config).
- The mixing function is
- The subscribed subreddits that become home candidates are limited to 50 by default and 100 for gold users verified —
r2/r2/models/subreddit.py:1202-1221.- With more subscriptions, subreddits that have no posts within the age cap are filtered out first, and limit subreddits are drawn at random from the rest.
- That selection is cached for 30 minutes (memoize 1800 seconds) so home does not shift. automatic_reddits do not count toward the limit.
- The hot sort for r/all uses a global hot sort query over all subreddits, cached for 60 seconds, with no per-subreddit normalization verified —
subreddit.py:1670-1691. - Multireddits (custom feeds) have two weighting approaches, classic and fresh verified —
subreddit.py:1912-1915.- ageweight is 0.0 for classic and 0.15 for fresh. It adds an elapsed-time term to the hot score of the #1 post to enlarge the normalization denominator.
- It is ignored when the feature flag
scaled_normalized_hotis off. Multis are merged without an age cap.
- The /explore page takes up to 10 subreddits the user liked, receives 20 recommended subreddits, mixes posts, and returns at most 20 in random order verified —
r2/r2/lib/recommender.py:123-196.- This page was added by a commit authored on 2013-12-04 verified — commit 87aa75df.
- The liked subreddits are drawn from subscriptions, multireddits, and recent /explore clicks.
- For half of the recommended subreddits it fetches hot posts and top comments; for the other half, hot posts.
- It mixes posts from 2 discovery subreddits and 4 rising posts, and the same subreddit appears only once.
- The code does not show whether this page was live in 2017 production.
- Subreddit recommendation reads and merges precomputed SRRecommendation rows verified —
recommender.py:269-340.- The source prefixes are
mr(constant name SRC_MULTIREDDITS) ande(per a comment, preference for lesser-known subreddits). - With match_set, it sorts by the number of inputs that recommended a subreddit; otherwise it mixes them round-robin.
- The batch or model code that produces these rows is not in the public repository observed 2026-11-01. Only the fact that the row TTL is 7 days 12 hours suggests that an external periodic job filled them.
- The source prefixes are
- /explore feedback is stored per subreddit, with TTLs of 6 hours for impressions, 30 minutes for clicks, and 60 days for dismissals verified —
r2/r2/models/recommend.py:37-83.- A dismissed recommendation becomes a dislike and is removed from likes, and recently shown subreddits are not recommended again.
Listing storage structure in 2017
As of the 2017 QCon talk, a listing was a sorted list of links shown on the front page and in subreddits, and a denormalized index that was updated in place when a vote arrived instead of rerunning the query verified — QCon 2017 talk.
- At first, the result of a DB select was cached in memcache as a list of IDs verified — QCon 2017 talk.
- When a vote arrives, the system reads the listing, which stores pairs of ID and sort information, modifies it, and writes it back, taking a lock to prevent race conditions verified — QCon 2017 talk.
- This listing is a persisted index, not a cache, and was stored in Cassandra in 2017.
- Votes are the most frequent event that forces a listing update, so the vote queue updates listings very often verified — QCon 2017 talk.
- The vote processor also does anti-cheat processing besides applying scores. The talk does not describe what the anti-cheat does.
- In mid-2012, lock contention on popular subreddit listings backed up the vote queue, and post scores were reflected several hours late verified — QCon 2017 talk.
- It was eased by splitting the vote queue into 10 queues by the remainder of the subreddit ID divided by 10.
- Later that year contention arose again in domain listings, and it was solved later by splitting vote processing into several messages.
- The comment tree is stored separately as a denormalized listing holding the parent relations of the whole thread, and the subset to show is decided first so that only those comments are read verified — QCon 2017 talk.
- Tree updates are expensive, so they are deferred to offline jobs that collect messages and modify them in batches. The comment sorting formula is not in this talk.
- In 2017 it began splitting listings into a separate listing service, with the goal of building listings relevant to the user from the data analysis pipeline, ML, and existing listings as sources verified — QCon 2017 talk.
- This is a statement about work in progress, and it did not describe the result.
The move to personalization
Reddit's home feed went through a personalization experiment in 2017-12, introduced a new default sort, Best, on 2018-01-24, and switched mobile Best to an ML-personalized sort from 2021-06-28 verified — r/changelog 2018-01-24, r/blog 2021-06-22.
In a 2021 post, Reddit recalled that in 2016 an ML model surfaced content that was fresh and liked by similar people verified — 100 billion recommendations blog 2021.
- The post wrote that this approach started to break down as the content posted to the platform diversified, and that content now changes completely within minutes.
- A 2023-01 retrospective post summarizes that the system grew from the hot algorithm to generating 100 billion recommendations a day verified — retrospective blog 2023.
On 2017-12-04 a Reddit employee explained that the old Home mixed the front pages of subreddits randomly chosen from subscriptions, normalized by the #1 post verified — r/changelog 2017-12-04.
- They said Reddit was testing personalization that surfaces posts from communities the user recently showed interest in, and would roll it out within days.
- This change applied only to Home for logged-in users and did not change r/popular or r/all.
On 2017-12-11 Reddit said it had begun rolling out a change that removes already-seen posts from logged-in Home to raise feed turnover verified — r/changelog 2017-12-11.
- It reported that the experiment increased dwell time and post and comment creation and decreased downvotes.
- It was not applied to subreddit lists, r/popular, or r/all.
On 2018-01-24 Reddit introduced Best, a new default sort for the home feed, without changing the meaning of Hot verified — r/changelog 2018-01-24.
- It said it would halt the two releases above and turn personalization and removal of already-seen posts back on in Best.
- It said choosing Hot returns to the existing ranking, and that Best for posts is a different algorithm from best for comments.
"Rather than changing the meaning of “Hot” we are introducing a new default sort type for the home feed: Best*." — Best is the new hotness (r/changelog, Wayback copy), 2018-01-24
As of the 2021-05 post, Reddit split personalization into supervised-learning subtasks and predicted upvote, subscribe, and comment probabilities with a multi-task DNN that embeds user, subreddit, post, and context together verified — 100 billion recommendations blog 2021.
- It said these probabilities can be used to estimate long-term metrics such as retention.
- It added sequential Monte Carlo to model topology search and computed real-time features with Kafka and Flink.
- The p99 latency of feed composition was in the low hundreds of ms.
The 2021-06-22 r/blog post said that although ML Best would be introduced to mobile home from 2021-06-28, Hot, New, and Top would not change verified — r/blog 2021-06-22.
- The post described Hot by votes and post age, and Controversial as posts with many both upvotes and downvotes.
- It described Rising as posts with many recent votes and comments, and the old Best by votes, post age, and the user's dwell time in the subreddit.
- This Rising description includes comments, so it differs from the formula in the 2017 code.
Open questions
The biggest gap is the prediction targets and weights of the home feed ranker after the 2021-06 r/blog post, followed by the ordering of For You and Following after the 2026-10-28 overhaul observed 2026-11-01 (Home feed ranker section, For You and Following section). Primary sources for the ranking formula stop after the 2017 code observed 2026-11-01 (Ranking formula section).
- What does the home feed ranker currently predict, and how does it combine the predictions? The 2021-06 r/blog post said Best predicts probabilities of view, subscribe and unsubscribe, comment, upvote and downvote, and watch, and samples posts by weight from the combined score verified — r/blog 2021-06-22. We found no source disclosing the home ranker's prediction targets, weights, or objective function after that observed 2026-11-01. The SnooRec post also does not say whether its good visit (dwell over 15 seconds) is the home ranker's label verified — SnooRec blog 2026.
- What are the home feed's retrieval sources and per-stage candidate counts now? The 2021-06 r/blog post said candidates are collected from posts of the past 24 hours, from subscriptions, similar communities, onboarding categories, recently visited communities, and popular and regionally popular posts verified — r/blog 2021-06-22. The only things released since are a 2025 post saying thousands and SnooRec, and we cannot tell what share of all sources SnooRec accounts for observed 2026-11-01.
- How are For You and Following sorted? Official documentation does not settle it inferred. The basis is that the 2026-10-28 newsroom post does not mention sorting and the 2026-10-08 change log says only that swiping and sorting options are being tested.
- The newsroom post and the change log also describe differently whether Following includes posts from followed users verified.
- It is unknown whether the home feed's Best sort remains after the overhaul inferred. The basis is that the home recommendations help article, which explains Best, was last edited on 2026-10-05, before the overhaul announcement.
- Is the For You and Following overhaul related to the DSA? The experiment reopened on 2026-09-02, right after the VLOP designation (2026-08-31), and was formally announced before the mandatory deadline (2027-01) verified. We found no document linking this to the DSA's non-profiling recommendation option observed 2026-11-01. The Commission press release cites, as examples of obligations, assessing and mitigating systemic risks from the service and algorithmic systems, and the newsroom post gives discovery and user control as the motivation verified.
- Is the default sort of community pages best or hot? The recommendations help article (edited 2026-10-28) says best, while the post visibility help article (edited 2026-10-05) says most communities use hot verified.
- What are the current formulas for Hot, Rising, Controversial, Best for posts, and Best for comments? On 2026-11-01 we checked the titles of all 430 English Help Center articles, and none explains feed sorting observed 2026-11-01. Only one article, the search sort help, defines a sort separately; other articles mention hot or Best in a sentence or two, and for comment sorting the moderator article only lists the options observed 2026-11-01.
- Has the home feed ranker changed to a Transformer family? A 2025-11-10 post said only that in early profiling of Transformer variants the efficiency gap between CPU and GPU grows verified. Among 334 r/RedditEng posts (through 2026-10-26), we found no follow-up post announcing adoption observed 2026-11-01.
- What are vertical chaining and the modernized ranking pipeline in the 2026 Q3 letter? The letter says only that it launched them, in the video experience paragraph, and does not explain what they mean, so their relationship to the home feed ranker is unknown verified.
- Is COPTER's trending signal actually used in the home feed or notifications? The post states only the intent to use it as a common layer, and the 2026-10 feed trending label experiment also does not disclose the signal's source verified.
- What are the home feed's diversity mechanisms now? The 2021-06 r/blog post said it diversifies the feed through score-weighted sampling, and the author added in a comment on the same post that many similar posts in a row are separated from each other verified — r/blog 2021-06-22. The 2026-10-28 help article says only that it avoids runs of similar posts and does not disclose whether it currently uses DPP (a method that probabilistically picks a set of mutually less similar items) or a subreddit cap verified — recommendations help 2026. We also found no statement in safety-related engineering posts that connects to feed filters or down-ranking observed 2026-11-01.
- Is the 2026 Ranking Platform the same system as the 2022 ML Ranking Platform (Pipedream)? The posts also do not directly describe its relationship to the Gazette Inference Service and the 2025 GPU serving service observed 2026-11-01.
- Is the ads auction still second price? This statement appears only in the S-1, not in the two 10-Ks or the advertiser help verified.
- Why was the Good Visits example dropped from the 10-K FY2025? We cannot tell whether the metric changed or only the wording was shortened observed 2026-11-01. The evidence documents are the same paragraph in the 10-K FY2025, the S-1, and the 10-K FY2024.
- Which engine translates the feed? The Q3 2024 shareholder letter said LLM-based machine translation, while the translation help article (edited 2026-10-05) says third-party services such as Google Translate inferred. The basis is that a third-party service may itself be an LLM, so the two cannot be asserted to contradict each other.
Sources
reddit.com blocks automated requests, so r/RedditEng posts were read through per-post RSS or Wayback copies, and the Help Center through the public Zendesk API. The years below are publication years; for help articles, the year of last edit.
Reddit engineering blog (r/RedditEng)
- Evolving beyond 100 billion recommendations a day — 2021, blog post
- Evolving Reddit's ML Model Deployment and Serving Architecture — 2021, blog post
- ML Ranking Platform - Dynamic Pipeline Generator — 2022, blog post
- From Service to Platform: A Ranking System in Go — 2022, blog post
- Seeing the forest in the trees — 2023, blog post
- Evolving Reddit's Feed Architecture — 2023, blog post
- Rewriting Home Feed on Android & iOS — 2024, blog post
- Instrumenting Home Feed on Android & iOS — 2024, blog post
- An In-Depth Look at the Notifications Recommender System — 2025, blog post
- Reddit's Home Feed on GPU — 2025, blog post
- Choosing a vector database for ANN search at Reddit — 2025, blog post
- Breaking Through the Noise: A Hybrid ML and LLM Framework — 2025, blog post
- From Proxy to Proxyless: Removing Envoy from Reddit's Feed Serving Path — 2026, blog post
- SnooRec: A Shared Retrieval Foundation — 2026, blog post
- Contextual Popularity Trending Content Detection (COPTER v1) — 2026, blog post
- How Reddit Uses Causal ML to Personalise Notification Volume — 2026, blog post
Ads engineering blog (r/RedditEng)
- First Pass Ranker and Ad Retrieval — 2023, blog post
- Deep Neural Network Model to Predict CTR for Ads — 2023, blog post
- Why do we need content understanding in Ads? — 2024, blog post
- Introducing a Global Retrieval Ranking Model in the Ads Funnel — 2024, blog post
- Scaling Ads Pacing from Singleton to Sharded — 2024, blog post
- Product Candidate Generation for Reddit Dynamic Product Ads — 2024, blog post
- Adding Exploration in Ads Retrieval Ranking — 2025, blog post
- Contextual Relevance of Ads @ Reddit — 2026, blog post
Public source code
- reddit-archive/reddit — 2008–2017, code. The reference commit for quotes in the body is
753b174(2017-10-14, the HEAD just before archiving). The body also cites the first commit4778b17e(2008), the confidence introductionbf9f43cc(2009) and fix68a06c56(2011), the Hot continuous formula50d35de0(2014), the Controversial formula6ced69c7·95be3639(2014), the Q&A sort62db2373(2015), and the /explore addition87aa75df(2013). - github.com/reddit — looked up 2026-11-01, organization repository list
r/changelog, r/blog, old official blog (Wayback copies)
- reddit goes open source — 2008, blog post
- reddit's new comment sorting system — 2009, blog post
- An update on the state of the reddit/reddit and reddit/reddit-mobile repositories — 2017, notice
- What we think about when we think about ranking — 2017, notice
- Keeping the home feed fresh — 2017, notice
- Best is the new hotness — 2018, notice
- Evolving the Best Sort for Reddit’s Home Feed — 2021, blog post
Help Center (support.reddithelp.com, business.reddithelp.com)
- Reddit’s Approach to Content Recommendations — 2026 (written 2024-02-06, edited 2026-10-28), help article. The DSA information page links to this article from its 'Other Information' list.
- What are home feed recommendations? — 2026 (written 2021-06-15, edited 2026-10-05), help article
- Changelog - April 2, 2026 — 2026, change log. r/all retired
- Changelog - August 12, 2026 — 2026, change log. X icon experiment
- Changelog - September 10, 2026 — 2026, change log. For You and Following re-experiment, accounts with incomplete verification excluded from recommendations
- Changelog - October 8, 2026 — 2026, change log. Swiping and sorting experiment, feed trending label experiment
- Changelog - March 6, 2025 — 2025, change log
- How do I turn off trending notifications? — 2026, help article
- Managing your Location Customization setting — 2026, help article
- How Reddit Uses Location Data — 2026, help article
- What filters and sorts are available? — 2026, help article. Search sort
- Why can't I see my post? — 2026, help article
- Full automoderator documentation — 2026, help article
- User Management - moderators and permissions — 2026, help article
- What is community muting? — 2026, help article
- What are upvotes and downvotes? — 2026, help article
- What is incognito and how does it work? — 2026, help article
- Control the ads you see on Reddit — 2026, help article
- Digital Services Act (DSA) Information for EU users — 2026, help article
- Why am I experiencing changes to the app or desktop site? — 2026, help article
- Translations for feeds, posts, and comments — 2026, help article
- How much do Reddit Ads cost? — undated (accessed 2026-11-01), advertiser help article
- Max campaigns — undated (accessed 2026-11-01), advertiser help article
Reddit newsroom (redditinc.com)
- Explore More Communities with Reddit’s New Feed Updates — 2026, announcement
- Now in beta: Max campaigns — 2026, announcement
- Performance unlocked: Reddit Max campaigns are now available to all advertisers — 2026, announcement
- Introducing Reddit Answers — 2024 (updated 2026-05-26), announcement
Regulatory filings (SEC EDGAR)
- Form S-1 — 2024, regulatory filing
- Form 10-K FY2024 — 2025, regulatory filing
- Form 10-K FY2025 — 2026, regulatory filing
- Form 10-Q Q3 2026 — 2026, regulatory filing
- 8-K Ex.99.2 Q3 2024 shareholder letter — 2024, regulatory filing
- 8-K Ex.99.2 Q4 2024 shareholder letter — 2025, regulatory filing
- 8-K Ex.99.2 Q3 2025 shareholder letter — 2025, regulatory filing
- 8-K Ex.99.2 Q4 2025 shareholder letter — 2026, regulatory filing
- 8-K Ex.99.2 Q2 2026 shareholder letter — 2026, regulatory filing
- 8-K Ex.99.2 Q3 2026 shareholder letter — 2026, regulatory filing
EU regulation
- Commission designates ChatGPT, Reddit and Roblox under the Digital Services Act — 2026, press release
- List of designated VLOPs and VLOSEs — updated 2026-10-28, designation list
Talks
- Evolution of Reddit's architecture (QCon San Francisco 2017, Neil Williams) — 2017, talk transcript
- Platform First: Scaling Recommendation and Personalization at Reddit (TWIMLcon 2022) — 2022, talk abstract
- Learning to Rank at Reddit (Berlin Buzzwords 2024) — 2024, talk abstract. Slides
- Current 2025 New Orleans sessions — 2025, talk abstract. Signals-Joiner and REV2