OpenStore is an open source alternative to the Apple App Store.
This project is licensed under the GNU General Public License v3.0 or later (GPL-3.0-or-later). See LICENSE.
This repository is intended to become a full marketplace product, not only a visual storefront. That means the product scope includes:
- An end-user storefront
- Account, billing, and library management
- Install and update flows
- Reviews, trust, and reporting flows
- A developer console
- An internal operations and moderation console
- Global in-app purchase and subscription architecture
- Global payments implementation checklist
- Apple App Store payment parity plan
Everything in this repository must be written in English:
- Commit messages
- README and docs
- Code comments
- UI copy
- PR titles
This section lists the tabs, screens, and features the product should eventually include.
The consumer app should use these primary tabs:
- Today
- Discover
- Charts
- Search
- Library
- Account
Use editorial curation to explain why apps matter, not only which apps are popular.
- Today Home
- Story Detail
- New Releases Hub
- Editorial Collection Detail
- App Detail
- Developer Detail
- Hero story card
- Daily editorial stories
- Featured app modules
- Curated collections
- New release highlights
- Major update highlights
- Trust and safety callouts
- Deep links into app detail pages
- Deep links into developer pages
Help users browse the catalog by category, use case, theme, and editorial grouping.
- Discover Home
- Categories Index
- Category Detail
- Collections Index
- Collection Detail
- Featured Developers
- Developer Detail
- App Detail
- Category browse
- Use-case browse
- Editorial collections
- Seasonal collections
- Featured developers
- Hidden gems section
- Recently updated apps
- Staff picks
- Filter by category and pricing model
Show ranking-based discovery without letting ranking become the entire product.
- Charts Home
- Top Free
- Top Paid
- Top Grossing
- Trending
- Category Charts
- Ranking Methodology Sheet
- Switch between chart types
- Support Top Free, Top Paid, Top Grossing, and Trending views
- Category-specific charts
- Time-range filters
- Ranking explanation
- Editorial override labels
- Ranking movement indicators
- Exact refresh timestamps
- Previous-rank context
- Ranking health summary
- Feature inventory for leaderboard capabilities
- Deep links into app detail pages
Help users find apps, developers, and categories quickly, even when the query is vague.
- Search Landing
- Search Suggestions
- Search Results
- Search Filters Sheet
- No Results State
- Recent Searches Manager
- Instant search suggestions
- Trending searches
- Recent searches
- Search results for apps
- Search results for developers
- Search results for categories
- Filter by category
- Filter by pricing model
- Filter by rating
- Sort by relevance, popularity, rating, and recency
Turn store ownership into a clear operational experience after acquisition.
- Library Home
- Installed Apps
- Updates
- Download Queue
- Wishlist
- Purchase History
- Hidden Purchases
- Restore Purchases
- Installed app list
- Update available list
- Background update status
- Download progress tracking
- Pause and resume downloads
- Failed download retry
- Wishlist management
- Purchase restore
- Redownload previously owned apps
- Hide and unhide purchases
- Open installed app
Centralize profile, devices, billing, preferences, and security.
- Account Home
- Profile
- Region and Language
- Payment Methods
- Billing History
- Subscription Management
- Notification Settings
- Device Management
- Security Settings
- Family and Parental Controls
- Support and Help
- Report a Problem
- View and edit profile
- Change region
- Manage payment methods
- View invoices and receipts
- Manage subscriptions
- Notification preferences
- Trusted device list
- Sign out of device
- Purchase authentication settings
- Family sharing controls
- Content restrictions
- Contact support
- Refund request flow
These screens are shared across tabs and should exist regardless of where the user enters from.
- App hero header
- App icon and gallery
- Price or acquisition status
- Install or update CTA
- Rating summary
- Rating distribution
- Review highlights
- Screenshots
- Video preview
- What is new
- Description
- Feature list
- Compatibility
- Version history
- Privacy summary
- Permissions summary
- Developer profile link
- Related apps
- Related collections
- Report app action
- Install
- Update
- Open
- Add to wishlist
- Share
- Write review
- Edit review
- Report issue
- View privacy details
- View permissions details
- Developer profile header
- Verification status
- Region
- Website and support links
- Published apps
- App categories
- Review response summary
- Follow developer
- Browse published apps
- Report developer
- Open support links
- Collection hero
- Editorial description
- Curator identity
- Included apps
- Related collections
- Save collection
- Share collection
- Open apps in sequence
- Category overview
- Featured apps
- Category charts
- Buying guide
- Full app list
- Filter within category
- Sort within category
- Open category charts
These flows are essential for an app store alternative and should not be treated as secondary UI work.
- Install Confirmation Sheet
- Compatibility Check Screen
- Device Selection Sheet
- Storage Warning Sheet
- Download Progress Screen
- Update Notes Sheet
- Queue Management Screen
- Error and Retry Screen
- Compatibility checks
- Version compatibility checks
- Storage checks
- Battery and network checks
- Queue management
- Pause and resume
- Retry failed installs
- Wi-Fi-only downloads
- Auto-update settings
- Delta update support
- Rollback strategy for failed updates
- Review List
- Write Review
- Edit Review
- Rating Breakdown
- Developer Response View
- Star rating
- Written review submission
- Review editing
- Review reporting
- Helpful vote
- Sort reviews by recent, critical, and favorable
- Developer responses
- Notification Center
- Notification Preferences
- Transactional Message Detail
- Download completion alerts
- Update alerts
- Price drop alerts
- Editorial recommendation alerts
- Billing alerts
- Security alerts
- App Report Form
- Developer Report Form
- Privacy Details
- Permission Details
- Age Rating Details
- Content Warning Screen
- App reporting
- Developer reporting
- Abuse reporting
- Visible developer identity
- Visible pricing model
- Privacy label display
- Permission explanations
- Age rating display
- Content warnings
The product also needs a separate developer-facing application.
- Developer Dashboard
- App List
- Create App
- App Listing Editor
- Release Management
- Binary or Package Upload
- Version Detail
- Pricing and Availability
- In-App Purchase Management
- Subscription Management
- Review Management
- Analytics Dashboard
- Crash and Quality Dashboard
- Team and Permissions
- Payout and Tax Setup
- Compliance and Policy Center
- Create and manage app records
- Upload build artifacts
- Manage versions
- Publish and schedule releases
- Localize app metadata
- Manage screenshots and preview media
- Set pricing
- Configure regional availability
- Configure in-app purchases
- Configure subscriptions
- Read and respond to reviews
- View installs, retention, and revenue analytics
- Manage team roles
- Manage payout setup
- Handle policy and compliance submissions
The store also needs an internal back-office application.
- App Review Queue
- Developer Verification Queue
- Abuse Reports Queue
- Billing Support Queue
- Refund Queue
- Editorial CMS
- Category Manager
- Collection Manager
- Ranking and Search Tuning
- Incident Dashboard
- Review app submissions
- Verify developer identity
- Moderate reports
- Process refunds
- Manage editorial stories
- Manage collections and categories
- Tune ranking signals
- Tune search relevance
- Track operational incidents
These are not individual screens, but they are product-critical.
- User authentication
- Session management
- Device trust management
- Family account support
- Developer organization support
- Admin role management
- Paid apps
- In-app purchases
- Auto-renewing subscriptions
- Refund flow
- Receipt history
- Regional pricing
- Search indexing
- Ranking pipelines
- Editorial scheduling
- Recommendation modules
- Fraud and abuse detection
- Background jobs
- Asset processing
- Review moderation pipeline
- Notification delivery
- Analytics ingestion
- Audit logs
The recommended order is:
- Today
- Discover
- Charts
- Search
- Library
- Account
- App detail
- Developer detail
- Collection detail
- Category detail
- Install flow
- Update flow
- Queue management
- Purchase history
- Restore purchases
- Notification center
- Developer dashboard
- App listing management
- Release management
- Pricing management
- Analytics
- Review queue
- Moderation tools
- Editorial CMS
- Refund and billing tooling
The recommended architecture is:
- Build the product as a responsive React web app first
- Use TypeScript, Tailwind CSS, shadcn-style components, tRPC, Prisma, and PostgreSQL
- Add a native wrapper later only for device-specific capabilities such as installs, downloads, notifications, and deeper platform integration
A pure WebView-first approach is fast for a demo, but weak for a real store because the product will eventually require:
- Device-level install handling
- Download queue control
- Background tasks
- Push notifications
- Storage management
- Purchase and entitlement handling
- Device trust management
The better direction is:
- Web-first for speed and iteration
- Native shell later for platform-critical capabilities
This repository currently contains an initial storefront prototype for the consumer app. It is not yet a complete marketplace product.
All currently implemented storefront features are available through the tRPC endpoint at /api/trpc.
store.todaystore.discoverstore.chartsstore.searchstore.librarystore.accountstore.appBySlugstore.developerBySlugstore.collectionBySlugstore.categoryBySlugstore.developerCatalog
store.catalog- catalog summary, app lists, developer lists, category lists, collection lists
store.todayFeed- hero, spotlight apps, collections, release radar, safety notes
store.discoverFeed- categories, collections, featured developers, hidden gems, principles
store.appDetail- sections, screenshots, highlights, what's new, features, privacy, reviews, related items
store.searchTools- suggestions, trending queries, recent queries, recent query recording
store.libraryTools- installed apps, updates, queue, wishlist, purchase history, hidden purchases, restore purchases
- add to wishlist, remove from wishlist, queue install, pause download, resume download, retry download
- hide purchase, unhide purchase
store.accountTools- notifications, devices, billing, subscriptions, controls
- toggle notification, sign out device
store.reviews- submit review, update review
store.reports- app reports, developer reports
- Install dependencies with
pnpm install. - Copy
.env.exampleto.env. - Set
DATABASE_URL. - Run
pnpm dev.
Use the following scripts to keep development test-first:
pnpm testruns the full test suite oncepnpm test:tddstarts watch mode for red-green-refactor loopspnpm test:coveragegenerates coverage output
The current test stack is:
- Vitest
- React Testing Library
- jsdom
The current baseline test coverage focuses on:
- Store domain data and derived view models
- tRPC store router behavior
- Representative storefront component rendering