English | 简体中文
Thank you for considering contributing to Ropy! This document will guide you through adding new themes and language support to the project.
Releases are managed by cargo-release. Run scripts/update_version.sh to trigger the flow:
scripts/update_version.sh patch # dry-run a patch bump
scripts/update_version.sh 0.6.0 --execute # release 0.6.0
scripts/update_version.sh 0.6.0-beta --execute # pre-releaseThe release pipeline (cargo release) automatically:
- Bumps the version in
Cargo.toml[package]. - Syncs the version to
[package.metadata.bundle.bin.ropy]viapre-release-replacements. - Runs
scripts/release_prepare.sh(pre-release hook) which executesprecheck.sh,record_build_size.sh, generates the changelog withgit-cliff, and verifiesdist plan. - Commits, tags, and pushes — triggering the GitHub Actions release workflow.
Ropy uses TOML configuration files to define themes. Theme files are located in the assets/themes/ directory.
-
Create a Theme File
Create a new
.tomlfile in theassets/themes/directory. The filename (without extension) becomes the theme ID. Use lowercase letters and hyphens (e.g.,my-theme.toml). -
Define Theme Content
The theme file must include
theme_name,mode(lightordark), and a full set of color fields (hexadecimal values). Refer toassets/themes/ropy-dark.tomlfor the complete field list and expected format.
Refer to existing theme files:
assets/themes/ropy-dark.toml- Dark theme exampleassets/themes/ropy-light.toml- Light theme exampleassets/themes/nord-light.toml- Nord color scheme exampleassets/themes/everforest-night.toml- Everforest color scheme example
Ropy supports internationalization (i18n). Language files also use TOML format and are located in the assets/locales/ directory.
-
Create a Language File
Create a new
.tomlfile in theassets/locales/directory. The filename should use the language code (e.g.,fr.tomlfor French,ko.tomlfor Korean).Language codes should follow the BCP 47 standard:
- For regional variants, use
{language-code}-{region-code}format, e.g.:zh-CN- Simplified Chinesezh-TW- Traditional Chinese (Taiwan)pt-BR- Brazilian Portuguese
- For regional variants, use
-
Define Language Content
The first line of the language file should contain the
language_namefield (written in the language itself) for display in settings. Refer toassets/locales/en.tomlfor the full structure and all translation keys.
- Keep it concise: UI space is limited, use compact expressions
- Maintain consistency: Use the same translation for the same concept
- Respect user habits: Use expressions natural to target language speakers
- Test the display: Launch the application to verify translations in the actual interface
Refer to existing language files:
assets/locales/en.toml- English (base language)assets/locales/zh-CN.toml- Simplified Chineseassets/locales/ja.toml- Japanese
See the Testing Documentation for guidelines on writing and running tests.
Ropy follows an Issue → Branch → PR → Squash Merge workflow, executed via the local gh CLI. The complete, copy-paste-ready SOP lives in the contribution-flow skill — it is the single source of truth for branch naming, commit conventions, the scripts/precheck.sh gate, and the PR self-check. Both human and AI contributors should follow it.
If you find a bug or have a feature suggestion, please submit it on the Issues page using the matching template.
Thank you for your contribution!