Thank you for your interest in contributing to MicYou! This guide covers the project layout, how to build the app from source, how to add translations, and how to submit changes.
We welcome bug reports, feature requests, code contributions, and translations.
composeApp/— Android app (Kotlin, Jetpack Compose, Material 3)tauri-app/— Desktop appsrc/— Vue 3 + Vite + Tailwind CSS frontendsrc-tauri/— Tauri 2 + Rust backend (GUI server)crates/— shared Rust workspace crates:micyou-protocol— network protocolmicyou-audio— audio transport, buffering, and DSPmicyou-cli— headless CLI server (binarymicyou)micyou-tui— interactive terminal dashboard (binarymicyou-tui)
docs/— project documentation (points to the online docs at micyou.top)img/— README and project images
- Android SDK: compileSdk 36, minSdk 24, targetSdk 36 (JDK 21)
- Desktop frontend: Node.js 22 (as used in CI) + npm
- Desktop backend: Rust stable + Cargo. On Linux you also need the Tauri 2 system dependencies:
libwebkit2gtk-4.1-dev,libayatana-appindicator3-dev,librsvg2-dev,patchelf,libxdo-dev,libssl-dev,libasound2-dev.
./gradlew :composeApp:assembleDebugOptional, maintainers only: release signing is configured via the ANDROID_KEYSTORE_PATH, ANDROID_KEYSTORE_PASSWORD, ANDROID_KEY_ALIAS, and ANDROID_KEY_PASSWORD environment variables; the AIFADIAN_API_TOKEN and AIFADIAN_USER_ID values in local.properties power the in-app Sponsors list (爱发电/Aifadian API). Regular contributors can ignore both — without them the Sponsors dialog just shows "API not configured".
cd tauri-app
npm install # only when dependencies need to be restored or updated
npm run build # vue-tsc type check + vite buildcd tauri-app
npm run tauri dev # development
npm run tauri build # release bundles (NSIS installer on Windows, .deb/.rpm/.AppImage on Linux, .dmg on macOS)The desktop server can also run without the GUI:
cd tauri-app
cargo run -p micyou-cli -- serve # CLI (headless; run `cargo run -p micyou-cli -- --help` for all commands)
cargo run -p micyou-tui # interactive TUI dashboardThe GUI, CLI, and TUI all share the same server configuration and DSP settings.
The single source of truth for the version is gradle.properties (project.version, project.version.code). After changing it, sync the desktop-side version files:
cd tauri-app
npm run sync-versionUser-facing strings live in Android string resources and desktop locale JSON files. The two platforms have independent locale sets; keep the key sets within each platform consistent.
- Location:
composeApp/src/main/res/values*/strings.xml - Base languages (must be kept in sync): English (
values/) and Simplified Chinese (values-zh/) - Language registration: the
AppLanguageenum incomposeApp/src/main/kotlin/com/lanrhyme/micyou/util/Localization.kt
To add a new language:
- Create
composeApp/src/main/res/values-xx/strings.xml(replacexxwith the locale code, e.g.frfor French, per ISO 639-1 / IETF BCP 47). - Copy the keys from
values/strings.xmland translate all values, keeping the keys unchanged:
<resources>
<string name="appName">MicYou</string>
<string name="ipLabel">IP : </string>
<!-- ... -->
</resources>- Register the language in
AppLanguage:
enum class AppLanguage(val label: String, val code: String) {
// ... existing languages ...
French("Français", "fr"), // add this line
}Special variants (easter eggs):
values-zh/— Simplified Chinesevalues-zh-rTW/— Traditional Chinese (Taiwan)values-zh-rHK/— Cantonese (Hong Kong)values-zh-rHD/— Chinese hard mode (easter egg)values-ca/— Cat language (easter egg)
- Location:
tauri-app/src/shared/locales/*.json(en,zh,zh-hk,zh-tw,zh-ss,cat,lzh) - Base languages: English (
en.json) and Simplified Chinese (zh.json) - Registration: import the JSON and add it to the i18n
messagesmap intauri-app/src/main.ts
To add a new language:
- Create
tauri-app/src/shared/locales/xx.jsonwith the same key structure aszh.json. - Import it and register it in the
messagesmap intauri-app/src/main.ts.
- Android: build the APK (
./gradlew :composeApp:assembleDebug) and check Settings → Language. - Desktop: run
npm run tauri devand check Settings → Language. - Verify that all strings display correctly and that layouts don't clip or overflow in your language.
Use Conventional Commits format for commit messages and PR titles:
feat(i18n): add fr (French) localizationfix: resolve audio crash on Android 14docs: update build instructions
Before opening a pull request:
- Keep localization key sets consistent across all locale files for the platform you touched.
- Make sure the Android debug build (
./gradlew :composeApp:assembleDebug) and the desktop build (cd tauri-app && npm run build) pass. - CI (
.github/workflows/development.yml) builds the Android debug APK and the Tauri packages for Windows, macOS, and Linux on every push and pull request.
By contributing, you agree to follow the project's Code of Conduct.