DJ BPM & Key Finder
Detect the key and BPM of any song playing around you, completely offline. Built for DJs mixing vinyl and digital.
- Real-time detection — Instantly identifies BPM and musical key via your device's microphone
- Confidence scoring — See how accurate each reading is
- Fully offline — No internet required, no data leaves your device
- Cross-platform — Available on iOS and Android
Keyed processes all audio locally on your device. No audio data, song information, or usage analytics are ever collected or transmitted. Your listening stays private.
- Expo / React Native
- TypeScript
- react-native-unistyles for styling
- TanStack Query for state management
- Turborepo monorepo structure
docs/ANALYSIS.md- Current end-to-end native analysis architecture (BPM + key)docs/BEATNET.md- BPM pipeline internals and model notesdocs/KEY_DETECTION.md- Key-analysis pipeline internals and API
- Bun v1.2.16+
- iOS Simulator / Android Emulator or physical device
- Xcode (for iOS) / Android Studio (for Android)
# Clone the repository
git clone https://github.com/jmcmullen/keyed.git
cd keyed
# Install dependencies
bun install
# Start the development server
bun run dev:native| Command | Description |
|---|---|
bun run dev:native |
Start Expo development server |
bun run build |
Build all packages |
bun run check |
Run linting and formatting |
bun run check-types |
TypeScript type checking |
keyed/
├── apps/
│ └── native/ # React Native mobile app
├── packages/
│ └── config/ # Shared TypeScript configuration
└── ...
Contributions are welcome. Please open an issue first to discuss what you'd like to change.
- Fork the repository
- Create your branch (
git checkout -b feature/your-feature) - Commit your changes
- Push to the branch
- Open a pull request