Thanks for your interest in contributing! All skill levels are welcome.
- Check existing issues and pull requests to avoid duplicating work.
- For large changes, open an issue first to discuss the approach before writing code.
- Read AGENTS.md if you're touching renderer code — it defines module ownership and required validation steps.
Use the Bug Report issue template. Include:
- Steps to reproduce
- What you expected vs what actually happened
- Your OS and Snowify version
Use the Feature Request issue template. Explain the use case, not just the feature.
- Fork the repo and create a branch from
main. - Make your changes, following the guidelines below.
- Run the validation checklist (see AGENTS.md §10).
- Open a PR against
mainusing the pull request template.
- Keep changes focused — one concern per PR.
- Follow the module ownership rules in AGENTS.md. Feature logic belongs in
src/renderer/modules/, notapp.js. - All user-facing strings must use
I18n.t(...)— no hardcoded display text. - If you change
src/mobile/bridge.js, runnpm run build:mobileand commitsrc/renderer/mobile-bridge.jsalongside it. - Run
node --checkon any touched renderer files before opening a PR.
Snowify supports multiple languages through JSON files in src/renderer/locales/.
- Copy the English file — Duplicate
src/renderer/locales/en.jsonand rename it to your language's ISO 639-1 code (e.g.nl.jsonfor Dutch). - Translate the values — Each file is a flat
"key": "value"JSON object. Translate only the values, never the keys. Keep any{{placeholder}}variables intact:"home.greeting.morning": "Goedemorgen", "queue.trackCount": "{{count}} nummers"
- Register the language — Add the new language code to the
SUPPORTEDarray insrc/renderer/i18n.js, add an<option>for it in the language selector insrc/renderer/index.html, and add it to the supported languages list in the README. - Open a PR — Submit your translation file along with the registration changes.
Currently supported: English, Spanish, Portuguese, French, German, Japanese, Korean, Chinese, Italian, Turkish, Russian, Hindi.
Parts of this project were assisted or written by AI. If that's something you're not comfortable with, no hard feelings. The code may have flaws — if you spot something that could be improved, contributions are very welcome.