Files
maui-linux/CONTRIBUTING.md
logikonline 840ad0ce8f
All checks were successful
CI / Build (Linux) (pull_request) Successful in 23s
chore(perf): realign version to 9.0.0 to match .NET/MAUI versioning
Change version from 1.0.0 to 9.0.0 to align with .NET 9 / MAUI 9.0.x versioning convention. Update all package references, templates, and documentation. Change copyright holder from "MarketAlly LLC" to "MarketAlly Pte Ltd" across all files. Update CHANGELOG to document version realignment and mark 1.0.0 as deprecated. Update release notes to reflect 541 passing tests (up from 217) and include native resource leak fixes, SafeHandle wrappers, and performance benchmarks.
2026-03-07 00:14:47 -05:00

258 lines
5.9 KiB
Markdown

# Contributing to .NET MAUI Linux Platform
Thank you for your interest in contributing to the .NET MAUI Linux Platform! This project is developed and maintained by [MarketAlly Pte Ltd](https://marketally.com) under the leadership of David H. Friedel Jr.
This document provides guidelines and information for contributors.
## Code of Conduct
This project follows the [.NET Foundation Code of Conduct](https://dotnetfoundation.org/code-of-conduct). By participating, you are expected to uphold this code.
## Getting Started
### Prerequisites
- .NET 9.0 SDK
- Linux development environment (Ubuntu 22.04+ recommended)
- Git
### Setting Up the Development Environment
1. Fork and clone the repository:
```bash
git clone https://github.com/your-username/maui-linux.git
cd maui-linux
```
2. Install dependencies:
```bash
# Ubuntu/Debian
sudo apt-get install libx11-dev libxrandr-dev libxcursor-dev libxi-dev libgl1-mesa-dev
# Fedora
sudo dnf install libX11-devel libXrandr-devel libXcursor-devel libXi-devel mesa-libGL-devel
```
3. Build the project:
```bash
dotnet build
```
4. Run tests:
```bash
dotnet test
```
## How to Contribute
### Reporting Bugs
- Check if the bug has already been reported in [Issues](https://github.com/open-maui/maui-linux/issues)
- Use the bug report template
- Include reproduction steps, expected behavior, and actual behavior
- Include system information (distro, .NET version, desktop environment)
### Suggesting Features
- Check existing feature requests first
- Use the feature request template
- Explain the use case and benefits
### Pull Requests
1. Create a branch from `main`:
```bash
git checkout -b feature/your-feature-name
```
2. Make your changes following the coding guidelines
3. Add or update tests as needed
4. Ensure all tests pass:
```bash
dotnet test
```
5. Commit your changes:
```bash
git commit -m "Add feature: description"
```
6. Push and create a pull request
## Coding Guidelines
### Code Style
- Use C# 12 features where appropriate
- Follow [.NET naming conventions](https://docs.microsoft.com/en-us/dotnet/csharp/fundamentals/coding-style/coding-conventions)
- Use `var` for obvious types
- Prefer expression-bodied members for simple methods
- Use nullable reference types
### File Organization
```
Views/ # Skia-rendered view implementations
Skia*.cs # View classes (SkiaButton, SkiaLabel, etc.)
Handlers/ # MAUI handler implementations
*Handler.cs # Platform handlers
Services/ # Platform services
*Service.cs # Service implementations
Rendering/ # Rendering infrastructure
*.cs # Rendering helpers and caches
tests/ # Unit tests
Views/ # View tests
Services/ # Service tests
```
### Naming Conventions
- Views: `Skia{ControlName}` (e.g., `SkiaButton`, `SkiaCarouselView`)
- Handlers: `{ControlName}Handler` (e.g., `ButtonHandler`)
- Services: `{Feature}Service` (e.g., `ClipboardService`)
- Tests: `{ClassName}Tests` (e.g., `SkiaButtonTests`)
### Documentation
- Add XML documentation to public APIs
- Update README and docs for new features
- Include code examples where helpful
Example:
```csharp
/// <summary>
/// A horizontally scrolling carousel view with snap-to-item behavior.
/// </summary>
public class SkiaCarouselView : SkiaLayoutView
{
/// <summary>
/// Gets or sets the current position (0-based index).
/// </summary>
public int Position { get; set; }
}
```
### Testing
- Write unit tests for new functionality
- Maintain test coverage above 80%
- Use descriptive test names: `MethodName_Condition_ExpectedResult`
Example:
```csharp
[Fact]
public void Position_WhenSetToValidValue_UpdatesPosition()
{
var carousel = new SkiaCarouselView();
carousel.AddItem(new SkiaLabel());
carousel.Position = 0;
Assert.Equal(0, carousel.Position);
}
```
## Architecture Overview
### Rendering Pipeline
1. `LinuxApplication` creates the main window
2. `SkiaRenderingEngine` manages the render loop
3. Views implement `Draw(SKCanvas canvas)` for rendering
4. `DirtyRectManager` optimizes partial redraws
### View Hierarchy
```
SkiaView (base class)
├── SkiaLayoutView (containers)
│ ├── SkiaStackLayout
│ ├── SkiaScrollView
│ └── SkiaCarouselView
└── Control views
├── SkiaButton
├── SkiaLabel
└── SkiaEntry
```
### Handler Pattern
Handlers connect MAUI virtual views to platform-specific implementations:
```csharp
public class ButtonHandler : ViewHandler<IButton, SkiaButton>
{
public static void MapText(ButtonHandler handler, IButton button)
{
handler.PlatformView.Text = button.Text;
}
}
```
## Development Workflow
### Branch Naming
- `feature/` - New features
- `fix/` - Bug fixes
- `docs/` - Documentation updates
- `refactor/` - Code refactoring
- `test/` - Test additions/fixes
### Commit Messages
Follow conventional commits:
- `feat:` - New feature
- `fix:` - Bug fix
- `docs:` - Documentation
- `test:` - Tests
- `refactor:` - Code refactoring
- `chore:` - Maintenance
### Pull Request Checklist
- [ ] Code follows style guidelines
- [ ] Tests added/updated
- [ ] Documentation updated
- [ ] All tests pass
- [ ] No breaking changes (or documented if unavoidable)
## Areas for Contribution
### High Priority
- Additional control implementations
- Accessibility improvements (AT-SPI2)
- Performance optimizations
- Wayland support improvements
### Good First Issues
Look for issues labeled `good-first-issue` for beginner-friendly tasks.
### Documentation
- API documentation improvements
- Tutorials and guides
- Sample applications
## Getting Help
- Open a [Discussion](https://github.com/open-maui/maui-linux/discussions) for questions
- Join the .NET community on Discord
- Check existing issues and discussions
## License
By contributing, you agree that your contributions will be licensed under the MIT License.
---
Thank you for contributing to .NET MAUI on Linux!