Thank you for your interest in contributing to Strom! This document provides guidelines and instructions for contributing to the project.
- Rust 1.82 or later (stable toolchain recommended)
- GStreamer 1.0 development libraries
- trunk (for building the frontend)
sudo apt-get update
sudo apt-get install -y \
libcairo2-dev \
libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev \
gstreamer1.0-plugins-base \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly \
gstreamer1.0-libav \
gstreamer1.0-tools
# Install trunk for frontend builds
cargo install trunk
# Add WASM target
rustup target add wasm32-unknown-unknown- Fork and clone the repository
- Install Git hooks for automatic code quality checks:
./scripts/install-hooks.shThis will install pre-commit hooks that automatically run:
cargo fmt- Code formattingcargo clippy- Linting
All code must pass the following checks before being merged:
Code must be formatted using rustfmt:
cargo fmt --allCode must pass clippy with no warnings:
cargo clippy --workspace --all-targets -- -D warningsAll tests must pass:
cargo test --workspaceThe pre-commit hook installed by scripts/install-hooks.sh will automatically run formatting and linting checks before each commit. If you need to bypass these checks temporarily (not recommended), you can use:
git commit --no-verifycargo buildcd frontend
trunk build# Build frontend first
cd frontend
trunk build --release
cd ..
# Build backend with embedded frontend
cargo build --releaseFor development, you can run the frontend and backend separately:
# Terminal 1: Frontend with hot reload
cd frontend
trunk serve
# Terminal 2: Backend
cargo rundocker build -t strom:latest .The Dockerfile uses cargo-chef for optimal build caching, which significantly speeds up rebuilds.
docker run -p 8080:8080 -v $(pwd)/data:/data strom:lateststrom/
├── backend/ # Backend server (Axum + GStreamer)
├── frontend/ # Frontend web UI (egui + WASM)
├── types/ # Shared types between frontend and backend
├── scripts/ # Development scripts
├── .github/ # GitHub Actions CI/CD
└── Dockerfile # Multi-stage Docker build
Our CI pipeline runs on all pull requests and includes:
- Format Check - Verifies code is properly formatted
- Clippy - Runs linting checks
- Tests - Runs all tests
- Build - Builds both frontend and backend
- Docker - Builds Docker image (on master branch only)
All checks must pass before a PR can be merged.
-
Create a new branch for your changes:
git checkout -b feature/your-feature-name
-
Make your changes and ensure all checks pass:
cargo fmt --all cargo clippy --workspace --all-targets -- -D warnings cargo test --workspace -
Commit your changes (pre-commit hooks will run automatically):
git add . git commit -m "Description of your changes"
-
Push to your fork and create a pull request:
git push origin feature/your-feature-name
- Provide a clear description of the changes
- Reference any related issues
- Ensure all CI checks pass
- Keep changes focused and atomic
- Add tests for new functionality
- Update documentation as needed
- A maintainer will review your pull request
- Address any feedback or requested changes
- Once approved, a maintainer will merge your PR
- Open an issue for bug reports or feature requests
- Check existing issues before creating a new one
- Be respectful and constructive in all interactions
By contributing to Strom, you agree that your contributions will be licensed under the same license as the project.