Thank you for your interest in contributing to PortPulse! 🎉
- Rust 1.75+ (
rustup install stable) - Linux (eBPF features require kernel 5.4+)
cargo,clippy,rustfmt
git clone https://github.com/the-shadow-0/PortPulse.git
cd PortPulse
cargo build --workspace
cargo test --workspace# With eBPF (requires root)
sudo cargo run --bin portpulse -- live
# Without eBPF (fallback mode)
cargo run --bin portpulse -- live --no-ebpf
# Run tests
cargo test --workspace
# Run linter
cargo clippy --workspace -- -D warnings
# Format code
cargo fmt --all- Check existing issues first
- Include: OS, kernel version, Rust version
- Provide reproduction steps
- Include relevant PortPulse output
- Open a discussion first
- Describe the use case
- Propose an implementation approach
- Fork the repository
- Create a feature branch (
git checkout -b feature/my-feature) - Write tests for new functionality
- Ensure
cargo test --workspacepasses - Ensure
cargo clippy --workspace -- -D warningspasses - Ensure
cargo fmt --all -- --checkpasses - Submit a PR with a clear description
PortPulse is organized as a Cargo workspace with 4 crates:
| Crate | Purpose |
|---|---|
portpulse-core |
Data models, event pipeline, aggregator, classifier, policy engine, export |
portpulse-ebpf |
eBPF probe definitions, loader, event reader, /proc fallback |
portpulse-tui |
Ratatui terminal UI, widgets, theme, animated graph |
portpulse (cli) |
Binary entry point, clap arguments, subcommand handlers |
Kernel / /proc → Event Source → EventBus → Aggregator → Classifier → TUI
Here are some great starter tasks:
- Add port descriptions: Expand the
explaincommand's port database - IPv6 graph support: Add IPv6 address handling to the connection graph
- Sortable columns: Implement click-to-sort in the connections table
- Color themes: Add light/solarized/dracula themes
- More tests: Increase test coverage for the classifier and policy engine
- Documentation: Improve inline code documentation
PortPulse is designed for extensibility. Future plugin ideas:
- Exporters: Prometheus, Elasticsearch, InfluxDB
- Enrichers: GeoIP, WHOIS, threat feeds
- Alerters: Slack, Discord, PagerDuty
- Resolvers: Custom DNS resolution
- Analyzers: Custom risk scoring modules
- Follow standard Rust conventions
- Use
tracingfor logging (notprintln!in library code) - Document public APIs with
///doc comments - Keep functions focused and under 50 lines where possible
- Write tests for all public APIs
By contributing, you agree that your contributions will be licensed under the MIT License.