FeurStagram

Introduction: 🧘 An updatable, open source Instagram app for Android without distractions.
More: Author   ReportBugs   OfficialWebsite   
Tags:

FeurStagram Icon

FeurStagram

Distraction-Free Instagram

Download APK
Join Discord
Official Instagram

Views


FeurStagram screenshots

FeurStagram tutorial

An open source Instagram app for Android without distractions.

I built this project for myself as an alternative to DFInstagram 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.

This project is entirely free and open-source. Feel free to fork, copy, enhance, or submit pull requests - do whatever you want with it!

There will be a story on the official FeurStagram account every time there is an update:

Just follow this account and you will get a new story on each release.

Community

Join the Discord server to get support, follow updates, and discuss development:

Installation

You have two options:

  1. Ready-to-install APK - Grab the latest patched APK from the Releases page and install it directly
  2. DIY Patching - Use the toolkit below to patch any Instagram version yourself

What Gets Disabled

All content blocks are individual runtime toggles — long-press the Home tab at the bottom-left of the main tab bar to open the FeurStagram settings dialog and check/uncheck what you want blocked. A single APK covers every combination.

Feature Default Toggleable How
Home Feed Blocked Yes Network-level blocking
Explore Blocked Yes Network-level blocking
Reels Blocked Yes Network-level blocking
Stories Visible Yes Network-level blocking
Analytics & telemetry Blocked No Always blocked
Shopping / commerce preloads Blocked No Always blocked

What Still Works

Feature Status
Direct Messages Works
Profile Works
Reels in DMs Works
Search Works
Notifications Works

Settings Dialog

Long-press the Home tab (the house icon at the bottom-left of Instagram's main tab bar). A dialog lists the four content toggles; changes persist across restarts (stored in SharedPreferences feurstagram_prefs).

Requirements

Linux

sudo apt install apktool android-sdk-build-tools openjdk-17-jdk python3

macOS

brew install apktool android-commandlinetools openjdk python3
 sdkmanager "build-tools;34.0.0"

Quick Start

  1. Download an Instagram APK from APKMirror (arm64-v8a recommended)

  2. Run the patcher:

    ./patch.sh instagram.apk
    
  3. Install the patched APK:

    adb install -r artifacts/feurstagram_patched_<instagram_apk_name>.apk
    
  4. Cleanup build artifacts:

    ./cleanup.sh
    

File Structure

Feurstagram/
├── patch.sh                       # Main patching script
├── cleanup.sh                     # Removes build artifacts
├── apply_network_patch.py         # Network hook patch logic
├── apply_longpress_patch.py       # Injects the long-press hook on the Home tab
├── artifacts/                     # Patched APK output directory
└── patches/
    ├── FeurConfig.smali                  # SharedPreferences-backed toggles
    ├── FeurHooks.smali                   # Network blocking hooks
    ├── FeurSettings.smali                # Settings dialog entry point
    ├── FeurHomeTabWatcher.smali          # Finds feed_tab in the tab_bar
    └── FeurSettingsLongClick.smali       # View.OnLongClickListener shim

Keystore

The patched APK needs to be signed before installation. The patcher uses a keystore file for signing.

Generating a Keystore

Create a local keystore (do not commit it), then run patch.sh with env vars:

FEURSTAGRAM_KEYSTORE=./feurstagram.keystore \
FEURSTAGRAM_KEYSTORE_PASS=your_store_password \
FEURSTAGRAM_KEY_ALIAS=feurstagram \
./patch.sh instagram.apk

If feurstagram.keystore doesn't exist yet, create one:

keytool -genkey -v -keystore feurstagram.keystore -alias feurstagram \
  -keyalg RSA -keysize 2048 -validity 10000 \
  -storepass android -keypass android \
  -dname "CN=Feurstagram, OU=Feurstagram, O=Feurstagram, L=Unknown, ST=Unknown, C=XX"

Keystore Details

Property Value
Filename feurstagram.keystore
Alias feurstagram
Algorithm RSA 2048-bit
Validity 10,000 days

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.

Debugging

View logs to see what's being blocked:

adb logcat -s "Feurstagram:D"

How It Works

Everything is network-based — there is no UI-level tab redirection. Reels, Explore, Feed and Stories are all blocked the same way (by refusing their backend fetches), and each one is individually toggleable at runtime through the settings dialog.

Settings Hook

The patcher injects a watcher on the main tab bar binder (LX/4jG, the class that stores the tab_bar ViewGroup in field A0F). The watcher resolves the feed_tab resource id dynamically via Resources.getIdentifier(...), grabs the Home tab FrameLayout once it's laid out, and installs a long-press listener on it. Long-pressing it opens a custom Material 3-styled dark dialog with four SwitchCompat toggles backed by SharedPreferences (feurstagram_prefs).

Network Blocking

Hooks into TigonServiceLayer (a named, non-obfuscated class). Before each request, FeurHooks.throwIfBlocked() runs on the request URI; blocked calls fail with an IOException so the stack unwinds cleanly.

Blocked network paths

Path / pattern Purpose Toggleable
/feed/timeline/ Home feed posts Yes
/feed/reels_tray Stories tray Yes
/discover/topical_explore Explore tab content Yes
/clips/home/, /clips/discover Reels feed + discovery Yes
/logging/ Client event logging No
/async_ads_privacy/ Ad-related tracking No
/async_critical_notices/ Engagement nudge analytics No
/api/v1/media/.../seen/ (path contains /api/v1/media/ and /seen) Post “seen” tracking No
/api/v1/fbupload/ Telemetry upload No
/api/v1/stats/ Performance / usage stats No
/api/v1/commerce/, /api/v1/shopping/, /api/v1/sellable_items/ Shopping / commerce preloads No

Note: despite the name, /feed/reels_tray is the stories tray endpoint in Instagram internals.

Matching uses String.contains() on the URI path. Instagram changes URL shapes over time; adjust patches/FeurHooks.smali if a block stops matching.

Updating for New Instagram Versions

I'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.

  1. TigonServiceLayer is a named class (doesn't change).

  2. Apply the same patches.

Contributing

This is a personal project I'm sharing with the community. Contributions are welcome!

  • 🍴 Fork it - Make your own version
  • 🔧 Pull requests - Improvements and fixes are appreciated
  • 📋 Copy it - Use the code however you want
  • Enhance it - Build something even better

License

This project is released under the GNU General Public License v3.0. See LICENSE for details.

Apps
About Me
GitHub: Trinea
Facebook: Dev Tools