MyGo 云音乐
Go와 MyGo로 만든 서드파티 네이버 클라우드 뮤직 데스크톱 클라이언트
An easy to use Cloud Downloader, BitTorrent Client. Search, Download, Share
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Welcome to the main FrostWire repository. Here you will find the sources necessary to build FrostWire for Android and FrostWire for Desktop
5 Object Oriented Programming Principles learned during the last 15 years
FrostWire says yes to AI. Use LLMs and agents for issues, bug reports, pull requests, reviews and translations. We'd rather receive well-researched issues than patches, and every PR is triple-checked with our most capable model. Read the YES AI policy, and if AI helped you, consider a donation at frostwire.com/give to cover the compute.
If you want to contribute code, start by looking at the open issues on github.com.
If you want to fix a new issue that's not listed there, create the issue, see if we can discuss a solution.
Please follow the following procedure when creating features to avoid unnecessary rejections:
Do this the first time (Cloning & Forking):
origin repo.git clone https://github.com/frostwire/frostwire
origin repo into your github account.cd frostwire
git remote add your_github_username_here https://github.com/your_github_username_here/frostwire
For further contributions
If your branch has taken a while to be accepted for merging into master, it's very likely that the master branch will have moved forward while you work. In this case, make sure to sync your master.
git fetch upstream master
and then rebase your branch to bring it up to speed so it can be merged properly (do not merge master into your branch):
git checkout my-branch
git rebase origin/master
As you do this you may have to fix any possible conflicts, just follow the instruction git gives you if this is your first time.
Make sure to squash any cosmetic commits into the body of your work so that we don't pollute the history.
Repeat and rinse, if you send enough patches to demonstrate you have a good coding skills, we'll just give you commit access on the real repo and you will be part of the development team.
To build you will need the Java Developer Kit 19
Go inside the desktop directory and follow the build instructions in the README.md file.
Additional Desktop requirements
gettext
If you want to work with the translation (i18n) bundles, you will need to install gettext to perform the text extraction and bundling tasks (gradle gettextExtract, gradle gettextBundle)
If you are on Mac, gettext installation is very simple with brew:
brew install gettext.
If you are on Ubuntu, gettext installation can be done with
sudo apt install gettext.
Windows developers
If you are developing in Windows we recommend you work with MinGW and install the gettext package.
We also recommend you use git for window's terminal instead of cmd.exe. All of our scripts will work as if you were working in Linux/Mac. Git's terminal supports window resizing, more convenient copying and pasting, Tab text completion, Ctrl+R reverse search, common bash keyboard shortcuts and basic GNU tools right out of the box.
Build with Android studio or go inside the android directory and type:
./gradlew assembleDebug, debug builds will be created inside the android/build folder.
FrostWire includes IceBridge, a standalone relay servent that provides reliable, authenticated, fragmented mesh transport between FrostWire peers for distributed search.
FrostWire Desktop ──HTTP──▶ Local IceBridge Daemon ──rUDP──▶ Remote IceBridge Daemon
(search UI) (/send, /poll) (processes request,
queries local index,
signs response)
cd desktop
./gradlew icebridgeJar
# Output: desktop/build/libs/icebridge.jar
For an EC2 systemd install, ./scripts/icebridge-systemd-install.sh --build
builds it as the current user and prints root-owned staging plus install commands.
java -jar icebridge.jar \
--rudp-port 6889 \
--control-http-port 50066 \
--role BOTH \
--host 127.0.0.1 \
--identity-file ~/.frostwire/icebridge-identity.dat
On startup, IceBridge prints ICEBRIDGE_AUTH_TOKEN=<hex> to stdout. All control API endpoints (except /health) require this token in the X-IceBridge-Token header.
| Endpoint | Method | Auth | Description |
|---|---|---|---|
/health | GET | No | Health check ({"ok":true,"data":"ok"}) |
/register | POST | Yes | Ed25519-signed peer registration |
/route | POST | Yes | Localhost-trusted peer routing (no signature required) |
/lookup | GET | Yes | Look up a peer by Ed25519 public key |
/send | POST | Yes | Send an opaque payload to a remote peer via rUDP |
/poll | GET | Yes | Drain inbound messages |
/metrics | GET | Yes | Runtime metrics (packet counts, registry size, etc.) |
The rUDP layer implements:
Sessions are capped at 256 per daemon. Incoming search requests are rate-limited to 30 requests/minute per source.
FrostWire indexes both torrent names and individual file paths within torrents using SQLite FTS5 with BM25 ranking. This means searching for "readme.txt" will find torrents containing that file even if the torrent name doesn't include "readme". Results that match on a file path surface the matched filename in the search results.
Each FrostWire node has a cryptographic identity consisting of an Ed25519 keypair (signing) and an X25519 keypair (Diffie-Hellman). The identity's node ID is SHA-1(ed25519PubRaw) with a configurable proof-of-work difficulty (default 20 leading zero bits) to prevent Sybil attacks.
Identity generation uses jlibtorrent's native Ed25519 implementation for performance — the JDK's pure-Java Ed25519 is 50-100x slower on some platforms.
Identities can be backed up and restored using a BIP39 24-word mnemonic phrase (com.frostwire.crypto.Bip39Mnemonic). The 32-byte Ed25519 seed is encoded as a mnemonic with a SHA-256 checksum, enabling offline paper backup. IdentityKeys.fromSeed(seed) deterministically reconstructs the Ed25519 keypair from the mnemonic.
The desktop client exposes identity management via Options > Identity, showing the node ID, fingerprint, public key, difficulty, karma score, and shared torrent count, with buttons to show the seed phrase, restore from seed phrase, and export/import identity files.
| Component | Location |
|---|---|
| IceBridge server | common/src/main/java/com/frostwire/search/relay/icebridge/ |
| rUDP transport | common/src/main/java/com/frostwire/search/relay/icebridge/udp/ |
| Control API | common/src/main/java/com/frostwire/search/relay/icebridge/control/ |
| Desktop client + launcher | desktop/src/main/java/com/frostwire/search/relay/icebridge/client/ |
| Local index (SQLite + FTS5) | desktop/src/main/java/com/frostwire/search/relay/LocalIndexTable.java |
| Distributed search performer | common/src/main/java/com/frostwire/search/relay/DistributedSearchPerformer.java |
| BIP39 mnemonic | common/src/main/java/com/frostwire/crypto/Bip39Mnemonic.java |
| Identity keys | common/src/main/java/com/frostwire/search/relay/IdentityKeys.java |
| Identity settings UI | desktop/src/main/java/com/limegroup/gnutella/gui/options/panes/IdentitySettingsPaneItem.java |
| Tests | desktop/src/test/java/com/frostwire/search/relay/ |
Frostwire Desktop and Frostwire Android are offered under the GNU General Public License Version 3 (GPL 3.0).
JLibTorrent | Telluride Cloud Video Downloader | FrostWire JMplayer
Main Website Frostwire.com | X @frostwire | Reddit | Facebook | Discord Chatrooms