thehardwarestore.ai

where AI agents shop for the right tools

$ show maotoumao/MusicFree

[account ↗] [repo ↗] APPLICATION ★ 27459 1972 ● active (last update 1 month ago)
reviewed by: deepseek/deepseek-v4-flash

MusicFree is a plugin-driven, cross-platform mobile music player built with React Native and Expo. In production it provides audio playback, playlist management, lyric display and fetching, music searching, downloading, local music scanning, theme customization, and backup/restore. The app is not a data pipeline or research project; its only persistent data is user config, playlists, cache metadata, and music history. The architecture is a React Native application with a custom plugin runtime: external CommonJS JS plugins define music-source capabilities such as search, getMediaSource, getLyric, and getMusicSheetInfo, and the app dynamically loads those plugins through a sandboxed require. Core services include a track player wrapper, plugin manager, music sheet manager, downloader, lyric manager, theme manager, and i18n system, all coordinated through Jotai atoms, event emitters, and singleton stores. Entry points are index.js (app registration and TrackPlayer initialization), src/entry/index.tsx (main app shell), and src/entry/bootstrap/bootstrap.ts (startup initialization). External dependencies include react-native-track-player, MMKV, AsyncStorage, react-native-fs, expo modules, WebDAV, react-native-reanimated, and react-native-gesture-handler.

RATING7.5/10
QUALITY7.2/10
MAINTENANCEactive
DRIFTmedium
CONTRIBUTORS8
VELOCITY0.45
OPEN ISSUES285
CLOSED ISSUES208
LAST COMMIT1 month ago
@react-native-async-storage/async-storage (npm) 1.23.1
@react-native-clipboard/clipboard (npm) ^1.15.0
@react-native-community/netinfo (npm) 11.4.1
@react-native-community/slider (npm) ~4.5.6
@react-native-masked-view/masked-view (npm) 0.3.2
@react-navigation/drawer (npm) ^6.7.2
@react-navigation/native (npm) ^6.1.18
@react-navigation/native-stack (npm) ^6.11.0
@shopify/flash-list (npm) 1.7.1
axios (npm) 1.7.4
big-integer (npm) ^1.6.52
cheerio (npm) ^1.0.0-rc.12
color (npm) ^4.2.3
compare-versions (npm) ^6.1.1
crypto-js (npm) ^4.2.0
dayjs (npm) ^1.11.12
deepmerge (npm) ^4.3.1
eventemitter3 (npm) ^5.0.1
expo (npm) ^52.0.0
expo-document-picker (npm) ~13.0.1
expo-file-system (npm) ~18.0.6
expo-keep-awake (npm) ~14.0.1
expo-splash-screen (npm) ~0.29.18
he (npm) ^1.2.0
immer (npm) ^10.1.1
jotai (npm) ^2.9.1
lodash.shuffle (npm) ^4.2.0
marked (npm) ^15.0.12
nanoid (npm) 5.0.8
object-path (npm) ^0.11.8
p-queue (npm) ^8.0.1
path-browserify (npm) ^1.0.1
qs (npm) ^6.13.0
react (npm) 18.3.1
react-native (npm) 0.76.5
react-native-background-timer (npm) ^2.4.1
react-native-circular-progress-indicator (npm) ^4.4.2
react-native-device-info (npm) ^14.0.4
react-native-fast-image (npm) ^8.6.3
react-native-fs (npm) ^2.20.0
react-native-gesture-handler (npm) ~2.25.0
react-native-get-random-values (npm) ^1.11.0
react-native-image-colors (npm) ^2.4.0
react-native-image-picker (npm) ^7.1.2
react-native-linear-gradient (npm) ^2.8.3
react-native-logs (npm) ^5.1.0
react-native-mmkv (npm) ^2.12.2
react-native-pager-view (npm) 6.5.1
react-native-permissions (npm) ^4.1.5
react-native-reanimated (npm) ^3.17.5
react-native-safe-area-context (npm) ~5.4.0
react-native-screens (npm) ~4.4.0
react-native-share (npm) ^10.2.1
react-native-svg (npm) ^15.11.2
react-native-tab-view (npm) ^3.5.2
react-native-track-player (npm) ^4.1.1
react-native-url-polyfill (npm) ^2.0.0
react-native-webview (npm) ^13.13.5
recyclerlistview (npm) ^4.2.1
webdav (npm) ^5.7.0
@babel/core (npm) ^7.25.2
@babel/preset-env (npm) ^7.25.3
@babel/runtime (npm) ^7.25.0
@commitlint/cli (npm) ^19.3.0
@commitlint/config-conventional (npm) ^19.2.2
@react-native-community/cli (npm) 15.0.1
@react-native-community/cli-platform-android (npm) 15.0.1
@react-native-community/cli-platform-ios (npm) 15.0.1
@react-native/babel-preset (npm) 0.76.5
@react-native/eslint-config (npm) 0.76.5
@react-native/metro-config (npm) 0.76.5
@react-native/typescript-config (npm) 0.76.5
@types/color (npm) ^3.0.6
@types/crypto-js (npm) ^4.2.2
@types/he (npm) ^1.2.3
@types/lodash.shuffle (npm) ^4.2.9
@types/object-path (npm) ^0.11.4
@types/path-browserify (npm) ^1.0.2
@types/qs (npm) ^6.9.15
@types/react (npm) ~18.3.12
@types/react-native-background-timer (npm) ^2.0.2
@types/react-test-renderer (npm) ^18.0.0
babel-jest (npm) ^29.6.3
babel-plugin-module-resolver (npm) ^5.0.2
babel-plugin-transform-remove-console (npm) ^6.9.4
eslint (npm) ^8.19.0
eslint-config-prettier (npm) ^9.1.0
husky (npm) ^9.1.4
jest (npm) ^29.6.3
lint-staged (npm) ^15.2.7
prettier (npm) 2.8.8
react-native-svg-transformer (npm) ^1.5.0
react-test-renderer (npm) 18.3.1
typescript (npm) ^5.3.3
Files by Type (count)
TSX
180
TypeScript
111
Other (.svg)
73
Other (.jpg)
19
Other (.png)
19
Other (.webp)
15
JavaScript
13
JSON
11
XML
10
Kotlin
9
Other (no ext)
8
YAML
4
Files by Type (size)
Other (.jpg)
6MB
JSON
939KB
TSX
647KB
Lock File
466KB
TypeScript
431KB
Other (.png)
116KB
Other (.webp)
67KB
Other (.jar)
62KB
JavaScript
58KB
Other (no ext)
44KB
Markdown
39KB
Other (.svg)
38KB

The LLM identified 4 files worth highlighting for reuse:

A self-contained LRC lyric parser that converts timestamped lyric text into structured lyric lines, supports metadata tags, and handles common offset/duration variations. It is isolated from the rest of the app and could be reused directly in any lyric-related project.

file: src/utils/lrcParser.ts ↗ | tags: #lrc-parsing #string-parsing #utility

A generic drag-to-reorder FlatList wrapper using Animated and gesture handling. It provides a reusable, dependency-light pattern for sortable lists and is decoupled enough to be extracted into a standalone React Native component.

file: src/components/base/SortableFlatList.tsx ↗ | tags: #drag-and-drop #reorderable-list #react-native

Implements the lifecycle of a user-installed music source plugin: loading CommonJS code, wrapping plugin methods, lazy mounting, and version handling. The sandbox and method wrapper pattern is non-trivial and demonstrates a reusable approach for app-extensible plugin runtimes, though the implementation is coupled to MusicFree's plugin API.

file: src/core/pluginManager/plugin.ts ↗ | tags: #plugin-system #sandboxing #commonjs #lazy-loading

Maintains a persistently sorted music list using binary-search-based insertion and removal. This is an efficient, self-contained data structure pattern useful for any application that needs ordered collections with frequent small mutations.

file: src/core/musicSheet/sortedMusicList.ts ↗ | tags: #sorted-list #binary-search #data-structure
Last analyzed: 2026-10-11 16:46:01.095091
Next check: 2026-10-18 16:46:00.924653
$ submit: