Thanks for your interest in contributing to Winrift! This guide will help you get started.
- Fork the repository on GitHub
- Clone your fork locally:
git clone https://github.com/YOUR-USERNAME/winrift.git - Create a branch for your changes:
git checkout -b feature/your-feature-name
Winrift is a PowerShell-based project. You'll need:
- Windows 11 (for testing) — Download Windows 11 ISO
- PowerShell 5.1+ (included with Windows)
- A code editor (VS Code recommended with the PowerShell extension)
- Recommended: PSScriptAnalyzer for linting
Install PSScriptAnalyzer to catch common PowerShell issues before submitting:
Install-Module -Name PSScriptAnalyzer -Scope CurrentUser -ForceRun it against your changes:
# Analyze a single file
Invoke-ScriptAnalyzer -Path .\modules\system\Tweaks.ps1
# Analyze the entire project
Invoke-ScriptAnalyzer -Path . -Recurse
# Show only errors and warnings
Invoke-ScriptAnalyzer -Path . -Recurse -Severity Error, WarningTesting tweaks on a live system can cause irreversible changes. Use a Windows 11 VM instead:
- Download the Windows 11 ISO from Microsoft
- Create a VM in VirtualBox (free) or Hyper-V (built into Windows Pro/Enterprise)
- Install Windows 11, then snapshot the VM before testing tweaks
- Restore the snapshot between test runs to start clean
winrift/
├── Winrift.ps1 # Main entry point
├── version.json # Version metadata
├── scripts/ # Core scripts (admin launch, common utilities)
├── modules/
│ ├── system/ # System tweaks
│ ├── security/ # Security tools
│ ├── drivers/ # Driver installation
│ ├── tools/ # Third-party tool integrations
│ ├── unigetui/ # Package manager integration
│ └── customize/ # Desktop environment, themes, configs
├── docs/ # Documentation and guides
└── media/ # Icons, logos, assets
- Use approved PowerShell verbs for function names (
Get-,Set-,New-,Remove-,Invoke-, etc.)- Run
Get-Verbin PowerShell to see the full list - Full reference: PowerShell Approved Verbs
- Run
- Use 4-space indentation (no tabs)
- Include error handling (
try/catch) for any external downloads or network operations - Add descriptive
-Messageparameters toSet-RegistryValuecalls - Use
Write-Log(fromscripts/Common.ps1) instead of bareWrite-Hostfor user feedback
- Add your tweak function to the appropriate file in
modules/ - Include source links as comments above registry modifications
- Test thoroughly on a clean Windows 11 installation
- Document what the tweak does and why
Template for a new tweak function:
function Invoke-MyNewTweak {
# Source: https://example.com/source-of-this-tweak
# What it does: Brief description of the effect on the system
Write-Log -Message "Applying My New Tweak..." -Level INFO -LogFile $script:LogFile
try {
Set-RegistryValue -Path "HKCU:\Software\Example" `
-Name "SettingName" `
-Value 1 `
-Type DWord `
-Description "Enables example behavior"
Write-Log -Message "My New Tweak applied successfully." -Level SUCCESS -LogFile $script:LogFile
} catch {
Write-Log -Message "Failed to apply My New Tweak: $($_.Exception.Message)" -Level ERROR -LogFile $script:LogFile
}
}Then register it in the tweak map inside Invoke-UniversalTweaks in modules/system/Tweaks.Universal.ps1.
Write clear, concise commit messages:
fix: correct menu navigation for Security optionfeat: add selective tweak applicationdocs: update README with compatibility table
Before submitting a PR:
- Test your changes on a clean Windows 11 VM (recommended) — see VM setup above
- Create a System Restore Point before testing tweaks
- Verify the menu navigation works correctly
- Check that all function names use approved PowerShell verbs
- Ensure no tabs are mixed with spaces
- Run PSScriptAnalyzer and fix any errors or warnings
- Push your branch to your fork
- Open a Pull Request against the
mainbranch - Describe what your changes do and why
- Reference any related issues (e.g., "Fixes #42")
Use the issue templates provided:
- Bug Report — for something that isn't working correctly
- Feature Request — for suggesting new features or improvements
Be respectful and constructive. We're all here to make Windows 11 better.