First off, thank you for considering contributing to Screen Pipe! It's people like you that make Screen Pipe such a great tool.
I'd love to personnally onboard you to the project. Let's schedule a call.
Before you begin:
- Make sure you have installed all the necessary dependencies as mentioned in the README.md.
- Familiarize yourself with the project structure and architecture.
This section guides you through submitting a bug report for Screen Pipe. Following these guidelines helps maintainers and the community understand your report, reproduce the behavior, and find related reports.
- Use a clear and descriptive title for the issue to identify the problem.
- Describe the exact steps which reproduce the problem in as many details as possible.
- Provide specific examples to demonstrate the steps.
This section guides you through submitting an enhancement suggestion for Screen Pipe, including completely new features and minor improvements to existing functionality.
- Use a clear and descriptive title for the issue to identify the suggestion.
- Provide a step-by-step description of the suggested enhancement in as many details as possible.
- Explain why this enhancement would be useful to most Screen Pipe users.
- Fill in the required template
- Do not include issue numbers in the PR title
- Include screenshots and animated GIFs in your pull request whenever possible.
- Follow the Rust styleguides.
- End all files with a newline.
- Use the present tense ("Add feature" not "Added feature")
- Use the imperative mood ("Move cursor to..." not "Moves cursor to...")
- Limit the first line to 72 characters or less
- Reference issues and pull requests liberally after the first line
All Rust code must adhere to Rust Style Guide.
We follow this folder structure.
- User fanatic: focus on building what people want and making users happy.
- Concurrency: channels > mutexes/locks
- Simplicity: avoid premature optimization. less is more. optimise for less code, less files, less dependencies, less complexity.
- Focus: avoid feature creep. focus on the core functionality and build upon it. focus on the user and their needs.
- Use numbers: if you can't measure it, you can't improve it.
- Avoid OOP: prefer functional programming.
This section lists the labels we use to help us track and manage issues and pull requests.
bug
- Issues that are bugs.enhancement
- Issues that are feature requests.documentation
- Issues or pull requests related to documentation.good first issue
- Good for newcomers.
cargo build --release --features metal # or cuda, depending on your computer's NPU
Before submitting a pull request, run all the tests to ensure nothing has broken:
cargo test
RUSTFLAGS="-Z sanitizer=address" cargo run --bin screenpipe
# or
RUSTFLAGS="-Z sanitizer=leak" cargo run --bin screenpipe
For performance monitoring, you can use the following command:
cargo install cargo-instruments
# tracking leaks over 60 minutes time limit
cargo instruments -t Leaks --bin screenpipe --features metal --time-limit 600000 --open
Then open the file in target/release/instruments
using Xcode -> Open Developer Tool -> Instruments.
cargo bench
cargo install sqlx-cli
sqlx migrate add <migration_name>
Say 👋 in our public Discord channel. We discuss how to bring this lib to production, help each other with contributions, personal projects or just hang out ☕.
Thank you for contributing to Screen Pipe! 🎉