Thank you for your interest in contributing to LibreMetaverse! This guide will help you get started.
- Fork the repository on GitHub
- Clone your fork locally:
git clone https://github.com/YOUR-USERNAME/libremetaverse.git cd libremetaverse - Create a branch for your changes:
git checkout -b feature/my-new-feature
- .NET SDK 8.0 or 9.0
- Git
- A code editor (Visual Studio, VS Code, Rider, etc.)
dotnet restore
dotnet builddotnet test- Follow existing code conventions in the project
- Use meaningful variable and method names
- Add XML documentation comments for public APIs
- Keep lines under 120 characters where practical
- Use 4 spaces for indentation (no tabs)
// Good
public class MyClass
{
private int myField;
public int MyProperty { get; set; }
public void MyMethod()
{
// Implementation
}
}- ?? Bug fixes - Fix issues labeled "good first issue"
- ?? Documentation - Improve README files, add code comments, write tutorials
- ? Examples - Add new example applications demonstrating library features
- ?? Tools - Create utilities for working with LibreMetaverse
- ?? Tests - Add unit tests to improve coverage
- New features (discuss in an issue first)
- Performance improvements
- API enhancements
- Protocol updates
- Check existing issues - Someone might already be working on it
- Open an issue - Discuss your idea before starting large changes
- Write code - Implement your changes
- Add tests - Ensure your changes work correctly
- Update documentation - Keep docs in sync with code
- Submit a pull request - Describe your changes clearly
- ? Code builds successfully
- ? All tests pass
- ? No new compiler warnings
- ? Documentation updated if needed
- ? Commit messages are clear
- What the PR does
- Why the change is needed
- Any breaking changes
- Related issue numbers (e.g., "Fixes #123")
## Description
Brief description of what this PR does
## Motivation
Why this change is needed
## Changes
- Change 1
- Change 2
## Testing
How you tested the changes
## Related Issues
Fixes #123Examples are a great way to contribute! They help others learn the library.
- Focus - Demonstrate one or two concepts clearly
- Simplicity - Keep code simple and well-commented
- Documentation - Include a README explaining what it does
- Dependencies - Minimize external dependencies
- Cross-platform - Target .NET 8.0/9.0 for cross-platform support
Programs/examples/YourExample/
??? YourExample.csproj
??? YourExample.cs
??? README.md
See existing examples in Programs/examples/ for reference.
Tools are standalone utilities for working with LibreMetaverse data.
- Single purpose - Tools should do one thing well
- CLI-focused - Command-line interface preferred
- Help text - Include usage instructions
- Error handling - Graceful error messages
- Exit codes - Return 0 for success, 1 for errors
Programs/tools/YourTool/
??? YourTool.csproj
??? YourTool.cs
??? README.md
See existing tools in Programs/tools/ for reference.
- LibreMetaverse version
- .NET version (
dotnet --version) - Operating system
- Steps to reproduce
- Expected vs actual behavior
- Error messages or stack traces
- Use case - What problem does it solve?
- Proposed API or implementation approach
- Why existing features don't work
- Willingness to implement it yourself
- Maintainers will review your PR
- They may request changes
- Make requested updates
- Once approved, your PR will be merged
By contributing, you agree that your contributions will be licensed under the BSD 3-Clause License, matching the project's license.
- Open an issue for questions about contributing
- Check existing issues and PRs for similar discussions
- Be patient - maintainers are volunteers
All contributors are recognized in the project:
- Your name in git history
- Listed in GitHub Contributors
- Mentioned in release notes for significant contributions
Thank you for contributing to LibreMetaverse! ??