{"id":35504846,"url":"https://github.com/jean-voila/feurstagram","last_synced_at":"2026-06-09T23:00:40.418Z","repository":{"id":331120987,"uuid":"1125348758","full_name":"jean-voila/FeurStagram","owner":"jean-voila","description":"🧘 An updatable, open source Instagram app for Android without distractions.","archived":false,"fork":false,"pushed_at":"2026-05-15T01:33:24.000Z","size":32135,"stargazers_count":337,"open_issues_count":11,"forks_count":21,"subscribers_count":7,"default_branch":"main","last_synced_at":"2026-05-15T03:40:03.335Z","etag":null,"topics":["android","android-app","android-application","digital-minimalism","digital-wellbeing","distraction-blocker","distraction-free","doomscrolling","dopamine-detox","focus","instagram","instagram-client","instagram-mod","instagram-patch","mental-health","screen-time"],"latest_commit_sha":null,"homepage":"https://jean-voila.github.io/FeurStagram/","language":"Smali","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/jean-voila.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},"funding":{"github":"jean-voila"}},"created_at":"2025-12-30T15:11:35.000Z","updated_at":"2026-05-15T01:19:17.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/jean-voila/FeurStagram","commit_stats":null,"previous_names":["jean-voila/feurstagram"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/jean-voila/FeurStagram","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jean-voila%2FFeurStagram","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jean-voila%2FFeurStagram/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jean-voila%2FFeurStagram/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jean-voila%2FFeurStagram/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jean-voila","download_url":"https://codeload.github.com/jean-voila/FeurStagram/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jean-voila%2FFeurStagram/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34129072,"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-06-09T02:00:06.510Z","response_time":63,"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":["android","android-app","android-application","digital-minimalism","digital-wellbeing","distraction-blocker","distraction-free","doomscrolling","dopamine-detox","focus","instagram","instagram-client","instagram-mod","instagram-patch","mental-health","screen-time"],"created_at":"2026-01-03T19:09:30.297Z","updated_at":"2026-06-09T23:00:40.413Z","avatar_url":"https://github.com/jean-voila.png","language":"Smali","funding_links":["https://github.com/sponsors/jean-voila"],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/app_icon.png\" alt=\"FeurStagram Icon\" width=\"128\"\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eFeurStagram\u003c/h1\u003e\n\u003cp align=\"center\"\u003eDistraction-Free Instagram\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/jean-voila/FeurStagram/releases/latest\"\u003e\n    \u003cimg src=\"https://badgen.net/github/release/jean-voila/FeurStagram?label=Download%20APK\u0026color=0f9b6e\" alt=\"Download APK\"\u003e\n  \u003c/a\u003e\n  \u003cbr\u003e\n  \u003ca href=\"https://discord.gg/Z9QvMw8s76\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Discord-Join%20Server-5865F2?style=for-the-badge\u0026logo=discord\u0026logoColor=white\" alt=\"Join Discord\"\u003e\n  \u003c/a\u003e\n  \u003cbr\u003e\n  \u003ca href=\"https://www.instagram.com/feurstagram_official/\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Instagram-Official%20Account-E4405F?style=for-the-badge\u0026logo=instagram\u0026logoColor=white\" alt=\"Official Instagram\"\u003e\n  \u003c/a\u003e\n  \u003cbr\u003e\n  \u003ca href=\"https://github.com/sponsors/jean-voila\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/GitHub%20Sponsors-Support%20the%20Project-EA4AAA?style=for-the-badge\u0026logo=githubsponsors\u0026logoColor=white\" alt=\"Support on GitHub Sponsors\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://komarev.com/ghpvc/?username=jean-voila-feurstagram\u0026label=Views\u0026color=gray\u0026style=flat\" alt=\"Views\"\u003e\n\u003c/p\u003e\n\n---\n\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/screens.png\" alt=\"FeurStagram screenshots\" width=\"600\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/tuto.gif\" alt=\"FeurStagram tutorial\" width=\"300\" /\u003e\n\u003c/p\u003e\n\nAn open source Instagram app for Android without distractions.\n\nI built this project for myself as an alternative to [DFInstagram](https://www.distractionfreeapps.com/) which hasn't been maintained for a long time and was difficult to update. I'm sharing it so others can do the same for themselves.\n\n**This project is entirely free and open-source.** Feel free to fork, copy, enhance, or submit pull requests - do whatever you want with it!\n\n## How do I get notified when there is a new update ?\n\nThere will be a story on **the official FeurStagram** account every time there is\nan update:\n\n- https://www.instagram.com/feurstagram_official/\n\nJust follow this account and you will get a new story on each release.\n\n## Community\n\nJoin the Discord server to get support, follow updates, and discuss development:\n\n- https://discord.gg/Z9QvMw8s76\n\n## Installation\n\nYou have two options:\n\n1. **Ready-to-install APK** - Grab the latest patched APK from the [Releases](../../releases) page and install it directly\n2. **DIY Patching** - Use the toolkit below to patch any Instagram version yourself\n\n## What Gets Disabled\n\nAll content blocks are **individual runtime toggles** — long-press the Home\ntab at the bottom-left of the main tab bar to open the FeurStagram settings\ndialog and check/uncheck what you want blocked. A single APK covers every\ncombination.\n\n| Feature | Default | Toggleable | How |\n|---------|---------|------------|-----|\n| **Home Feed** | Blocked | Yes | Network-level blocking |\n| **Explore** | Blocked | Yes | Network-level blocking |\n| **Reels** | Blocked | Yes | Network-level blocking + Tab hidden |\n| **Stories** | Visible | Yes | Network-level blocking |\n| **Instants (+ button in DMs)** | Blocked | Yes | View visibility hidden |\n| **Notes (text bubbles above DMs)** | Blocked | Yes | View visibility hidden |\n| **Analytics \u0026 telemetry** | Blocked | No | Always blocked |\n| **Shopping / commerce preloads** | Blocked | No | Always blocked |\n| **Ads** | Blocked | No | Always blocked |\n\n\n\n\n## What Still Works\n\n| Feature | Status |\n|---------|--------|\n| **Direct Messages** | Works |\n| **Profile** | Works |\n| **Reels in DMs** | Works |\n| **Search** | Works |\n| **Notifications** | Works |\n\n## Settings Dialog\n\n**Long-press the Home tab** (the house icon at the bottom-left of Instagram's\nmain tab bar). A dialog lists the four content toggles; changes persist\nacross restarts (stored in SharedPreferences `feurstagram_prefs`).\n\n\n## Requirements\n\n### Linux\n```bash\nsudo apt install apktool android-sdk-build-tools openjdk-17-jdk python3\n```\n\n### macOS\n```bash\nbrew install apktool android-commandlinetools openjdk python3\n sdkmanager \"build-tools;34.0.0\"\n```\n\n## Quick Start\n\n1. **Download an Instagram APK** from [APKMirror](https://www.apkmirror.com/apk/instagram/instagram-instagram/) (arm64-v8a recommended)\n\n2. **Run the patcher:**\n   ```bash\n   ./patch.sh instagram.apk\n   ```\n\n   Use `--clone` to install FeurStagram **alongside** a stock Instagram\n   (different package ID, separate data, both apps on the same device):\n\n   ```bash\n   ./patch.sh --clone instagram.apk\n   # or specify the cloned package ID explicitly:\n   ./patch.sh --clone com.instagram.android.feurstagram instagram.apk\n   ```\n\n   Without `--clone`, the patched APK keeps Instagram's original package ID\n   and installs as a replacement.\n\n3. **Install the patched APK:**\n   ```bash\n   adb install -r artifacts/feurstagram_patched_\u003cinstagram_apk_name\u003e.apk\n   ```\n\n4. **Cleanup build artifacts:**\n   ```bash\n   ./cleanup.sh\n   ```\n\n## File Structure\n\n```\nFeurstagram/\n├── patch.sh                       # Main patching script\n├── cleanup.sh                     # Removes build artifacts\n├── apply_network_patch.py         # Network hook patch logic\n├── apply_longpress_patch.py       # Injects the long-press hook on the Home tab\n├── apply_clone_patch.py           # --clone: rewrites the binary AndroidManifest.xml\n│                                  #          and resources.arsc, then propagates\n│                                  #          authority + package renames into smali\n├── artifacts/                     # Patched APK output directory\n└── patches/\n    ├── FeurConfig.smali                  # SharedPreferences-backed toggles\n    ├── FeurHooks.smali                   # Network blocking hooks\n    ├── FeurSettings.smali                # Settings dialog entry point\n    ├── FeurHomeTabWatcher.smali          # Finds feed_tab in the tab_bar\n    ├── FeurInstantsHider.smali           # Hides the DM \"Instants\" + button\n    ├── FeurNotesHider.smali              # Hides the DM Notes tray (cf_hub_recycler_view)\n    └── FeurSettingsLongClick.smali       # View.OnLongClickListener shim\n```\n\n## Keystore\n\nThe patched APK needs to be signed before installation. The patcher uses a keystore file for signing.\n\n### Generating a Keystore\n\nCreate a local keystore (do not commit it), then run `patch.sh` with env vars:\n\n```bash\nFEURSTAGRAM_KEYSTORE=./feurstagram.keystore \\\nFEURSTAGRAM_KEYSTORE_PASS=your_store_password \\\nFEURSTAGRAM_KEY_ALIAS=feurstagram \\\n./patch.sh instagram.apk\n```\n\nIf `feurstagram.keystore` doesn't exist yet, create one:\n\n```bash\nkeytool -genkey -v -keystore feurstagram.keystore -alias feurstagram \\\n  -keyalg RSA -keysize 2048 -validity 10000 \\\n  -storepass android -keypass android \\\n  -dname \"CN=Feurstagram, OU=Feurstagram, O=Feurstagram, L=Unknown, ST=Unknown, C=XX\"\n```\n\n### Keystore Details\n\n| Property | Value |\n|----------|-------|\n| Filename | `feurstagram.keystore` |\n| Alias | `feurstagram` |\n| Algorithm | RSA 2048-bit |\n| Validity | 10,000 days |\n\n\u003e **Note:** If you reinstall the app, you must use the same keystore to preserve your data. Signing with a different keystore requires uninstalling the previous version first.\n\n## Debugging\n\nView logs to see what's being blocked:\n```bash\nadb logcat -s \"Feurstagram:D\"\n```\n\n## How It Works\n\nEverything is network-based — there is no UI-level tab redirection. Reels,\nExplore, Feed and Stories are all blocked the same way (by refusing their\nbackend fetches), and each one is individually toggleable at runtime through\nthe settings dialog.\n\n### Settings Hook\nThe patcher injects a watcher on the main tab bar binder (`LX/4jG`, the class\nthat stores the `tab_bar` ViewGroup in field `A0F`). The watcher resolves the\n`feed_tab` resource id dynamically via `Resources.getIdentifier(...)`, grabs\nthe Home tab FrameLayout once it's laid out, and installs a long-press\nlistener on it. Long-pressing it opens a custom Material 3-styled dark dialog\nwith four `SwitchCompat` toggles backed by `SharedPreferences`\n(`feurstagram_prefs`).\n\n### Network Blocking\nHooks into `TigonServiceLayer` (a named, non-obfuscated class). Before each\nrequest, `FeurHooks.throwIfBlocked()` runs on the request URI; blocked calls\nfail with an `IOException` so the stack unwinds cleanly.\n\n#### Blocked network paths\n\n| Path / pattern | Purpose | Toggleable |\n|----------------|---------|------------|\n| `/feed/timeline/` | Home feed posts | Yes |\n| `/feed/reels_tray` | Stories tray | Yes |\n| `/discover/topical_explore` | Explore tab content | Yes |\n| `/clips/home/`, `/clips/discover` | Reels feed + discovery | Yes |\n| `/logging/` | Client event logging | No |\n| `/async_ads_privacy/` | Ad-related tracking | No |\n| `/async_critical_notices/` | Engagement nudge analytics | No |\n| `/api/v1/media/.../seen/` (path contains `/api/v1/media/` and `/seen`) | Post “seen” tracking | No |\n| `/api/v1/fbupload/` | Telemetry upload | No |\n| `/api/v1/stats/` | Performance / usage stats | No |\n| `/api/v1/commerce/`, `/api/v1/shopping/`, `/api/v1/sellable_items/` | Shopping / commerce preloads | No |\n\nNote: despite the name, `/feed/reels_tray` is the stories tray endpoint in Instagram internals.\n\nMatching uses `String.contains()` on the URI path. Instagram changes URL shapes over time; adjust `patches/FeurHooks.smali` if a block stops matching.\n\n## Updating for New Instagram Versions\n\nI'll update this project to support new Instagram versions as they are released. When a new version comes out, I'll apply the necessary patches and release an updated APK.\n\n1. TigonServiceLayer is a named class (doesn't change).\n\n2. Apply the same patches.\n\n\n## Contributing\n\nThis is a personal project I'm sharing with the community. Contributions are welcome!\n\n- 🍴 **Fork it** - Make your own version\n- 🔧 **Pull requests** - Improvements and fixes are appreciated\n- 📋 **Copy it** - Use the code however you want\n- ✨ **Enhance it** - Build something even better\n\n## License\n\nThis project is released under the GNU General Public License v3.0. See [LICENSE](LICENSE) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjean-voila%2Ffeurstagram","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjean-voila%2Ffeurstagram","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjean-voila%2Ffeurstagram/lists"}