11# Contributing to EFx
22
3- Thank you for your interest in contributing!
3+ [ ![ PRs Welcome] ( https://img.shields.io/badge/PullRequest-welcome-brightgreen.svg?style=flat-square )] ( )
4+
5+ Thank you for your interest in contributing!
46Any help — from filing a bug report to implementing new tags — makes EFx better.
57
68---
79
8- ## Principles
10+ ## 🧭 Principles
911
10- * ** Safety & compatibility.** Avoid breaking public APIs unless agreed upon in advance.
11- * ** Code style.** Follow ` cargo fmt ` and ensure ` clippy ` passes without warnings.
12- * ** Tests.** Any logic change should come with tests (` cargo test ` , doctests, compile-fail tests).
12+ * ** Safety & compatibility.** Avoid breaking public APIs unless discussed in advance.
13+ * ** Code style.** Follow ` cargo fmt ` ; ensure ` clippy ` passes without warnings.
14+ * ** Tests.** Any logic change should include tests (` cargo test ` , doctests, compile-fail tests).
1315* ** Docs.** Public APIs, new tags, and attributes must be documented.
1416* ** Performance.** Avoid regressions; add profiling notes if relevant.
1517
1618---
1719
18- ## Filing Issues
20+ ## 🐞 Filing Issues
1921
2022Before opening a new issue:
2123
22241 . ** Search existing issues** to avoid duplicates.
23- 2 . Prepare a ** minimal reproducible example** (short ` efx! { ... } ` snippet, log, or screenshot).
25+ 2 . Prepare a ** minimal reproducible example** — short ` efx! { ... } ` snippet, log, or screenshot.
26+ 3 . For new features, provide a ** short rationale** or reference an RFC.
2427
25- ** Template for issues :**
28+ ** Issue template :**
2629
27- * ** Type:** bug / feature / docs / question
28- * ** Expected behavior:** …
29- * ** Actual behavior:** …
30- * ** Reproduction:** code or steps
31- * ** Versions:** ` rustc --version ` , EFx crate versions
32- * ** Platform:** OS/architecture
30+ * ** Type:** bug / feature / docs / question
31+ * ** Expected behavior:** …
32+ * ** Actual behavior:** …
33+ * ** Reproduction:** code or steps
34+ * ** Versions:** ` rustc --version ` , EFx crate versions
35+ * ** Platform:** OS/architecture
3336* ** Additional info:** backtrace, perf data, etc.
3437
38+ > 💡 * Tip:* issues labeled ` good first issue ` are designed for first-time contributors.
39+
40+ ---
41+
42+ ## 🧩 Workflow Overview
43+
44+ ### 1. Pick or propose an issue
45+
46+ * ** Claim an issue:** comment “I’d like to take this” (optionally with a short plan/ETA).
47+ The maintainer will assign it to you.
48+ * ** Propose a new issue:** open a ticket as described above.
49+ If relevant, start from the roadmap RFC:
50+ [ ` EFX-0001 ` ] ( efx/docs/rfcs/EFX-0001-roadmap-0.5-0.7.md ) .
51+
3552---
3653
37- ## Submitting Pull Requests
54+ ### 2. Fork & branch
55+
56+ Fork the repository and create a ** feature branch from ` main ` ** :
3857
39- 1 . ** Fork** and create a branch:
58+ ``` bash
59+ git checkout main
60+ git pull
61+ git checkout -b feat/short-topic
62+ ````
4063
41- * ` feat/<feature> ` — new functionality
42- * ` fix/<bug> ` — bugfix
43- * ` docs/<topic> ` — docs only
44- * ` chore/<topic> ` — maintenance
45- 2 . Make your changes and ensure ** all tests pass** .
46- 3 . Update ** docs** and ** CHANGELOG.md** if behavior is user-visible.
47- 4 . Run local checks (see below).
48- 5 . Open a PR with:
64+ Keep your branch focused on ** one issue** .
4965
50- * ** Title:** short and clear
51- * ** Description:** what/why, how tested, API impact
52- * Link to relevant ** issue or RFC**
66+ Branch naming convention:
5367
54- Small follow-up commits for review fixes are welcome.
68+ | Type | Example | Purpose |
69+ | ----------| -----------------------| ---------------------------|
70+ | ` feat/` | ` feat/button-rounded` | New feature or tag |
71+ | ` fix/` | ` fix/text-alignment` | Bugfix |
72+ | ` docs/` | ` docs/taglist-update` | Documentation |
73+ | ` chore/` | ` chore/ci-cache` | Maintenance or CI updates |
5574
5675---
5776
58- ## Pre-PR Checklist
77+ # ## 3. Implement with tests & docs
78+
79+ Make your changes and ensure ** all tests and examples build** .
80+
81+ Local checks:
5982
6083` ` ` bash
6184# formatting
@@ -64,43 +87,72 @@ cargo fmt --all -- --check
6487# linting
6588cargo clippy --all-targets --all-features -D warnings
6689
67- # tests (unit, doctests, compile-fail)
90+ # tests
6891cargo test --workspace
6992
70- # docs build
93+ # docs
7194cargo doc --workspace --no-deps
7295` ` `
7396
74- You can also check examples manually :
97+ Examples (build-only ; GUI run is not required) :
7598
7699` ` ` bash
77- cargo run -p efx-sandbox
78- cargo run -p efx --example eframe_demo
100+ cargo build -p efx --example eframe_demo --locked
101+ rustup target add wasm32-unknown-unknown
102+ cargo build -p efx --example eframe_demo --target wasm32-unknown-unknown --locked
79103` ` `
80104
81105---
82106
83- ## Commit Messages
107+ # ## 4. Open a Pull Request
108+
109+ * Target the ** next release branch** (e.g. ` v0.6` , ` v0.7` ).
110+ If the issue has a ** milestone** , use the branch named after it.
111+ * Link the issue (e.g. ` Closes # 123` ) and fill in the PR checklist.
84112
85- Use [ Conventional Commits] ( https://www.conventionalcommits.org/ ) :
113+ ** PR checklist:**
114+
115+ * [ ] References related issue / RFC section when behavior changes
116+ * [ ] CI is green (workspace + examples + wasm32 build)
117+ * [ ] Tests/docs updated where applicable
118+ * [ ] No unrelated changes
119+
120+ ** PR title examples (Conventional Commits):**
86121
87122```
88123feat(button): add rounding attribute
89124fix(core): correct parsing of numeric attribute
90125docs: update intro example
91126```
92127
128+ Small review-fix commits are welcome.
129+
130+ ---
131+
132+ ### 5. Reviews & merge
133+
134+ * Review comments should be addressed promptly.
135+ * Smaller, focused PRs get merged faster.
136+ * If you go silent for **7 days**, the issue may be unassigned to keep momentum (you can re-claim it anytime).
137+
138+ ---
139+
140+ ## 🧪 Versioning
141+
142+ We follow **Semantic Versioning (SemVer)**.
143+ Breaking changes require prior discussion in an issue or RFC.
144+ All user-facing changes must be added to `CHANGELOG.md` under **Unreleased**.
145+
93146---
94147
95- ## Versioning
148+ ## ⚖️ License
96149
97- We follow ** SemVer** .
98- Breaking changes require discussion in an issue/RFC.
99- All user-facing changes should be added to ` CHANGELOG.md ` under ** Unreleased** .
150+ By submitting a contribution, you agree that your work is licensed under the same terms as EFx —
151+ [MIT or Apache-2.0](efx/LICENSE).
100152
101153---
102154
103- ## License
155+ ## 💬 Contact
104156
105- By submitting a contribution, you agree that your work is licensed under the same terms as EFx
106- ( [ MIT OR Apache-2.0 ] ( efx/LICENSE ) ).
157+ Questions, clarifications, or coordination requests:
158+
0 commit comments