Skip to content
プロジェクト

steipete/stats-store has 64 GitHub stars and 10 forks. Star changes are not measured yet. Last checked 2026-11-14 05:17 UTC. Last push 2026-11-09.

この数値の測り方

計測したスター増加

24時間
履歴を収集中
7日間
履歴を収集中
15日間
履歴を収集中
1か月
履歴を収集中

期間ごとの純増数です。期間は重複しており、日別の値ではありません。未計測の値は空欄です。スター数は注目度の指標であり、品質の保証ではありません。

概要

stats.store - Fast, open, privacy-first analytics for Sparkle.

データ

stats.store 📊 — Sparkle checks in, useful numbers come out

stats.store banner

CI Node.js 24.15+ / 26+ License

stats.store proxies Sparkle appcast requests and presents the attached update statistics in a dashboard for macOS app maintainers. The hosted service is free for open-source apps, and the project can also be self-hosted with Supabase and Vercel.

<key>SUFeedURL</key>
<string>https://stats.store/api/v1/appcast/appcast.xml</string>

The proxy returns the app's registered upstream feed and records the profile fields Sparkle sends with the update check.

Install

The hosted service at stats.store does not require an installation. Email Peter with the app's display name, bundle identifier, and current appcast URL to register an open-source app.

For your own deployment, use Node.js 24.15+ (24.x) or 26+, and pnpm 12.4.1 or newer, then follow the deployment guide to configure Supabase, apply the database migrations, and deploy the Next.js app.

Quick start

After the app is registered, replace its existing SUFeedURL value with the stats.store proxy URL:

<key>SUFeedURL</key>
<string>https://stats.store/api/v1/appcast/appcast.xml</string>

Sparkle continues to check for updates through the same appcast. Once update checks arrive, open stats.store to inspect daily users, app-version adoption, macOS versions, CPU architectures, hardware models, languages, memory, and core counts.

Prerelease channels can use https://stats.store/api/v1/appcast/appcast-prerelease.xml. The registered upstream feed must expose the corresponding appcast; see the appcast proxy guide for URL mapping and troubleshooting.

How it works

  1. Sparkle requests the proxy URL and identifies the app by bundle identifier, app name, or its user-agent.
  2. stats.store hashes the request IP with the current UTC date and records the Sparkle fields that are present.
  3. The proxy fetches the app's registered upstream appcast and returns it to Sparkle.
  4. The dashboard reads aggregate data from Supabase and updates through Supabase Realtime.

For apps that send telemetry directly, the project also exposes POST /api/v1/ingest; its payload and responses are documented in the Sparkle integration guide.

Data and privacy

The service stores a daily SHA-256 digest derived from the request IP, never the raw IP. Including the date makes the digest useful for counting daily unique clients without creating a stable identifier across days.

When Sparkle supplies them, stats.store records the app version, macOS version, CPU type and core count, language, hardware model, and memory. It does not receive in-app behavior events through the appcast proxy. Vercel Web Analytics is disabled unless a self-hosted deployment explicitly sets NEXT_PUBLIC_ENABLE_VERCEL_ANALYTICS=1.

The architecture notes describe the data flow, schema, endpoints, and aggregation model. The project story explains the motivation behind the hosted service.

Self-hosting

Self-hosting requires a Supabase project and the environment values listed in .env.example. Apply every numbered SQL file currently present in scripts/ in numeric order, then apply the managed migrations in supabase/migrations/ as described in the deployment guide.

With the database and .env.local ready:

pnpm install
pnpm dev

The local dashboard runs at http://localhost:3000. See the registration guide to add an app and the real-time setup guide to enable live dashboard updates.

Development

pnpm lint
pnpm typecheck
pnpm test
SKIP_ENV_VALIDATION=true pnpm build

Tests cover the API routes, dashboard components, hooks, and data formatting. See tests/README.md for focused commands and CONTRIBUTING.md for the contribution workflow.

Community

Use GitHub Issues for bugs and feature discussions. You can also reach Peter Steinberger or follow @steipete.

Built by Peter Steinberger for the Mac developer community.

License

No license file is currently included in this repository.

関連プロジェクトを探す