Thank you for your interest in contributing to AlgoBuddy! We welcome contributions ranging from bug fixes and documentation improvements to new algorithm visualizers and accessibility features.
- Overview
- Quick Start
- Architecture & Engine
- Auditing & Promoting Problems
- Quality Standards & Testing
- Code of Conduct
- Security Policy
AlgoBuddy is an open-source, interactive algorithm learning suite built in Rust using eframe and egui. It follows the NeetCode 150 learning roadmap across 18 topic categories.
Contributions generally fall into three categories:
- Algorithm Visualizers: Auditing existing problem step generators or building visual state renderers.
- UI & Accessibility: Improving theme contrast, layout math, keyboard navigation, or canvas rendering.
- Core Engine & Tools: Optimizing step snapshot generation, WASM compilation, or test utilities.
- Rust 2021 Edition (installed via
rustup) - Git
-
Fork and clone the repository:
git clone https://github.com/Rowrow620/AlgoBuddy.git cd AlgoBuddy
-
Run the application in Developer Mode (unlocks all 150 problem visualizers):
cargo run -- --dev
-
Run the automated test suite:
cargo test
-
Verify linter compliance:
cargo clippy --all-targets -- -D warnings
The AlgoBuddy codebase is structured into five primary component areas:
src/main.rs: Application entry points for native execution (eframe::run_native) and WASM execution (eframe::WebRunner).src/model/: Problem definitions (Problem), category taxonomy (Category), difficulty levels (Difficulty), metadata specs (ProblemDetails), and visual state snapshots (VisualState).src/app.rs: Main GUI application state (VisualizerApp).src/ui/: UI submodules containing navigation panels, playback controls, canvas renderers, and theme palettes.src/engine.rs: Core deterministic algorithm execution engine handling snapshot timeline generation and problem selection.src/algorithms/: Step snapshot generator functions (generate_*_steps) for each algorithm.
Algorithms in AlgoBuddy do not execute asynchronously during playback. Generator functions in src/algorithms/ execute synchronously upfront and return a Vec<Step> snapshot vector. The GUI renders state snapshots based on the active timeline index (current_step_idx), enabling forward and backward timeline scrubbing.
Problems in AlgoBuddy carry an audit status (is_audited(&self) -> bool):
- Public Release Mode (Default): Displays verified, fully audited problem visualizers.
- Developer Mode (
cargo run -- --dev): Unlocks all 150 implemented problem visualizers, marking unaudited implementations with an[EXP]tag.
To audit an existing problem visualizer and promote it to Public Release status:
- Launch the application in Developer Mode (
cargo run -- --dev). - Verify that the algorithm step generator produces accurate state snapshots for standard and edge-case inputs.
- Ensure active line highlighting (
code_line) matches the associated source code snippet. - Add a unit test in
src/app.rsunder#[cfg(test)] mod testsasserting expected output values. - In
src/model/problem.rs, update theis_auditedmatch arm for the target problem to returntrue. - Run
cargo testto verify build and test compliance.
Before submitting a Pull Request, ensure your changes adhere to these requirements:
- Formatting: Run
cargo fmt --allto ensure standard Rust code formatting. - Clippy Clean: Run
cargo clippy --all-targets -- -D warningsto verify zero warnings. - Unit Tests: Add unit tests for any new algorithm step generators or parser functions.
- Commit Messages: Write concise, descriptive commit messages (e.g.,
feat: add visualizer for problem #X,fix: resolve bounds checking on timeline scrubber).
We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.
- Acceptable Behavior: Demonstrating empathy, being respectful of differing viewpoints, gracefully accepting feedback, and focusing on the community's best interest.
- Unacceptable Behavior: Sexualized language/imagery, trolling, derogatory comments, personal attacks, or public/private harassment.
- Reporting: Instances of unacceptable behavior may be reported privately to fender620@gmail.com.
Current release series 0.5.x is actively supported with security updates.
If you discover a security defect or vulnerability, please report it privately:
- Do Not File a Public Issue: Please do not open public issues for security bugs.
- Email: Send vulnerability details privately to fender620@gmail.com.
- Response: We acknowledge security reports within 48 hours and release verified fixes in patch updates.