Cross-platform music availability checker.
Search once, see results from 7 music platforms — instantly.
Mscout (Music Scout) searches multiple music platforms in parallel and shows you where a song is available, along with quality info, duration, album art, and more — all in one view.
| Platform | Region | Notes |
|---|---|---|
| QQ Music | CN | Quality tiers (standard/HQ/lossless/Hi-Res) |
| NetEase Cloud Music | CN | Includes album art |
| Kugou Music | CN | Full quality info |
| Migu Music | CN | Hi-Res support |
| Apple Music / iTunes | Global | Preview URLs available |
| JOOX | SEA | Southeast Asia catalog |
| GDStudio | — | Community source |
# Clone
git clone https://github.com/index-null/mscout.git
cd mscout
# Install dependencies
pnpm install
# Start both frontend and backend in parallel
pnpm devFrontend runs at http://localhost:5173, backend API at http://localhost:3000.
mscout/
├── apps/
│ ├── web/ # React 19 + Vite 7 + Tailwind CSS 4
│ └── server/ # Hono 4 API (Node.js / Edge runtime)
├── packages/
│ └── shared/ # Shared TypeScript types
├── turbo.json # Turborepo task orchestration
└── pnpm-workspace.yaml
| Layer | Technology |
|---|---|
| Frontend | React 19, Vite 7, Tailwind CSS 4, shadcn/ui, Framer Motion |
| Backend | Hono 4, Zod validation, Adapter pattern |
| Monorepo | pnpm workspaces + Turborepo |
| Type Safety | Hono RPC (hc<AppType>) — end-to-end type inference |
| Deployment | Vercel (frontend) + Cloudflare Workers (backend) |
The backend exports AppType via Hono's chained route syntax. The frontend uses hc<AppType>() to get a fully typed API client — no manual type definitions, no code generation, no drift.
// Backend: exports route types automatically
const app = new Hono()
.post("/search", zValidator("json", searchSchema), async (c) => {
return c.json(response);
});
export type AppType = typeof app;
// Frontend: fully typed API calls
const client = hc<AppType>("/");
const res = await client.api.search.$post({ json: { song, artist } });Adding a new music platform is a single file:
export class MyPlatformAdapter extends AbstractMusicPlatformAdapter {
protected buildSearchRequest(query: SearchQuery): [string, RequestInit] {
// Build the request
}
protected parseSearchResponse(data: unknown): SongInfo[] {
// Parse the response
}
}Then register it in registry.ts — done.
| Command | Description |
|---|---|
pnpm dev |
Start frontend + backend dev servers |
pnpm build |
Build all packages |
pnpm typecheck |
Type-check all packages |
pnpm lint |
Lint all packages |
# Run only the frontend
pnpm turbo run dev --filter=@mscout/web
# Build only the server
pnpm turbo run build --filter=@mscout/server- Connect your GitHub repo to Vercel
- Set Root Directory to
apps/web - Vercel auto-detects Turborepo — zero config needed
cd apps/server
pnpm deployNote
The server entry supports dual-mode: @hono/node-server for local development, standard export default app for edge runtimes.

