Skip to content

The-Big-Mini/MiniStore

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3,077 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MiniStore

MiniStore

The alternative App Store that fits in your pocket.
Install, refresh, and manage sideloaded apps — entirely on-device, no computer required.

Latest Release Nightly Build CI iOS 17.1+ iOS 26 Ready AGPL v3


What is MiniStore?

Most sideloaders need either a jailbreak or a Mac running companion software. MiniStore needs neither.

After the initial setup, everything happens on your phone. Install apps, refresh them before they expire, update them — all over Wi-Fi, directly on-device. The secret is minimuxer, a Rust library that runs inside iOS's sandbox and handles device communication using Apple's own protocols. No Mac. No USB. No daemon running in the background on a computer somewhere.

MiniStore is a fork of SideStore and AltStore, rebuilt with a sharper focus on stability, performance, and a display layer that doesn't feel like an afterthought.


Features

The core stuff

  • Truly untethered — Wi-Fi signing and refresh, no companion app required after setup
  • Free Apple ID — uses your personal development certificate; apps are valid for 7 days and auto-refreshed before they expire
  • Multiple sources — add any AltStore-compatible source URL and browse its apps directly
  • App sorting — sort the browse feed by name, developer, or last-updated date, saved per source
  • App backups — back up and restore sideloaded apps via the bundled AltBackup companion
  • Stable + nightly tracks — flip "Beta Updates" in Settings to follow the nightly build channel

Display & personalization

This is where MiniStore goes beyond the basics. The Display screen in Settings gives you real control over how the app looks:

Toggle What it does
OLED Dark Mode Pure-black backgrounds in dark mode. Your battery thanks you.
Hide Tab Bar Labels Strips the text from tab bar icons for a cleaner look.
Compact My Apps Cards Shrinks installed app cards from 88 → 60pt. More apps on screen at once.
Accent Color Replace the default teal with any color — presets or a full color picker.
Widget Accent Color Sync Pushes your accent color to the home screen widget so it all matches.
Reduce Blur Solid navigation bar in the browse feed instead of frosted glass.

Home screen widget

Track your sideloaded apps' expiry countdowns right from your home screen.

  • Multiple sizes — small, medium, and large home screen configurations
  • Lock screen — compact complications with expiry progress rings
  • StandBy mode — full-screen layout when your phone is on the charger
  • Accent color sync — respects whatever accent color you've set in the app
  • iOS 26 glass — automatically adapts to the new glass home screen mode

iOS 26 & Liquid Glass

MiniStore has been carefully tuned for iOS 26's Liquid Glass redesign:

  • Navigation bar appearances are correctly scoped — item-level and bar-level set together where needed to fully suppress the glass compositor
  • The browse tab's "Reduce Blur" mode correctly overrides the glass material at the right level
  • Large-title rendering in the settings stack is preserved (scroll-edge always stays glass)
  • Custom bar button items nil themselves out instead of just hiding, preventing ghost glass capsule artifacts
  • The #unavailable(iOS 26) guard in NavigationBar.layoutSubviews skips the ContentView position adjustment that would cause layout artifacts on the new bar design

Requirements

Requirement Version
iOS 17.1+
Xcode (to build) 26+
Rust toolchain (to build) stable via rustup
Apple ID Free or paid

Installing a pre-built release

Download the latest MiniStore.ipa from the Releases page and install it using any AltStore-compatible sideloader.

Once installed, MiniStore can update itself — just keep an eye on the "My Apps" tab.


Building from source

# Clone with submodules — minimuxer and AltSign are both submodules
git clone --recursive https://github.com/The-Big-Mini/MiniStore.git
cd MiniStore

# Install Rust (minimuxer build step)
brew install rustup
rustup install stable

# Set up code signing for local builds
cp CodeSigning.xcconfig.sample CodeSigning.xcconfig
# Fill in your DEVELOPMENT_TEAM in CodeSigning.xcconfig

# Build, fake-sign extensions, and package
make build
make fakesign
make ipa

The IPA lands at MiniStore.ipa in the repo root. For CI/unsigned builds, make build automatically uses AltStoreFree.entitlements with CODE_SIGNING_ALLOWED=NO.

Tip: MARKETING_VERSION in Build.xcconfig is the single source of truth for version numbers. Don't edit it anywhere else.


Project layout

AltStore/           Main app target (Swift + ObjC)
  Browse/           Source browser — search, sort, install from any source
  My Apps/          Installed apps — expiry countdowns, refresh, backup/restore
  Settings/         Settings UI including Display and Accent Color screens
  Operations/       Async pipeline: download → verify → resign → send → install
  Components/       Shared cells, cards, navigation bar, pill buttons
AltStoreCore/       Shared framework — CoreData models, extensions, UserDefaults
AltWidget/          WidgetKit extension — home screen, lock screen, StandBy
AltBackup/          Companion backup app (embedded as an IPA inside the main bundle)
SideStore/          minimuxer Rust bridge + IfManager Wi-Fi interface layer
Dependencies/
  AltSign/          Apple developer portal API — certificate + profile management
  minimuxer/        Rust static library — on-device device communication
  Roxas/            Riley Testut's UIKit framework powering collection views
xcconfigs/          Per-target build settings (all inherit from Build.xcconfig)
scripts/ci/         Python CI helpers — versioning, release notes, workflow logic

How signing works

MiniStore signs apps with your personal Apple development certificate — the same kind Xcode uses when running an app on your own device. Free accounts get 7-day validity per app; paid developer accounts get a full year.

The refresh flow re-signs apps before they expire. minimuxer runs inside the iOS sandbox, communicating with the device over a loopback Wi-Fi channel using Apple's own lockdown protocol. This is what makes the whole thing untethered — the "device" it's talking to is the same device it's running on.

Anisette data (Apple's time-sensitive authentication token) is fetched from a community server. The server URL is configurable under Settings → Advanced if you want to run your own.


Sources

Two sources are pre-loaded at first launch:

Source What's in it
Mini's Repo A curated personal collection — EeveeSpotify, YouTube tweaks, X/Twitter mods, and more
MiniStore Updates How the app updates itself. Don't remove this one.

Tap the + button in the Sources tab to add any AltStore-compatible source by URL. The source icon and tint color will be used throughout the browse experience once it loads.


Releases & CI

Channel Trigger Notes
Stable Manual tag push or workflow dispatch Attached to GitHub Releases
Nightly 00:00 UTC daily (if commits exist) Opt in via Settings → Beta Updates
PR builds Every push to a PR (Swift/config changes) IPA attached to the PR by Actions

All pipelines run on macos-26 / Xcode 26.2. The version number is stamped by scripts/ci/workflow.py before building, so you never need to manually update version fields in multiple places.


Contributing

Pull requests welcome. A few things worth knowing before diving in:

Architecture:

  • The operations pipeline (AltStore/Operations/) uses NSOperation, not async/await. Don't mix them in the same chain — dependency management, cancellation, and progress reporting are all built around the NSOperation model.
  • UI is actively migrating from UIKit to SwiftUI. New screens are written in SwiftUI and hosted in UIHostingController where they plug into the existing UIKit navigation stack. Existing UIKit screens are being rewritten in SwiftUI incrementally — the What's New screen was the first.
  • Never hardcode bundle IDs — debug builds append the team ID suffix, so com.SideStore.SideStore.S32Z3HMYVQ and com.SideStore.SideStore are the same app in different build configurations.

A few gotchas:

  • side.json / sidenightly.json are the self-update sources and live in this repo, served raw from the develop branch. CI stamps them automatically on each stable/nightly build — no manual editing needed. (The old MiniStore-Public mirror was retired in 2026-06; this repo is public now.)
  • The minimuxer documentsDirectory argument must stay as .absoluteString, not .path. The Rust bridge expects the file:// prefix. This has been changed twice by mistake and reverted both times.
  • configureWithDefaultBackground() must stay on scrollEdgeAppearance in the settings stack. Using an opaque appearance there suppresses large-title rendering on iOS 26.

The project uses a Claude Code intelligence system (.claude/) with architecture decision records, gotcha documentation, and pattern guides. Worth reading if you're making structural changes.

See CONTRIBUTING.md for the full development setup walkthrough.


Acknowledgements

MiniStore wouldn't exist without:

  • Riley Testut — for building AltStore, AltSign, and Roxas, and open-sourcing all of it
  • SideStore contributors — for proving untethered was actually achievable and sharing how
  • jkcoxson — for minimuxer, em_proxy, and basically the entire on-device communication stack
  • The broader sideloading community for keeping the ecosystem alive

License

Licensed under the AGPL v3. See LICENSE.md for the full text.

Portions derived from AltStore and SideStore, both AGPL v3. The minimuxer library carries its own license.

About

SideStore is a fork of AltStore that doesn't require an AltServer.

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors