v1.4.0 · Tested on versions 448.0.0 and 410.1.0
📣 IPA Releases · 💬 Chat & Support · 📦 Jailbreak Repo · 📥 DEB Releases · 🐛 Issues · ❤️ Support
Note
- To open Sparkle's settings, see Opening Sparkle Settings.
- IPA releases go out on the Telegram channel; for questions and help join the chat group.
- Feature request or bug report? Open an issue.
Sparkle is a Theos tweak that reshapes the iOS Instagram app around you. Download any media, keep a private on-device gallery, recover deleted messages, run each account with its own settings, analyze your followers, and strip out the ads, AI, and annoyances.
It started as a fork of SoCuul's SCInsta, but has since been rewritten and extended far beyond it.
- Targets iOS 15.0+, built with the iOS 16.2 SDK.
- Works jailbroken (tested via Dopamine on iOS 16.7.16) and sideloaded (Feather, SideStore, LiveContainer etc.).
- Written in Objective-C / Objective-C++ / Logos.
For the full list of features, check out FEATURES.md.
- Media downloads:
- Save feed posts, reels, stories, DMs, Instants, and comments.
- Auto-save stories, view-once DM media, and instants straight to the Gallery or Photos as you view them.
- An action-based download manager with a queue, retries, duplicate detection, and configurable concurrency.
- High-quality DASH video+audio merging via FFmpegKit.
- Private Gallery:
- An on-device media library with folders, search, metadata, source overlays, and an optional passcode / Face ID / Touch ID lock. Nothing ever leaves your device.
- Import your own media from Files with editable metadata, or bring your whole Regram Media Vault over in one go.
- Browse saved Instants by user straight from the Instants camera.
- Send any photo or video you already have as an Instant, from Photos, Files, or the Gallery.
- Confirm recorded video Instants before Instagram sends them. Photo Instants are not supported.
- Built-in editors:
- Trim any video down to a clip, a single still frame, or audio-only.
- Crop, pan/zoom, rotate, and flip a video's framing, applied in the same pass as the trim.
- A photo editor with crop / pan-zoom / rotate / flip.
- Reachable from the gallery, media preview, or an opt-in action button.
- Action buttons everywhere:
- Fully customizable action-button menus on feed, reels, stories, DMs, Instants, and profiles.
- Reorder, rename, re-icon, and set per-surface default tap actions.
- An optional feed-header shortcut button for one-tap access to Gallery, Profile Analyzer, Deleted Messages, Downloads or Settings.
- Keep deleted messages:
- Preserve unsent DMs, log removed reactions, and recover view-once media, with a browsable log.
- Hidden chats:
- Hide any 1:1 or group chat from the DM inbox with a long press, reveal them again by holding the inbox title, and optionally mute them on Instagram itself, messages and calls both, so no push or vibration arrives while they stay hidden. Hidden chats stay out of the recipients Instagram suggests when sharing and can be kept out of the unread badge, and revealing them can be put behind Face ID, Touch ID, or a passcode of its own.
- Activity notifications:
- Get notified when a tracked user comes online, goes offline, starts typing, or reads a message you sent, and make Instagram's own green dot accurate with an early-installed presence refresh and no grace period.
- Fake location:
- Show friends on the Friends Map a place you pick on a map or by search instead of where you are, switch it from a button on the map itself, and keep a list of saved places. Only Instagram sees the fake location, so Maps and other apps keep the real one.
- Profile Analyzer:
- Fetches your followers/following and surfaces mutuals, non-followbacks, and a durable change log (new/lost followers, profile updates) across scans.
- Per-account settings:
- Each logged-in account keeps its own preferences, gallery scope, and download history, including account-scoped history clearing.
- Story viewer tools:
- Search everyone who saw your story, filter non-followers, and star viewers for quick lookup later.
- Playback controls:
- A floating panel for stories and reels with playback speed (0.5x to 2x), scrubbing, 5 second skips, and pause, remembered per video, per session, or always.
- Privacy & focus:
- Hide ads, Meta AI, and suggested content.
- Disable seen receipts, typing status, screenshot detection, and view-once limits.
- Unlock native message previews from the inbox long-press menu on supported Instagram versions.
- Block doom-scrolling.
- Build a custom tab bar with a live preview: reorder or hide destinations, choose launch and swipe behavior, trade a hidden tab for one-tap access to Saved collections in the custom layout, and drop the bar entirely when a single tab is left.
- Bring back the Saved tab on your own profile, right beside your posts, tagged, and reels.
- Switch profile and Explore grids back to square thumbnails instead of the taller 3:4 layout.
- Custom app font:
- Import your own
.otf/.ttffont and use it across Instagram and Sparkle, matched per weight and previewed face by face before you pick it.
- Import your own
- Language packs:
- Sparkle ships in English. Other languages are community translations you install from the Translate button in Sparkle Settings, as a language pack, and remove again with a swipe. Anything a pack does not translate falls back to English. Dates use the selected language's ordering, punctuation, and month names while respecting the device's 12/24-hour clock. Built-in Action Button section names follow the selected language; names you customize remain exactly as entered. A language ships with Sparkle, no pack needed, once a native speaker has reviewed it. See Help translate.
- Confirmations:
- Optional "are you sure?" guards for accidental likes, follows, reposts, calls, comments, and more.
- Link detection and routing:
- Open links from bios, captions, stories, messages, and ads in an in-app Safari view or the Safari app instead of Instagram's browser, with Instagram's redirect and tracking parameters stripped first.
- Instagram leaves web addresses in captions and comments as plain text. Sparkle can find them, color them, and make them tappable, opening them in an in-app Safari view, in the Safari app, or after asking each time. Off by default, and nothing is requested from a link until you tap it.
- Liquid Glass (iOS 26+):
- Native Liquid Glass integration across Sparkle's own UI, plus an option to force-enable Instagram's.
- Scroll Edge Effect picks how content meets the top bar as you scroll: off (Instagram disables the effect), the iOS default, the soft progressive blur, or a hard edge with a dividing line (iOS 27 defaults to hard). Changes apply live.
- On iOS 18 and lower, a Pill-Shaped Tab Bar toggle brings the floating pill tab bar (shape only; the glass material stays iOS 26+).
Important
Sparkle does not ship Instagram itself. Pre-injected IPAs are distributed on the Telegram channel, and the jailbroken .deb is on Releases or from the Sparkle repo.
- Grab the latest pre-injected IPA from the Telegram channel.
- Install the IPA with your sideloading tool of choice.
- Use the
_no-extbuild for AltStore / SideStore / LiveContainer (or if you don't want to have app extensions).
- Use the
Note
Sparkle uses Instagram's bundled image assets everywhere. The distributed IPA is a full (un-thinned) build (it contains icons for all screen sizes), so the higher-quality in-app icons render crisply on every device. If you build your own from an IPA that was already thinned to a smaller device, some icon scales may be missing. See Building from source.
Add the Sparkle repo to your package manager and you will get updates as they ship.
Open that page on your device and tap Sileo or Zebra, or add the URL by hand:
https://efibalogh.github.io/sparkle-ig/
The repo serves both the rootless (iphoneos-arm64) and rootful (iphoneos-arm) builds; your
package manager picks the right one for your jailbreak automatically.
Rather not add a repo? Install a single .deb instead, and update it yourself each release:
- Download the rootless or rootful
.debfrom Releases. - Open the
.debin Sileo/Zebra (or install it withdpkg -iover SSH), then respring.
You can build from source locally, or fork the repo and run the Build and Package Sparkle GitHub Action with your own decrypted IPA URL. The injected IPA lands as a draft release in your fork. See Building from source.
By default, long-press the Home tab or the Profile settings button to open Sparkle Settings. You can also enable Show Settings on App Launch. If you hide the Home tab, the long-press automatically moves to another visible tab so Settings is always reachable.
Tap the Translate button in the top-right of Sparkle Settings for the language sheet. English is the only language Sparkle ships; Add a Language opens the published list, where one tap installs a translation; its more menu imports a pack from Files or a link and exports the English strings a translation starts from. A swipe removes an installed pack. Installed packs refresh themselves when a release publishes newer ones, so the screens a release adds arrive translated rather than in English; it checks after each Sparkle update, only for languages you already have, and never replaces a pack you imported from a file. Check for Updates runs the same check on demand. Importing only makes a language available; switching to it is a separate tap. A System Default row that follows Instagram appears once a pack is installed. A restart applies the choice across every Instagram account. Anything untranslated falls back to English.
| Settings | How to Access |
|---|---|
![]() |
![]() |
- Xcode + Command-Line Developer Tools
- Homebrew
- Theos with the iPhoneOS16.2.sdk in
~/theos/sdks brew install ldid dpkg make cmake(plus the FFmpeg build deps:autoconf automake libtool meson nasm ninja pkgconf wget yasm)- For sideloading only: cyan and ipapatch
- Install the iOS 16.2 SDK for Theos — download from xybp888/iOS-SDKs and copy
iPhoneOS16.2.sdkinto~/theos/sdks. - Clone with submodules:
git clone --recurse-submodules https://github.com/efibalogh/sparkle-ig cd sparkle-ig - Fetch the FFmpegKit frameworks (used for video/audio merging & trimming):
./fetch-ffmpegkit.sh
- For sideloading: obtain a decrypted, un-thinned Instagram IPA from a trusted source, rename it to
com.burbn.instagram.ipa, and place it in apackages/folder at the repo root.
Important
Use a universal decrypted IPA. An IPA that was already thinned to a specific device (e.g. dumped on an older iPhone) might be missing higher-scale icons/image assets, which makes icons and image assets blurry on newer devices.
Alternatively, if you own a jailbroken device, I recommend using ipadecrypt, which provides an un-thinned IPA regardless of your device's screen size.
./build.sh rootless # rootless .deb (jailbroken)
./build.sh rootful # rootful .deb (jailbroken)
./build.sh ipa --release # sideload IPA (= --inject --patch)The ipa command takes composable flags:
| Flag | Effect |
|---|---|
--release |
Shorthand for --inject --patch |
--inject |
Build Sparkle's rootless .deb and pass it to Cyan as a single input. The bundle and FFmpeg frameworks travel inside the deb, so --bundle is not needed alongside this. The same deb is usable for jailbreak installs. |
--bundle |
Pass Sparkle.bundle and the FFmpeg frameworks to Cyan, without injecting the tweak. |
--no-ffmpeg |
Stage Sparkle.bundle with the localization catalogs but without the FFmpeg frameworks. Media encoding is unavailable in the result. |
--flex |
Bundle libFLEX.dylib (in-app debugging) |
--patch |
Run ipapatch |
--no-ext |
Strip all .appex bundles before injection |
--dev |
DEV=1 build (also adds the developer diagnostics, performance meter and hook bisect, under Settings → Tools → Diagnostics) |
--buildonly |
Build the deb and dylibs only, skip IPA packaging |
--bundle-id <id> |
Override the bundle ID |
Outputs are named with the Sparkle version (and, for IPAs, the bundled Instagram version) so builds are easy to tell apart:
- IPA:
Sparkle[_<flags>]_v<version>_IG_v<ig version>.ipa(e.g.Sparkle_v1.0.0_IG_v437.2.0.ipa, orSparkle_no-flex_v1.0.0_IG_v437.2.0.ipa) - deb:
Sparkle_v<version>_<rootless|rootful>.deb
Run ./build.sh with no arguments for the full usage reference.
The jailbreak .deb contains Sparkle.dylib plus Sparkle.bundle. Its FFmpeg frameworks are staged under Sparkle's own spk.* names, resolve their siblings through @loader_path dependencies, and are ad-hoc signed for jailbroken devices.
Sideload builds hand the same .deb to Cyan. Cyan hoists every framework inside it into App.app/Frameworks, which is the only place a sideload signer re-signs code: signers in the ldid family only re-sign frameworks one level below the app bundle, so anything left deeper keeps its ad-hoc signature and fails to load on a device without a jailbreak. The frameworks use Sparkle's own spk.* names so they never replace Instagram's existing libavcodec and libavutil frameworks, and the duplicate copies Cyan leaves inside Sparkle.bundle are pruned afterwards.
./build.sh ipa --release --flexIcons, the Safari extension, extension stripping, FLEX, bundle-ID changes, and SPKSideloadFix remain explicit IPA stages. Launch and FFmpeg operations still need on-device testing for each release.
The app icons are pre-compiled into resources/sparkle_icons/ to keep IPA packaging fast. If you change the source .icon bundles in resources/, recompile them with actool before building:
mkdir -p resources/compiled_sparkle resources/compiled_sparkle_dark resources/compiled_sparkle_neutral
xcrun actool resources/sparkle.icon --compile resources/compiled_sparkle --platform iphoneos --minimum-deployment-target 15.0 --app-icon sparkle --output-partial-info-plist resources/sparkle_partial.plist --target-device iphone --target-device ipad
xcrun actool resources/sparkle-dark.icon --compile resources/compiled_sparkle_dark --platform iphoneos --minimum-deployment-target 15.0 --app-icon sparkle-dark --output-partial-info-plist resources/sparkle_dark_partial.plist --target-device iphone --target-device ipad
xcrun actool resources/sparkle-neutral.icon --compile resources/compiled_sparkle_neutral --platform iphoneos --minimum-deployment-target 15.0 --app-icon sparkle-neutral --output-partial-info-plist resources/sparkle_neutral_partial.plist --target-device iphone --target-device ipad
mkdir -p resources/sparkle_icons
cp resources/compiled_sparkle/*.png resources/compiled_sparkle_dark/*.png resources/compiled_sparkle_neutral/*.png resources/sparkle_icons/
rm -rf resources/compiled_sparkle resources/compiled_sparkle_dark resources/compiled_sparkle_neutral resources/*_partial.plistContributions are greatly appreciated! Feel free to open a pull request.
- New hooked IG classes/methods go in
src/InstagramHeaders.h - Prefix all custom symbols with
spk_/SPK. - Break new features into
src/Features/<Surface>/rather than bloatingTweak.x. - Put every user-facing string behind
SPKL,SPKLC, orSPKLP, use semantic keys, and add the English string toresources/Sparkle.bundle/en.lproj. - Run
tools/sync-catalog-keys.pyafterwards so the community catalogs intranslations/keep every key, thentools/lint-i18n.pybefore submitting any UI copy or translation change.
Sparkle ships English only. The 24 catalogs in translations/ were produced by machine translation and no native speaker has reviewed them, which is why they are a starting point rather than something users are given by default. Expect unnatural phrasing, terms that should have stayed in English, and help text that describes the wrong setting.
If you read one of these languages, correcting it is the single most useful contribution you can make, and it needs no build: edit translations/<locale>.lproj/Localizable.strings, run tools/lint-i18n.py --locale <locale>, open a pull request. A reviewed language ships with Sparkle. Until then, anyone can install it from the language sheet with Add a Language, and you can test your own work from that screen's more menu with Import from Files.
For a single correction, no checkout is needed: tap the Translate button in Sparkle Settings, choose Report a Translation Issue at the bottom of the language sheet, or start one directly. The form asks for the language, where the text appears, what it says now, and what it should say.
Full details, including starting a language that has no catalog yet, are in TRANSLATING.md.
Not a coder? Documentation improvements are always appreciated too.
Sparkle takes a lot of time to develop and maintain as Instagram changes constantly, and I can only work on it in my limited amount of free time. If you'd like to support the work:
- ☕ Donate on Ko-fi.
- 📣 Join and share the Telegram channel.
- ⭐ Star the repo and tell people who'd like it.
- SoCuul • SCInsta: the base project Sparkle is built on.
- BandarHL • BHInstagram: the original tweak SCInsta forked from.
- Ryuk • RyukGram: code, inspiration, and help.
- @n3d1117 • InstaSane: the Following-feed mode.
- @asdfzxcvbn • zxPluginsInject / ipapatch / cyan: tooling and fixes for sideloaded installs.
- @BillyCurtis • OpenInstagramSafariExtension: open Instagram links in Safari in the sideloaded IPA.
- @grxphxnx: helped quickstart Sparkle's multi-language support.
Sparkle is free and always will be. It is only distributed here and on the official Telegram channel. There is no paid version, no subscription, and no store that sells it.
Sparkle is licensed under the GPL-3.0. Anyone may modify it and even charge for it, but only if they give their users the complete source of their build and keep the original license and attribution intact.
SKInstagram (backup links in case the post gets deleted: link 1, link 2), credited to the "SideKit team" and distributed through the iKURD Store, appears to be built from Sparkle and is offered behind that store's paid subscription. It ships no source and no attribution, which means it is not licensed to be distributed at all. If you paid for it, you were charged for free software that you can get here for nothing.
Sparkle is licensed under the GNU General Public License v3.0.

