You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Checked in Violentmonkey on Chrome as well as Tampermonkey. The script starts in the page, takes Marketplace and search ads out before Facebook sees them, gives Copy link the post's own address and keeps a story view to yourself, the same as in Tampermonkey.
The tests now run against scrubbed copies of what Facebook really sends: a feed page, the home page's inline feed data, a Marketplace page with an ad card, a search page with an ad, and the request that marks a story as seen. A new script turns a raw capture into one of these fixtures, replacing ids, names, places, text, tokens and links with stand-ins keyed by a private key, and a test checks every fixture for leftover ids, tokens, places and addresses.
Groundwork for hiding posts on the page itself, for the features that can't catch a post in Facebook's data. It never marks the feed's own rows, which is what stalls scrolling in other blockers. Diagnostics counts hidden posts by reason. There's also a new General setting that leaves a one-line "Hidden: Sponsored. Show" note where a post was, and clicking it brings the post back. A post hidden by two switches at once stays hidden until both are off.
Search ads and Marketplace ad cards have their own switches now, like on Android, and there's a new Hide sponsored reels switch that drops the ad breaks Facebook schedules inside videos and reels. All three are on by default. If you'd turned Hide sponsored posts off in v0.0.1, the update turns the search and Marketplace switches off for you once, since the old switch covered those too, and importing settings saved from v0.0.1 does the same. Every ad rule lives in one table that says where it was seen and what it removes.
Once a day the script checks that your userscript manager is really keeping what it saves. It leaves a small token in the manager's storage and a copy in the page's own storage, and the next day both should still match. If the manager lost it, or won't save or read back at all, you get a message saying your settings may not be saving, and Diagnostics shows it under Storage check. The page's copy is kept in its IndexedDB, because Facebook's page clears localStorage keys it doesn't know within seconds of loading. For the same reason, a manager that gives scripts no storage of their own can't keep your settings on Facebook at all, and the script now tells you when that's the case.
Diagnostics now lists why the last 50 posts were hidden: which rule, what it matched (a word, an ad marker, the same photo as a post you've seen), and whether it came out of Facebook's data or was hidden on the page. Copy report includes the list. Each post is named by a short tag made from its id, so a report you paste somewhere doesn't carry the ids of posts you saw.
The page-side ad check now has a test against 100 real posts that aren't ads, from Home, the groups feed and a post search, laid out the way Facebook drew them. None of them is taken for an ad, and each one with a Sponsored label added to its header is caught. Live, with the script running on those same pages, nothing was marked.
Posts that change after Facebook draws them are followed properly. One that takes on a different role stops counting as a post, and a post that got folded into another one counts on its own again when the outer one stops being a post. A post hidden for two reasons stays hidden until both are lifted. A post opened from a link to one of its comments is still a post.
Force dark mode now notices when Facebook switches itself to dark while the switch is on, so turning Force dark off afterwards leaves Facebook dark instead of putting light back. Tried live by having the page write its dark theme the way Facebook does and then turning the switch off. The page stayed dark, and without that write it went back to light.
New Keep your place in the feed switch, under News feed, off by default. Facebook reloads Home from the top when you come back after two minutes in another tab or ten minutes away from the computer, and after half an hour away it moves you from a group, Marketplace or search to Home. With the switch on, the time limits Facebook checks for that never run out, and its check for moving you to Home says no. Live, Home left hidden for two and a half minutes came back at the same post with the switch on, and at the top without the script. It needs the script running in the page.
New Show comments as written switch, under Comments, off by default. If your account has Facebook's automatic translation on, comments in other languages come already translated. With this on you see what people actually wrote, mentions included, and See translation under a comment still brings up Facebook's translation when you want it. Tried live on a French and a Spanish news Page, where every comment read in its own language and See translation worked. It needs the script running in the page.
New Tag suggestions only after @ switch, under Comments, off by default. Normally, typing a friend's first name in a comment box makes Facebook offer to tag them, with no @ needed, which makes it easy to tag someone by accident. With the switch on, a name typed on its own matches no one, and typing @ first still finds everyone. Tried live in a comment box: no suggestions for a name without @, and the usual ten with it. It needs the script running in the page.
Facebook's page regularly sends Facebook the name and size of everything kept in your browser's storage for facebook.com. The script keeps a few marks there for the tab you're in, and their names alone would have said it was running. With the script running in the page, those marks now step out while Facebook counts and come straight back, so the report doesn't name them. Live, none of the reports the page sent named them, where before every one did.
New Hold back usage logs switch, under Privacy, off by default. Facebook's site keeps a log of what you look at and click and sends it in batches as you go. With the switch on those batches never leave your browser, and the page is told they were sent, so it doesn't keep them to try again. Nothing else is held back. Live on Home, the page tried to send two batches and neither left, and nothing on the page broke. It needs the script running in the page.
New Hide that you're writing a comment switch, under Comments. As soon as you type in a post's comment box, Facebook tells everyone else looking at that post that you're writing a comment. With this on, that request never leaves your browser. It's off by default.
Hide sponsored reels now clears the ad break schedule that comes with each longer video in the feed, search, Marketplace and video pages. That's the list of mid-roll slots, one and two minutes in, so the player has no break to fill. Before, it only emptied the ads Facebook fetches for a break, and that part now only looks inside the one answer they come in. Diagnostics counts the videos it cleared.
Checked the rest of the share sheet with Sanitize sharing links on. Share to WhatsApp gets the post's own address too, and sharing through Messenger, to a group or to a friend's profile works the same as without the script.
Hide sponsored posts has a second layer. If an ad still gets drawn, the script reads the post's header the way you see it and hides the post when it says Sponsored or Ad. It sees through the ways Facebook disguises that label, like letters that are shuffled and put back in place by the layout with hidden decoys mixed in, or a label that points at text Facebook deletes a moment later. A post with only a Shop now style button isn't hidden, since group posts and shares carry those too. This layer works even when your manager runs the script as a content script, so Hide sponsored posts no longer switches off there. English labels only for now. Diagnostics shows how many ads each layer caught.
Facebook Feed Filter's MIT license notice is in THIRD_PARTY_NOTICES.txt and at the end of the built script, since the page-side ad check follows its approach.
New Hide Stories tray switch. It takes the Stories row off the top of Home, along with the "What's on your mind?" box unless you turn that part off, and the first post moves up into the space. It's off by default.
New Hide suggested posts switch, on by default. Posts from Pages, people and groups you don't follow come out of Home and your groups feed before Facebook draws them, and any that slip through, or all of them in content mode, are hidden by the Follow or Join button next to the name. Search results, a Page's own posts and groups you're browsing aren't touched.
New Hide reel rows in the feed switch for the rows of reels Facebook puts between posts. Reels your friends post stay. It's off by default.
New Hide posts by words switch. List words, phrases, people, Pages, groups or sites, one per line, and posts on Home and in your groups feed that match are gone before Facebook draws them. A phrase only matches whole words, so "cat" leaves "concatenate" alone. Start a line with re: to write a pattern, or with "# " for a note to yourself. There are also switches that hide every photo, video or link post and every post with a colored background. A post opened from its link is never hidden, and comments don't count toward a match. In content mode posts are hidden on the page, with a note saying which line caught them. Diagnostics counts what each line hid and points out lines that aren't valid patterns.
New Hide seen posts switch. Posts on Home and in your groups feed that you've already scrolled past stay away for the days you pick: 1, 3, 7 or 30. A post counts as seen once it's been on screen for a second, and the ones you see during a visit stay where they are until you come back. Facebook's page doesn't say which post is which any more, so the script knows a post by its photo or video, or by its first words, and keeps that list in your userscript manager. The switch's card has two buttons, one to show seen posts again in the tab you're in and one to forget the whole list.
New Hide AI-detected posts switch, off by default like on Android. Posts Facebook labels as made with AI, and shares of them, come out of Home, your groups feed and search results before Facebook draws them. It goes by Facebook's AI info label, whether Facebook detected the AI or the author added the label. A post opened from its link and anything on a profile stay. It needs the script running in the page.
New download switches for photos, videos, reels and stories, like on Android. Point at one and a Download button shows in its corner. Photos save the largest copy Facebook sent, and videos, reels and stories save the HD file unless you pick smaller files in the switch's card. Files get readable names like "Pat Example reel 1234 HD.mp4". When Facebook only streams a video in small pieces, you get a message saying there's no single file to save instead of a broken download. Download any video starts off, like on Android, and the other three start on. Photos work in content mode too. The rest need the script running in the page. If your manager won't save a file type, the script fetches the file and hands it to your browser instead. The button stays off anything a dialog, menu or chat window covers, and it saves whatever is under it at the moment you click, so a story that moved on saves the card you're looking at. While a file saves, its button reads Saving and won't start a second copy. If you cancel the save in your browser, you get a short note saying so and nothing else is tried.
New Hide read receipts and Hide typing indicator switches for Facebook's chats, both off by default. The script edits what Facebook's chat connection sends, taking out the part that marks a chat read and turning "typing" into "not typing", and everything else in the message goes out exactly as it was. They can't reach end-to-end encrypted chats, which most one-to-one chats are now, and both switches say so. Diagnostics shows how many receipts and typing signals were held back.
New Default comment order and Show every reply switches under Comments, both off by default. Default comment order opens a post's comments as Newest, or as All comments if you'd rather, on the post's own page and when you open it from the feed. Facebook only changes the order through its own menu, so the script picks from that menu once per post, and if you change it back by hand it stays that way. It reads the menu's titles from Facebook's data, so it works in your language. Show every reply clicks the "View 3 replies" buttons in an open post as they show up and stops once there's nothing left. It knows those buttons by the little arrow Facebook draws in front of them, not by their words. Both work in content mode too, and the feed's own comment boxes are left alone.
HushFacebook Web has its own icon now, the Hush family's blue H with a small globe for the web. Your userscript manager shows it next to the script, and it's carried inside the script itself, so the manager never has to fetch it. The README opens with a banner and has two screenshots of the settings panel, taken on facebook.com.
Each Facebook account you sign in with keeps its own settings now, so two people sharing a browser don't trade switches. The first time the script sees an account, it starts from the settings you already had, so nothing gets lost in the update. Signed out, it uses those shared settings. Diagnostics says which ones are in use, and exported settings files now say which format they're in.
Six new Appearance switches, all off by default, and all of them work in content mode too. Force dark mode keeps Facebook in its dark theme, menus and pop-ups included, and Facebook's own choice comes back when you switch it off. AMOLED black theme turns dark mode's grays pure black, leaving comment bubbles, menus and text boxes a shade lighter so you can still see their edges. Accent color puts one of seven colors, or your own #RRGGBB, in place of Facebook's blue in light and dark mode, icons included, while the Facebook logo and the Like reaction keep theirs. Use the system font draws Facebook in your computer's own interface font or in any installed font you name. Use your computer's emoji shows your system's emoji instead of Facebook's pictures of them, and copied text still carries the emoji. Turn off screen transitions makes menus and dialogs appear at once, though loading spinners keep turning. Every one of them changes the page the moment you flip it, without a reload.
Four new switches to clear Facebook's furniture, all off by default and all working in content mode. Hide tabs takes the top bar tabs you pick away, with Video, Marketplace and Gaming chosen to start, and the Find friends button too, and the other tabs close up the space. Hide Menu promotions takes Ads Manager, Your Ad Activity, the Create menu's Ad, Gaming Video and Play games out of the left column and Facebook's menu. Hide Meta upsells does the same for Meta AI, Meta Quest, Ray-Ban Meta, WhatsApp, Instagram and Messenger Kids. Hide tab badges takes the "(3)" off the browser tab's title and hides the red counts on the top bar and left column. Everything is found by where its link goes, not by its name, so it works in any language.
New Custom CSS box under Appearance for your own rules. They go in after everything the script does, so they win a tie with its built-in styles, and they apply and go away as you flip the switch. It's the quick fix when Facebook moves something before a switch catches up. No rule can hide the settings panel itself, so you can always take one back out. If you paste CSS into Hide posts by words by mistake, you get a note saying where it belongs.
New Settings in your account menu switch, on by default. The menu that opens from your profile picture at the top right gets a HushFacebook Web row just above Log out, and clicking it opens the settings. The row is a copy of Facebook's own, so it matches in light and dark mode, and the script finds the menu by its link to your profile rather than by its words, so it works in any language. Its card has a choice that hides the round button in the corner, since you don't need both, and the button comes back if the row can't be added. It works in content mode too.
New Open on a chosen tab switch, off by default. When you start Facebook in a new tab, it opens on the page you pick instead of Home: Marketplace, Feeds with the newest posts first, Video, Friends, your groups feed, Notifications or the Menu. Only the first page of a visit moves, so Home is still there when you click it, a reload stays put, and a link into Facebook opens where it leads.
New Marketplace only switch, off by default, for when you only use Facebook to buy and sell. Facebook opens on Marketplace, the logo and Home take you there too, and the top bar's other tabs and Find friends go away. Profiles, chats, notifications and your groups still open from their links. While it's on, Open on a chosen tab and Following feed on Home wait their turn. If Marketplace isn't open to your account and keeps sending you back, it stops trying for ten minutes after a few goes and shows Home. Both switches work in content mode.
New View profile on Marketplace sellers switch, on by default. A listing's seller box gets a View profile link after the seller's name, so you can look at their full Facebook profile before you message them, not just their Marketplace page. The name is found by matching it to the seller's picture, so it works in any language, and it works in content mode too.
New Stop stories moving on switch, off by default. A video story stays on screen when it ends instead of jumping to the next one, and you go on with the arrow or by playing it again when you're ready. If Facebook starts the video again by itself, say when you click out of the reply box or close a menu, the story still waits. Its card has a choice to play the story again instead. Photo stories still move on by themselves for now. It works in content mode too.
Five new Playback switches, all off by default and all working in content mode. Resume long videos starts a long video where you stopped it, three seconds early so you can find your place, even after a reload or on another day. You pick how long a video has to be to count, from 2 to 20 minutes, and reels and stories aren't kept. A feed video playing muted on its own as you scroll past leaves no spot behind, and going back to the start of a video forgets the old spot. Keep your video speed remembers the speed you pick in a video's Settings menu and gives it to every video and reel after it, where Facebook would start each one at normal speed again. Stories and live broadcasts keep their own pace. Hold a reel for 2x plays a reel at double speed while you hold the mouse down on it, and a quick click still pauses it. Pressing on the Download or Pop out button never starts a hold, however long you press. Picture-in-picture button puts a Pop out button in the corner of a video or reel, so it keeps playing in its own small window while you scroll. Keep video controls on screen stops a feed, Page or Watch video's progress bar and buttons from fading out when you move the mouse away.
New Hide kinds of notifications switch under Notifications, off by default. It takes the kinds you pick out of the bell's list and the Notifications page: birthdays, memories, people you may know and Pages to follow are picked to start, and friends' new posts, group join approvals and reactions are there if you want them gone too. Any other kind can go by its name, and Diagnostics lists the names of the kinds it has seen. It goes by the kind Facebook gives each notification, not its words, so it works in any language and in content mode. A notification link someone pasted into a post or a comment is left alone. The red count on the bell still counts the hidden ones.
New Hide GIF and sticker buttons switch under Comments, off by default. The comment box under a post loses its avatar sticker, GIF and sticker buttons and keeps emoji. It goes by the kind of icon each button draws, so it works in any language and in content mode, and only comment boxes on posts are touched.
New Don't send watch history switch under Reels and Watch, off by default. Facebook reports every reel you watch, and every video you play with sound, so they shape what it shows you next. With the switch on, that report never leaves your browser, and the reels and videos play as usual. It needs the script running in the page.
New Show full post dates switch under News feed, off by default. Each post shows the day and time it went up, like "Oct 11, 2026, 6:24 PM", next to Facebook's short "3h" or "2d", so you don't have to point at it. The time comes from Facebook's own data, and it matched Facebook's own tooltip on Home and in the groups feed. When two posts on the page carry the same photo or the same words with nothing else to tell them apart, like a share with no words of its own, neither gets a date rather than one getting the other's. It needs the script running in the page.
New Default video quality switch under Playback, off by default. Videos and reels play at the quality you pick instead of the one Facebook picks for your connection. Pick the best copy a video has, or a cap of 1080p, 720p, 480p or 360p to save data. A video with nothing under your cap plays its smallest copy. It needs the script running in the page, and it applies to videos Facebook loads after you change it.
New Hide Facebook's own cards and tips switch under Meta's other products, off by default. It takes out the cards Facebook puts up for its own things, like Get the Messenger app over your chats or in the Messenger menu and the tips it shows in stories, before the page draws them. Reminders Facebook sends the same way go too. It needs the script running in the page.
Past live videos, the ones that open at a /watch/live/ address, now count as videos for the Download button and for Resume long videos.
Facebook started hiding an invisible joining mark after every letter of the "Ad" label, which got past the page-side ad check. It strips those marks now, along with the other invisible filler characters. With the script in content mode, a search page's two ads were hidden and its other results left alone.
Hidden posts and rows can now be any block in the feed, not only posts.
Facebook's home.php address counts as Home now, so Home-only features work there too.
Releases now come with a SHA256SUMS.txt, so you can check that the script you downloaded is the one that was built.