Thank you for your interest in contributing to this project!
- Fork the repository on GitHub
- Clone your fork:
git clone https://github.com/yourusername/Multi-SendSpin-Player-Container.git - Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes and test thoroughly
- Build and verify:
dotnet build src/MultiRoomAudio/MultiRoomAudio.csproj - Commit your changes:
git commit -m 'Add amazing feature' - Push to your branch:
git push origin feature/amazing-feature - Open a Pull Request
- .NET 8.0 SDK
- Docker (for testing containerized builds)
- Linux environment recommended for audio testing (or WSL2 on Windows)
# Restore dependencies
dotnet restore src/MultiRoomAudio/MultiRoomAudio.csproj
# Build the project
dotnet build src/MultiRoomAudio/MultiRoomAudio.csproj
# Run locally (audio features require Linux)
dotnet run --project src/MultiRoomAudio/MultiRoomAudio.csproj
# Access the web interface
# Open http://localhost:8096# Build the Docker image
docker build -f docker/Dockerfile -t multiroom-audio:dev .
# Run with audio devices (Linux only)
docker run -d --name multiroom-dev \
-p 8096:8096 \
--device /dev/snd \
-v $(pwd)/config:/app/config \
multiroom-audio:dev
# View logs
docker logs -f multiroom-dev# Build the add-on image locally
docker build -f docker/Dockerfile \
--platform linux/amd64 \
-t multiroom-audio-addon:local .
# Test locally (without full HAOS integration)
docker run --rm -it -p 8096:8096 multiroom-audio-addon:localsqueezelite-docker/
├── src/
│ └── MultiRoomAudio/ # Main C# application
│ ├── Audio/ # PortAudio integration
│ ├── Controllers/ # REST API endpoints
│ ├── Models/ # Data models
│ ├── Services/ # Business logic
│ ├── Utilities/ # Helpers
│ ├── wwwroot/ # Static web UI
│ └── Program.cs # Entry point
├── docker/
│ └── Dockerfile # Unified Alpine image
├── multiroom-audio/ # HAOS add-on metadata
│ ├── config.yaml
│ ├── CHANGELOG.md
│ └── DOCS.md
└── docs/ # Documentation
- Target Framework: .NET 8.0
- Nullable: Enabled project-wide (use nullable reference types)
- Style: Follow Microsoft C# coding conventions
- Documentation: XML doc comments for public APIs
/// <summary>
/// Creates and starts a new audio player.
/// </summary>
/// <param name="request">Player configuration request.</param>
/// <param name="ct">Cancellation token.</param>
/// <returns>The created player response.</returns>
public async Task<PlayerResponse> CreatePlayerAsync(
PlayerCreateRequest request,
CancellationToken ct = default)
{
// Implementation
}- Vanilla JavaScript only - no external frameworks
- ES6+ features (const/let, arrow functions, template literals)
- Use
textContentinstead ofinnerHTMLfor XSS prevention
- Use multi-stage builds for smaller images
- Target Alpine Linux for production
- Include health checks
- Bug fixes - Help make it more stable
- Performance improvements - Optimize audio handling
- UI/UX enhancements - Better web interface design
- Documentation - Better setup guides, troubleshooting
- HAOS improvements - Better Home Assistant integration
- Platform support - Testing on different Linux distros
Before submitting a PR, verify:
# Build succeeds
dotnet build src/MultiRoomAudio/MultiRoomAudio.csproj
# Application starts
dotnet run --project src/MultiRoomAudio/MultiRoomAudio.csproj
# API endpoints work
curl http://localhost:8096/api/players
curl http://localhost:8096/api/devices
curl http://localhost:8096/api/health# Image builds successfully
docker build -f docker/Dockerfile -t test .
# Container starts and responds
docker run -d -p 8096:8096 test
curl http://localhost:8096/api/healthBe respectful, helpful, and inclusive. This is a community project for everyone to enjoy better multi-room audio!
When releasing a new version of the HAOS add-on:
- Do NOT manually edit
multiroom-audio/config.yamlversion - Update
multiroom-audio/CHANGELOG.mdwith release notes - Create and push a tag:
git tag -a v2.0.0 -m "v2.0.0 - C# rewrite" git push --tags - CI will automatically:
- Build the Docker image
- Update
config.yamlversion after successful build - HAOS users see the update only when the image is ready
Open an issue for discussion before major changes. We're happy to help guide contributions!
This project is developed with the assistance of AI coding tools. Contributions from both human and AI-assisted development are welcome, provided they meet quality standards.