mirror of
https://github.com/Felitendo/spotifast.git
synced 2026-11-01 17:33:26 +01:00
92 lines
4.2 KiB
Markdown
92 lines
4.2 KiB
Markdown
# Contributing to Fastpotify
|
|
|
|
Fastpotify is a native Spotify client. Changes should improve the
|
|
desktop app without adding a browser, fallback services, or another backend.
|
|
|
|
## Before opening an issue
|
|
|
|
Search open and closed issues first. For a bug, use the bug form and include
|
|
the requested log and exact steps to reproduce it. Reports without enough
|
|
information to investigate may be closed.
|
|
|
|
For a feature, explain the user problem. Discuss large changes in an issue
|
|
before writing code. Existing code does not guarantee that a feature fits the
|
|
project.
|
|
|
|
Some boundaries come from Spotify or from upstream libraries:
|
|
|
|
- Local playback requires Spotify Premium because librespot requires it.
|
|
- Spotify Lossless is not available through librespot. Fastpotify will
|
|
reconsider it if librespot gains lawful upstream support; proposals that
|
|
depend on bypassing Spotify's DRM are out of scope.
|
|
- Spotify tracks must come from Spotify. Substituting audio from YouTube,
|
|
Piped, `yt-dlp`, or another catalogue is out of scope.
|
|
- Fastpotify will not embed a browser engine, add telemetry, or introduce a
|
|
Fastpotify-operated service.
|
|
|
|
[What Spotify Lets a Client Do](docs/_reference/what-spotify-allows.md)
|
|
lists what each of the three surfaces offers and the requests none of them
|
|
can serve, with the reason for each; a request in its last section is
|
|
answered from there and closed.
|
|
|
|
Duplicate, out-of-scope, or incomplete issues may be closed with a short
|
|
explanation.
|
|
|
|
## Design principles
|
|
|
|
1. **Native and fast.** Startup time, idle work, memory use, and binary size
|
|
are product features. Keep the UI thread free of network and disk waits.
|
|
2. **Focused.** Prefer a complete, coherent workflow over a collection of
|
|
settings, modes, and speculative features.
|
|
3. **Honest integrations.** Use Spotify's Web API and librespot for what they
|
|
support. Do not scrape, impersonate capabilities, bypass technical
|
|
protections, or silently replace one service with another.
|
|
4. **Cross-platform by default.** Linux, macOS, and Windows are supported
|
|
products. Platform-specific code must be isolated and the other targets
|
|
must keep compiling.
|
|
5. **Small dependency surface.** Reuse the standard library and existing
|
|
crates where practical. A new dependency needs a concrete benefit worth
|
|
its build time, binary size, maintenance, and security cost.
|
|
6. **Visible failure, private data.** Errors should be actionable, rate limits
|
|
should be respected, and credentials must never appear in logs. Network
|
|
behaviour belongs in the documentation.
|
|
|
|
## Pull requests
|
|
|
|
Keep each pull request to one change. Explain why it belongs in Fastpotify,
|
|
what changed, and how you tested it. Avoid unrelated formatting, refactors,
|
|
generated prose, and large mechanical rewrites.
|
|
|
|
The same rules apply to hand-written and AI-assisted changes. The author must
|
|
understand every line and answer review comments with specific reasoning.
|
|
|
|
Code changes should include tests for behaviour that can regress. UI changes
|
|
should include before/after screenshots or a short recording and should use
|
|
demo mode where possible. User-visible behaviour, settings, files, or network
|
|
access must be documented in the same pull request.
|
|
|
|
Run the same checks CI runs before submitting:
|
|
|
|
```sh
|
|
cargo fmt --all --check
|
|
cargo clippy --locked --all-targets -- -D warnings
|
|
cargo clippy --locked --all-targets --all-features -- -D warnings
|
|
cargo test --locked --all-targets
|
|
cargo test --locked --all-targets --all-features
|
|
cargo test --locked --all-features --doc
|
|
RUSTDOCFLAGS='-D warnings' cargo doc --locked --all-features --no-deps
|
|
(cd docs && bundle exec jekyll build)
|
|
```
|
|
|
|
Linux needs the development packages listed in the README; `nix develop`
|
|
provides the complete development environment. MilkDrop builds libprojectM
|
|
from source, so every platform also needs CMake, a C++ compiler, and
|
|
libclang (on Windows, vcpkg with `glew:x64-windows-static` installed and
|
|
`VCPKG_INSTALLATION_ROOT` pointing at it); `--no-default-features` leaves
|
|
MilkDrop out and needs none of that. CI repeats the test suite on Linux,
|
|
macOS, and Windows. Passing CI is required, but does not replace review
|
|
for correctness, product fit, maintainability, or security.
|
|
|
|
By contributing, you agree that your contribution is licensed under the
|
|
project's MIT License.
|