Skip to content

Contributing

Contributing

Thank you for your interest in contributing to MiniFy! This guide will help you get started with contributing code, documentation, themes, or ideas.

Ways to Contribute

Report Bugs

Found an issue? Let us know so we can fix it!

Suggest Features

Have an idea? We’d love to hear it.

Improve Docs

Help make the documentation better.

Create Themes

Design new themes for the community.

Submit Code

Fix bugs or implement new features.

Review PRs

Help review pull requests.

Contribution Workflow

┌───────────────────────────────────────────────────────────────────────────────┐
│ Contribution Workflow │
├───────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ │
│ │ 1. Fork │ Create your own copy of the repository │
│ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ 2. Clone │ Clone your fork to your local machine │
│ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ 3. Branch │ Create a feature branch for your changes │
│ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ 4. Develop │ Make your changes with tests │
│ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ 5. Commit │ Commit with conventional commit messages │
│ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ 6. Push │ Push your branch to your fork │
│ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ 7. PR │ Open a Pull Request │
│ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ 8. Review │ Address feedback and iterate │
│ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ 9. Merge │ Your contribution is merged! 🎉 │
│ └─────────────┘ │
│ │
└────────────────────────────────────────────────────────────────────────────────┘

Getting Started

  1. Fork the repository

    Click the “Fork” button on the GitHub repository.

  2. Clone your fork

    Terminal window
    git clone https://github.com/YOUR-USERNAME/MiniFy.git
    cd MiniFy
  3. Install dependencies

    Terminal window
    pnpm install
  4. Create a feature branch

    Terminal window
    git checkout -b feature/my-awesome-feature

    Or for bug fixes:

    Terminal window
    git checkout -b fix/bug-description
  5. Make your changes

    Write code, fix bugs, or update documentation.

  6. Test your changes

    Terminal window
    # Run the desktop app
    pnpm desktop:dev
    # Check formatting and linting
    pnpm check
  7. Commit your changes

    Terminal window
    git add .
    git commit -m "feat(desktop): add amazing feature"
  8. Push and create PR

    Terminal window
    git push origin feature/my-awesome-feature

    Then open a Pull Request on GitHub.

Development Setup

Prerequisites

ToolVersionInstallation
Node.js18+nodejs.org
pnpm9+npm install -g pnpm
RustLatestrustup.rs

For platform-specific requirements, see the Building Guide.

Development Commands

Terminal window
# Desktop application
pnpm desktop:dev # Run in development mode
pnpm desktop:build # Build for production
pnpm desktop:clear # Clear stored credentials
# Website
pnpm www:dev # Run website in development
pnpm www:build # Build website
# Documentation
pnpm docs:dev # Run docs in development
pnpm docs:build # Build documentation
# Code quality
pnpm check # Run Biome linter
pnpm format # Format code with Biome
# All packages
pnpm dev # Run all in development
pnpm build # Build all packages

Code Style

Formatting and Linting

We use Biome for code formatting and linting:

Terminal window
# Check for issues
pnpm check
# Fix issues automatically
pnpm format

TypeScript Guidelines

// ✅ Good: Proper type definitions
interface UserData {
id: string;
name: string;
email: string;
}
// ✅ Good: Explicit function return types
function processUser(user: UserData): ProcessedUser {
// ...
}
// ❌ Bad: Using 'any'
function processData(data: any): any {
// ...
}
// ❌ Bad: Missing types
function processData(data) {
// ...
}

Rust Guidelines

// ✅ Good: Handle errors explicitly
#[tauri::command]
pub async fn save_setting(value: String) -> Result<(), String> {
do_something()
.map_err(|e| format!("Failed to save: {}", e))?;
Ok(())
}
// ❌ Bad: Unwrap without context
#[tauri::command]
pub fn save_setting(value: String) {
do_something().unwrap(); // Panics without explanation
}

React Guidelines

// ✅ Good: Functional component with proper typing
interface ButtonProps {
label: string;
onClick: () => void;
disabled?: boolean;
}
export function Button({ label, onClick, disabled = false }: ButtonProps) {
return (
<button onClick={onClick} disabled={disabled}>
{label}
</button>
);
}
// ✅ Good: Named exports for components
export function MyComponent() { ... }
// ❌ Bad: Default exports for components
export default function MyComponent() { ... }

Commit Messages

We use Conventional Commits:

<type>(<scope>): <description>
[optional body]

Types

TypeDescriptionExample
featNew featurefeat(desktop): add volume slider
fixBug fixfix(auth): handle expired tokens
docsDocumentationdocs(readme): update installation
styleFormattingstyle: fix indentation
refactorCode restructurerefactor(ui): simplify layout
perfPerformanceperf: optimize polling interval
testTeststest: add auth tests
choreMaintenancechore: update dependencies

Scopes

ScopeDescription
desktopDesktop application
wwwMarketing website
docsDocumentation
authAuthentication
uiUser interface
aiAI DJ feature

Examples

Terminal window
feat(desktop): add volume normalization option
- Added slider in settings for volume normalization
- Implemented audio processing in Rust backend
- Updated settings schema with new field
Terminal window
fix(auth): handle expired refresh tokens correctly
Previously, expired refresh tokens would cause a silent failure.
Now we properly detect this and prompt for re-authentication.
Fixes #123

Pull Request Process

  1. Update documentation

    If your change affects user-facing features, update the relevant docs.

  2. Run all checks

    Terminal window
    pnpm check
    pnpm build
  3. Write a clear PR description

    Include:

    • What the change does
    • Why it’s needed
    • How it was tested
    • Screenshots if applicable
  4. Link related issues

    Reference issues: “Fixes #123” or “Relates to #456”

  5. Request review

    A maintainer will review and provide feedback.

  6. Address feedback

    Make requested changes and push updates.

  7. Celebrate! 🎉

    Once approved, your PR will be merged.

PR Template

## Description
Brief description of changes.
## Type of Change
- [ ] Bug fix
- [ ] New feature
- [ ] Documentation update
- [ ] Other (describe)
## Testing
How was this tested?
## Screenshots
If applicable.
## Related Issues
Fixes #(issue number)

Reporting Bugs

When reporting bugs, include:

InformationDescription
MiniFy versione.g., v1.0.0
Operating systeme.g., Windows 11, macOS 14, Ubuntu 22.04
Steps to reproduceNumbered list of actions
Expected behaviorWhat should happen
Actual behaviorWhat actually happens
ScreenshotsIf applicable
Error messagesConsole output, logs

Use the bug report template.

Suggesting Features

Feature requests should include:

  • Use case: Why is this feature needed?
  • Proposed solution: How should it work?
  • Alternatives considered: Other approaches you thought of
  • Additional context: Screenshots, mockups, etc.

Use the feature request template.

Creating Themes

Want to contribute a theme?

  1. Create your theme JSON

    {
    "name": "My Theme",
    "author": "Your Name",
    "colors": {
    "background": "#1e1e2e",
    "foreground": "#cdd6f4",
    "primary": "#89b4fa",
    "secondary": "#313244",
    "accent": "#f5c2e7",
    "muted": "#6c7086",
    "border": "#45475a"
    }
    }
  2. Test your theme

    Place it in apps/desktop/src/themes/ and test thoroughly.

  3. Add to www themes

    Also add it to apps/www/public/themes/ for the website preview.

  4. Submit a PR

    Include screenshots of your theme in use.

Code of Conduct

We are committed to providing a welcoming and inclusive experience. Please read our Code of Conduct.

Key points:

  • Be respectful and inclusive
  • No harassment or discrimination
  • Constructive feedback only
  • Focus on the code, not the person

License

By contributing to MiniFy, you agree that your contributions will be licensed under the MIT License.

Getting Help

  • Discord: Join our community server
  • GitHub Discussions: Ask questions
  • Issues: Report bugs or request features