{"id":51676363,"url":"https://github.com/skar404/slowth","last_synced_at":"2026-07-15T06:33:46.948Z","repository":{"id":370293532,"uuid":"1294028926","full_name":"skar404/slowth","owner":"skar404","description":"Hide YouTube Shorts, Instagram \u0026 Facebook Reels, and block TikTok in Safari — free, no tracking. iOS + macOS.","archived":false,"fork":false,"pushed_at":"2026-07-08T19:09:02.000Z","size":3046,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-15T06:33:45.806Z","etag":null,"topics":["digital-wellbeing","focus","ios","macos","productivity","reels","safari-extension","safari-web-extension","screen-time","swift","swiftui","tiktok","youtube-shorts"],"latest_commit_sha":null,"homepage":"https://malina.page/slowth/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/skar404.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-07-08T18:13:26.000Z","updated_at":"2026-07-08T19:09:27.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/skar404/slowth","commit_stats":null,"previous_names":["skar404/slowth"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/skar404/slowth","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skar404%2Fslowth","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skar404%2Fslowth/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skar404%2Fslowth/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skar404%2Fslowth/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/skar404","download_url":"https://codeload.github.com/skar404/slowth/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skar404%2Fslowth/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35494971,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-15T02:00:06.706Z","response_time":131,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["digital-wellbeing","focus","ios","macos","productivity","reels","safari-extension","safari-web-extension","screen-time","swift","swiftui","tiktok","youtube-shorts"],"created_at":"2026-07-15T06:33:46.492Z","updated_at":"2026-07-15T06:33:46.943Z","avatar_url":"https://github.com/skar404.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n\u003cimg src=\"docs/icon.png\" width=\"120\" alt=\"Slowth\" /\u003e\n\n# Slowth\n\n**Infinite scroll is a bug. This is the patch.**\n\nHide YouTube Shorts, Instagram \u0026amp; Facebook Reels, and block TikTok — right\nin Safari. Free. No accounts. No tracking.\n\n[![Download on the App Store](https://img.shields.io/badge/Download-App_Store-0D96F6?logo=apple\u0026logoColor=white)](https://apps.apple.com/us/app/slowth-block-reels/id6764140763)\n[![Website](https://img.shields.io/badge/Website-malina.page%2Fslowth-6E56CF)](https://malina.page/slowth/)\n[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](LICENSE)\n![Platforms](https://img.shields.io/badge/Platforms-iOS%20%7C%20macOS-lightgrey)\n\n\u003c/div\u003e\n\nSlowth removes the infinite-feed traps while leaving the rest of each site\nusable. You don't have to delete anything; you just lose the black hole.\n\n## Screenshots\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/showcase-00.jpg\" width=\"30%\" alt=\"Infinite scroll is a bug. This is the patch.\" /\u003e\n  \u003cimg src=\"docs/showcase-01.jpg\" width=\"30%\" alt=\"Your attention is the product. We're taking it off the shelf.\" /\u003e\n  \u003cimg src=\"docs/showcase-02.jpg\" width=\"30%\" alt=\"Slowth host app on macOS\" /\u003e\n\u003c/p\u003e\n\n## What it does\n\n- Hides Shorts / Reels on **YouTube, Instagram, Facebook, X** and blocks\n  **TikTok** entirely.\n- **Per-site control** — for each site, pick one of three states.\n- **Strict mode** — a 24-hour lock. Once on, you can't loosen your own\n  settings until it expires. Survives app restart and reboot; the only\n  bypass is uninstall + reinstall.\n- **Family Controls (iOS)** — optionally block the native apps too, not just\n  the web.\n- **Remote blocking rules** — CSS selectors and redirects load from a remote\n  config and are cached on-device, so breakage from a site redesign gets\n  fixed without shipping an app update.\n\n### Sites and modes\n\n| Site      | Modes                        | Default |\n|-----------|------------------------------|---------|\n| YouTube   | off / shorts only / block    | shorts  |\n| Instagram | off / shorts only / block    | shorts  |\n| Facebook  | off / shorts only / block    | shorts  |\n| X         | off / shorts only / block    | shorts  |\n| TikTok    | off / block                  | block   |\n\n- **off** — do nothing.\n- **shorts only** — hide the short-video surfaces and redirect their URLs.\n- **block** — redirect the whole site to a local blocked page.\n\n## How it works\n\nTwo UI surfaces on top of one shared store:\n\n- **Host apps (iOS + macOS)** — a single SwiftUI codebase drives the\n  settings directly. No web view, no JS bridge.\n- **Safari Web Extension popup** — talks to the extension's native handler\n  over native messaging.\n\nThe source of truth is **App Group `UserDefaults`**, shared across all four\ntargets (macOS app, iOS app, and both Safari extension targets). The\nextension's background script uses `webNavigation` as a tri-state\ndispatcher: *off* → no-op, *shorts* → inject hide-CSS + URL redirects,\n*block* → redirect the tab to a local blocked page. Blocking rules are\nversioned, fetched with an ETag and a throttle, and refreshed on a 6h alarm.\n\n## Build\n\nRequires Xcode 26+ and [XcodeGen](https://github.com/yonaskolb/XcodeGen)\n(`brew install xcodegen`).\n\n```sh\n# 1. Set your signing info\ncp Configs/Local.xcconfig.example Configs/Local.xcconfig\n#    then edit DEVELOPMENT_TEAM and BUNDLE_ID_PREFIX\n\n# 2. Generate the Xcode project\nxcodegen generate\nopen Unscroll.xcodeproj\n```\n\nCLI builds:\n\n```sh\nxcodebuild -project Unscroll.xcodeproj -scheme 'Unscroll' \\\n  -configuration Debug -destination 'platform=macOS' build\n\nxcodebuild -project Unscroll.xcodeproj -scheme 'Unscroll (iOS)' \\\n  -configuration Debug -destination 'generic/platform=iOS Simulator' build\n```\n\n## Layout\n\n```\nShared/        SwiftUI host-app UI + App Group store (shared across targets)\nApp/           macOS host app (Info.plist, entitlements, icon)\niOS/           iOS host app + Family Controls integration\nExtension/     macOS Safari Web Extension native handler\nExtensionIOS/  iOS Safari Web Extension native handler\nWebExt/        Extension resources — manifest, popup, content scripts, rules\nproject.yml    XcodeGen spec — single source of truth for the project\n```\n\n## Privacy\n\nSlowth stores your settings on-device in an App Group container and fetches\npublic blocking rules over HTTPS. It has no backend, no analytics, and never\nsends your browsing anywhere. On iOS, the list of apps you choose to block is\nheld by the OS in a privacy-protected token that the app itself cannot read.\n\n## License\n\n[GNU General Public License v3.0](LICENSE). You may use, study, share, and\nmodify this code, but any distributed derivative must also be released under\nGPLv3 with source available.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskar404%2Fslowth","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fskar404%2Fslowth","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskar404%2Fslowth/lists"}