macOS app store powered by Homebrew & GitHub Releases — built with Tauri v2 + Next.js 15.
ZStore is a native macOS desktop application that gives you a beautiful, searchable UI for discovering, installing, and managing software from two sources:
- Brew — browse Homebrew casks (GUI apps) and formulas (CLI tools), install/upgrade/uninstall with one click, and manage brew services.
- GitHub — a curated catalogue of 100+ popular macOS apps distributed via GitHub Releases.
All app data is cached locally in SQLite so the UI loads instantly every time, even offline.
| Feature | Details |
|---|---|
| 🍺 Homebrew integration | Browse casks + formulas, one-click install / upgrade / uninstall |
| 🐙 GitHub Releases | 100+ curated macOS apps across 15 categories |
| ⚡ Instant startup | SQLite cache — no spinner on launch |
| 🔍 Search & filter | Full-text search, category filter, Favorites |
| 📦 Installed view | See all installed packages with version info |
| 🆙 Updates view | One-click "Upgrade All" for outdated packages |
| ⚙️ Services manager | Start / stop / restart brew services |
| 🗂️ Grid & list view | Switch between card grid and compact list |
| 💾 Detail caching | App detail panel cached to SQLite per-app |
| 🎨 Clean UI | Shadcn/UI + Tailwind CSS + Lucide icons |
| Layer | Technology |
|---|---|
| Desktop shell | Tauri v2 (Rust) |
| Frontend | Next.js 15 — static export (output: 'export') |
| UI components | shadcn/ui + Tailwind CSS v4 |
| Icons | Lucide React |
| State | Zustand with persist middleware |
| Database | tauri-plugin-sql (SQLite) |
| Brew IPC | Tauri invoke → Rust tokio::process::Command |
pnpm install
pnpm tauri devThis starts the Next.js dev server on localhost:3000 and opens the Tauri window.
pnpm tauri buildThe signed .dmg / .app is output to src-tauri/target/release/bundle/.
# Apple Silicon
pnpm tauri build --target aarch64-apple-darwin
# Intel
pnpm tauri build --target x86_64-apple-darwinzstore/
├── src/ # Next.js frontend
│ ├── app/ # App Router pages
│ ├── components/ # UI components (Sidebar, AppGrid, AppDetailPanel…)
│ ├── hooks/ # useAppLoader — data fetching & DB caching
│ └── lib/
│ ├── brew.ts # Homebrew data fetching (formulae.brew.sh API)
│ ├── brew-ipc.ts # Tauri IPC wrappers (install / upgrade / uninstall…)
│ ├── github.ts # GitHub Releases fetching + static app list
│ ├── github-apps.ts # Curated list of 100+ macOS GitHub apps
│ ├── db.ts # SQLite helpers (kvGet / kvSet / app detail cache)
│ ├── store.ts # Zustand store
│ ├── categories.ts # 15 app categories with Lucide icon names
│ └── types.ts # Shared TypeScript types
└── src-tauri/ # Tauri / Rust backend
├── src/lib.rs # brew_* Tauri commands + SQL plugin setup
├── Cargo.toml
└── capabilities/
└── default.json # Tauri v2 permissions
Fetched from the official Homebrew formulae API:
https://formulae.brew.sh/api/cask.json— all caskshttps://formulae.brew.sh/api/formula.json— all formulas
Results are cached in SQLite (kv_cache table keyed by brew-cask / brew-formula). TTL: 6 hours.
100+ repos curated in src/lib/github-apps.ts. On first load the static list is shown instantly; a background fetch enriches entries with live release versions and star counts (subject to GitHub's 60 req/hr unauthenticated rate limit).
| Action | How |
|---|---|
| Search | Click the search bar in the header |
| Switch space | Click Brew / GitHub tabs in the sidebar |
| Toggle view | Grid / List icons in the header |
| Refresh source | Click the ↺ button; hold to pick a specific source |
| App detail | Click any app card |
| Favorite | ★ button in the detail panel |
| Close detail | × in the detail panel, or click another area |
MIT © 2025
